diff options
Diffstat (limited to 'core/java/android/content/res')
| -rw-r--r-- | core/java/android/content/res/ThemeChangeRequest.java | 33 | ||||
| -rw-r--r-- | core/java/android/content/res/ThemeConfig.java | 18 |
2 files changed, 42 insertions, 9 deletions
diff --git a/core/java/android/content/res/ThemeChangeRequest.java b/core/java/android/content/res/ThemeChangeRequest.java index 08b0217..f4a840d 100644 --- a/core/java/android/content/res/ThemeChangeRequest.java +++ b/core/java/android/content/res/ThemeChangeRequest.java @@ -15,6 +15,7 @@ */ package android.content.res; +import android.content.pm.ThemeUtils; import android.os.Parcel; import android.os.Parcelable; @@ -182,6 +183,12 @@ public final class ThemeChangeRequest implements Parcelable { public Builder() {} + public Builder(ThemeConfig themeConfig) { + if (themeConfig != null) { + buildChangeRequestFromThemeConfig(themeConfig); + } + } + public Builder setOverlay(String pkgName) { return setComponent(MODIFIES_OVERLAYS, pkgName); } @@ -262,5 +269,31 @@ public final class ThemeChangeRequest implements Parcelable { return new ThemeChangeRequest(mThemeComponents, mPerAppOverlays, mRequestType, mWallpaperId); } + + private void buildChangeRequestFromThemeConfig(ThemeConfig themeConfig) { + if (themeConfig.getFontPkgName() != null) { + this.setFont(themeConfig.getFontPkgName()); + } + if (themeConfig.getIconPackPkgName() != null) { + this.setIcons(themeConfig.getIconPackPkgName()); + } + if (themeConfig.getOverlayPkgName() != null) { + this.setOverlay(themeConfig.getOverlayPkgName()); + } + if (themeConfig.getOverlayForStatusBar() != null) { + this.setStatusBar(themeConfig.getOverlayForStatusBar()); + } + if (themeConfig.getOverlayForNavBar() != null) { + this.setNavBar(themeConfig.getOverlayForNavBar()); + } + + // Check if there are any per-app overlays using this theme + final Map<String, ThemeConfig.AppTheme> themes = themeConfig.getAppThemes(); + for (String appPkgName : themes.keySet()) { + if (ThemeUtils.isPerAppThemeComponent(appPkgName)) { + this.setAppOverlay(appPkgName, themes.get(appPkgName).getOverlayPkgName()); + } + } + } } } diff --git a/core/java/android/content/res/ThemeConfig.java b/core/java/android/content/res/ThemeConfig.java index 602ef0a..ac95d6b 100644 --- a/core/java/android/content/res/ThemeConfig.java +++ b/core/java/android/content/res/ThemeConfig.java @@ -179,24 +179,24 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi * preference until the theme is switched at runtime. */ public static ThemeConfig getBootTheme(ContentResolver resolver) { - return getBootThemeForUser(resolver, UserHandle.getCallingUserId()); + return getBootThemeForUser(resolver, UserHandle.USER_OWNER); } public static ThemeConfig getBootThemeForUser(ContentResolver resolver, int userHandle) { ThemeConfig bootTheme = mSystemConfig; try { - String json = Settings.Secure.getString(resolver, - Configuration.THEME_PKG_CONFIGURATION_PERSISTENCE_PROPERTY); + String json = Settings.Secure.getStringForUser(resolver, + Configuration.THEME_PKG_CONFIGURATION_PERSISTENCE_PROPERTY, userHandle); bootTheme = ThemeConfig.fromJson(json); // Handle upgrade Case: Previously the theme configuration was in separate fields if (bootTheme == null) { - String overlayPkgName = Settings.Secure.getString(resolver, - Configuration.THEME_PACKAGE_NAME_PERSISTENCE_PROPERTY); - String iconPackPkgName = Settings.Secure.getString(resolver, - Configuration.THEME_ICONPACK_PACKAGE_NAME_PERSISTENCE_PROPERTY); - String fontPkgName = Settings.Secure.getString(resolver, - Configuration.THEME_FONT_PACKAGE_NAME_PERSISTENCE_PROPERTY); + String overlayPkgName = Settings.Secure.getStringForUser(resolver, + Configuration.THEME_PACKAGE_NAME_PERSISTENCE_PROPERTY, userHandle); + String iconPackPkgName = Settings.Secure.getStringForUser(resolver, + Configuration.THEME_ICONPACK_PACKAGE_NAME_PERSISTENCE_PROPERTY, userHandle); + String fontPkgName = Settings.Secure.getStringForUser(resolver, + Configuration.THEME_FONT_PACKAGE_NAME_PERSISTENCE_PROPERTY, userHandle); Builder builder = new Builder(); builder.defaultOverlay(overlayPkgName); |
