diff options
Diffstat (limited to 'src/org/cyanogenmod/themeservice/ThemeManagerService.java')
| -rw-r--r-- | src/org/cyanogenmod/themeservice/ThemeManagerService.java | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/src/org/cyanogenmod/themeservice/ThemeManagerService.java b/src/org/cyanogenmod/themeservice/ThemeManagerService.java index 276bbb9..53b7dbd 100644 --- a/src/org/cyanogenmod/themeservice/ThemeManagerService.java +++ b/src/org/cyanogenmod/themeservice/ThemeManagerService.java @@ -99,6 +99,10 @@ public class ThemeManagerService extends Service { private static final String CATEGORY_THEME_CHOOSER = "cyanogenmod.intent.category.APP_THEMES"; + private static final String[] LAUNCHER_KILL_BLACKLIST = new String[] { + "com.android.launcher3" + }; + // Defines a min and max compatible api level for themes on this system. private static final int MIN_COMPATIBLE_VERSION = 21; @@ -248,6 +252,7 @@ public class ThemeManagerService extends Service { if (ThemesColumns.MODIFIES_OVERLAYS.equals(key) || ThemesColumns.MODIFIES_NAVIGATION_BAR.equals(key) || ThemesColumns.MODIFIES_STATUS_BAR.equals(key) || + ThemesColumns.MODIFIES_STATUSBAR_HEADERS.equals(key) || ThemesColumns.MODIFIES_ICONS.equals(key)) { String pkgName = componentMap.get(key); if (mThemesToProcessQueue.indexOf(pkgName) > 0) { @@ -429,6 +434,8 @@ public class ThemeManagerService extends Service { currentThemeMap.put(ThemesColumns.MODIFIES_STATUS_BAR, config.getOverlayForStatusBar()); currentThemeMap.put(ThemesColumns.MODIFIES_NAVIGATION_BAR, config.getOverlayForNavBar()); + currentThemeMap.put(ThemesColumns.MODIFIES_STATUSBAR_HEADERS, + config.getOverlayForHeaders()); currentThemeMap.put(ThemesColumns.MODIFIES_OVERLAYS, config.getOverlayPkgName()); // Look at each component's theme (that we care about at least) and check compatibility @@ -922,6 +929,7 @@ public class ThemeManagerService extends Service { request.getIconsThemePackageName() != null || request.getStatusBarThemePackageName() != null || request.getNavBarThemePackageName() != null || + request.getHeadersThemePackageName() != null || request.getPerAppOverlays().size() > 0; } @@ -954,6 +962,11 @@ public class ThemeManagerService extends Service { request.getNavBarThemePackageName() : pkgName); } + if (request.getHeadersThemePackageName() != null) { + builder.overlay(ThemeConfig.SYSTEMUI_STATUSBAR_HEADER_PKG, pkgName == null ? + request.getHeadersThemePackageName() : pkgName); + } + // check for any per app overlays being applied Map<String, String> appOverlays = request.getPerAppOverlays(); for (String appPkgName : appOverlays.keySet()) { @@ -1000,12 +1013,25 @@ public class ThemeManagerService extends Service { !isSetupActivity(info) && !handlesThemeChanges( info.activityInfo.applicationInfo.packageName, themeChangeInfos)) { String pkgToStop = info.activityInfo.applicationInfo.packageName; - Log.d(TAG, "Force stopping " + pkgToStop + " for theme change"); - try { - am.forceStopPackage(pkgToStop); - } catch(Exception e) { - Log.e(TAG, "Unable to force stop package, did you forget platform signature?", - e); + boolean doKillLauncher = true; + for (int i = 0; i < LAUNCHER_KILL_BLACKLIST.length; i++) { + if (TextUtils.equals(pkgToStop, LAUNCHER_KILL_BLACKLIST[i])) { + doKillLauncher = false; + break; + } + } + if (doKillLauncher) { + Log.d(TAG, "Force stopping " + pkgToStop + " for theme change"); + try { + am.forceStopPackage(pkgToStop); + } catch (Exception e) { + Log.e(TAG, + "Unable to force stop package, did you forget platform signature?", + e); + } + } else { + Log.d(TAG, "Not force stopping blacklisted launcher " + pkgToStop + + " for theme change"); } } } |
