diff options
| author | 2022-10-27 20:59:09 +0000 | |
|---|---|---|
| committer | 2022-10-27 21:02:38 +0000 | |
| commit | 64362b9d016825818ac559fa5dd9ddb207ed1ae7 (patch) | |
| tree | b2ce4e2fc820a584ecee5b6e86fa46e3479d16ab | |
| parent | 9951b551a3e530ba8bf96855d1ca5e3511a184a7 (diff) | |
Removed Interruptable interface.
Added a method instead of the interface.
Test: atest BiometricSchedulerTest
Fixes: 243445002
Change-Id: I71abbebd1513058ef41771bfd82e7f6a2700eed2
8 files changed, 36 insertions, 60 deletions
diff --git a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java index 1d90954c44f6..055c63dd7e69 100644 --- a/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java +++ b/services/core/java/com/android/server/biometrics/sensors/AcquisitionClient.java @@ -38,8 +38,7 @@ import java.util.function.Supplier; * Abstract {@link HalClientMonitor} subclass that operations eligible/interested in acquisition * messages should extend. */ -public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implements Interruptable, - ErrorConsumer { +public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implements ErrorConsumer { private static final String TAG = "Biometrics/AcquisitionClient"; @@ -217,4 +216,9 @@ public abstract class AcquisitionClient<T> extends HalClientMonitor<T> implement HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES); } } + + @Override + public boolean isInterruptable() { + return true; + } } diff --git a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java index da7781add8c6..0216e49b531b 100644 --- a/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java +++ b/services/core/java/com/android/server/biometrics/sensors/BaseClientMonitor.java @@ -193,9 +193,9 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { } // If the current client dies we should cancel the current operation. - if (this instanceof Interruptable) { + if (this.isInterruptable()) { Slog.e(TAG, "Binder died, cancelling client"); - ((Interruptable) this).cancel(); + this.cancel(); } mToken = null; if (clearListener) { @@ -320,4 +320,12 @@ public abstract class BaseClientMonitor implements IBinder.DeathRecipient { } callback.onClientFinished(this, true /* success */); } + + /** + * Checks if other client monitor can interrupt current client monitor + * @return if current client can be interrupted + */ + public boolean isInterruptable() { + return false; + } } diff --git a/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java b/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java index dacec38b0e7e..4825f1dea66f 100644 --- a/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java +++ b/services/core/java/com/android/server/biometrics/sensors/BiometricSchedulerOperation.java @@ -46,7 +46,7 @@ public class BiometricSchedulerOperation { /** * The operation is added to the list of pending operations, but a subsequent operation - * has been added. This state only applies to {@link Interruptable} operations. When this + * has been added. This state only applies to interruptable operations. When this * operation reaches the head of the queue, it will send ERROR_CANCELED and finish. */ protected static final int STATE_WAITING_IN_QUEUE_CANCELING = 1; @@ -347,9 +347,9 @@ public class BiometricSchedulerOperation { return mClientMonitor == clientMonitor; } - /** If this operation is {@link Interruptable}. */ + /** If this operation is interruptable. */ public boolean isInterruptable() { - return mClientMonitor instanceof Interruptable; + return mClientMonitor.isInterruptable(); } private boolean isHalOperation() { diff --git a/services/core/java/com/android/server/biometrics/sensors/Interruptable.java b/services/core/java/com/android/server/biometrics/sensors/Interruptable.java deleted file mode 100644 index 4f645efcccf0..000000000000 --- a/services/core/java/com/android/server/biometrics/sensors/Interruptable.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2020 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 com.android.server.biometrics.sensors; - -import android.annotation.NonNull; - -/** - * Interface that {@link BaseClientMonitor} subclasses eligible for cancellation should implement. - */ -public interface Interruptable { - /** - * Requests to end the ClientMonitor's lifecycle. - */ - void cancel(); - - /** - * Notifies the client that it needs to finish before - * {@link BaseClientMonitor#start(ClientMonitorCallback)} was invoked. This usually happens - * if the client is still waiting in the pending queue and got notified that a subsequent - * operation is preempting it. - * - * This method must invoke - * {@link ClientMonitorCallback#onClientFinished(BaseClientMonitor, boolean)} on the - * given callback (with success). - * - * @param callback invoked when the operation is completed. - */ - void cancelWithoutStarting(@NonNull ClientMonitorCallback callback); -} diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java index 800d4b8acf61..0f5cdc3e1cf8 100644 --- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java +++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/Sensor.java @@ -59,7 +59,6 @@ import com.android.server.biometrics.sensors.BaseClientMonitor; import com.android.server.biometrics.sensors.BiometricScheduler; import com.android.server.biometrics.sensors.EnumerateConsumer; import com.android.server.biometrics.sensors.ErrorConsumer; -import com.android.server.biometrics.sensors.Interruptable; import com.android.server.biometrics.sensors.LockoutCache; import com.android.server.biometrics.sensors.LockoutConsumer; import com.android.server.biometrics.sensors.LockoutResetDispatcher; @@ -638,7 +637,7 @@ public class Sensor { public void onBinderDied() { final BaseClientMonitor client = mScheduler.getCurrentClient(); - if (client instanceof Interruptable) { + if (client.isInterruptable()) { Slog.e(mTag, "Sending ERROR_HW_UNAVAILABLE for client: " + client); final ErrorConsumer errorConsumer = (ErrorConsumer) client; errorConsumer.onError(FaceManager.FACE_ERROR_HW_UNAVAILABLE, diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java index 8e6d90c839d8..3a9c0f0f1790 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BaseClientMonitorTest.java @@ -107,7 +107,7 @@ public class BaseClientMonitorTest { assertThat(mClientMonitor.getRequestId()).isEqualTo(id); } - private class TestClientMonitor extends BaseClientMonitor implements Interruptable { + private class TestClientMonitor extends BaseClientMonitor { public boolean mCanceled = false; TestClientMonitor() { @@ -129,5 +129,10 @@ public class BaseClientMonitorTest { public void cancelWithoutStarting(@NonNull ClientMonitorCallback callback) { mCanceled = true; } + + @Override + public boolean isInterruptable() { + return true; + } } } diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java index 9e9d70332f00..3c77a3593001 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerOperationTest.java @@ -57,11 +57,16 @@ public class BiometricSchedulerOperationTest { public interface FakeHal {} public abstract static class InterruptableMonitor<T> - extends HalClientMonitor<T> implements Interruptable { + extends HalClientMonitor<T> { public InterruptableMonitor() { super(null, null, null, null, 0, null, 0, 0, mock(BiometricLogger.class), mock(BiometricContext.class)); } + + @Override + public boolean isInterruptable() { + return true; + } } @Rule @@ -293,7 +298,6 @@ public class BiometricSchedulerOperationTest { assertThat(mOperation.isCanceling()).isTrue(); verify(mClientMonitor).cancel(); - verify(mClientMonitor, never()).cancelWithoutStarting(any()); verify(mClientMonitor, never()).destroy(); mStartedCallbackCaptor.getValue().onClientFinished(mClientMonitor, true); diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java index ffacbf331d89..9f30c7578540 100644 --- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java +++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/BiometricSchedulerTest.java @@ -34,7 +34,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.mockito.Mockito.withSettings; import android.content.Context; import android.hardware.biometrics.BiometricAuthenticator; @@ -475,8 +474,8 @@ public class BiometricSchedulerTest { @Test public void testInterruptPrecedingClients_whenExpected() { - final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class, - withSettings().extraInterfaces(Interruptable.class)); + final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class); + when(interruptableMonitor.isInterruptable()).thenReturn(true); final BaseClientMonitor interrupter = mock(BaseClientMonitor.class); when(interrupter.interruptsPrecedingClients()).thenReturn(true); @@ -491,8 +490,8 @@ public class BiometricSchedulerTest { @Test public void testDoesNotInterruptPrecedingClients_whenNotExpected() { - final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class, - withSettings().extraInterfaces(Interruptable.class)); + final BaseClientMonitor interruptableMonitor = mock(BaseClientMonitor.class); + when(interruptableMonitor.isInterruptable()).thenReturn(true); final BaseClientMonitor interrupter = mock(BaseClientMonitor.class); when(interrupter.interruptsPrecedingClients()).thenReturn(false); |