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
This commit is contained in:
Suprabh Shukla
2016-07-27 17:00:12 -07:00
parent 6cecc8dc27
commit 323d2bbc34
2 changed files with 35 additions and 22 deletions

View 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();

View 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;
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