From: Fan Zhang Date: Thu, 25 May 2017 00:24:06 +0000 (-0700) Subject: Show setting for work profile lock screen notification X-Git-Tag: android-x86-9.0-r1~991^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=33c493777b36db3d677b051c839047a90ddc2044;p=android-x86%2Fpackages-apps-Settings.git Show setting for work profile lock screen notification - Add work profile notification setting to security_lockscreen_setting - Modify the preference controller to stop hardcode preference keys. cherry-pick of: ag/2315314 Bug: 62051309 Bug: 62045663 Test: make RunSettingsRoboTests Change-Id: I779590e34c1eca2dab5b62dda473cfa4371fc064 --- diff --git a/res/xml/security_lockscreen_settings.xml b/res/xml/security_lockscreen_settings.xml index 2a4416e5b3..d10440e6b4 100644 --- a/res/xml/security_lockscreen_settings.xml +++ b/res/xml/security_lockscreen_settings.xml @@ -15,21 +15,32 @@ --> + xmlns:android="http://schemas.android.com/apk/res/android" + android:title="@string/lockscreen_settings_title"> + + + + + + + + - - + android:summary="@string/summary_placeholder" /> - + diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java index 3e363d7598..26fc0a04ce 100644 --- a/src/com/android/settings/notification/ConfigureNotificationSettings.java +++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java @@ -69,7 +69,10 @@ public class ConfigureNotificationSettings extends DashboardFragment { final PulseNotificationPreferenceController pulseController = new PulseNotificationPreferenceController(context); final LockScreenNotificationPreferenceController lockScreenNotificationController = - new LockScreenNotificationPreferenceController(context); + new LockScreenNotificationPreferenceController(context, + "lock_screen_notifications", + "lock_screen_notifications_profile_header", + "lock_screen_notifications_profile"); if (lifecycle != null) { lifecycle.addObserver(pulseController); lifecycle.addObserver(lockScreenNotificationController); diff --git a/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java b/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java index b84d961898..228e1857c2 100644 --- a/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java +++ b/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java @@ -26,6 +26,7 @@ import android.os.UserManager; import android.provider.Settings; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; +import android.text.TextUtils; import android.util.Log; import com.android.internal.widget.LockPatternUtils; @@ -46,11 +47,10 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro Preference.OnPreferenceChangeListener, LifecycleObserver, OnResume, OnPause { private static final String TAG = "LockScreenNotifPref"; - private static final String KEY_LOCK_SCREEN_NOTIFICATIONS = "lock_screen_notifications"; - private static final String KEY_LOCK_SCREEN_PROFILE_HEADER = - "lock_screen_notifications_profile_header"; - private static final String KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS = - "lock_screen_notifications_profile"; + + private final String mSettingKey; + private final String mWorkSettingCategoryKey; + private final String mWorkSettingKey; private RestrictedDropDownPreference mLockscreen; private RestrictedDropDownPreference mLockscreenProfile; @@ -64,7 +64,16 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro private int mLockscreenSelectedValueProfile; public LockScreenNotificationPreferenceController(Context context) { + this(context, null, null, null); + } + + public LockScreenNotificationPreferenceController(Context context, + String settingKey, String workSettingCategoryKey, String workSettingKey) { super(context); + mSettingKey = settingKey; + mWorkSettingCategoryKey = workSettingCategoryKey; + mWorkSettingKey = workSettingKey; + mProfileChallengeUserId = Utils.getManagedProfileId( UserManager.get(context), UserHandle.myUserId()); final LockPatternUtils utils = new LockPatternUtils(context); @@ -79,17 +88,17 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mLockscreen = - (RestrictedDropDownPreference) screen.findPreference(KEY_LOCK_SCREEN_NOTIFICATIONS); + (RestrictedDropDownPreference) screen.findPreference(mSettingKey); if (mLockscreen == null) { - Log.i(TAG, "Preference not found: " + KEY_LOCK_SCREEN_NOTIFICATIONS); + Log.i(TAG, "Preference not found: " + mSettingKey); return; } if (mProfileChallengeUserId != UserHandle.USER_NULL) { mLockscreenProfile = (RestrictedDropDownPreference) screen.findPreference( - KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS); + mWorkSettingKey); } else { - removePreference(screen, KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS); - removePreference(screen, KEY_LOCK_SCREEN_PROFILE_HEADER); + removePreference(screen, mWorkSettingKey); + removePreference(screen, mWorkSettingCategoryKey); } mSettingObserver = new SettingObserver(); initLockScreenNotificationPrefDisplay(); @@ -136,7 +145,7 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro private void initLockscreenNotificationPrefForProfile() { if (mLockscreenProfile == null) { - Log.i(TAG, "Preference not found: " + KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS); + Log.i(TAG, "Preference not found: " + mWorkSettingKey); return; } ArrayList entries = new ArrayList<>(); @@ -205,8 +214,8 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - switch (preference.getKey()) { - case KEY_LOCK_SCREEN_PROFILE_NOTIFICATIONS: { + final String key = preference.getKey(); + if (TextUtils.equals(mWorkSettingKey, key)) { final int val = Integer.parseInt((String) newValue); if (val == mLockscreenSelectedValueProfile) { return false; @@ -223,8 +232,7 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro enabled ? 1 : 0, mProfileChallengeUserId); mLockscreenSelectedValueProfile = val; return true; - } - case KEY_LOCK_SCREEN_NOTIFICATIONS: { + } else if (TextUtils.equals(mSettingKey, key)) { final int val = Integer.parseInt((String) newValue); if (val == mLockscreenSelectedValue) { return false; @@ -238,10 +246,8 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, enabled ? 1 : 0); mLockscreenSelectedValue = val; return true; - } - default: - return false; } + return false; } private void setRestrictedIfNotificationFeaturesDisabled(CharSequence entry, @@ -295,6 +301,7 @@ public class LockScreenNotificationPreferenceController extends PreferenceContro final boolean enabled = getLockscreenNotificationsEnabled(mProfileChallengeUserId); final boolean allowPrivate = !mSecureProfile || getLockscreenAllowPrivateNotifications(mProfileChallengeUserId); + mLockscreenProfile.setSummary("%s"); mLockscreenSelectedValueProfile = !enabled ? R.string.lock_screen_notifications_summary_disable_profile : (allowPrivate ? R.string.lock_screen_notifications_summary_show_profile diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java index f3b18f215b..92142a9eb1 100644 --- a/src/com/android/settings/security/LockscreenDashboardFragment.java +++ b/src/com/android/settings/security/LockscreenDashboardFragment.java @@ -18,6 +18,8 @@ package com.android.settings.security; import android.content.Context; import android.provider.SearchIndexableResource; +import android.support.annotation.VisibleForTesting; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.accounts.AddUserWhenLockedPreferenceController; @@ -26,6 +28,7 @@ import com.android.settings.dashboard.DashboardFragment; import com.android.settings.notification.LockScreenNotificationPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.lifecycle.Lifecycle; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -38,6 +41,15 @@ public class LockscreenDashboardFragment extends DashboardFragment private static final String TAG = "LockscreenDashboardFragment"; + @VisibleForTesting + static final String KEY_LOCK_SCREEN_NOTIFICATON = "security_setting_lock_screen_notif"; + @VisibleForTesting + static final String KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER = + "security_setting_lock_screen_notif_work_header"; + @VisibleForTesting + static final String KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE = + "security_setting_lock_screen_notif_work"; + private OwnerInfoPreferenceController mOwnerInfoPreferenceController; @Override @@ -60,7 +72,10 @@ public class LockscreenDashboardFragment extends DashboardFragment final List controllers = new ArrayList<>(); final Lifecycle lifecycle = getLifecycle(); final LockScreenNotificationPreferenceController notificationController = - new LockScreenNotificationPreferenceController(context); + new LockScreenNotificationPreferenceController(context, + KEY_LOCK_SCREEN_NOTIFICATON, + KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER, + KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE); lifecycle.addObserver(notificationController); controllers.add(notificationController); final AddUserWhenLockedPreferenceController addUserWhenLockedController = diff --git a/tests/robotests/assets/whitelist_duplicate_index_key b/tests/robotests/assets/whitelist_duplicate_index_key index 0b8d675ae6..a761f35408 100644 --- a/tests/robotests/assets/whitelist_duplicate_index_key +++ b/tests/robotests/assets/whitelist_duplicate_index_key @@ -1,6 +1,5 @@ add_users_when_locked additional_system_update_settings -screen_zoom dashboard_tile_placeholder -lock_screen_notifications -usage_access \ No newline at end of file +screen_zoom +usage_access diff --git a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java new file mode 100644 index 0000000000..c6a0e53be6 --- /dev/null +++ b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.security; + +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; +import com.android.settings.testutils.XmlTestUtils; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.List; + +import static com.google.common.truth.Truth.assertThat; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class LockscreenDashboardFragmentTest { + + private LockscreenDashboardFragment mFragment; + + @Test + public void containsNotificationSettingsForPrimaryUserAndWorkProfile() { + mFragment = new LockscreenDashboardFragment(); + + List keys = XmlTestUtils.getKeysFromPreferenceXml(RuntimeEnvironment.application, + mFragment.getPreferenceScreenResId()); + + assertThat(keys).containsAllOf(LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON, + LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE, + LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER); + } +}