From 9aa597e68b3fb30b079d627e1fcdea766e98ad26 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Thu, 3 Mar 2011 18:17:41 -0800 Subject: [PATCH] Propagating core settings to the system process. bug:3511123 Now the core settins are stored in the ActivityThread instad in the AppBindData of the currently bound app. Also the settings are pushed to the system process on init. Change-Id: I100bb7dc80d0d4548def22c328427bbef1694eb7 --- core/java/android/app/ActivityThread.java | 26 ++++++++----------- .../server/am/CoreSettingsObserver.java | 10 ++++--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index b409f2fa84c37..bd83762e33d8e 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -200,6 +200,8 @@ public final class ActivityThread { static Handler sMainThreadHandler; // set once in main() + Bundle mCoreSettings = null; + private static final class ActivityClientRecord { IBinder token; int ident; @@ -354,7 +356,6 @@ public final class ActivityThread { boolean restrictedBackupMode; Configuration config; boolean handlingProfiling; - Bundle coreSettings; public String toString() { return "AppBindData{appInfo=" + appInfo + "}"; } @@ -559,6 +560,8 @@ public final class ActivityThread { ServiceManager.initServiceCache(services); } + setCoreSettings(coreSettings); + AppBindData data = new AppBindData(); data.processName = processName; data.appInfo = appInfo; @@ -570,7 +573,6 @@ public final class ActivityThread { data.debugMode = debugMode; data.restrictedBackupMode = isRestrictedBackupMode; data.config = config; - data.coreSettings = coreSettings; queueOrSendMessage(H.BIND_APPLICATION, data); } @@ -898,8 +900,8 @@ public final class ActivityThread { pw.println(String.format(format, objs)); } - public void setCoreSettings(Bundle settings) { - queueOrSendMessage(H.SET_CORE_SETTINGS, settings); + public void setCoreSettings(Bundle coreSettings) { + queueOrSendMessage(H.SET_CORE_SETTINGS, coreSettings); } } @@ -2720,10 +2722,8 @@ public final class ActivityThread { } private void handleSetCoreSettings(Bundle coreSettings) { - if (mBoundApplication != null) { - synchronized (mBoundApplication) { - mBoundApplication.coreSettings = coreSettings; - } + synchronized (mPackages) { + mCoreSettings = coreSettings; } } @@ -3990,13 +3990,9 @@ public final class ActivityThread { } public int getIntCoreSetting(String key, int defaultValue) { - if (mBoundApplication == null) { - return defaultValue; - } - synchronized (mBoundApplication) { - Bundle coreSettings = mBoundApplication.coreSettings; - if (coreSettings != null) { - return coreSettings.getInt(key, defaultValue); + synchronized (mPackages) { + if (mCoreSettings != null) { + return mCoreSettings.getInt(key, defaultValue); } else { return defaultValue; } diff --git a/services/java/com/android/server/am/CoreSettingsObserver.java b/services/java/com/android/server/am/CoreSettingsObserver.java index 25db84aeac1b4..585cf2b3f25f1 100644 --- a/services/java/com/android/server/am/CoreSettingsObserver.java +++ b/services/java/com/android/server/am/CoreSettingsObserver.java @@ -52,7 +52,7 @@ class CoreSettingsObserver extends ContentObserver { super(activityManagerService.mHandler); mActivityManagerService = activityManagerService; beginObserveCoreSettings(); - populateCoreSettings(mCoreSettings); + sendCoreSettings(); } public Bundle getCoreSettingsLocked() { @@ -62,11 +62,15 @@ class CoreSettingsObserver extends ContentObserver { @Override public void onChange(boolean selfChange) { synchronized (mActivityManagerService) { - populateCoreSettings(mCoreSettings); - mActivityManagerService.onCoreSettingsChange(mCoreSettings); + sendCoreSettings(); } } + private void sendCoreSettings() { + populateCoreSettings(mCoreSettings); + mActivityManagerService.onCoreSettingsChange(mCoreSettings); + } + private void beginObserveCoreSettings() { for (String setting : sCoreSettingToTypeMap.keySet()) { Uri uri = Settings.Secure.getUriFor(setting);