summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/res/ThemeConfig.java22
-rw-r--r--services/core/java/com/android/server/ThemeService.java17
2 files changed, 21 insertions, 18 deletions
diff --git a/core/java/android/content/res/ThemeConfig.java b/core/java/android/content/res/ThemeConfig.java
index 1b1837d..a10151d 100644
--- a/core/java/android/content/res/ThemeConfig.java
+++ b/core/java/android/content/res/ThemeConfig.java
@@ -60,6 +60,9 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi
// Maps pkgname to theme (ex com.angry.birds -> red theme)
protected final Map<String, AppTheme> mThemes = new HashMap<String, AppTheme>();
+ // Theme change timestamp
+ private long mThemeChangeTimestamp;
+
public ThemeConfig(Map<String, AppTheme> appThemes) {
mThemes.putAll(appThemes);
}
@@ -127,7 +130,8 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi
Map<String, AppTheme> newThemes = (o.mThemes == null) ?
new HashMap<String, AppTheme>() : o.mThemes;
- return (currThemes.equals(newThemes));
+ return (currThemes.equals(newThemes) &&
+ mThemeChangeTimestamp == o.mThemeChangeTimestamp);
}
return false;
}
@@ -200,13 +204,16 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi
public void writeToParcel(Parcel dest, int flags) {
String json = JsonSerializer.toJson(this);
dest.writeString(json);
+ dest.writeLong(mThemeChangeTimestamp);
}
public static final Parcelable.Creator<ThemeConfig> CREATOR =
new Parcelable.Creator<ThemeConfig>() {
public ThemeConfig createFromParcel(Parcel source) {
String json = source.readString();
- return JsonSerializer.fromJson(json);
+ ThemeConfig themeConfig = JsonSerializer.fromJson(json);
+ themeConfig.mThemeChangeTimestamp = source.readLong();
+ return themeConfig;
}
public ThemeConfig[] newArray(int size) {
@@ -324,6 +331,7 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi
private HashMap<String, String> mOverlays = new HashMap<String, String>();
private HashMap<String, String> mIcons = new HashMap<String, String>();
private HashMap<String, String> mFonts = new HashMap<String, String>();
+ private long mThemeChangeTimestamp;
public Builder() {}
@@ -335,6 +343,7 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi
mIcons.put(key, appTheme.getIconPackPkgName());
mOverlays.put(key, appTheme.getOverlayPkgName());
}
+ mThemeChangeTimestamp = theme.mThemeChangeTimestamp;
}
/**
@@ -395,6 +404,11 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi
return this;
}
+ public Builder setThemeChangeTimestamp(long timestamp) {
+ mThemeChangeTimestamp = timestamp;
+ return this;
+ }
+
public ThemeConfig build() {
HashSet<String> appPkgSet = new HashSet<String>();
appPkgSet.addAll(mOverlays.keySet());
@@ -410,7 +424,9 @@ public class ThemeConfig implements Cloneable, Parcelable, Comparable<ThemeConfi
AppTheme appTheme = new AppTheme(overlay, icon, font);
appThemes.put(appPkgName, appTheme);
}
- return new ThemeConfig(appThemes);
+ ThemeConfig themeConfig = new ThemeConfig(appThemes);
+ themeConfig.mThemeChangeTimestamp = mThemeChangeTimestamp;
+ return themeConfig;
}
}
diff --git a/services/core/java/com/android/server/ThemeService.java b/services/core/java/com/android/server/ThemeService.java
index 9d4c182..6547a41 100644
--- a/services/core/java/com/android/server/ThemeService.java
+++ b/services/core/java/com/android/server/ThemeService.java
@@ -730,21 +730,6 @@ public class ThemeService extends IThemeService.Stub {
ThemeConfig.Builder themeBuilder = createBuilderFrom(config, components, null);
ThemeConfig newConfig = themeBuilder.build();
- // If this is a theme upgrade then new config equals existing config. The result
- // is that the config is not considered changed and therefore not propagated,
- // which can be problem if the APK path changes (ex theme-1.apk -> theme-2.apk)
- if (newConfig.equals(config.themeConfig)) {
- // We can't just use null for the themeConfig, it won't be registered as
- // a changed config value because of the way equals in config had to be written.
- final String defaultThemePkg =
- Settings.Secure.getString(mContext.getContentResolver(),
- Settings.Secure.DEFAULT_THEME_PACKAGE);
- ThemeConfig.Builder defaultBuilder =
- createBuilderFrom(config, components, defaultThemePkg);
- config.themeConfig = defaultBuilder.build();
- am.updateConfiguration(config);
- }
-
config.themeConfig = newConfig;
am.updateConfiguration(config);
} catch (RemoteException e) {
@@ -785,6 +770,8 @@ public class ThemeService extends IThemeService.Stub {
componentMap.get(ThemesColumns.MODIFIES_NAVIGATION_BAR) : pkgName);
}
+ builder.setThemeChangeTimestamp(System.currentTimeMillis());
+
return builder;
}