Fix SetupWizard black screen issue for EDU devices
This fixes a problem where EDU devices show a black screen if the device is rebooted after setting a pin/pattern/password but before completing SetupWizard. The issue is that the system doesn't expect to see a state where the device is not provisioned but has a pin/pattern/password because it wasn't possible before. With the addition of the ability for EDU devices to add a pin/pattern/password, we can now get into this unforseen state. The fix ignores provisioning if a password is set so that the user can reach the security screen to unlock the device and continue with SetupWizard. Fixes bug 18022051 Change-Id: Ie88a75530d964c02458c25866f0629877214edf4
This commit is contained in:
@@ -364,7 +364,7 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
// only force lock screen in case of missing sim if user hasn't
|
||||
// gone through setup wizard
|
||||
synchronized (this) {
|
||||
if (!mUpdateMonitor.isDeviceProvisioned()) {
|
||||
if (shouldWaitForProvisioning()) {
|
||||
if (!isShowing()) {
|
||||
if (DEBUG) Log.d(TAG, "ICC_ABSENT isn't showing,"
|
||||
+ " we need to show the keyguard since the "
|
||||
@@ -493,8 +493,7 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
mLockPatternUtils.setCurrentUser(ActivityManager.getCurrentUser());
|
||||
|
||||
// Assume keyguard is showing (unless it's disabled) until we know for sure...
|
||||
mShowing = (mUpdateMonitor.isDeviceProvisioned() || mLockPatternUtils.isSecure())
|
||||
&& !mLockPatternUtils.isLockScreenDisabled();
|
||||
mShowing = !shouldWaitForProvisioning() && !mLockPatternUtils.isLockScreenDisabled();
|
||||
|
||||
mStatusBarKeyguardViewManager = new StatusBarKeyguardViewManager(mContext,
|
||||
mViewMediatorCallback, mLockPatternUtils);
|
||||
@@ -783,7 +782,7 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
public void verifyUnlock(IKeyguardExitCallback callback) {
|
||||
synchronized (this) {
|
||||
if (DEBUG) Log.d(TAG, "verifyUnlock");
|
||||
if (!mUpdateMonitor.isDeviceProvisioned()) {
|
||||
if (shouldWaitForProvisioning()) {
|
||||
// don't allow this api when the device isn't provisioned
|
||||
if (DEBUG) Log.d(TAG, "ignoring because device isn't provisioned");
|
||||
try {
|
||||
@@ -873,7 +872,7 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
* was suppressed by an app that disabled the keyguard or we haven't been provisioned yet.
|
||||
*/
|
||||
public boolean isInputRestricted() {
|
||||
return mShowing || mNeedToReshowWhenReenabled || !mUpdateMonitor.isDeviceProvisioned();
|
||||
return mShowing || mNeedToReshowWhenReenabled || shouldWaitForProvisioning();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -905,14 +904,13 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
// if the setup wizard hasn't run yet, don't show
|
||||
final boolean requireSim = !SystemProperties.getBoolean("keyguard.no_require_sim",
|
||||
false);
|
||||
final boolean provisioned = mUpdateMonitor.isDeviceProvisioned();
|
||||
final IccCardConstants.State state = mUpdateMonitor.getSimState();
|
||||
final boolean lockedOrMissing = state.isPinLocked()
|
||||
|| ((state == IccCardConstants.State.ABSENT
|
||||
|| state == IccCardConstants.State.PERM_DISABLED)
|
||||
&& requireSim);
|
||||
|
||||
if (!lockedOrMissing && !provisioned) {
|
||||
if (!lockedOrMissing && shouldWaitForProvisioning()) {
|
||||
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because device isn't provisioned"
|
||||
+ " and the sim is not locked or missing");
|
||||
return;
|
||||
@@ -935,6 +933,10 @@ public class KeyguardViewMediator extends SystemUI {
|
||||
showLocked(options);
|
||||
}
|
||||
|
||||
private boolean shouldWaitForProvisioning() {
|
||||
return !mUpdateMonitor.isDeviceProvisioned() && !isSecure();
|
||||
}
|
||||
|
||||
/**
|
||||
* Dismiss the keyguard through the security layers.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user