diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index 6ce631fad9fdd..ae1da56973214 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -55,6 +55,7 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.StatusBarManager; import android.app.TaskStackBuilder; +import android.app.UiModeManager; import android.app.WallpaperColors; import android.app.WallpaperInfo; import android.app.WallpaperManager; @@ -329,6 +330,12 @@ public class StatusBar extends SystemUI implements DemoMode, /** If true, the lockscreen will show a distinct wallpaper */ private static final boolean ENABLE_LOCKSCREEN_WALLPAPER = true; + /** Whether to force dark theme if Configuration.UI_MODE_NIGHT_YES. */ + private static final boolean DARK_THEME_IN_NIGHT_MODE = true; + + /** Whether to switch the device into night mode in battery saver. */ + private static final boolean NIGHT_MODE_IN_BATTERY_SAVER = true; + /** * Never let the alpha become zero for surfaces that draw with SRC - otherwise the RenderNode * won't draw anything and uninitialized memory will show through @@ -941,6 +948,10 @@ public class StatusBar extends SystemUI implements DemoMode, if (mDozeServiceHost != null) { mDozeServiceHost.firePowerSaveChanged(isPowerSave); } + if (NIGHT_MODE_IN_BATTERY_SAVER) { + mContext.getSystemService(UiModeManager.class).setNightMode( + isPowerSave ? UiModeManager.MODE_NIGHT_YES : UiModeManager.MODE_NIGHT_NO); + } } @Override @@ -3138,6 +3149,7 @@ public class StatusBar extends SystemUI implements DemoMode, public void onConfigChanged(Configuration newConfig) { updateResources(); updateDisplaySize(); // populates mDisplayMetrics + updateTheme(); if (DEBUG) { Log.v(TAG, "configuration changed: " + mContext.getResources().getConfiguration()); @@ -3878,8 +3890,13 @@ public class StatusBar extends SystemUI implements DemoMode, // The system wallpaper defines if QS should be light or dark. WallpaperColors systemColors = mColorExtractor .getWallpaperColors(WallpaperManager.FLAG_SYSTEM); - final boolean useDarkTheme = systemColors != null + final boolean wallpaperWantsDarkTheme = systemColors != null && (systemColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0; + final Configuration config = mContext.getResources().getConfiguration(); + final boolean nightModeWantsDarkTheme = DARK_THEME_IN_NIGHT_MODE + && (config.uiMode & Configuration.UI_MODE_NIGHT_MASK) + == Configuration.UI_MODE_NIGHT_YES; + final boolean useDarkTheme = wallpaperWantsDarkTheme || nightModeWantsDarkTheme; if (isUsingDarkTheme() != useDarkTheme) { mUiOffloadThread.submit(() -> { try {