From 4cc1e9e707242479e00c4bc4bc0ea02bffccfa85 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Thu, 12 Feb 2015 11:01:06 -0800 Subject: Add support for user-selectable night mode Adds a Material theme that automatically selects light or dark UI based on the night mode resource qualifier. Removes restriction that night mode only works when car mode is enabled or the device is docked, which was applied inconsistently anyway and only actually worked when in car mode (regardless of docked state). Night mode is now always applied according to the system preference. Change-Id: I526807c907eb29a2ab588d15932afe3e6ab180c2 --- api/current.txt | 15 +++ api/system-current.txt | 15 +++ core/java/android/app/UiModeManager.java | 7 +- .../res/values-night/themes_material_daynight.xml | 112 +++++++++++++++++++++ core/res/res/values/config.xml | 8 ++ core/res/res/values/public.xml | 16 +++ core/res/res/values/symbols.xml | 1 + core/res/res/values/themes_material.xml | 18 ++-- core/res/res/values/themes_material_daynight.xml | 112 +++++++++++++++++++++ .../com/android/server/UiModeManagerService.java | 49 +++++---- 10 files changed, 311 insertions(+), 42 deletions(-) create mode 100644 core/res/res/values-night/themes_material_daynight.xml create mode 100644 core/res/res/values/themes_material_daynight.xml diff --git a/api/current.txt b/api/current.txt index af61de868846..6c35586aa1e9 100644 --- a/api/current.txt +++ b/api/current.txt @@ -2086,6 +2086,21 @@ package android { field public static final int Theme_Light_Panel = 16973914; // 0x103005a field public static final int Theme_Light_WallpaperSettings = 16973922; // 0x1030062 field public static final int Theme_Material = 16974372; // 0x1030224 + field public static final int Theme_Material_DayNight = 16974548; // 0x10302d4 + field public static final int Theme_Material_DayNight_DarkActionBar = 16974549; // 0x10302d5 + field public static final int Theme_Material_DayNight_Dialog = 16974550; // 0x10302d6 + field public static final int Theme_Material_DayNight_DialogWhenLarge = 16974556; // 0x10302dc + field public static final int Theme_Material_DayNight_DialogWhenLarge_NoActionBar = 16974557; // 0x10302dd + field public static final int Theme_Material_DayNight_Dialog_Alert = 16974551; // 0x10302d7 + field public static final int Theme_Material_DayNight_Dialog_MinWidth = 16974552; // 0x10302d8 + field public static final int Theme_Material_DayNight_Dialog_NoActionBar = 16974553; // 0x10302d9 + field public static final int Theme_Material_DayNight_Dialog_NoActionBar_MinWidth = 16974554; // 0x10302da + field public static final int Theme_Material_DayNight_Dialog_Presentation = 16974555; // 0x10302db + field public static final int Theme_Material_DayNight_NoActionBar = 16974558; // 0x10302de + field public static final int Theme_Material_DayNight_NoActionBar_Fullscreen = 16974559; // 0x10302df + field public static final int Theme_Material_DayNight_NoActionBar_Overscan = 16974560; // 0x10302e0 + field public static final int Theme_Material_DayNight_NoActionBar_TranslucentDecor = 16974561; // 0x10302e1 + field public static final int Theme_Material_DayNight_Panel = 16974562; // 0x10302e2 field public static final int Theme_Material_Dialog = 16974373; // 0x1030225 field public static final int Theme_Material_DialogWhenLarge = 16974379; // 0x103022b field public static final int Theme_Material_DialogWhenLarge_NoActionBar = 16974380; // 0x103022c diff --git a/api/system-current.txt b/api/system-current.txt index 6b5060384eac..d5a8f2726b09 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -2165,6 +2165,21 @@ package android { field public static final int Theme_Light_Panel = 16973914; // 0x103005a field public static final int Theme_Light_WallpaperSettings = 16973922; // 0x1030062 field public static final int Theme_Material = 16974372; // 0x1030224 + field public static final int Theme_Material_DayNight = 16974548; // 0x10302d4 + field public static final int Theme_Material_DayNight_DarkActionBar = 16974549; // 0x10302d5 + field public static final int Theme_Material_DayNight_Dialog = 16974550; // 0x10302d6 + field public static final int Theme_Material_DayNight_DialogWhenLarge = 16974556; // 0x10302dc + field public static final int Theme_Material_DayNight_DialogWhenLarge_NoActionBar = 16974557; // 0x10302dd + field public static final int Theme_Material_DayNight_Dialog_Alert = 16974551; // 0x10302d7 + field public static final int Theme_Material_DayNight_Dialog_MinWidth = 16974552; // 0x10302d8 + field public static final int Theme_Material_DayNight_Dialog_NoActionBar = 16974553; // 0x10302d9 + field public static final int Theme_Material_DayNight_Dialog_NoActionBar_MinWidth = 16974554; // 0x10302da + field public static final int Theme_Material_DayNight_Dialog_Presentation = 16974555; // 0x10302db + field public static final int Theme_Material_DayNight_NoActionBar = 16974558; // 0x10302de + field public static final int Theme_Material_DayNight_NoActionBar_Fullscreen = 16974559; // 0x10302df + field public static final int Theme_Material_DayNight_NoActionBar_Overscan = 16974560; // 0x10302e0 + field public static final int Theme_Material_DayNight_NoActionBar_TranslucentDecor = 16974561; // 0x10302e1 + field public static final int Theme_Material_DayNight_Panel = 16974562; // 0x10302e2 field public static final int Theme_Material_Dialog = 16974373; // 0x1030225 field public static final int Theme_Material_DialogWhenLarge = 16974379; // 0x103022b field public static final int Theme_Material_DialogWhenLarge_NoActionBar = 16974380; // 0x103022c diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java index 0a255f7f1af1..0f6ce1227ca4 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -219,10 +219,9 @@ public class UiModeManager { } /** - * Returns the currently configured night mode. - * - * @return {@link #MODE_NIGHT_NO}, {@link #MODE_NIGHT_YES}, or - * {@link #MODE_NIGHT_AUTO}. When an error occurred -1 is returned. + * @return the currently configured night mode. May be one of + * {@link #MODE_NIGHT_NO}, {@link #MODE_NIGHT_YES}, + * {@link #MODE_NIGHT_AUTO}, or -1 on error. */ public int getNightMode() { if (mService != null) { diff --git a/core/res/res/values-night/themes_material_daynight.xml b/core/res/res/values-night/themes_material_daynight.xml new file mode 100644 index 000000000000..da870b7ea672 --- /dev/null +++ b/core/res/res/values-night/themes_material_daynight.xml @@ -0,0 +1,112 @@ + + + + + + + + - - - -