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

Commit 744e9fb1 authored by Lucas Silva's avatar Lucas Silva Committed by Android (Google) Code Review
Browse files

Merge changes I1a23a25a,I1bdb8167 into main

* changes:
  Fix communal grid breakpoint to have 2 rows on phones
  Don't listen to UDFPS if communal hub is showing
parents 489bf692 f11bf548
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -272,9 +272,8 @@ private fun calculateNumCellsWidth(width: Dp) =
    }

private fun calculateNumCellsHeight(height: Dp) =
    // See https://developer.android.com/develop/ui/views/layout/use-window-size-classes
    when {
        height >= 900.dp -> 3
        height >= 1000.dp -> 3
        height >= 480.dp -> 2
        else -> 1
    }
+4 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ data class KeyguardFingerprintListenModel(
    var systemUser: Boolean = false,
    var udfps: Boolean = false,
    var userDoesNotHaveTrust: Boolean = false,
    var communalShowing: Boolean = false,
) : KeyguardListenModel() {

    /** List of [String] to be used as a [Row] with [DumpsysTableLogger]. */
@@ -81,6 +82,7 @@ data class KeyguardFingerprintListenModel(
            systemUser.toString(),
            udfps.toString(),
            userDoesNotHaveTrust.toString(),
            communalShowing.toString(),
        )
    }

@@ -122,6 +124,7 @@ data class KeyguardFingerprintListenModel(
                systemUser = model.systemUser
                udfps = model.udfps
                userDoesNotHaveTrust = model.userDoesNotHaveTrust
                communalShowing = model.communalShowing
            }
        }

@@ -170,6 +173,7 @@ data class KeyguardFingerprintListenModel(
                "systemUser",
                "underDisplayFingerprint",
                "userDoesNotHaveTrust",
                "communalShowing",
            )
    }
}
+29 −3
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STR
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import static com.android.systemui.Flags.glanceableHubV2;
import static com.android.systemui.Flags.simPinBouncerReset;
import static com.android.systemui.Flags.simPinUseSlotId;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED;
@@ -128,6 +129,7 @@ import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
@@ -294,6 +296,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private final Provider<JavaAdapter> mJavaAdapter;
    private final Provider<SceneInteractor> mSceneInteractor;
    private final Provider<AlternateBouncerInteractor> mAlternateBouncerInteractor;
    private final CommunalSceneInteractor mCommunalSceneInteractor;
    private final AuthController mAuthController;
    private final UiEventLogger mUiEventLogger;
    private final Set<String> mAllowFingerprintOnOccludingActivitiesFromPackage;
@@ -404,6 +407,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    protected int mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
    private boolean mFingerprintDetectRunning;
    private boolean mIsDreaming;
    private boolean mCommunalShowing;
    private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private final FingerprintInteractiveToAuthProvider mFingerprintInteractiveToAuthProvider;

@@ -2205,7 +2209,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            IActivityTaskManager activityTaskManagerService,
            Provider<AlternateBouncerInteractor> alternateBouncerInteractor,
            Provider<JavaAdapter> javaAdapter,
            Provider<SceneInteractor> sceneInteractor) {
            Provider<SceneInteractor> sceneInteractor,
            CommunalSceneInteractor communalSceneInteractor) {
        mContext = context;
        mSubscriptionManager = subscriptionManager;
        mUserTracker = userTracker;
@@ -2254,6 +2259,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        mAlternateBouncerInteractor = alternateBouncerInteractor;
        mJavaAdapter = javaAdapter;
        mSceneInteractor = sceneInteractor;
        mCommunalSceneInteractor = communalSceneInteractor;

        mHandler = new Handler(mainLooper) {
            @Override
@@ -2535,6 +2541,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            );
        }

        if (glanceableHubV2()) {
            mJavaAdapter.get().alwaysCollectFlow(
                    mCommunalSceneInteractor.isCommunalVisible(),
                    this::onCommunalShowingChanged
            );
        }

        // start() can be invoked in the middle of user switching, so check for this state and issue
        // the call manually as that important event was missed.
        if (mUserTracker.isUserSwitching()) {
@@ -2836,6 +2849,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                extraReason + "-dismissKeyguard", true);
    }

    /**
     * Sets whether the communal hub is showing.
     */
    @VisibleForTesting
    void onCommunalShowingChanged(boolean showing) {
        mCommunalShowing = showing;
        updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
    }

    /**
     * Whether the alternate bouncer is showing.
     */
