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