OSDN Git Service

Ensuring KeyguardService has the correct user when it starts
authorSuprabh Shukla <suprabh@google.com>
Thu, 28 Jul 2016 00:00:12 +0000 (17:00 -0700)
committerSuprabh Shukla <suprabh@google.com>
Thu, 28 Jul 2016 23:16:53 +0000 (16:16 -0700)
Because RetailDemoModeService was switching user before KeyguardService
was started, KeyguardViewMediator was missing the call to setCurrentUser
on user switch. Setting the current user from keyguardState in
onServiceConnected, if there was a user switch that happened earlier.
Also changed RetailDemoModeService to switch user after it receives boot
phase BOOT_COMPLETE.

Bug: 30038980
Change-Id: I142570529097199ccc50849297ae67ca49d35534

services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java

index 7e27558..bcae481 100644 (file)
@@ -59,6 +59,7 @@ public class KeyguardServiceDelegate {
             showingAndNotOccluded = true;
             secure = true;
             deviceHasKeyguard = true;
+            currentUser = UserHandle.USER_NULL;
         }
         boolean showing;
         boolean showingAndNotOccluded;
@@ -157,6 +158,10 @@ public class KeyguardServiceDelegate {
             if (mKeyguardState.systemIsReady) {
                 // If the system is ready, it means keyguard crashed and restarted.
                 mKeyguardService.onSystemReady();
+                if (mKeyguardState.currentUser != UserHandle.USER_NULL) {
+                    // There has been a user switch earlier
+                    mKeyguardService.setCurrentUser(mKeyguardState.currentUser);
+                }
                 // This is used to hide the scrim once keyguard displays.
                 if (mKeyguardState.interactiveState == INTERACTIVE_STATE_AWAKE) {
                     mKeyguardService.onStartedWakingUp();
index c6078fd..8d5971f 100644 (file)
@@ -224,8 +224,7 @@ public class RetailDemoModeService extends SystemService {
             if (mDeviceDemoModeUri.equals(uri)) {
                 mDeviceInDemoMode = UserManager.isDeviceInDemoMode(getContext());
                 if (mDeviceInDemoMode) {
-                    SystemProperties.set(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "1");
-                    mHandler.sendEmptyMessage(MSG_START_NEW_SESSION);
+                    putDeviceInDemoMode();
                 } else {
                     SystemProperties.set(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "0");
                     if (mWakeLock.isHeld()) {
@@ -287,7 +286,6 @@ public class RetailDemoModeService extends SystemService {
         synchronized (mActivityLock) {
             mFirstUserActivityTime = mLastUserActivityTime = SystemClock.uptimeMillis();
         }
-        mPreloadAppsInstaller = new PreloadAppsInstaller(context);
     }
 
     private Notification createResetNotification() {
@@ -465,6 +463,11 @@ public class RetailDemoModeService extends SystemService {
         return mSystemUserConfiguration;
     }
 
+    private void putDeviceInDemoMode() {
+        SystemProperties.set(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "1");
+        mHandler.sendEmptyMessage(MSG_START_NEW_SESSION);
+    }
+
     @Override
     public void onStart() {
         if (DEBUG) {
@@ -479,26 +482,31 @@ public class RetailDemoModeService extends SystemService {
 
     @Override
     public void onBootPhase(int bootPhase) {
-        if (bootPhase != PHASE_THIRD_PARTY_APPS_CAN_START) {
-            return;
-        }
-        mPm = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
-        mAmi = LocalServices.getService(ActivityManagerInternal.class);
-        mWakeLock = mPm
-                .newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
-        mNm = NotificationManager.from(getContext());
-        mCameraManager = (CameraManager) getContext().getSystemService(Context.CAMERA_SERVICE);
-        mCameraIdsWithFlash = getCameraIdsWithFlash();
-
-        if (UserManager.isDeviceInDemoMode(getContext())) {
-            mDeviceInDemoMode = true;
-            SystemProperties.set(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "1");
-            mHandler.sendEmptyMessage(MSG_START_NEW_SESSION);
+        switch (bootPhase) {
+            case PHASE_THIRD_PARTY_APPS_CAN_START:
+                mPreloadAppsInstaller = new PreloadAppsInstaller(getContext());
+                mPm = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
+                mAmi = LocalServices.getService(ActivityManagerInternal.class);
+                mWakeLock = mPm
+                        .newWakeLock(
+                                PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
+                                TAG);
+                mNm = NotificationManager.from(getContext());
+                mCameraManager = (CameraManager) getContext()
+                        .getSystemService(Context.CAMERA_SERVICE);
+                mCameraIdsWithFlash = getCameraIdsWithFlash();
+                SettingsObserver settingsObserver = new SettingsObserver(mHandler);
+                settingsObserver.register();
+                settingsObserver.refreshTimeoutConstants();
+                registerBroadcastReceiver();
+                break;
+            case PHASE_BOOT_COMPLETED:
+                if (UserManager.isDeviceInDemoMode(getContext())) {
+                    mDeviceInDemoMode = true;
+                    putDeviceInDemoMode();
+                }
+                break;
         }
-        SettingsObserver settingsObserver = new SettingsObserver(mHandler);
-        settingsObserver.register();
-        settingsObserver.refreshTimeoutConstants();
-        registerBroadcastReceiver();
     }
 
     @Override