summaryrefslogtreecommitdiffstats
path: root/core/java/android/content/res
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/content/res')
-rw-r--r--core/java/android/content/res/ThemeChangeRequest.java33
-rw-r--r--core/java/android/content/res/ThemeConfig.java18
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);