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

Commit 7eeb7ae1 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Dan Sandler
Browse files

Use UnlockMethodCache#canSkipBouncer in user switcher

KeyguardMonitor#canSkipBouncer was not updated properly when the phone
was unlocked using fingerprint.

This CL removes that method and changes UserSwitcherController to query
UnlockMethodCache directly, as it was KeyguardMonitor's only client for
that method.

Test: manual unlocking with FP and with pattern
Test: no automated test yet
Bug: 140486529
Merged-In: Idbff4fbabca962c632ff5d78b25418c0502db9a7
Change-Id: Idbff4fbabca962c632ff5d78b25418c0502db9a7
parent d191463b
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ import com.android.systemui.statusbar.policy.KeyguardMonitor.Callback;
public interface KeyguardMonitor extends CallbackController<Callback> {

    boolean isSecure();
    boolean canSkipBouncer();
    boolean isShowing();
    boolean isOccluded();
    boolean isKeyguardFadingAway();
+0 −26
Original line number Diff line number Diff line
@@ -17,13 +17,11 @@
package com.android.systemui.statusbar.policy;

import android.annotation.NonNull;
import android.app.ActivityManager;
import android.content.Context;

import com.android.internal.util.Preconditions;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.settings.CurrentUserTracker;

import java.util.ArrayList;

@@ -39,14 +37,11 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback
    private final ArrayList<Callback> mCallbacks = new ArrayList<>();

    private final Context mContext;
    private final CurrentUserTracker mUserTracker;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;

    private int mCurrentUser;
    private boolean mShowing;
    private boolean mSecure;
    private boolean mOccluded;
    private boolean mCanSkipBouncer;

    private boolean mListening;
    private boolean mKeyguardFadingAway;
@@ -61,13 +56,6 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback
    public KeyguardMonitorImpl(Context context) {
        mContext = context;
        mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
        mUserTracker = new CurrentUserTracker(mContext) {
            @Override
            public void onUserSwitched(int newUserId) {
                mCurrentUser = newUserId;
                updateCanSkipBouncerState();
            }
        };
    }

    @Override
@@ -76,10 +64,7 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback
        mCallbacks.add(callback);
        if (mCallbacks.size() != 0 && !mListening) {
            mListening = true;
            mCurrentUser = ActivityManager.getCurrentUser();
            updateCanSkipBouncerState();
            mKeyguardUpdateMonitor.registerCallback(this);
            mUserTracker.startTracking();
        }
    }

@@ -89,7 +74,6 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback
        if (mCallbacks.remove(callback) && mCallbacks.size() == 0 && mListening) {
            mListening = false;
            mKeyguardUpdateMonitor.removeCallback(this);
            mUserTracker.stopTracking();
        }
    }

@@ -108,11 +92,6 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback
        return mOccluded;
    }

    @Override
    public boolean canSkipBouncer() {
        return mCanSkipBouncer;
    }

    public void notifyKeyguardState(boolean showing, boolean secure, boolean occluded) {
        if (mShowing == showing && mSecure == secure && mOccluded == occluded) return;
        mShowing = showing;
@@ -123,7 +102,6 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback

    @Override
    public void onTrustChanged(int userId) {
        updateCanSkipBouncerState();
        notifyKeyguardChanged();
    }

@@ -131,10 +109,6 @@ public class KeyguardMonitorImpl extends KeyguardUpdateMonitorCallback
        return mKeyguardUpdateMonitor.isDeviceInteractive();
    }

    private void updateCanSkipBouncerState() {
        mCanSkipBouncer = mKeyguardUpdateMonitor.getUserCanSkipBouncer(mCurrentUser);
    }

    private void notifyKeyguardChanged() {
        // Copy the list to allow removal during callback.
        new ArrayList<>(mCallbacks).forEach(Callback::onKeyguardShowingChanged);
+5 −2
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.qs.tiles.UserDetailView;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.phone.UnlockMethodCache;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -595,17 +596,19 @@ public class UserSwitcherController implements Dumpable {

        final UserSwitcherController mController;
        private final KeyguardMonitor mKeyguardMonitor;
        private final UnlockMethodCache mUnlockMethodCache;

        protected BaseUserAdapter(UserSwitcherController controller) {
            mController = controller;
            mKeyguardMonitor = controller.mKeyguardMonitor;
            mUnlockMethodCache = UnlockMethodCache.getInstance(controller.mContext);
            controller.addAdapter(new WeakReference<>(this));
        }

        public int getUserCount() {
            boolean secureKeyguardShowing = mKeyguardMonitor.isShowing()
                    && mKeyguardMonitor.isSecure()
                    && !mKeyguardMonitor.canSkipBouncer();
                    && !mUnlockMethodCache.canSkipBouncer();
            if (!secureKeyguardShowing) {
                return mController.getUsers().size();
            }
@@ -627,7 +630,7 @@ public class UserSwitcherController implements Dumpable {
        public int getCount() {
            boolean secureKeyguardShowing = mKeyguardMonitor.isShowing()
                    && mKeyguardMonitor.isSecure()
                    && !mKeyguardMonitor.canSkipBouncer();
                    && !mUnlockMethodCache.canSkipBouncer();
            if (!secureKeyguardShowing) {
                return mController.getUsers().size();
            }
+0 −5
Original line number Diff line number Diff line
@@ -80,9 +80,4 @@ public class FakeKeyguardMonitor implements KeyguardMonitor {
    public long calculateGoingToFullShadeDelay() {
        return 0;
    }

    @Override
    public boolean canSkipBouncer() {
        return false;
    }
}