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

Commit 7726289c authored by Steven Ross's avatar Steven Ross
Browse files

Making FaceUnlock not pop up for overlays Fixes 5451837 Fixes 5446341

When the screen turns on because of an incoming phone call or
when the emergency dialer is selected, FaceUnlock is deactivated
until the phone call is completed and the screen is turned off.

This also checks for non-phone overlays.
If the lockscreen becomes unfocused while the screen is on,
we assume that the reason is an overlay and prevent FaceUnlock
from starting.  The normal clock app is not considered an overlay by
this approach, and thus it works as intended (back button
brings up FaceUnlock).

Also reverts: https://android-git.corp.google.com/g/#/c/139885/2
to make FaceUnlock appear when music is playing again

Change-Id: Id715878556667d2b7e35c30a28d91be6a4eee575
parent 3505abf3
Loading
Loading
Loading
Loading
+19 −21
Original line number Diff line number Diff line
@@ -136,7 +136,10 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler


    private boolean mRequiresSim;
    private volatile boolean mEmergencyCall;
    //True if we have some sort of overlay on top of the Lockscreen
    //Also true if we've activated a phone call, either emergency dialing or incoming
    //This resets when the phone is turned off with no current call
    private boolean mHasOverlay;


    /**
@@ -243,8 +246,6 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
        }
    };

    private TransportControlView mTransportControlView;

    /**
     * @return Whether we are stuck on the lock screen because the sim is
     *   missing.
@@ -277,7 +278,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
        mUpdateMonitor = updateMonitor;
        mLockPatternUtils = lockPatternUtils;
        mWindowController = controller;
        mEmergencyCall = false;
        mHasOverlay = false;

        mUpdateMonitor.registerInfoCallback(this);

@@ -332,7 +333,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
            }

            public void takeEmergencyCallAction() {
                mEmergencyCall = true;
                mHasOverlay = true;
                // FaceLock must be stopped if it is running when emergency call is pressed
                stopAndUnbindFromFaceLock();

@@ -514,9 +515,10 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler

    @Override
    public void onScreenTurnedOff() {
        if (DEBUG) Log.d(TAG, "screen off");
        mScreenOn = false;
        mForgotPattern = false;
        mEmergencyCall = false;
        mHasOverlay = mUpdateMonitor.getPhoneState() != TelephonyManager.CALL_STATE_IDLE;
        if (mMode == Mode.LockScreen) {
            ((KeyguardScreen) mLockScreen).onPause();
        } else {
@@ -531,10 +533,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
     *  FaceLock, but only if we're not dealing with a call
    */
    private void activateFaceLockIfAble() {
        final boolean transportInvisible = mTransportControlView == null ? true :
                mTransportControlView.getVisibility() != View.VISIBLE;
        if (mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE
                && transportInvisible) {
        if (mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE && !mHasOverlay) {
            bindToFaceLock();
            // Show FaceLock area, but only for a little bit so lockpattern will become visible if
            // FaceLock fails to start or crashes
@@ -546,6 +545,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler

    @Override
    public void onScreenTurnedOn() {
        if (DEBUG) Log.d(TAG, "screen on");
        boolean runFaceLock = false;
        //Make sure to start facelock iff the screen is both on and focused
        synchronized(mFaceLockStartupLock) {
@@ -569,16 +569,13 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
            mWindowFocused = hasWindowFocus;
        }
        if(!hasWindowFocus) {
            mHasOverlay = true;
            stopAndUnbindFromFaceLock();
            hideFaceLockArea();
        } else if (runFaceLock) {
            //Don't activate facelock while the user is calling 911!
            if(mEmergencyCall) mEmergencyCall = false;
            else {
            activateFaceLockIfAble();
        }
    }
    }

    @Override
    public void show() {
@@ -589,7 +586,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
        }

        if (mLockPatternUtils.usingBiometricWeak() &&
                mLockPatternUtils.isBiometricWeakInstalled()) {
            mLockPatternUtils.isBiometricWeakInstalled() && !mHasOverlay) {
            // Note that show() gets called before the screen turns off to set it up for next time
            // it is turned on.  We don't want to set a timeout on the FaceLock area here because it
            // may be gone by the time the screen is turned on again.  We set the timout when the
@@ -664,6 +661,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
    public void onPhoneStateChanged(int phoneState) {
        if (DEBUG) Log.d(TAG, "phone state: " + phoneState);
        if(phoneState == TelephonyManager.CALL_STATE_RINGING) {
            mHasOverlay = true;
            stopAndUnbindFromFaceLock();
            hideFaceLockArea();
        }
@@ -891,13 +889,13 @@ public class LockPatternKeyguardView extends KeyguardViewBase implements Handler
    }

    private void initializeTransportControlView(View view) {
        mTransportControlView = (TransportControlView) view.findViewById(R.id.transport);
        if (mTransportControlView == null) {
        TransportControlView tcv = (TransportControlView) view.findViewById(R.id.transport);
        if (tcv == null) {
            if (DEBUG) Log.w(TAG, "Couldn't find transport control widget");
        } else {
            mUpdateMonitor.reportClockVisible(true);
            mTransportControlView.setVisibility(View.GONE); // hide until it requests being shown.
            mTransportControlView.setCallback(mWidgetCallback);
            tcv.setVisibility(View.GONE); // hide until it requests being shown.
            tcv.setCallback(mWidgetCallback);
        }
    }