Merge "Merge "Update udfps states on enrollment changes" into sc-v2-dev am: 3379ab4158" into sc-v2-dev-plus-aosp

This commit is contained in:
Automerger Merge Worker
2021-11-09 20:34:07 +00:00
committed by Android (Google) Code Review
6 changed files with 74 additions and 19 deletions

View File

@@ -102,7 +102,6 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.shared.system.TaskStackChangeListeners;
@@ -323,7 +322,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private boolean mLockIconPressed; private boolean mLockIconPressed;
private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
private final Executor mBackgroundExecutor; private final Executor mBackgroundExecutor;
private int mLockScreenMode;
/** /**
* Short delay before restarting fingerprint authentication after a successful try. This should * Short delay before restarting fingerprint authentication after a successful try. This should
@@ -1736,11 +1734,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
DumpManager dumpManager, DumpManager dumpManager,
RingerModeTracker ringerModeTracker, RingerModeTracker ringerModeTracker,
@Background Executor backgroundExecutor, @Background Executor backgroundExecutor,
@Main Executor mainExecutor,
StatusBarStateController statusBarStateController, StatusBarStateController statusBarStateController,
LockPatternUtils lockPatternUtils, LockPatternUtils lockPatternUtils,
AuthController authController, AuthController authController,
TelephonyListenerManager telephonyListenerManager, TelephonyListenerManager telephonyListenerManager,
FeatureFlags featureFlags,
InteractionJankMonitor interactionJankMonitor, InteractionJankMonitor interactionJankMonitor,
LatencyTracker latencyTracker) { LatencyTracker latencyTracker) {
mContext = context; mContext = context;
@@ -1966,6 +1964,17 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
mBiometricManager.registerEnabledOnKeyguardCallback(mBiometricEnabledCallback); mBiometricManager.registerEnabledOnKeyguardCallback(mBiometricEnabledCallback);
} }
// in case authenticators aren't registered yet at this point:
mAuthController.addCallback(new AuthController.Callback() {
@Override
public void onAllAuthenticatorsRegistered() {
}
@Override
public void onEnrollmentsChanged() {
mainExecutor.execute(() -> updateBiometricListeningState());
}
});
updateBiometricListeningState(); updateBiometricListeningState();
if (mFpm != null) { if (mFpm != null) {
mFpm.addLockoutResetCallback(mFingerprintLockoutResetCallback); mFpm.addLockoutResetCallback(mFingerprintLockoutResetCallback);
@@ -2043,7 +2052,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
/** /**
* @return if udfps is available on this device. will return true even if the user hasn't * @return if udfps is available on this device. will return true even if the user hasn't
* enrolled udfps. * enrolled udfps. This may be false if called before onAllAuthenticatorsRegistered.
*/ */
public boolean isUdfpsAvailable() { public boolean isUdfpsAvailable() {
return mAuthController.getUdfpsProps() != null return mAuthController.getUdfpsProps() != null
@@ -2092,7 +2101,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
return; return;
} }
// TODO: Add support for multiple fingerprint sensors, b/173730729
updateUdfpsEnrolled(getCurrentUser()); updateUdfpsEnrolled(getCurrentUser());
final boolean shouldListenForFingerprint = shouldListenForFingerprint(isUdfpsEnrolled()); final boolean shouldListenForFingerprint = shouldListenForFingerprint(isUdfpsEnrolled());
final boolean runningOrRestarting = mFingerprintRunningState == BIOMETRIC_STATE_RUNNING final boolean runningOrRestarting = mFingerprintRunningState == BIOMETRIC_STATE_RUNNING

View File

@@ -695,11 +695,20 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
private final AuthController.Callback mAuthControllerCallback = new AuthController.Callback() { private final AuthController.Callback mAuthControllerCallback = new AuthController.Callback() {
@Override @Override
public void onAllAuthenticatorsRegistered() { public void onAllAuthenticatorsRegistered() {
// must be called from the main thread since it may update the views updateUdfpsConfig();
mExecutor.execute(() -> { }
updateIsUdfpsEnrolled();
updateConfiguration(); @Override
}); public void onEnrollmentsChanged() {
updateUdfpsConfig();
} }
}; };
private void updateUdfpsConfig() {
// must be called from the main thread since it may update the views
mExecutor.execute(() -> {
updateIsUdfpsEnrolled();
updateConfiguration();
});
}
} }

View File

