diff --git a/res/values/strings.xml b/res/values/strings.xml index 8db8ef91c76..28adfa5c978 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3365,6 +3365,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); } }