Loading core/java/android/hardware/biometrics/IBiometricSysuiReceiver.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -32,4 +32,8 @@ oneway interface IBiometricSysuiReceiver { void onDialogAnimatedIn(boolean startFingerprintNow); // Notifies that the fingerprint should start now (after onDialogAnimatedIn(false)). void onStartFingerprintNow(); // Notifies that authentication should be paused void onPauseAuthentication(); // Notifies that authentication should resume void onResumeAuthentication(); } packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthControllerTest.java +9 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricPrompt; import android.hardware.biometrics.BiometricStateListener; import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.Flags; import android.hardware.biometrics.IBiometricContextListener; import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.PromptInfo; Loading @@ -73,6 +74,9 @@ import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.testing.TestableContext; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; Loading Loading @@ -130,6 +134,9 @@ public class AuthControllerTest extends SysuiTestCase { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Mock private PackageManager mPackageManager; Loading Loading @@ -643,6 +650,7 @@ public class AuthControllerTest extends SysuiTestCase { } @Test @RequiresFlagsDisabled(Flags.FLAG_BP_FALLBACK_OPTIONS) public void testErrorLockout_whenCredentialNotAllowed_sendsOnError() { showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */); final int modality = BiometricAuthenticator.TYPE_FACE; Loading @@ -658,6 +666,7 @@ public class AuthControllerTest extends SysuiTestCase { } @Test @RequiresFlagsDisabled(Flags.FLAG_BP_FALLBACK_OPTIONS) public void testErrorLockoutPermanent_whenCredentialNotAllowed_sendsOnError() { showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */); final int modality = BiometricAuthenticator.TYPE_FACE; Loading packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/data/repository/PromptRepositoryImplTest.kt +23 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.shared.model.BiometricModalities import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.coroutines.collectLastValue import com.android.systemui.util.concurrency.FakeExecutor Loading Loading @@ -105,10 +106,11 @@ class PromptRepositoryImplTest : SysuiTestCase() { repository.setPrompt( PromptInfo().apply { isConfirmationRequested = case }, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, PromptKind.Biometric(), OP_PACKAGE_NAME OP_PACKAGE_NAME, ) assertThat(isConfirmationRequired).isEqualTo(case) Loading @@ -125,10 +127,11 @@ class PromptRepositoryImplTest : SysuiTestCase() { repository.setPrompt( PromptInfo().apply { isConfirmationRequested = case }, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, PromptKind.Biometric(), OP_PACKAGE_NAME OP_PACKAGE_NAME, ) assertThat(isConfirmationRequired).isTrue() Loading @@ -141,7 +144,15 @@ class PromptRepositoryImplTest : SysuiTestCase() { val kind = PromptKind.Pin val promptInfo = PromptInfo() repository.setPrompt(promptInfo, USER_ID, REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME) repository.setPrompt( promptInfo, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME, ) assertThat(repository.promptKind.value).isEqualTo(kind) assertThat(repository.userId.value).isEqualTo(USER_ID) Loading @@ -163,7 +174,15 @@ class PromptRepositoryImplTest : SysuiTestCase() { val kind = PromptKind.Pin val promptInfo = PromptInfo() repository.setPrompt(promptInfo, USER_ID, REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME) repository.setPrompt( promptInfo, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME, ) assertThat(repository.promptKind.value).isEqualTo(kind) assertThat(repository.userId.value).isEqualTo(USER_ID) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/PromptCredentialInteractorTest.kt +7 −5 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ import com.android.systemui.biometrics.data.repository.FakePromptRepository import com.android.systemui.biometrics.domain.model.BiometricOperationInfo import com.android.systemui.biometrics.domain.model.BiometricPromptRequest import com.android.systemui.biometrics.promptInfo import com.android.systemui.biometrics.shared.model.BiometricModalities import com.android.systemui.biometrics.shared.model.BiometricUserInfo import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.coroutines.collectLastValue Loading Loading @@ -113,7 +114,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(showTitleOnly).isFalse() } Loading @@ -139,7 +140,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(showTitleOnly).isTrue() } Loading Loading @@ -168,7 +169,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(showTitleOnly).isFalse() } Loading Loading @@ -202,7 +203,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(prompt?.title).isEqualTo(title) Loading Loading @@ -356,6 +357,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { biometricPromptRepository.setPrompt( promptInfo, userId, BiometricModalities(), requestId, challenge, kind, Loading @@ -373,7 +375,7 @@ private fun pinRequest(): BiometricPromptRequest.Credential.Pin = BiometricPromptRequest.Credential.Pin( promptInfo(), BiometricUserInfo(USER_ID), BiometricOperationInfo(OPERATION_ID) BiometricOperationInfo(OPERATION_ID), ) private fun verified(hat: ByteArray) = CredentialStatus.Success.Verified(hat) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModelTest.kt +9 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import com.android.systemui.biometrics.domain.interactor.FakeCredentialInteracto import com.android.systemui.biometrics.domain.interactor.PromptCredentialInteractor import com.android.systemui.biometrics.domain.interactor.promptSelectorInteractor import com.android.systemui.biometrics.promptInfo import com.android.systemui.biometrics.shared.model.BiometricModalities import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.testKosmos Loading Loading @@ -181,7 +182,14 @@ class CredentialViewModelTest : SysuiTestCase() { ) = runTest(dispatcher) { init() promptRepository.setPrompt(promptInfo(), USER_ID, REQUEST_ID, OPERATION_ID, kind) promptRepository.setPrompt( promptInfo(), USER_ID, BiometricModalities(), REQUEST_ID, OPERATION_ID, kind, ) block() } } Loading
core/java/android/hardware/biometrics/IBiometricSysuiReceiver.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -32,4 +32,8 @@ oneway interface IBiometricSysuiReceiver { void onDialogAnimatedIn(boolean startFingerprintNow); // Notifies that the fingerprint should start now (after onDialogAnimatedIn(false)). void onStartFingerprintNow(); // Notifies that authentication should be paused void onPauseAuthentication(); // Notifies that authentication should resume void onResumeAuthentication(); }
packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/AuthControllerTest.java +9 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricPrompt; import android.hardware.biometrics.BiometricStateListener; import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.Flags; import android.hardware.biometrics.IBiometricContextListener; import android.hardware.biometrics.IBiometricSysuiReceiver; import android.hardware.biometrics.PromptInfo; Loading @@ -73,6 +74,9 @@ import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.testing.TestableContext; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; Loading Loading @@ -130,6 +134,9 @@ public class AuthControllerTest extends SysuiTestCase { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Rule public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Mock private PackageManager mPackageManager; Loading Loading @@ -643,6 +650,7 @@ public class AuthControllerTest extends SysuiTestCase { } @Test @RequiresFlagsDisabled(Flags.FLAG_BP_FALLBACK_OPTIONS) public void testErrorLockout_whenCredentialNotAllowed_sendsOnError() { showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */); final int modality = BiometricAuthenticator.TYPE_FACE; Loading @@ -658,6 +666,7 @@ public class AuthControllerTest extends SysuiTestCase { } @Test @RequiresFlagsDisabled(Flags.FLAG_BP_FALLBACK_OPTIONS) public void testErrorLockoutPermanent_whenCredentialNotAllowed_sendsOnError() { showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */); final int modality = BiometricAuthenticator.TYPE_FACE; Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/data/repository/PromptRepositoryImplTest.kt +23 −4 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.biometrics.AuthController import com.android.systemui.biometrics.shared.model.BiometricModalities import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.coroutines.collectLastValue import com.android.systemui.util.concurrency.FakeExecutor Loading Loading @@ -105,10 +106,11 @@ class PromptRepositoryImplTest : SysuiTestCase() { repository.setPrompt( PromptInfo().apply { isConfirmationRequested = case }, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, PromptKind.Biometric(), OP_PACKAGE_NAME OP_PACKAGE_NAME, ) assertThat(isConfirmationRequired).isEqualTo(case) Loading @@ -125,10 +127,11 @@ class PromptRepositoryImplTest : SysuiTestCase() { repository.setPrompt( PromptInfo().apply { isConfirmationRequested = case }, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, PromptKind.Biometric(), OP_PACKAGE_NAME OP_PACKAGE_NAME, ) assertThat(isConfirmationRequired).isTrue() Loading @@ -141,7 +144,15 @@ class PromptRepositoryImplTest : SysuiTestCase() { val kind = PromptKind.Pin val promptInfo = PromptInfo() repository.setPrompt(promptInfo, USER_ID, REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME) repository.setPrompt( promptInfo, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME, ) assertThat(repository.promptKind.value).isEqualTo(kind) assertThat(repository.userId.value).isEqualTo(USER_ID) Loading @@ -163,7 +174,15 @@ class PromptRepositoryImplTest : SysuiTestCase() { val kind = PromptKind.Pin val promptInfo = PromptInfo() repository.setPrompt(promptInfo, USER_ID, REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME) repository.setPrompt( promptInfo, USER_ID, BiometricModalities(), REQUEST_ID, CHALLENGE, kind, OP_PACKAGE_NAME, ) assertThat(repository.promptKind.value).isEqualTo(kind) assertThat(repository.userId.value).isEqualTo(USER_ID) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/domain/interactor/PromptCredentialInteractorTest.kt +7 −5 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ import com.android.systemui.biometrics.data.repository.FakePromptRepository import com.android.systemui.biometrics.domain.model.BiometricOperationInfo import com.android.systemui.biometrics.domain.model.BiometricPromptRequest import com.android.systemui.biometrics.promptInfo import com.android.systemui.biometrics.shared.model.BiometricModalities import com.android.systemui.biometrics.shared.model.BiometricUserInfo import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.coroutines.collectLastValue Loading Loading @@ -113,7 +114,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(showTitleOnly).isFalse() } Loading @@ -139,7 +140,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(showTitleOnly).isTrue() } Loading Loading @@ -168,7 +169,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(showTitleOnly).isFalse() } Loading Loading @@ -202,7 +203,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { userId = USER_ID, requestId = REQUEST_ID, challenge = OPERATION_ID, opPackageName = OP_PACKAGE_NAME opPackageName = OP_PACKAGE_NAME, ) assertThat(prompt?.title).isEqualTo(title) Loading Loading @@ -356,6 +357,7 @@ class PromptCredentialInteractorTest : SysuiTestCase() { biometricPromptRepository.setPrompt( promptInfo, userId, BiometricModalities(), requestId, challenge, kind, Loading @@ -373,7 +375,7 @@ private fun pinRequest(): BiometricPromptRequest.Credential.Pin = BiometricPromptRequest.Credential.Pin( promptInfo(), BiometricUserInfo(USER_ID), BiometricOperationInfo(OPERATION_ID) BiometricOperationInfo(OPERATION_ID), ) private fun verified(hat: ByteArray) = CredentialStatus.Success.Verified(hat) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/biometrics/ui/viewmodel/CredentialViewModelTest.kt +9 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import com.android.systemui.biometrics.domain.interactor.FakeCredentialInteracto import com.android.systemui.biometrics.domain.interactor.PromptCredentialInteractor import com.android.systemui.biometrics.domain.interactor.promptSelectorInteractor import com.android.systemui.biometrics.promptInfo import com.android.systemui.biometrics.shared.model.BiometricModalities import com.android.systemui.biometrics.shared.model.PromptKind import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.testKosmos Loading Loading @@ -181,7 +182,14 @@ class CredentialViewModelTest : SysuiTestCase() { ) = runTest(dispatcher) { init() promptRepository.setPrompt(promptInfo(), USER_ID, REQUEST_ID, OPERATION_ID, kind) promptRepository.setPrompt( promptInfo(), USER_ID, BiometricModalities(), REQUEST_ID, OPERATION_ID, kind, ) block() } }