@@ -142,6 +142,10 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
mUdfpsEnrolledForUser.put(userId, hasEnrollments); mUdfpsEnrolledForUser.put(userId, hasEnrollments);
} }
} }
for (Callback cb : mCallbacks) {
cb.onEnrollmentsChanged();
}
} }
}; };
@@ -844,5 +848,11 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
* registered before this call, this callback will never be triggered. * registered before this call, this callback will never be triggered.
*/ */
void onAllAuthenticatorsRegistered(); void onAllAuthenticatorsRegistered();
/**
* Called when UDFPS enrollments have changed. This is called after boot and on changes to
* enrollment.
*/
void onEnrollmentsChanged();
} }
} }

View File

@@ -292,10 +292,16 @@ class AuthRippleController @Inject constructor(
} }
} }
private val authControllerCallback = AuthController.Callback { private val authControllerCallback =
updateSensorLocation() object : AuthController.Callback {
updateUdfpsDependentParams() override fun onAllAuthenticatorsRegistered() {
} updateSensorLocation()
updateUdfpsDependentParams()
}
override fun onEnrollmentsChanged() {
}
}
private fun updateUdfpsDependentParams() { private fun updateUdfpsDependentParams() {
authController.udfpsProps?.let { authController.udfpsProps?.let {

View File

@@ -107,6 +107,11 @@ public class DozeScreenState implements DozeMachine.Part {
public void onAllAuthenticatorsRegistered() { public void onAllAuthenticatorsRegistered() {
updateUdfpsController(); updateUdfpsController();
} }
@Override
public void onEnrollmentsChanged() {
updateUdfpsController();
}
}); });
} }
} }

View File

@@ -87,7 +87,6 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.AuthController;
import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -170,8 +169,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
@Mock @Mock
private TelephonyListenerManager mTelephonyListenerManager; private TelephonyListenerManager mTelephonyListenerManager;
@Mock @Mock
private FeatureFlags mFeatureFlags;
@Mock
private InteractionJankMonitor mInteractionJankMonitor; private InteractionJankMonitor mInteractionJankMonitor;
@Mock @Mock
private LatencyTracker mLatencyTracker; private LatencyTracker mLatencyTracker;
@@ -179,6 +176,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private ArgumentCaptor<StatusBarStateController.StateListener> mStatusBarStateListenerCaptor; private ArgumentCaptor<StatusBarStateController.StateListener> mStatusBarStateListenerCaptor;
// Direct executor // Direct executor
private Executor mBackgroundExecutor = Runnable::run; private Executor mBackgroundExecutor = Runnable::run;
private Executor mMainExecutor = Runnable::run;
private TestableLooper mTestableLooper; private TestableLooper mTestableLooper;
private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor; private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor;
private TestableContext mSpiedContext; private TestableContext mSpiedContext;
@@ -881,6 +879,25 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
orderVerify.verify(callback).onRingerModeChanged(AudioManager.RINGER_MODE_VIBRATE); orderVerify.verify(callback).onRingerModeChanged(AudioManager.RINGER_MODE_VIBRATE);
} }
@Test
public void testRegisterAuthControllerCallback() {
assertThat(mKeyguardUpdateMonitor.isUdfpsEnrolled()).isFalse();
// verify AuthController.Callback is added:
ArgumentCaptor<AuthController.Callback> captor = ArgumentCaptor.forClass(
AuthController.Callback.class);
verify(mAuthController).addCallback(captor.capture());
AuthController.Callback callback = captor.getValue();
// WHEN udfps is now enrolled
when(mAuthController.isUdfpsEnrolled(anyInt())).thenReturn(true);
callback.onEnrollmentsChanged();
// THEN isUdfspEnrolled is TRUE
assertThat(mKeyguardUpdateMonitor.isUdfpsEnrolled()).isTrue();
}
@Test @Test
public void testStartUdfpsServiceBeginsOnKeyguard() { public void testStartUdfpsServiceBeginsOnKeyguard() {
// GIVEN // GIVEN
@@ -1060,9 +1077,9 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
super(context, super(context,
TestableLooper.get(KeyguardUpdateMonitorTest.this).getLooper(), TestableLooper.get(KeyguardUpdateMonitorTest.this).getLooper(),
mBroadcastDispatcher, mDumpManager, mBroadcastDispatcher, mDumpManager,
mRingerModeTracker, mBackgroundExecutor, mRingerModeTracker, mBackgroundExecutor, mMainExecutor,
mStatusBarStateController, mLockPatternUtils, mStatusBarStateController, mLockPatternUtils,
mAuthController, mTelephonyListenerManager, mFeatureFlags, mAuthController, mTelephonyListenerManager,
mInteractionJankMonitor, mLatencyTracker); mInteractionJankMonitor, mLatencyTracker);
setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker); setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker);
} }