diff --git a/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java b/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java index c4765c3cf15..3c88eb2fe75 100644 --- a/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java +++ b/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java @@ -162,11 +162,10 @@ public class DarkThemeSlice implements CustomSliceable { @VisibleForTesting boolean isAvailable(Context context) { - // checking dark theme mode. - if (isDarkThemeMode(context)) { + // check if dark theme mode is enabled or if dark theme scheduling is on. + if (isDarkThemeMode(context) || isNightModeScheduled()) { return false; } - // checking the current battery level final BatteryManager batteryManager = context.getSystemService(BatteryManager.class); final int level = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY); @@ -186,6 +185,18 @@ public class DarkThemeSlice implements CustomSliceable { sSliceClicked = clicked; } + private boolean isNightModeScheduled() { + final int mode = mUiModeManager.getNightMode(); + if (DEBUG) { + Log.d(TAG, "night mode : " + mode); + } + // Turn on from sunset to sunrise or turn on at custom time + if (mode == UiModeManager.MODE_NIGHT_AUTO || mode == UiModeManager.MODE_NIGHT_CUSTOM) { + return true; + } + return false; + } + public static class DarkThemeWorker extends SliceBackgroundWorker { private final Context mContext; private final ContentObserver mContentObserver = diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSliceTest.java index 7170bdda9cb..3be65dc0377 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSliceTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSliceTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.app.UiModeManager; import android.content.Context; import android.net.Uri; import android.os.BatteryManager; @@ -54,6 +55,8 @@ public class DarkThemeSliceTest { private BatteryManager mBatteryManager; @Mock private PowerManager mPowerManager; + @Mock + private UiModeManager mUiModeManager; private Context mContext; private DarkThemeSlice mDarkThemeSlice; @@ -68,6 +71,7 @@ public class DarkThemeSliceTest { mFeatureFactory.slicesFeatureProvider.newUiSession(); doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class); when(mPowerManager.isPowerSaveMode()).thenReturn(false); + doReturn(mUiModeManager).when(mContext).getSystemService(UiModeManager.class); // Set-up specs for SliceMetadata. SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); @@ -89,9 +93,26 @@ public class DarkThemeSliceTest { assertThat(mDarkThemeSlice.isAvailable(mContext)).isFalse(); } + @Test + public void isAvailable_nonDarkTheme_autoNightMode_returnFalse() { + mContext.getResources().getConfiguration().uiMode = UI_MODE_NIGHT_NO; + setNightMode(UiModeManager.MODE_NIGHT_AUTO); + + assertThat(mDarkThemeSlice.isAvailable(mContext)).isFalse(); + } + + @Test + public void isAvailable_nonDarkTheme_customNightMode_returnFalse() { + mContext.getResources().getConfiguration().uiMode = UI_MODE_NIGHT_NO; + setNightMode(UiModeManager.MODE_NIGHT_CUSTOM); + + assertThat(mDarkThemeSlice.isAvailable(mContext)).isFalse(); + } + @Test public void isAvailable_nonDarkThemeBatteryCapacityEq100_returnFalse() { setBatteryCapacityLevel(100); + setNightMode(UiModeManager.MODE_NIGHT_NO); assertThat(mDarkThemeSlice.isAvailable(mContext)).isFalse(); } @@ -99,6 +120,7 @@ public class DarkThemeSliceTest { @Test public void isAvailable_nonDarkThemeBatteryCapacityLt50_returnTrue() { setBatteryCapacityLevel(40); + setNightMode(UiModeManager.MODE_NIGHT_NO); assertThat(mDarkThemeSlice.isAvailable(mContext)).isTrue(); } @@ -142,6 +164,7 @@ public class DarkThemeSliceTest { mFeatureFactory.slicesFeatureProvider.getUiSessionToken(); mDarkThemeSlice.sKeepSliceShow = true; setBatteryCapacityLevel(40); + setNightMode(UiModeManager.MODE_NIGHT_NO); assertThat(mDarkThemeSlice.getSlice()).isNotNull(); } @@ -162,6 +185,7 @@ public class DarkThemeSliceTest { mDarkThemeSlice.sSliceClicked = true; setBatteryCapacityLevel(40); + setNightMode(UiModeManager.MODE_NIGHT_NO); assertThat(mDarkThemeSlice.getSlice()).isNotNull(); } @@ -169,6 +193,7 @@ public class DarkThemeSliceTest { @Test public void getSlice_isAvailable_returnSlice() { setBatteryCapacityLevel(40); + setNightMode(UiModeManager.MODE_NIGHT_NO); assertThat(mDarkThemeSlice.getSlice()).isNotNull(); } @@ -176,6 +201,7 @@ public class DarkThemeSliceTest { @Test public void getSlice_isAvailable_showTitleSubtitle() { setBatteryCapacityLevel(40); + setNightMode(UiModeManager.MODE_NIGHT_NO); final Slice slice = mDarkThemeSlice.getSlice(); final SliceMetadata metadata = SliceMetadata.from(mContext, slice); @@ -191,4 +217,8 @@ public class DarkThemeSliceTest { when(mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)) .thenReturn(power_level); } + + private void setNightMode(int mode) { + when(mUiModeManager.getNightMode()).thenReturn(mode); + } }