@@ -2998,11 +3020,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        final boolean strongerAuthRequired = !isUnlockingWithFingerprintAllowed();
        final boolean shouldListenBouncerState =
                !strongerAuthRequired || !isPrimaryBouncerShowingOrWillBeShowing();
        final boolean isUdfpsAuthRequiredOnCommunal =
                !mCommunalShowing || isAlternateBouncerShowing();

        final boolean shouldListenUdfpsState = !isUdfps
                || (!userCanSkipBouncer
                && !strongerAuthRequired
                && userDoesNotHaveTrust);
                && userDoesNotHaveTrust
                && (!glanceableHubV2() || isUdfpsAuthRequiredOnCommunal));


        boolean shouldListen = shouldListenKeyguardState && shouldListenUserState
@@ -3033,7 +3058,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                    mSwitchingUser,
                    mIsSystemUser,
                    isUdfps,
                    userDoesNotHaveTrust));
                    userDoesNotHaveTrust,
                    mCommunalShowing));

        return shouldListen;
    }
+52 −4
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_STATE_CANCELL
import static com.android.keyguard.KeyguardUpdateMonitor.BIOMETRIC_STATE_STOPPED;
import static com.android.keyguard.KeyguardUpdateMonitor.DEFAULT_CANCEL_SIGNAL_TIMEOUT;
import static com.android.keyguard.KeyguardUpdateMonitor.HAL_POWER_PRESS_TIMEOUT;
import static com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN;

@@ -139,6 +140,7 @@ import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor;
import com.android.systemui.deviceentry.data.repository.FaceWakeUpTriggersConfig;
import com.android.systemui.deviceentry.data.repository.FaceWakeUpTriggersConfigImpl;
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor;
@@ -180,6 +182,9 @@ import org.mockito.MockitoAnnotations;
import org.mockito.MockitoSession;
import org.mockito.quality.Strictness;

import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -189,9 +194,6 @@ import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;

@SmallTest
@RunWith(ParameterizedAndroidJunit4.class)
@TestableLooper.RunWithLooper
@@ -304,6 +306,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
    private JavaAdapter mJavaAdapter;
    @Mock
    private SceneInteractor mSceneInteractor;
    @Mock
    private CommunalSceneInteractor mCommunalSceneInteractor;
    @Captor
    private ArgumentCaptor<FaceAuthenticationListener> mFaceAuthenticationListener;

@@ -1083,6 +1087,49 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(false)).isTrue();
    }

    @Test
    @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
    public void udfpsStopsListeningWhenCommunalShowing() {
        // GIVEN keyguard showing
        mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON);
        mKeyguardUpdateMonitor.setKeyguardShowing(true, false);

        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isTrue();

        // WHEN communal is shown
        mKeyguardUpdateMonitor.onCommunalShowingChanged(true);

        // THEN shouldn't listen for fingerprint
        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isFalse();

        // WHEN alternate bouncer shows on top of communal, we should listen for fingerprint
        mKeyguardUpdateMonitor.setAlternateBouncerVisibility(true);
        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isTrue();

        // WHEN communal is hidden
        mKeyguardUpdateMonitor.onCommunalShowingChanged(false);
        mKeyguardUpdateMonitor.setAlternateBouncerVisibility(false);

        // THEN listen for fingerprint
        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(true)).isTrue();
    }

    @Test
    @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
    public void sfpsNotAffectedByCommunalShowing() {
        // GIVEN keyguard showing
        mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON);
        mKeyguardUpdateMonitor.setKeyguardShowing(true, false);

        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(false)).isTrue();

        // WHEN communal is shown
        mKeyguardUpdateMonitor.onCommunalShowingChanged(true);

        // THEN we should still listen for fingerprint if not UDFPS
        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(false)).isTrue();
    }

    @Test
    public void testFingerprintPowerPressed_restartsFingerprintListeningStateWithDelay() {
        mKeyguardUpdateMonitor.mFingerprintAuthenticationCallback
@@ -2669,7 +2716,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
                    mTaskStackChangeListeners, mSelectedUserInteractor, mActivityTaskManager,
                    () -> mAlternateBouncerInteractor,
                    () -> mJavaAdapter,
                    () -> mSceneInteractor);
                    () -> mSceneInteractor,
                    mCommunalSceneInteractor);
            setAlternateBouncerVisibility(false);
            setPrimaryBouncerVisibility(false);
            setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker);