Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b256e4e2 authored by Jim Miller's avatar Jim Miller
Browse files

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
parent bd6fabe2
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -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.
     */