OSDN Git Service

Propagating core settings to the system process.
authorSvetoslav Ganov <svetoslavganov@google.com>
Fri, 4 Mar 2011 02:17:41 +0000 (18:17 -0800)
committerSvetoslav Ganov <svetoslavganov@google.com>
Fri, 4 Mar 2011 02:20:43 +0000 (18:20 -0800)
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
services/java/com/android/server/am/CoreSettingsObserver.java

index b409f2f..bd83762 100644 (file)
@@ -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;
             }
index 25db84a..585cf2b 100644 (file)
@@ -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);