summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/SystemServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/java/com/android/server/SystemServer.java')
-rw-r--r--services/java/com/android/server/SystemServer.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index ab59aeb..b816843 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -25,11 +25,16 @@ import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
+import android.content.pm.ThemeUtils;
import android.content.res.Configuration;
import android.content.res.Resources.Theme;
import android.database.ContentObserver;
import android.database.Cursor;
+import android.content.res.ThemeConfig;
+import android.database.ContentObserver;
import android.os.Build;
import android.os.Environment;
import android.os.FactoryTest;
@@ -564,6 +569,7 @@ public final class SystemServer {
MediaRouterService mediaRouter = null;
GestureService gestureService = null;
EdgeGestureService edgeGestureService = null;
+ ThemeService themeService = null;
// Bring up services needed for UI.
if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
@@ -991,6 +997,14 @@ public final class SystemServer {
mSystemServiceManager.startService(TvInputManagerService.class);
}
+ try {
+ Slog.i(TAG, "Theme Service");
+ themeService = new ThemeService(context);
+ ServiceManager.addService(Context.THEME_SERVICE, themeService);
+ } catch (Throwable e) {
+ reportWtf("starting Theme Service", e);
+ }
+
if (!disableNonCoreServices) {
try {
Slog.i(TAG, "Media Router Service");
@@ -1137,6 +1151,16 @@ public final class SystemServer {
}
}
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_APP_LAUNCH_FAILURE);
+ filter.addAction(Intent.ACTION_APP_LAUNCH_FAILURE_RESET);
+ filter.addAction(Intent.ACTION_PACKAGE_ADDED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addAction(ThemeUtils.ACTION_THEME_CHANGED);
+ filter.addCategory(Intent.CATEGORY_THEME_PACKAGE_INSTALLED_STATE_CHANGE);
+ filter.addDataScheme("package");
+ context.registerReceiver(new AppsLaunchFailureReceiver(), filter);
+
// These are needed to propagate to the runnable below.
final NetworkManagementService networkManagementF = networkManagement;
final NetworkStatsService networkStatsF = networkStats;
@@ -1157,6 +1181,7 @@ public final class SystemServer {
final MediaRouterService mediaRouterF = mediaRouter;
final AudioService audioServiceF = audioService;
final MmsServiceBroker mmsServiceF = mmsService;
+ final ThemeService themeServiceF = themeService;
// We now tell the activity manager it is okay to run third party
// code. It will call back into us once it has gotten to the state
@@ -1286,6 +1311,17 @@ public final class SystemServer {
} catch (Throwable e) {
reportWtf("Notifying MmsService running", e);
}
+
+ try {
+ // now that the system is up, apply default theme if applicable
+ if (themeServiceF != null) themeServiceF.systemRunning();
+ ThemeConfig themeConfig =
+ ThemeConfig.getBootTheme(context.getContentResolver());
+ String iconPkg = themeConfig.getIconPackPkgName();
+ mPackageManagerService.updateIconMapping(iconPkg);
+ } catch (Throwable e) {
+ reportWtf("Icon Mapping failed", e);
+ }
}
});
}