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

Commit 01fa80d3 authored by Hawkwood Glazier's avatar Hawkwood Glazier Committed by Android (Google) Code Review
Browse files

Merge "Convert KeyguardUpdateMonitor to CoreStartable" into main

parents cc5e4602 116fc1b0
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import com.android.systemui.util.settings.SecureSettings
import java.io.PrintWriter
import javax.inject.Inject
import dagger.Lazy

/**
 * Handles active unlock settings changes.
@@ -51,6 +52,7 @@ class ActiveUnlockConfig @Inject constructor(
    private val secureSettings: SecureSettings,
    private val contentResolver: ContentResolver,
    private val selectedUserInteractor: SelectedUserInteractor,
    private val keyguardUpdateMonitor: Lazy<KeyguardUpdateMonitor>,
    dumpManager: DumpManager
) : Dumpable {

@@ -96,7 +98,6 @@ class ActiveUnlockConfig @Inject constructor(
        UNDER_DISPLAY_FINGERPRINT(3),
    }

    var keyguardUpdateMonitor: KeyguardUpdateMonitor? = null
    private var requestActiveUnlockOnWakeup = false
    private var requestActiveUnlockOnUnlockIntent = false
    private var requestActiveUnlockOnBioFail = false
@@ -316,7 +317,7 @@ class ActiveUnlockConfig @Inject constructor(
            return false
        }

        keyguardUpdateMonitor?.let {
        keyguardUpdateMonitor.get().let {
            val anyFaceEnrolled = it.isFaceEnabledAndEnrolled
            val anyFingerprintEnrolled = it.isUnlockWithFingerprintPossible(
                    selectedUserInteractor.getSelectedUserId())
@@ -369,13 +370,13 @@ class ActiveUnlockConfig @Inject constructor(
        }")

        pw.println("Current state:")
        keyguardUpdateMonitor?.let {
        keyguardUpdateMonitor.get().let {
            pw.println("   shouldRequestActiveUnlockOnUnlockIntentFromBiometricEnrollment=" +
                    "${shouldRequestActiveUnlockOnUnlockIntentFromBiometricEnrollment()}")
            pw.println("   isFaceEnabledAndEnrolled=${it.isFaceEnabledAndEnrolled}")
            pw.println("   fpUnlockPossible=${
                it.isUnlockWithFingerprintPossible(selectedUserInteractor.getSelectedUserId())}")
            pw.println("   udfpsEnrolled=${it.isUdfpsEnrolled}")
        } ?: pw.println("   keyguardUpdateMonitor is uninitialized")
        }
    }
}
 No newline at end of file
+33 −23
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ import com.android.keyguard.logging.KeyguardUpdateMonitorLogger;
import com.android.settingslib.Utils;
import com.android.settingslib.WirelessUtils;
import com.android.settingslib.fuelgauge.BatteryStatus;
import com.android.systemui.CoreStartable;
import com.android.systemui.Dumpable;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
@@ -175,7 +176,7 @@ import javax.inject.Provider;
 * to be updated.
 */
