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

Commit 27321c4a authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Update lock icon when necessary

KeyguardSecurityContainer might have multiple security views
inflated simultaneosly. We cannot cache the lock icon container,
we need to update it whenever the security type changes.

Fixes: 128993074
Test: switch security mode, swipe up on bouncer
Change-Id: I63c566378a8c9b902fdf19daaad1610b581b10d6
parent 59d474b3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -157,6 +157,10 @@ public class KeyguardHostView extends FrameLayout implements SecurityCallback {
        mSecurityContainer.showPrimarySecurityScreen(false);
    }

    public KeyguardSecurityView getCurrentSecurityView() {
        return mSecurityContainer != null ? mSecurityContainer.getCurrentSecurityView() : null;
    }

    /**
     * Show a string explaining why the security view needs to be solved.
     *
+6 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
    private KeyguardSecurityViewFlipper mSecurityViewFlipper;
    private boolean mIsVerifyUnlockOnly;
    private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
    private KeyguardSecurityView mCurrentSecurityView;
    private SecurityCallback mSecurityCallback;
    private AlertDialog mAlertDialog;

@@ -405,6 +406,7 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
        }

        mCurrentSecuritySelection = securityMode;
        mCurrentSecurityView = newView;
        mSecurityCallback.onSecurityModeChanged(securityMode,
                securityMode != SecurityMode.None && newView.needsInput());
    }
@@ -506,6 +508,10 @@ public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSe
        return mCurrentSecuritySelection;
    }

    public KeyguardSecurityView getCurrentSecurityView() {
        return mCurrentSecurityView;
    }

    public void verifyUnlock() {
        mIsVerifyUnlockOnly = true;
        showSecurityScreen(getSecurityMode());
+14 −4
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@ public class KeyguardBouncer {
        if (resetSecuritySelection) {
            // showPrimarySecurityScreen() updates the current security method. This is needed in
            // case we are already showing and the current security method changed.
            mKeyguardView.showPrimarySecurityScreen();
            showPrimarySecurityScreen();
        }
        if (mRoot.getVisibility() == View.VISIBLE || mShowingSoon) {
            return;
@@ -344,11 +344,20 @@ public class KeyguardBouncer {
        boolean wasInitialized = mRoot != null;
        ensureView();
        if (wasInitialized) {
            mKeyguardView.showPrimarySecurityScreen();
            showPrimarySecurityScreen();
        }
        mBouncerPromptReason = mCallback.getBouncerPromptReason();
    }

    private void showPrimarySecurityScreen() {
        mKeyguardView.showPrimarySecurityScreen();
        KeyguardSecurityView keyguardSecurityView = mKeyguardView.getCurrentSecurityView();
        if (keyguardSecurityView != null) {
            mLockIconContainer = ((ViewGroup) keyguardSecurityView)
                    .findViewById(R.id.lock_icon_container);
        }
    }

    /**
     * Current notification panel expansion
     * @param fraction 0 when notification panel is collapsed and 1 when expanded.
@@ -406,7 +415,6 @@ public class KeyguardBouncer {
        removeView();
        mHandler.removeCallbacks(mRemoveViewRunnable);
        mRoot = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.keyguard_bouncer, null);
        mLockIconContainer = mRoot.findViewById(R.id.lock_icon_container);
        mKeyguardView = mRoot.findViewById(R.id.keyguard_host_view);
        mKeyguardView.setLockPatternUtils(mLockPatternUtils);
        mKeyguardView.setViewMediatorCallback(mCallback);
@@ -414,6 +422,8 @@ public class KeyguardBouncer {
        mStatusBarHeight = mRoot.getResources().getDimensionPixelOffset(
                com.android.systemui.R.dimen.status_bar_height);
        mRoot.setVisibility(View.INVISIBLE);
        mRoot.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight,
                oldBottom) -> mExpansionCallback.onLayout());
        mRoot.setAccessibilityPaneTitle(mKeyguardView.getAccessibilityTitleForCurrentMode());

        final WindowInsets rootInsets = mRoot.getRootWindowInsets();
@@ -426,7 +436,6 @@ public class KeyguardBouncer {
        if (mRoot != null && mRoot.getParent() == mContainer) {
            mContainer.removeView(mRoot);
            mRoot = null;
            mLockIconContainer = null;
        }
    }

@@ -495,5 +504,6 @@ public class KeyguardBouncer {
        void onFullyShown();
        void onStartingToHide();
        void onFullyHidden();
        void onLayout();
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -96,6 +96,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
        public void onFullyHidden() {
            updateStates();
        }

        @Override
        public void onLayout() {
            mNotificationPanelView.updateLockIcon();
        }
    };

    protected LockPatternUtils mLockPatternUtils;