OSDN Git Service

LocationManager - Handle Shutdown for right User
authorWyatt Riley <wyattriley@google.com>
Thu, 4 Aug 2016 23:10:06 +0000 (16:10 -0700)
committerWyatt Riley <wyattriley@google.com>
Fri, 5 Aug 2016 00:34:19 +0000 (17:34 -0700)
Only process a shutdown when it is for all users (whole system),
not a single user

Change-Id: Id51b7fb4606460462c2f6749e5ac3984bdd8319f
Bug: 30646142

services/core/java/com/android/server/LocationManagerService.java

index 36ec2eb..64ca2e3 100644 (file)
@@ -150,7 +150,7 @@ public class LocationManagerService extends ILocationManager.Stub {
     // used internally for synchronization
     private final Object mLock = new Object();
 
-    // --- fields below are final after systemReady() ---
+    // --- fields below are final after systemRunning() ---
     private LocationFudger mLocationFudger;
     private GeofenceManager mGeofenceManager;
     private PackageManager mPackageManager;
@@ -168,6 +168,7 @@ public class LocationManagerService extends ILocationManager.Stub {
 
     // --- fields below are protected by mLock ---
     // Set of providers that are explicitly enabled
+    // Only used by passive, fused & test.  Network & GPS are controlled separately, and not listed.
     private final Set<String> mEnabledProviders = new HashSet<String>();
 
     // Set of providers that are explicitly disabled
@@ -236,12 +237,12 @@ public class LocationManagerService extends ILocationManager.Stub {
 
         if (D) Log.d(TAG, "Constructed");
 
-        // most startup is deferred until systemReady()
+        // most startup is deferred until systemRunning()
     }
 
     public void systemRunning() {
         synchronized (mLock) {
-            if (D) Log.d(TAG, "systemReady()");
+            if (D) Log.d(TAG, "systemRunning()");
 
             // fetch package manager
             mPackageManager = mContext.getPackageManager();
@@ -321,7 +322,11 @@ public class LocationManagerService extends ILocationManager.Stub {
                         || Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
                     updateUserProfiles(mCurrentUserId);
                 } else if (Intent.ACTION_SHUTDOWN.equals(action)) {
-                    shutdownComponents();
+                    // shutdown only if UserId indicates whole system, not just one user
+                    if(D) Log.d(TAG, "Shutdown received with UserId: " + getSendingUserId());
+                    if (getSendingUserId() == UserHandle.USER_ALL) {
+                        shutdownComponents();
+                    }
                 }
             }
         }, UserHandle.ALL, intentFilter, null, mLocationHandler);