Merge "Update udfps states on enrollment changes" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2021-11-09 20:02:21 +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.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListeners;
@@ -323,7 +322,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
private boolean mLockIconPressed;
private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
private final Executor mBackgroundExecutor;
private int mLockScreenMode;
/**
* 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,
RingerModeTracker ringerModeTracker,
@Background Executor backgroundExecutor,
@Main Executor mainExecutor,
StatusBarStateController statusBarStateController,
LockPatternUtils lockPatternUtils,
AuthController authController,
TelephonyListenerManager telephonyListenerManager,
FeatureFlags featureFlags,
InteractionJankMonitor interactionJankMonitor,
LatencyTracker latencyTracker) {
mContext = context;
@@ -1966,6 +1964,17 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
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();
if (mFpm != null) {
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
* enrolled udfps.
* enrolled udfps. This may be false if called before onAllAuthenticatorsRegistered.
*/
public boolean isUdfpsAvailable() {
return mAuthController.getUdfpsProps() != null
@@ -2092,7 +2101,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
return;
}
// TODO: Add support for multiple fingerprint sensors, b/173730729
updateUdfpsEnrolled(getCurrentUser());
final boolean shouldListenForFingerprint = shouldListenForFingerprint(isUdfpsEnrolled());
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() {
@Override
public void onAllAuthenticatorsRegistered() {
// must be called from the main thread since it may update the views
mExecutor.execute(() -> {
updateIsUdfpsEnrolled();
updateConfiguration();
});
updateUdfpsConfig();
}
@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);
}
}
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.
*/
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 {
updateSensorLocation()
updateUdfpsDependentParams()
}
private val authControllerCallback =
object : AuthController.Callback {
override fun onAllAuthenticatorsRegistered() {
updateSensorLocation()
updateUdfpsDependentParams()
}
override fun onEnrollmentsChanged() {
}
}
private fun updateUdfpsDependentParams() {
authController.udfpsProps?.let {

View File

@@ -107,6 +107,11 @@ public class DozeScreenState implements DozeMachine.Part {
public void onAllAuthenticatorsRegistered() {
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.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -170,8 +169,6 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
@Mock
private TelephonyListenerManager mTelephonyListenerManager;
@Mock
private FeatureFlags mFeatureFlags;
@Mock
private InteractionJankMonitor mInteractionJankMonitor;
@Mock
private LatencyTracker mLatencyTracker;
@@ -179,6 +176,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private ArgumentCaptor<StatusBarStateController.StateListener> mStatusBarStateListenerCaptor;
// Direct executor
private Executor mBackgroundExecutor = Runnable::run;
private Executor mMainExecutor = Runnable::run;
private TestableLooper mTestableLooper;
private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor;
private TestableContext mSpiedContext;
@@ -881,6 +879,25 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
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
public void testStartUdfpsServiceBeginsOnKeyguard() {
// GIVEN
@@ -1060,9 +1077,9 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
super(context,
TestableLooper.get(KeyguardUpdateMonitorTest.this).getLooper(),
mBroadcastDispatcher, mDumpManager,
mRingerModeTracker, mBackgroundExecutor,
mRingerModeTracker, mBackgroundExecutor, mMainExecutor,
mStatusBarStateController, mLockPatternUtils,
mAuthController, mTelephonyListenerManager, mFeatureFlags,
mAuthController, mTelephonyListenerManager,
mInteractionJankMonitor, mLatencyTracker);
setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker);
}