diff options
| author | 2023-10-25 21:36:10 +0000 | |
|---|---|---|
| committer | 2023-10-25 21:36:10 +0000 | |
| commit | 2ff4cc3c775a2e107609733b0d6a272c004420be (patch) | |
| tree | a04f9057a52f04f6b013b75008a5b140b1f9cc8f | |
| parent | 6eae4bdd3036138c3f8a2d40ac7f08e1c8cfa0ec (diff) | |
| parent | 089eb43784f749d4815c548ed56da7425785db8f (diff) | |
Merge "Revert "Add callback to check biometric prompt status on keyguard"" into main
7 files changed, 0 insertions, 180 deletions
diff --git a/core/java/android/hardware/biometrics/BiometricManager.java b/core/java/android/hardware/biometrics/BiometricManager.java index 9c05dfc94ad4..82694ee3463b 100644 --- a/core/java/android/hardware/biometrics/BiometricManager.java +++ b/core/java/android/hardware/biometrics/BiometricManager.java @@ -537,24 +537,6 @@ public class BiometricManager { } /** - * Listens for biometric prompt status, i.e., if it is being shown or idle. - * @hide - */ - @RequiresPermission(USE_BIOMETRIC_INTERNAL) - public void registerBiometricPromptStatusListener( - IBiometricPromptStatusListener callback) { - if (mService != null) { - try { - mService.registerBiometricPromptStatusListener(callback); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } else { - Slog.w(TAG, "registerBiometricPromptOnKeyguardCallback(): Service not connected"); - } - } - - /** * Requests all {@link Authenticators.Types#BIOMETRIC_STRONG} sensors to have their * authenticatorId invalidated for the specified user. This happens when enrollments have been * added on devices with multiple biometric sensors. diff --git a/core/java/android/hardware/biometrics/IAuthService.aidl b/core/java/android/hardware/biometrics/IAuthService.aidl index 8eede472bec5..c2e5c0b6d519 100644 --- a/core/java/android/hardware/biometrics/IAuthService.aidl +++ b/core/java/android/hardware/biometrics/IAuthService.aidl @@ -17,7 +17,6 @@ package android.hardware.biometrics; import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback; -import android.hardware.biometrics.IBiometricPromptStatusListener; import android.hardware.biometrics.IBiometricServiceReceiver; import android.hardware.biometrics.IInvalidationCallback; import android.hardware.biometrics.ITestSession; @@ -64,9 +63,6 @@ interface IAuthService { // Register callback for when keyguard biometric eligibility changes. void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback); - // Register callback to check biometric prompt status. - void registerBiometricPromptStatusListener(IBiometricPromptStatusListener callback); - // Requests all BIOMETRIC_STRONG sensors to have their authenticatorId invalidated for the // specified user. This happens when enrollments have been added on devices with multiple // biometric sensors. diff --git a/core/java/android/hardware/biometrics/IBiometricPromptStatusListener.aidl b/core/java/android/hardware/biometrics/IBiometricPromptStatusListener.aidl deleted file mode 100644 index 7a0f4389ed60..000000000000 --- a/core/java/android/hardware/biometrics/IBiometricPromptStatusListener.aidl +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.hardware.biometrics; - -/** - * Communication channel to propagate biometric prompt status. Implementation of this interface - * should be registered in BiometricService#registerBiometricPromptStatusListener. - * @hide - */ -oneway interface IBiometricPromptStatusListener { - void onBiometricPromptShowing(); - void onBiometricPromptIdle(); -}
\ No newline at end of file diff --git a/core/java/android/hardware/biometrics/IBiometricService.aidl b/core/java/android/hardware/biometrics/IBiometricService.aidl index 36606a135f3e..18c8d1bd3a1e 100644 --- a/core/java/android/hardware/biometrics/IBiometricService.aidl +++ b/core/java/android/hardware/biometrics/IBiometricService.aidl @@ -17,7 +17,6 @@ package android.hardware.biometrics; import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback; -import android.hardware.biometrics.IBiometricPromptStatusListener; import android.hardware.biometrics.IBiometricServiceReceiver; import android.hardware.biometrics.IBiometricAuthenticator; import android.hardware.biometrics.IInvalidationCallback; @@ -69,10 +68,6 @@ interface IBiometricService { @EnforcePermission("USE_BIOMETRIC_INTERNAL") void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback); - // Register a callback for biometric prompt status on keyguard. - @EnforcePermission("USE_BIOMETRIC_INTERNAL") - void registerBiometricPromptStatusListener(IBiometricPromptStatusListener callback); - // Notify BiometricService when <Biometric>Service is ready to start the prepared client. // Client lifecycle is still managed in <Biometric>Service. @EnforcePermission("USE_BIOMETRIC_INTERNAL") diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java index 1760bb3c7a6a..4538cad513d6 100644 --- a/services/core/java/com/android/server/biometrics/AuthService.java +++ b/services/core/java/com/android/server/biometrics/AuthService.java @@ -41,7 +41,6 @@ import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.ComponentInfoInternal; import android.hardware.biometrics.IAuthService; import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback; -import android.hardware.biometrics.IBiometricPromptStatusListener; import android.hardware.biometrics.IBiometricService; import android.hardware.biometrics.IBiometricServiceReceiver; import android.hardware.biometrics.IInvalidationCallback; @@ -358,18 +357,6 @@ public class AuthService extends SystemService { } @Override - public void registerBiometricPromptStatusListener( - IBiometricPromptStatusListener listener) throws RemoteException { - checkInternalPermission(); - final long identity = Binder.clearCallingIdentity(); - try { - mBiometricService.registerBiometricPromptStatusListener(listener); - } finally { - Binder.restoreCallingIdentity(identity); - } - } - - @Override public void invalidateAuthenticatorIds(int userId, int fromSensorId, IInvalidationCallback callback) throws RemoteException { checkInternalPermission(); diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java index 9569f23e8d49..1898b8015462 100644 --- a/services/core/java/com/android/server/biometrics/BiometricService.java +++ b/services/core/java/com/android/server/biometrics/BiometricService.java @@ -41,7 +41,6 @@ import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricPrompt; import android.hardware.biometrics.IBiometricAuthenticator; import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback; -import android.hardware.biometrics.IBiometricPromptStatusListener; import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IBiometricService; import android.hardware.biometrics.IBiometricServiceReceiver; @@ -89,7 +88,6 @@ import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; -import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Supplier; @@ -107,8 +105,6 @@ public class BiometricService extends SystemService { @VisibleForTesting final SettingObserver mSettingObserver; private final List<EnabledOnKeyguardCallback> mEnabledOnKeyguardCallbacks; - private final ConcurrentLinkedQueue<BiometricPromptStatusListener> - mBiometricPromptStatusListeners; private final Random mRandom = new Random(); @NonNull private final Supplier<Long> mRequestCounter; @NonNull private final BiometricContext mBiometricContext; @@ -429,42 +425,6 @@ public class BiometricService extends SystemService { } } - final class BiometricPromptStatusListener implements IBinder.DeathRecipient { - private final IBiometricPromptStatusListener mBiometricPromptStatusListener; - - BiometricPromptStatusListener(IBiometricPromptStatusListener callback) { - mBiometricPromptStatusListener = callback; - } - - void notifyBiometricPromptShowing() { - try { - mBiometricPromptStatusListener.onBiometricPromptShowing(); - } catch (DeadObjectException e) { - Slog.w(TAG, "Death while invoking notifyHandleAuthenticate", e); - mBiometricPromptStatusListeners.remove(this); - } catch (RemoteException e) { - Slog.w(TAG, "Failed to invoke notifyHandleAuthenticate", e); - } - } - - void notifyBiometricPromptIdle() { - try { - mBiometricPromptStatusListener.onBiometricPromptIdle(); - } catch (DeadObjectException e) { - Slog.w(TAG, "Death while invoking notifyDialogDismissed", e); - mBiometricPromptStatusListeners.remove(this); - } catch (RemoteException e) { - Slog.w(TAG, "Failed to invoke notifyDialogDismissed", e); - } - } - - @Override - public void binderDied() { - Slog.e(TAG, "Biometric prompt callback binder died"); - mBiometricPromptStatusListeners.remove(this); - } - } - // Receives events from individual biometric sensors. private IBiometricSensorReceiver createBiometricSensorReceiver(final long requestId) { return new IBiometricSensorReceiver.Stub() { @@ -745,22 +705,6 @@ public class BiometricService extends SystemService { @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) @Override // Binder call - public void registerBiometricPromptStatusListener(IBiometricPromptStatusListener callback) { - super.registerBiometricPromptStatusListener_enforcePermission(); - - BiometricPromptStatusListener biometricPromptStatusListener = - new BiometricPromptStatusListener(callback); - mBiometricPromptStatusListeners.add(biometricPromptStatusListener); - - if (mAuthSession != null) { - biometricPromptStatusListener.notifyBiometricPromptShowing(); - } else { - biometricPromptStatusListener.notifyBiometricPromptIdle(); - } - } - - @android.annotation.EnforcePermission(android.Manifest.permission.USE_BIOMETRIC_INTERNAL) - @Override // Binder call public void invalidateAuthenticatorIds(int userId, int fromSensorId, IInvalidationCallback callback) { @@ -1100,7 +1044,6 @@ public class BiometricService extends SystemService { mDevicePolicyManager = mInjector.getDevicePolicyManager(context); mImpl = new BiometricServiceWrapper(); mEnabledOnKeyguardCallbacks = new ArrayList<>(); - mBiometricPromptStatusListeners = new ConcurrentLinkedQueue<>(); mSettingObserver = mInjector.getSettingObserver(context, mHandler, mEnabledOnKeyguardCallbacks); mRequestCounter = mInjector.getRequestGenerator(); @@ -1215,7 +1158,6 @@ public class BiometricService extends SystemService { if (finished) { Slog.d(TAG, "handleOnError: AuthSession finished"); mAuthSession = null; - notifyAuthSessionChanged(); } } catch (RemoteException e) { Slog.e(TAG, "RemoteException", e); @@ -1244,7 +1186,6 @@ public class BiometricService extends SystemService { session.onDialogDismissed(reason, credentialAttestation); mAuthSession = null; - notifyAuthSessionChanged(); } private void handleOnTryAgainPressed(long requestId) { @@ -1294,7 +1235,6 @@ public class BiometricService extends SystemService { final boolean finished = session.onClientDied(); if (finished) { mAuthSession = null; - notifyAuthSessionChanged(); } } @@ -1409,16 +1349,6 @@ public class BiometricService extends SystemService { }); } - private void notifyAuthSessionChanged() { - for (BiometricPromptStatusListener listener : mBiometricPromptStatusListeners) { - if (mAuthSession == null) { - listener.notifyBiometricPromptIdle(); - } else { - listener.notifyBiometricPromptShowing(); - } - } - } - /** * handleAuthenticate() (above) which is called from BiometricPrompt determines which * modality/modalities to start authenticating with. authenticateInternal() should only be @@ -1456,7 +1386,6 @@ public class BiometricService extends SystemService { } catch (RemoteException e) { Slog.e(TAG, "RemoteException", e); } - notifyAuthSessionChanged(); } private void handleCancelAuthentication(long requestId) { @@ -1471,7 +1400,6 @@ public class BiometricService extends SystemService { if (finished) { Slog.d(TAG, "handleCancelAuthentication: AuthSession finished"); mAuthSession = null; - notifyAuthSessionChanged(); } } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java index e3e708ec856d..0230d77e8e14 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/BiometricServiceTest.java @@ -47,7 +47,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @@ -65,7 +64,6 @@ import android.hardware.biometrics.BiometricManager; import android.hardware.biometrics.BiometricPrompt; import android.hardware.biometrics.IBiometricAuthenticator; import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback; -import android.hardware.biometrics.IBiometricPromptStatusListener; import android.hardware.biometrics.IBiometricSensorReceiver; import android.hardware.biometrics.IBiometricService; import android.hardware.biometrics.IBiometricServiceReceiver; @@ -1753,45 +1751,6 @@ public class BiometricServiceTest { verifyNoMoreInteractions(callback); } - @Test - public void testRegisterBiometricPromptOnKeyguardCallback_authenticationAlreadyStarted() - throws Exception { - final IBiometricPromptStatusListener callback = - mock(IBiometricPromptStatusListener.class); - - setupAuthForOnly(TYPE_FACE, Authenticators.BIOMETRIC_STRONG); - invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1, - true /* requireConfirmation */, null /* authenticators */); - mBiometricService.mImpl.registerBiometricPromptStatusListener(callback); - - verify(callback).onBiometricPromptShowing(); - } - - @Test - public void testRegisterBiometricPromptOnKeyguardCallback_startAuth_dismissDialog() - throws Exception { - final IBiometricPromptStatusListener listener = - mock(IBiometricPromptStatusListener.class); - setupAuthForOnly(TYPE_FINGERPRINT, Authenticators.BIOMETRIC_STRONG); - mBiometricService.mImpl.registerBiometricPromptStatusListener(listener); - waitForIdle(); - - verify(listener).onBiometricPromptIdle(); - - invokeAuthenticateAndStart(mBiometricService.mImpl, mReceiver1, - true /* requireConfirmation */, null /* authenticators */); - waitForIdle(); - - verify(listener).onBiometricPromptShowing(); - - final byte[] hat = generateRandomHAT(); - mBiometricService.mAuthSession.mSysuiReceiver.onDialogDismissed( - BiometricPrompt.DISMISSED_REASON_BIOMETRIC_CONFIRMED, hat); - waitForIdle(); - - verify(listener, times(2)).onBiometricPromptIdle(); - } - // Helper methods private int invokeCanAuthenticate(BiometricService service, int authenticators) |