Merge "Fixes theme choice on boot when scheme is not from latest wallpaper." into tm-qpr-dev am: 4fd8012b64
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19558672 Change-Id: I0623f3a52793d7d5442709465ffc7969590a2a3d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -244,7 +244,8 @@ public class ThemeOverlayController extends CoreStartable implements Dumpable {
|
|||||||
final int currentUser = mUserTracker.getUserId();
|
final int currentUser = mUserTracker.getUserId();
|
||||||
final boolean hadWallpaperColors = mCurrentColors.get(userId) != null;
|
final boolean hadWallpaperColors = mCurrentColors.get(userId) != null;
|
||||||
int latestWallpaperType = getLatestWallpaperType(userId);
|
int latestWallpaperType = getLatestWallpaperType(userId);
|
||||||
if ((flags & latestWallpaperType) != 0) {
|
boolean eventForLatestWallpaper = (flags & latestWallpaperType) != 0;
|
||||||
|
if (eventForLatestWallpaper) {
|
||||||
mCurrentColors.put(userId, wallpaperColors);
|
mCurrentColors.put(userId, wallpaperColors);
|
||||||
if (DEBUG) Log.d(TAG, "got new colors: " + wallpaperColors + " where: " + flags);
|
if (DEBUG) Log.d(TAG, "got new colors: " + wallpaperColors + " where: " + flags);
|
||||||
}
|
}
|
||||||
@@ -280,14 +281,19 @@ public class ThemeOverlayController extends CoreStartable implements Dumpable {
|
|||||||
currentUser);
|
currentUser);
|
||||||
boolean isDestinationBoth = (flags == (WallpaperManager.FLAG_SYSTEM
|
boolean isDestinationBoth = (flags == (WallpaperManager.FLAG_SYSTEM
|
||||||
| WallpaperManager.FLAG_LOCK));
|
| WallpaperManager.FLAG_LOCK));
|
||||||
|
boolean isDestinationHomeOnly = (flags == WallpaperManager.FLAG_SYSTEM);
|
||||||
try {
|
try {
|
||||||
JSONObject jsonObject = (overlayPackageJson == null) ? new JSONObject()
|
JSONObject jsonObject = (overlayPackageJson == null) ? new JSONObject()
|
||||||
: new JSONObject(overlayPackageJson);
|
: new JSONObject(overlayPackageJson);
|
||||||
// The latest applied wallpaper should be the source of system colors when:
|
// The latest applied wallpaper should be the source of system colors when:
|
||||||
// There is not preset color applied and the incoming wallpaper color is not applied
|
// There is not preset color applied and the incoming wallpaper color is not applied
|
||||||
if (!COLOR_SOURCE_PRESET.equals(jsonObject.optString(OVERLAY_COLOR_SOURCE))
|
String wallpaperPickerColorSource = jsonObject.optString(OVERLAY_COLOR_SOURCE);
|
||||||
&& ((flags & latestWallpaperType) != 0 && !isSeedColorSet(jsonObject,
|
boolean userChosePresetColor = COLOR_SOURCE_PRESET.equals(wallpaperPickerColorSource);
|
||||||
wallpaperColors))) {
|
boolean userChoseLockScreenColor = COLOR_SOURCE_LOCK.equals(wallpaperPickerColorSource);
|
||||||
|
boolean preserveLockScreenColor = isDestinationHomeOnly && userChoseLockScreenColor;
|
||||||
|
|
||||||
|
if (!userChosePresetColor && !preserveLockScreenColor && eventForLatestWallpaper
|
||||||
|
&& !isSeedColorSet(jsonObject, wallpaperColors)) {
|
||||||
mSkipSettingChange = true;
|
mSkipSettingChange = true;
|
||||||
if (jsonObject.has(OVERLAY_CATEGORY_ACCENT_COLOR) || jsonObject.has(
|
if (jsonObject.has(OVERLAY_CATEGORY_ACCENT_COLOR) || jsonObject.has(
|
||||||
OVERLAY_CATEGORY_SYSTEM_PALETTE)) {
|
OVERLAY_CATEGORY_SYSTEM_PALETTE)) {
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onWallpaperColorsChanged_ResetThemeWithNewHomeWallpapers() {
|
public void onWallpaperColorsChanged_resetThemeWithNewHomeWallpapers() {
|
||||||
// Should ask for a new theme when wallpaper colors change
|
// Should ask for a new theme when wallpaper colors change
|
||||||
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
||||||
Color.valueOf(Color.BLUE), null);
|
Color.valueOf(Color.BLUE), null);
|
||||||
@@ -344,6 +344,61 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
|
|||||||
.applyCurrentUserOverlays(any(), any(), anyInt(), any());
|
.applyCurrentUserOverlays(any(), any(), anyInt(), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onWallpaperColorsChanged_keepsThemeWhenSetFromLockScreen() {
|
||||||
|
// Should ask for a new theme when wallpaper colors change
|
||||||
|
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
||||||
|
Color.valueOf(Color.BLUE), null);
|
||||||
|
String jsonString =
|
||||||
|
"{\"android.theme.customization.color_source\":\"lock_wallpaper\","
|
||||||
|
+ "\"android.theme.customization.system_palette\":\"A16B00\","
|
||||||
|
+ "\"android.theme.customization.accent_color\":\"A16B00\","
|
||||||
|
+ "\"android.theme.customization.color_index\":\"2\"}";
|
||||||
|
when(mSecureSettings.getStringForUser(
|
||||||
|
eq(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES), anyInt()))
|
||||||
|
.thenReturn(jsonString);
|
||||||
|
when(mWallpaperManager.getWallpaperIdForUser(WallpaperManager.FLAG_LOCK, USER_SYSTEM))
|
||||||
|
.thenReturn(20);
|
||||||
|
when(mWallpaperManager.getWallpaperIdForUser(WallpaperManager.FLAG_SYSTEM, USER_SYSTEM))
|
||||||
|
.thenReturn(21);
|
||||||
|
mColorsListener.getValue().onColorsChanged(mainColors, WallpaperManager.FLAG_SYSTEM,
|
||||||
|
USER_SYSTEM);
|
||||||
|
verify(mSecureSettings, never()).putStringForUser(
|
||||||
|
eq(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES), any(), anyInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onWallpaperColorsChanged_resetLockScreenThemeWhenBothSet() {
|
||||||
|
// Should ask for a new theme when wallpaper colors change
|
||||||
|
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
||||||
|
Color.valueOf(Color.BLUE), null);
|
||||||
|
String jsonString =
|
||||||
|
"{\"android.theme.customization.color_source\":\"lock_wallpaper\","
|
||||||
|
+ "\"android.theme.customization.system_palette\":\"A16B00\","
|
||||||
|
+ "\"android.theme.customization.accent_color\":\"A16B00\","
|
||||||
|
+ "\"android.theme.customization.color_index\":\"2\"}";
|
||||||
|
when(mSecureSettings.getStringForUser(
|
||||||
|
eq(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES), anyInt()))
|
||||||
|
.thenReturn(jsonString);
|
||||||
|
when(mWallpaperManager.getWallpaperIdForUser(WallpaperManager.FLAG_LOCK, USER_SYSTEM))
|
||||||
|
.thenReturn(20);
|
||||||
|
when(mWallpaperManager.getWallpaperIdForUser(WallpaperManager.FLAG_SYSTEM, USER_SYSTEM))
|
||||||
|
.thenReturn(21);
|
||||||
|
|
||||||
|
mColorsListener.getValue().onColorsChanged(mainColors,
|
||||||
|
WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK,
|
||||||
|
USER_SYSTEM);
|
||||||
|
|
||||||
|
ArgumentCaptor<String> updatedSetting = ArgumentCaptor.forClass(String.class);
|
||||||
|
verify(mSecureSettings).putStringForUser(
|
||||||
|
eq(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES), updatedSetting.capture(),
|
||||||
|
anyInt());
|
||||||
|
assertThat(updatedSetting.getValue().contains(
|
||||||
|
"android.theme.customization.color_both\":\"1")).isTrue();
|
||||||
|
verify(mThemeOverlayApplier)
|
||||||
|
.applyCurrentUserOverlays(any(), any(), anyInt(), any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onSettingChanged_honorThemeStyle() {
|
public void onSettingChanged_honorThemeStyle() {
|
||||||
when(mDeviceProvisionedController.isUserSetup(anyInt())).thenReturn(true);
|
when(mDeviceProvisionedController.isUserSetup(anyInt())).thenReturn(true);
|
||||||
@@ -381,7 +436,7 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onWallpaperColorsChanged_ResetThemeWithNewHomeAndLockWallpaper() {
|
public void onWallpaperColorsChanged_resetThemeWithNewHomeAndLockWallpaper() {
|
||||||
// Should ask for a new theme when wallpaper colors change
|
// Should ask for a new theme when wallpaper colors change
|
||||||
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
||||||
Color.valueOf(Color.BLUE), null);
|
Color.valueOf(Color.BLUE), null);
|
||||||
@@ -450,7 +505,7 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
|
|||||||
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
||||||
Color.valueOf(Color.BLUE), null);
|
Color.valueOf(Color.BLUE), null);
|
||||||
String jsonString =
|
String jsonString =
|
||||||
"{\"android.theme.customization.color_source\":\"lock_wallpaper\","
|
"{\"android.theme.customization.color_source\":\"home_wallpaper\","
|
||||||
+ "\"android.theme.customization.system_palette\":\"A16B00\","
|
+ "\"android.theme.customization.system_palette\":\"A16B00\","
|
||||||
+ "\"android.theme.customization.accent_color\":\"A16B00\","
|
+ "\"android.theme.customization.accent_color\":\"A16B00\","
|
||||||
+ "\"android.theme.customization.color_index\":\"2\"}";
|
+ "\"android.theme.customization.color_index\":\"2\"}";
|
||||||
@@ -476,7 +531,7 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onWallpaperColorsChanged_ResetThemeWhenFromLatestWallpaper() {
|
public void onWallpaperColorsChanged_resetThemeWhenFromLatestWallpaper() {
|
||||||
// Should ask for a new theme when the colors of the last applied wallpaper change
|
// Should ask for a new theme when the colors of the last applied wallpaper change
|
||||||
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
|
||||||
Color.valueOf(Color.BLUE), null);
|
Color.valueOf(Color.BLUE), null);
|
||||||
|
|||||||
Reference in New Issue
Block a user