From 323d2bbc34afdc856043eff31e2ab7d84e721545 Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Wed, 27 Jul 2016 17:00:12 -0700 Subject: [PATCH] Ensuring KeyguardService has the correct user when it starts 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 --- .../keyguard/KeyguardServiceDelegate.java | 5 ++ .../retaildemo/RetailDemoModeService.java | 52 +++++++++++-------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java index 7e275584a27d4..bcae481c583f4 100644 --- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java +++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java @@ -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(); diff --git a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java index c6078fde7b769..8d5971f1ca978 100644 --- a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java +++ b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java @@ -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; + 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; } - 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); - } - SettingsObserver settingsObserver = new SettingsObserver(mHandler); - settingsObserver.register(); - settingsObserver.refreshTimeoutConstants(); - registerBroadcastReceiver(); } @Override