diff options
| author | d34d <clark@cyngn.com> | 2015-03-13 21:12:54 -0700 |
|---|---|---|
| committer | d34d <clark@cyngn.com> | 2015-10-28 11:37:26 -0700 |
| commit | 12a2541a0b8490038ca2f17c9b9b59d67befb6c9 (patch) | |
| tree | c64c26a79a43deeb75b78a7ce2977e5aafe49bf9 /core | |
| parent | 577488854a893fe07df193fbd6a616e67bf548e0 (diff) | |
| download | frameworks_base-12a2541a0b8490038ca2f17c9b9b59d67befb6c9.zip frameworks_base-12a2541a0b8490038ca2f17c9b9b59d67befb6c9.tar.gz frameworks_base-12a2541a0b8490038ca2f17c9b9b59d67befb6c9.tar.bz2 | |
Themes: Switch themes when user changes
This patch grabs the theme config for the new user and then
creates a ThemeChangeRequest from that config. This request is
then processed and applied for the new user.
Secondary users will not be able to change themes at this time.
This patch helps pave the way for that ability and provides a better
user experience when switching users.
Change-Id: I6d7e2ab312b8e3e5c099d1e9e2e62892bead10da
Diffstat (limited to 'core')
| -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); |