@SysUISingleton
public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpable {
public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpable, CoreStartable {

    private static final String TAG = "KeyguardUpdateMonitor";
    private static final int BIOMETRIC_LOCKOUT_RESET_DELAY_MS = 600;
@@ -347,6 +348,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private final LatencyTracker mLatencyTracker;
    private final StatusBarStateController mStatusBarStateController;
    private final Executor mBackgroundExecutor;
    private final Executor mMainExecutor;
    private final SensorPrivacyManager mSensorPrivacyManager;
    private final ActiveUnlockConfig mActiveUnlockConfig;
    private final IDreamManager mDreamManager;
@@ -354,7 +356,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    @Nullable
    private final FingerprintManager mFpm;
    @Nullable
    private final BiometricManager mBiometricManager;
    @Nullable
    private KeyguardFaceAuthInteractor mFaceAuthInteractor;
    private final DevicePostureController mDevicePostureController;
    private final TaskStackChangeListeners mTaskStackChangeListeners;
    private final IActivityTaskManager mActivityTaskManager;
    private final SelectedUserInteractor mSelectedUserInteractor;
@@ -370,7 +375,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private boolean mIsDreaming;
    private boolean mLogoutEnabled;
    private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private FingerprintInteractiveToAuthProvider mFingerprintInteractiveToAuthProvider;
    private final FingerprintInteractiveToAuthProvider mFingerprintInteractiveToAuthProvider;

    /**
     * Short delay before restarting fingerprint authentication after a successful try. This should
@@ -2105,6 +2110,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        mDeviceProvisioned = isDeviceProvisionedInSettingsDb();
        mStrongAuthTracker = new StrongAuthTracker(context);
        mBackgroundExecutor = backgroundExecutor;
        mMainExecutor = mainExecutor;
        mBroadcastDispatcher = broadcastDispatcher;
        mInteractionJankMonitor = interactionJankMonitor;
        mLatencyTracker = latencyTracker;
@@ -2126,7 +2132,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        mDevicePolicyManager = devicePolicyManager;
        mPackageManager = packageManager;
        mFpm = fingerprintManager;
        mActiveUnlockConfig.setKeyguardUpdateMonitor(this);
        mBiometricManager = biometricManager;
        mConfigFaceAuthSupportedPosture = mContext.getResources().getInteger(
                R.integer.config_face_auth_supported_posture);
        mFaceWakeUpTriggersConfig = faceWakeUpTriggersConfig;
@@ -2134,10 +2140,14 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                mContext.getResources().getStringArray(
                        R.array.config_fingerprint_listen_on_occluding_activity_packages))
                .collect(Collectors.toSet());
        mDevicePostureController = devicePostureController;
        mTaskStackChangeListeners = taskStackChangeListeners;
        mActivityTaskManager = activityTaskManagerService;
        mSelectedUserInteractor = selectedUserInteractor;

        mFingerprintInteractiveToAuthProvider = interactiveToAuthProvider.orElse(null);
        mIsSystemUser = mUserManager.isSystemUser();

        mHandler = new Handler(mainLooper) {
            @Override
            public void handleMessage(Message msg) {
@@ -2252,6 +2262,20 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            }
        };

        mTimeFormatChangeObserver = new ContentObserver(mHandler) {
            @Override
            public void onChange(boolean selfChange) {
                mHandler.sendMessage(mHandler.obtainMessage(
                        MSG_TIME_FORMAT_UPDATE,
                        Settings.System.getString(
                                mContext.getContentResolver(),
                                Settings.System.TIME_12_24)));
            }
        };
    }

    @Override
    public void start() {
        // Since device can't be un-provisioned, we only need to register a content observer
        // to update mDeviceProvisioned when we are...
        if (!mDeviceProvisioned) {
@@ -2297,7 +2321,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                mHandler, UserHandle.ALL);

        mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener);
        mUserTracker.addCallback(mUserChangedCallback, mainExecutor);
        mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);

        mTrustManager.registerTrustListener(this);

@@ -2318,8 +2342,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            mFpm.addLockoutResetCallback(mFingerprintLockoutResetCallback);
        }

        if (biometricManager != null) {
            biometricManager.registerEnabledOnKeyguardCallback(mBiometricEnabledCallback);
        if (mBiometricManager != null) {
            mBiometricManager.registerEnabledOnKeyguardCallback(mBiometricEnabledCallback);
        }

        // in case authenticators aren't registered yet at this point:
@@ -2327,7 +2351,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            @Override
            public void onAllAuthenticatorsRegistered(
                    @BiometricAuthenticator.Modality int modality) {
                mainExecutor.execute(
                mMainExecutor.execute(
                        () -> updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE));
            }

@@ -2335,7 +2359,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            public void onEnrollmentsChanged(@BiometricAuthenticator.Modality int modality) {
                mHandler.obtainMessage(MSG_BIOMETRIC_ENROLLMENT_STATE_CHANGED, modality, 0)
                        .sendToTarget();
                mainExecutor.execute(
                mMainExecutor.execute(
                        () -> updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE));
            }

@@ -2353,12 +2377,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            }
        });
        if (mConfigFaceAuthSupportedPosture != DEVICE_POSTURE_UNKNOWN) {
            devicePostureController.addCallback(mPostureCallback);
            mDevicePostureController.addCallback(mPostureCallback);
        }
        updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);

        mTaskStackChangeListeners.registerTaskStackListener(mTaskStackListener);
        mIsSystemUser = mUserManager.isSystemUser();
        int user = mSelectedUserInteractor.getSelectedUserId(true);
        mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user));
        mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled();
@@ -2377,22 +2400,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        mTelephonyListenerManager.addActiveDataSubscriptionIdListener(mPhoneStateListener);
        initializeSimState();

        mTimeFormatChangeObserver = new ContentObserver(mHandler) {
            @Override
            public void onChange(boolean selfChange) {
                mHandler.sendMessage(mHandler.obtainMessage(
                        MSG_TIME_FORMAT_UPDATE,
                        Settings.System.getString(
                                mContext.getContentResolver(),
                                Settings.System.TIME_12_24)));
            }
        };

        mContext.getContentResolver().registerContentObserver(
                Settings.System.getUriFor(Settings.System.TIME_12_24),
                false, mTimeFormatChangeObserver, UserHandle.USER_ALL);

        mFingerprintInteractiveToAuthProvider = interactiveToAuthProvider.orElse(null);
    }

    private void initializeSimState() {
+13 −3
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
import com.android.keyguard.mediator.ScreenOnCoordinator;
import com.android.systemui.CoreStartable;
import com.android.systemui.animation.ActivityLaunchAnimator;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.classifier.FalsingCollector;
@@ -79,9 +80,12 @@ import com.android.systemui.util.time.SystemClock;
import com.android.systemui.wallpapers.data.repository.WallpaperRepository;
import com.android.wm.shell.keyguard.KeyguardTransitions;

import dagger.Binds;
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.ClassKey;
import dagger.multibindings.IntoMap;

import java.util.concurrent.Executor;

@@ -105,7 +109,7 @@ import kotlinx.coroutines.CoroutineDispatcher;
            StartKeyguardTransitionModule.class,
            ResourceTrimmerModule.class,
        })
public class KeyguardModule {
public interface KeyguardModule {
    /**
     * Provides our instance of KeyguardViewMediator which is considered optional.
     */
@@ -207,13 +211,19 @@ public class KeyguardModule {

    /** */
    @Provides
    public ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
    static ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
        return viewMediator.getViewMediatorCallback();
    }

    /** */
    @Provides
    public KeyguardQuickAffordancesMetricsLogger providesKeyguardQuickAffordancesMetricsLogger() {
    static KeyguardQuickAffordancesMetricsLogger providesKeyguardQuickAffordancesMetricsLogger() {
        return new KeyguardQuickAffordancesMetricsLoggerImpl();
    }

    /** Binds {@link KeyguardUpdateMonitor} as a {@link CoreStartable}. */
    @Binds
    @IntoMap
    @ClassKey(KeyguardUpdateMonitor.class)
    CoreStartable bindsKeyguardUpdateMonitor(KeyguardUpdateMonitor keyguardUpdateMonitor);
}
+4 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import dagger.Lazy

@SmallTest
class ActiveUnlockConfigTest : SysuiTestCase() {
@@ -60,6 +61,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
    @Mock private lateinit var dumpManager: DumpManager
    @Mock private lateinit var selectedUserInteractor: SelectedUserInteractor
    @Mock private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor
    @Mock private lateinit var lazyKeyguardUpdateMonitor: Lazy<KeyguardUpdateMonitor>
    @Mock private lateinit var mockPrintWriter: PrintWriter

    @Captor private lateinit var settingsObserverCaptor: ArgumentCaptor<ContentObserver>
@@ -72,6 +74,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
        MockitoAnnotations.initMocks(this)

        whenever(selectedUserInteractor.getSelectedUserId()).thenReturn(currentUser)
        whenever(lazyKeyguardUpdateMonitor.get()).thenReturn(keyguardUpdateMonitor)
        secureSettings = FakeSettings()
        activeUnlockConfig =
            ActiveUnlockConfig(
@@ -79,6 +82,7 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
                secureSettings,
                contentResolver,
                selectedUserInteractor,
                lazyKeyguardUpdateMonitor,
                dumpManager
            )
    }
@@ -260,7 +264,6 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
        updateSetting(secureSettings.getUriFor(ACTIVE_UNLOCK_ON_BIOMETRIC_FAIL))

        // GIVEN fingerprint and face are NOT enrolled
        activeUnlockConfig.keyguardUpdateMonitor = keyguardUpdateMonitor
        `when`(keyguardUpdateMonitor.isFaceEnabledAndEnrolled).thenReturn(false)
        `when`(keyguardUpdateMonitor.isUnlockWithFingerprintPossible(0)).thenReturn(false)

@@ -290,7 +293,6 @@ class ActiveUnlockConfigTest : SysuiTestCase() {
        updateSetting(secureSettings.getUriFor(ACTIVE_UNLOCK_ON_BIOMETRIC_FAIL))

        // GIVEN fingerprint and face are both enrolled
        activeUnlockConfig.keyguardUpdateMonitor = keyguardUpdateMonitor
        `when`(keyguardUpdateMonitor.isFaceEnabledAndEnrolled).thenReturn(true)
        `when`(keyguardUpdateMonitor.isUnlockWithFingerprintPossible(0)).thenReturn(true)

+1 −0
Original line number Diff line number Diff line
@@ -2283,6 +2283,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
                    Optional.of(mInteractiveToAuthProvider),
                    mTaskStackChangeListeners, mSelectedUserInteractor, mActivityTaskManager);
            setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker);
            start();
        }

        public boolean hasSimStateJustChanged() {