diff --git a/res/values/strings.xml b/res/values/strings.xml index f4337d4af42..4deb936e0f0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2643,11 +2643,6 @@ Ambient display - - Always on / Increased battery usage - - New notifications - When to show diff --git a/res/xml/ambient_display_settings.xml b/res/xml/ambient_display_settings.xml deleted file mode 100644 index 4688a80afc4..00000000000 --- a/res/xml/ambient_display_settings.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index 90198ae70cf..b34fec0c8af 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -101,9 +101,10 @@ android:fragment="com.android.settings.dream.DreamSettings" /> + android:order="1001"> getXmlResourcesToIndex(Context context, - boolean enabled) { - final ArrayList result = new ArrayList<>(); - - final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.ambient_display_settings; - result.add(sir); - return result; - } - }; - - private AmbientDisplayConfiguration getConfig(Context context) { - if (mConfig == null) { - mConfig = new AmbientDisplayConfiguration(context); - } - return mConfig; - } -} diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java index 1cabb92ae19..32f4b9238dd 100644 --- a/src/com/android/settings/security/LockscreenDashboardFragment.java +++ b/src/com/android/settings/security/LockscreenDashboardFragment.java @@ -19,9 +19,14 @@ package com.android.settings.security; import android.content.Context; import android.provider.SearchIndexableResource; +import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController; +import com.android.settings.display.AmbientDisplayNotificationsPreferenceController; +import com.android.settings.gestures.DoubleTapScreenPreferenceController; +import com.android.settings.gestures.PickupGesturePreferenceController; import com.android.settings.notification.LockScreenNotificationPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.users.AddUserWhenLockedPreferenceController; @@ -42,6 +47,8 @@ import androidx.annotation.VisibleForTesting; public class LockscreenDashboardFragment extends DashboardFragment implements OwnerInfoPreferenceController.OwnerInfoCallback { + public static final String KEY_AMBIENT_DISPLAY_ALWAYS_ON = "ambient_display_always_on"; + private static final String TAG = "LockscreenDashboardFragment"; @VisibleForTesting @@ -56,6 +63,8 @@ public class LockscreenDashboardFragment extends DashboardFragment static final String KEY_ADD_USER_FROM_LOCK_SCREEN = "security_lockscreen_add_users_when_locked"; + + private AmbientDisplayConfiguration mConfig; private OwnerInfoPreferenceController mOwnerInfoPreferenceController; @Override @@ -78,6 +87,17 @@ public class LockscreenDashboardFragment extends DashboardFragment return R.string.help_url_lockscreen; } + @Override + public void onAttach(Context context) { + super.onAttach(context); + use(AmbientDisplayAlwaysOnPreferenceController.class) + .setConfig(getConfig(context)) + .setCallback(this::updatePreferenceStates); + use(AmbientDisplayNotificationsPreferenceController.class).setConfig(getConfig(context)); + use(DoubleTapScreenPreferenceController.class).setConfig(getConfig(context)); + use(PickupGesturePreferenceController.class).setConfig(getConfig(context)); + } + @Override protected List createPreferenceControllers(Context context) { final List controllers = new ArrayList<>(); @@ -105,6 +125,13 @@ public class LockscreenDashboardFragment extends DashboardFragment } } + private AmbientDisplayConfiguration getConfig(Context context) { + if (mConfig == null) { + mConfig = new AmbientDisplayConfiguration(context); + } + return mConfig; + } + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java index 652b66da290..7ce6560f415 100644 --- a/src/com/android/settings/security/SecuritySettings.java +++ b/src/com/android/settings/security/SecuritySettings.java @@ -15,8 +15,7 @@ */ package com.android.settings.security; -import static com.android.settings.security.EncryptionStatusPreferenceController - .PREF_KEY_ENCRYPTION_SECURITY_PAGE; +import static com.android.settings.security.EncryptionStatusPreferenceController.PREF_KEY_ENCRYPTION_SECURITY_PAGE; import android.app.Activity; import android.content.Context; @@ -35,7 +34,6 @@ import com.android.settings.fingerprint.FingerprintProfileStatusPreferenceContro import com.android.settings.fingerprint.FingerprintStatusPreferenceController; import com.android.settings.location.LocationPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settings.security.screenlock.LockScreenPreferenceController; import com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController; import com.android.settings.security.trustagent.TrustAgentListPreferenceController; import com.android.settings.widget.PreferenceCategoryController; @@ -128,7 +126,6 @@ public class SecuritySettings extends DashboardFragment { final List securityPreferenceControllers = new ArrayList<>(); securityPreferenceControllers.add(new FingerprintStatusPreferenceController(context)); - securityPreferenceControllers.add(new LockScreenPreferenceController(context, lifecycle)); securityPreferenceControllers.add(new ChangeScreenLockPreferenceController(context, host)); controllers.add(new PreferenceCategoryController(context, SECURITY_CATEGORY) .setChildren(securityPreferenceControllers)); diff --git a/src/com/android/settings/security/screenlock/LockScreenPreferenceController.java b/src/com/android/settings/security/screenlock/LockScreenPreferenceController.java index 1624f12cbb8..3ffbed10381 100644 --- a/src/com/android/settings/security/screenlock/LockScreenPreferenceController.java +++ b/src/com/android/settings/security/screenlock/LockScreenPreferenceController.java @@ -20,33 +20,28 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED import android.content.Context; import android.os.UserHandle; -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; import com.android.internal.widget.LockPatternUtils; import com.android.settings.core.BasePreferenceController; import com.android.settings.notification.LockScreenNotificationPreferenceController; import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnResume; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; + public class LockScreenPreferenceController extends BasePreferenceController implements LifecycleObserver, OnResume { - static final String KEY_LOCKSCREEN_PREFERENCES = "lockscreen_preferences"; - private static final int MY_USER_ID = UserHandle.myUserId(); private final LockPatternUtils mLockPatternUtils; private Preference mPreference; - public LockScreenPreferenceController(Context context, Lifecycle lifecycle) { - super(context, KEY_LOCKSCREEN_PREFERENCES); + public LockScreenPreferenceController(Context context, String key) { + super(context, key); mLockPatternUtils = FeatureFactory.getFactory(context) .getSecurityFeatureProvider().getLockPatternUtils(context); - if (lifecycle != null) { - lifecycle.addObserver(this); - } } @Override diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayPreferenceControllerTest.java deleted file mode 100644 index 8d62d2fe5c5..00000000000 --- a/tests/robotests/src/com/android/settings/display/AmbientDisplayPreferenceControllerTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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.display; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import androidx.preference.Preference; - -import com.android.internal.hardware.AmbientDisplayConfiguration; -import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.testutils.shadow.ShadowSecureSettings; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; - -@RunWith(SettingsRobolectricTestRunner.class) -@Config(shadows = ShadowSecureSettings.class) -public class AmbientDisplayPreferenceControllerTest { - - @Mock - private Context mContext; - @Mock - private AmbientDisplayConfiguration mConfig; - @Mock - private Preference mPreference; - - private AmbientDisplayPreferenceController mController; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mController = new AmbientDisplayPreferenceController(mContext, mConfig, "key"); - } - - @Test - public void isAvailable_available() { - when(mConfig.available()).thenReturn(true); - assertThat(mController.isAvailable()).isTrue(); - } - - @Test - public void isAvailable_unavailable() { - when(mConfig.available()).thenReturn(false); - assertThat(mController.isAvailable()).isFalse(); - } - - @Test - public void updateState_alwaysOn() { - when(mConfig.alwaysOnEnabled(anyInt())).thenReturn(true); - - mController.updateState(mPreference); - - verify(mPreference).setSummary(R.string.ambient_display_screen_summary_always_on); - } - - @Test - public void updateState_notifications() { - when(mConfig.alwaysOnEnabled(anyInt())).thenReturn(false); - when(mConfig.pulseOnNotificationEnabled(anyInt())).thenReturn(true); - - mController.updateState(mPreference); - - verify(mPreference).setSummary(R.string.ambient_display_screen_summary_notifications); - } - - @Test - public void updateState_gestures() { - when(mConfig.alwaysOnEnabled(anyInt())).thenReturn(false); - when(mConfig.pulseOnNotificationEnabled(anyInt())).thenReturn(false); - when(mConfig.enabled(anyInt())).thenReturn(true); - - mController.updateState(mPreference); - - verify(mPreference).setSummary(R.string.switch_on_text); - } - - @Test - public void updateState_off() { - when(mConfig.alwaysOnEnabled(anyInt())).thenReturn(false); - when(mConfig.pulseOnNotificationEnabled(anyInt())).thenReturn(false); - when(mConfig.pulseOnDoubleTapEnabled(anyInt())).thenReturn(false); - when(mConfig.pulseOnPickupEnabled(anyInt())).thenReturn(false); - - mController.updateState(mPreference); - - verify(mPreference).setSummary(R.string.switch_off_text); - } - - @Test - public void getPreferenceKey() { - assertThat(mController.getPreferenceKey()).isEqualTo("key"); - } -} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplaySettingsTest.java deleted file mode 100644 index 4361b7c6f31..00000000000 --- a/tests/robotests/src/com/android/settings/display/AmbientDisplaySettingsTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2018 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.display; - -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -import android.content.Context; - -import com.android.settings.gestures.DoubleTapScreenPreferenceController; -import com.android.settings.gestures.PickupGesturePreferenceController; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settingslib.core.AbstractPreferenceController; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; - -@RunWith(SettingsRobolectricTestRunner.class) -public class AmbientDisplaySettingsTest { - - private TestFragment mTestFragment; - - private Context mContext; - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - mTestFragment = spy(new TestFragment()); - } - - @Test - public void onAttach_alwaysOn_shouldInvokeSetters() { - final AmbientDisplayAlwaysOnPreferenceController controller = spy( - new AmbientDisplayAlwaysOnPreferenceController(mContext, "key")); - doReturn(controller).when(mTestFragment).use( - AmbientDisplayAlwaysOnPreferenceController.class); - - mTestFragment.onAttach(mContext); - verify(controller).setConfig(any()); - verify(controller).setCallback(any()); - } - - @Test - public void onAttach_notifications_shouldInvokeSetters() { - final AmbientDisplayNotificationsPreferenceController controller = spy( - new AmbientDisplayNotificationsPreferenceController(mContext, "key")); - doReturn(controller).when(mTestFragment).use( - AmbientDisplayNotificationsPreferenceController.class); - - mTestFragment.onAttach(mContext); - verify(controller).setConfig(any()); - } - - @Test - public void onAttach_doubleTap_shouldInvokeSetters() { - final DoubleTapScreenPreferenceController controller = spy( - new DoubleTapScreenPreferenceController(mContext, "key")); - doReturn(controller).when(mTestFragment).use(DoubleTapScreenPreferenceController.class); - - mTestFragment.onAttach(mContext); - verify(controller).setConfig(any()); - } - - @Test - public void onAttach_pickUp_shouldInvokeSetters() { - final PickupGesturePreferenceController controller = spy( - new PickupGesturePreferenceController(mContext, "key")); - doReturn(controller).when(mTestFragment).use(PickupGesturePreferenceController.class); - - mTestFragment.onAttach(mContext); - verify(controller).setConfig(any()); - } - - public static class TestFragment extends AmbientDisplaySettings { - @Override - protected T use(Class clazz) { - return super.use(clazz); - } - } -} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java index ec963b54205..173f56b01d8 100644 --- a/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/security/LockscreenDashboardFragmentTest.java @@ -17,30 +17,105 @@ package com.android.settings.security; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import android.content.Context; + +import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController; +import com.android.settings.display.AmbientDisplayNotificationsPreferenceController; +import com.android.settings.gestures.DoubleTapScreenPreferenceController; +import com.android.settings.gestures.PickupGesturePreferenceController; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; +import com.android.settings.testutils.shadow.ShadowLockPatternUtils; +import com.android.settings.testutils.shadow.ShadowUtils; +import com.android.settingslib.core.AbstractPreferenceController; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) +@Config(shadows = { + ShadowUtils.class, ShadowLockPatternUtils.class +}) public class LockscreenDashboardFragmentTest { - private LockscreenDashboardFragment mFragment; + private TestFragment mTestFragment; + private Context mContext; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; + mTestFragment = spy(new TestFragment()); + } @Test public void containsNotificationSettingsForPrimaryUserAndWorkProfile() { - mFragment = new LockscreenDashboardFragment(); - List keys = XmlTestUtils.getKeysFromPreferenceXml(RuntimeEnvironment.application, - mFragment.getPreferenceScreenResId()); + mTestFragment.getPreferenceScreenResId()); assertThat(keys).containsAllOf(LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON, LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE, LockscreenDashboardFragment.KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER); } + + @Test + public void onAttach_alwaysOn_shouldInvokeSetters() { + final AmbientDisplayAlwaysOnPreferenceController controller = spy( + new AmbientDisplayAlwaysOnPreferenceController(mContext, "key")); + doReturn(controller).when(mTestFragment).use( + AmbientDisplayAlwaysOnPreferenceController.class); + + mTestFragment.onAttach(mContext); + verify(controller).setConfig(any()); + verify(controller).setCallback(any()); + } + + @Test + public void onAttach_notifications_shouldInvokeSetters() { + final AmbientDisplayNotificationsPreferenceController controller = spy( + new AmbientDisplayNotificationsPreferenceController(mContext, "key")); + doReturn(controller).when(mTestFragment).use( + AmbientDisplayNotificationsPreferenceController.class); + + mTestFragment.onAttach(mContext); + verify(controller).setConfig(any()); + } + + @Test + public void onAttach_doubleTap_shouldInvokeSetters() { + final DoubleTapScreenPreferenceController controller = spy( + new DoubleTapScreenPreferenceController(mContext, "key")); + doReturn(controller).when(mTestFragment).use(DoubleTapScreenPreferenceController.class); + + mTestFragment.onAttach(mContext); + verify(controller).setConfig(any()); + } + + @Test + public void onAttach_pickUp_shouldInvokeSetters() { + final PickupGesturePreferenceController controller = spy( + new PickupGesturePreferenceController(mContext, "key")); + doReturn(controller).when(mTestFragment).use(PickupGesturePreferenceController.class); + + mTestFragment.onAttach(mContext); + verify(controller).setConfig(any()); + } + + public static class TestFragment extends LockscreenDashboardFragment { + @Override + protected T use(Class clazz) { + return super.use(clazz); + } + } } diff --git a/tests/robotests/src/com/android/settings/security/screenlock/LockScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/screenlock/LockScreenPreferenceControllerTest.java index fc555c4502a..2eaf3c0eee0 100644 --- a/tests/robotests/src/com/android/settings/security/screenlock/LockScreenPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/screenlock/LockScreenPreferenceControllerTest.java @@ -26,11 +26,8 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; -import androidx.lifecycle.LifecycleOwner; import android.content.Context; import android.os.UserManager; -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; import com.android.internal.widget.LockPatternUtils; import com.android.settings.testutils.FakeFeatureFactory; @@ -45,6 +42,10 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.shadows.ShadowApplication; +import androidx.lifecycle.LifecycleOwner; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; + @RunWith(SettingsRobolectricTestRunner.class) public class LockScreenPreferenceControllerTest { @@ -79,7 +80,7 @@ public class LockScreenPreferenceControllerTest { when(mScreen.findPreference(anyString())).thenReturn(mPreference); mLifecycleOwner = () -> mLifecycle; mLifecycle = new Lifecycle(mLifecycleOwner); - mController = new LockScreenPreferenceController(mContext, mLifecycle); + mController = new LockScreenPreferenceController(mContext, "Test_key"); } @Test