From 51f838ba4bc4bdac61419c71fc9e6ff2f470341e Mon Sep 17 00:00:00 2001 From: Lucas Silva Date: Mon, 17 Oct 2022 22:14:34 -0400 Subject: [PATCH] Update dream summary when dream suppressed by bedtime mode Bug: 246472225 Test: enabled bedtime mode, verified settings summary updated Test: make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.dream.WhenToDreamPreferenceControllerTest" Change-Id: I4de12f636975b1bdf36898f7a530fde2f55644d4 --- res/values/strings.xml | 2 + .../ScreenSaverPreferenceController.java | 11 +++- .../WhenToDreamPreferenceController.java | 22 +++++++- .../WhenToDreamPreferenceControllerTest.java | 55 ++++++++++++++++--- 4 files changed, 80 insertions(+), 10 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 458f6fc40d1..818689d0fc4 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3359,6 +3359,8 @@ Screen saver screensaver + + Unavailable because bedtime mode is on Use screen saver diff --git a/src/com/android/settings/display/ScreenSaverPreferenceController.java b/src/com/android/settings/display/ScreenSaverPreferenceController.java index 676a567f202..de1aaea0bd8 100644 --- a/src/com/android/settings/display/ScreenSaverPreferenceController.java +++ b/src/com/android/settings/display/ScreenSaverPreferenceController.java @@ -18,6 +18,7 @@ import android.os.UserManager; import androidx.preference.Preference; +import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.dream.DreamSettings; import com.android.settingslib.core.AbstractPreferenceController; @@ -26,9 +27,12 @@ public class ScreenSaverPreferenceController extends AbstractPreferenceControlle PreferenceControllerMixin { private static final String KEY_SCREEN_SAVER = "screensaver"; + private final boolean mDreamsDisabledByAmbientModeSuppression; public ScreenSaverPreferenceController(Context context) { super(context); + mDreamsDisabledByAmbientModeSuppression = context.getResources().getBoolean( + com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig); } @Override @@ -47,7 +51,12 @@ public class ScreenSaverPreferenceController extends AbstractPreferenceControlle @Override public void updateState(Preference preference) { - preference.setSummary(DreamSettings.getSummaryTextWithDreamName(mContext)); + if (mDreamsDisabledByAmbientModeSuppression + && AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) { + preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime); + } else { + preference.setSummary(DreamSettings.getSummaryTextWithDreamName(mContext)); + } } private boolean isSystemUser() { diff --git a/src/com/android/settings/dream/WhenToDreamPreferenceController.java b/src/com/android/settings/dream/WhenToDreamPreferenceController.java index 4108e850538..02ae6a75f39 100644 --- a/src/com/android/settings/dream/WhenToDreamPreferenceController.java +++ b/src/com/android/settings/dream/WhenToDreamPreferenceController.java @@ -20,7 +20,10 @@ import android.content.Context; import androidx.preference.Preference; +import com.android.internal.annotations.VisibleForTesting; +import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.dream.DreamBackend; @@ -29,19 +32,34 @@ public class WhenToDreamPreferenceController extends AbstractPreferenceControlle private static final String WHEN_TO_START = "when_to_start"; private final DreamBackend mBackend; + private final boolean mDreamsDisabledByAmbientModeSuppression; WhenToDreamPreferenceController(Context context) { + this(context, context.getResources().getBoolean( + com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig)); + } + + @VisibleForTesting + WhenToDreamPreferenceController(Context context, + boolean dreamsDisabledByAmbientModeSuppression) { super(context); mBackend = DreamBackend.getInstance(context); + mDreamsDisabledByAmbientModeSuppression = dreamsDisabledByAmbientModeSuppression; } @Override public void updateState(Preference preference) { super.updateState(preference); - int resId = DreamSettings.getDreamSettingDescriptionResId(mBackend.getWhenToDreamSetting()); - preference.setSummary(preference.getContext().getString(resId)); + if (mDreamsDisabledByAmbientModeSuppression + && AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) { + preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime); + } else { + final int resId = DreamSettings.getDreamSettingDescriptionResId( + mBackend.getWhenToDreamSetting()); + preference.setSummary(resId); + } } @Override diff --git a/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java index 3305cded8ad..458c5c6ceee 100644 --- a/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java @@ -16,15 +16,24 @@ package com.android.settings.dream; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.anyInt; +import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.PowerManager; import androidx.preference.Preference; import androidx.test.core.app.ApplicationProvider; +import com.android.settings.R; +import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController; import com.android.settingslib.dream.DreamBackend; import com.android.settingslib.dream.DreamBackend.WhenToDream; @@ -38,32 +47,64 @@ import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) public class WhenToDreamPreferenceControllerTest { + private static final String TEST_PACKAGE = "com.android.test"; private WhenToDreamPreferenceController mController; private Context mContext; @Mock private DreamBackend mBackend; + @Mock + private PowerManager mPowerManager; + @Mock + private PackageManager mPackageManager; + @Mock + private ApplicationInfo mApplicationInfo; @Before - public void setup() { + public void setup() throws Exception { MockitoAnnotations.initMocks(this); - mContext = ApplicationProvider.getApplicationContext(); - mController = new WhenToDreamPreferenceController(mContext); + mContext = spy(ApplicationProvider.getApplicationContext()); + mController = new WhenToDreamPreferenceController(mContext, true); ReflectionHelpers.setField(mController, "mBackend", mBackend); + when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager); + when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt())) + .thenReturn(false); + + mApplicationInfo.uid = 1; + when(mContext.getString( + com.android.internal.R.string.config_defaultWellbeingPackage)).thenReturn( + TEST_PACKAGE); + + when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mPackageManager.getApplicationInfo(TEST_PACKAGE, /* flag= */ 0)).thenReturn( + mApplicationInfo); } @Test - public void updateSummary() { + public void testUpdateSummary() { // Don't have to test the other settings because DreamSettings tests that all // @WhenToDream values map to the correct ResId final @WhenToDream int testSetting = DreamBackend.WHILE_CHARGING; final Preference mockPref = mock(Preference.class); when(mockPref.getContext()).thenReturn(mContext); when(mBackend.getWhenToDreamSetting()).thenReturn(testSetting); - final String expectedString = - mContext.getString(DreamSettings.getDreamSettingDescriptionResId(testSetting)); + final int expectedResId = DreamSettings.getDreamSettingDescriptionResId(testSetting); mController.updateState(mockPref); - verify(mockPref).setSummary(expectedString); + verify(mockPref).setSummary(expectedResId); + } + + @Test + public void testBedtimeModeSuppression() { + final Preference mockPref = mock(Preference.class); + when(mockPref.getContext()).thenReturn(mContext); + when(mBackend.getWhenToDreamSetting()).thenReturn(DreamBackend.WHILE_CHARGING); + when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt())) + .thenReturn(true); + + assertTrue(AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)); + + mController.updateState(mockPref); + verify(mockPref).setSummary(R.string.screensaver_settings_when_to_dream_bedtime); } }