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

Commit 0d12d5ce authored by Matt Pietal's avatar Matt Pietal
Browse files

Don't show udfps controller multiple times

It was noticed in winscope that multiple instances of the
UdfpsController were visible. Prevent multiple calls from
being processed.

Test: atest UdfpsControllerTest
Fixes: 370182673
Flag: EXEMPT bugfix
Change-Id: Ib74be1014925896317360db2e3b30d6f20ba75c1
parent 3802103d
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -364,6 +364,25 @@ public class UdfpsControllerTest extends SysuiTestCase {
                TEST_REQUEST_ID, mOpticalProps.sensorId);
    }

    @Test
    public void showUdfpsOverlay_invokedTwice_doesNotNotifyListenerSecondTime() throws RemoteException {
        mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, mOpticalProps.sensorId,
                BiometricRequestConstants.REASON_AUTH_KEYGUARD, mUdfpsOverlayControllerCallback);
        mFgExecutor.runAllReady();

        verify(mFingerprintManager).onUdfpsUiEvent(FingerprintManager.UDFPS_UI_OVERLAY_SHOWN,
                TEST_REQUEST_ID, mOpticalProps.sensorId);

        reset(mFingerprintManager);

        // Second attempt should do nothing
        mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, mOpticalProps.sensorId,
                BiometricRequestConstants.REASON_AUTH_KEYGUARD, mUdfpsOverlayControllerCallback);
        mFgExecutor.runAllReady();
        verify(mFingerprintManager, never()).onUdfpsUiEvent(FingerprintManager.UDFPS_UI_OVERLAY_SHOWN,
                TEST_REQUEST_ID, mOpticalProps.sensorId);
    }

    @Test
    public void testSubscribesToOrientationChangesWhenShowingOverlay() throws Exception {
        mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, mOpticalProps.sensorId,
+7 −2
Original line number Diff line number Diff line
@@ -814,6 +814,11 @@ public class UdfpsController implements DozeReceiver, Dumpable {
    private void showUdfpsOverlay(@NonNull UdfpsControllerOverlay overlay) {
        mExecution.assertIsMainThread();

        if (mOverlay != null) {
            Log.d(TAG, "showUdfpsOverlay | the overlay is already showing");
            return;
        }

        mOverlay = overlay;
        final int requestReason = overlay.getRequestReason();
        if (requestReason == REASON_AUTH_KEYGUARD
@@ -823,7 +828,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
            return;
        }
        if (overlay.show(this, mOverlayParams)) {
            Log.v(TAG, "showUdfpsOverlay | adding window reason=" + requestReason);
            Log.d(TAG, "showUdfpsOverlay | adding window reason=" + requestReason);
            mOnFingerDown = false;
            mAttemptedToDismissKeyguard = false;
            mOrientationListener.enable();
@@ -832,7 +837,7 @@ public class UdfpsController implements DozeReceiver, Dumpable {
                        overlay.getRequestId(), mSensorProps.sensorId);
            }
        } else {
            Log.v(TAG, "showUdfpsOverlay | the overlay is already showing");
            Log.d(TAG, "showUdfpsOverlay | the overlay is already showing");
        }
    }

+2 −2
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.view.WindowManager
import android.view.accessibility.AccessibilityManager
import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener
import androidx.annotation.VisibleForTesting
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.app.viewcapture.ViewCaptureAwareWindowManager
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.animation.ActivityTransitionAnimator
@@ -73,7 +74,6 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import com.android.app.tracing.coroutines.launchTraced as launch

private const val TAG = "UdfpsControllerOverlay"

@@ -245,7 +245,7 @@ constructor(
            return true
        }

        Log.v(TAG, "showUdfpsOverlay | the overlay is already showing")
        Log.d(TAG, "showUdfpsOverlay | the overlay is already showing")
        return false
    }