diff options
| author | 2022-05-02 19:30:34 +0000 | |
|---|---|---|
| committer | 2022-05-02 19:30:34 +0000 | |
| commit | 6ea6acf1fc8672308fd1fe5e7f5209b2fbe39741 (patch) | |
| tree | 69295c952681c0b2c7be7f78965a5a0bfb5b9acd | |
| parent | d70a79df352d43edead339badf4ee9c6546acf0a (diff) | |
| parent | 397a1fa78b705cd3f7bb2d3c0bf4d1379e9dd607 (diff) | |
Merge "Add SysUI shell commands to show and hide the UDFPS overlay" into tm-dev
3 files changed, 117 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index 0096032a6e68..20efafce3cd5 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -555,6 +555,7 @@ public class UdfpsController implements DozeReceiver { @NonNull ScreenLifecycle screenLifecycle, @NonNull VibratorHelper vibrator, @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, + @NonNull UdfpsShell udfpsShell, @NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull KeyguardStateController keyguardStateController, @NonNull DisplayManager displayManager, @@ -608,7 +609,8 @@ public class UdfpsController implements DozeReceiver { return Unit.INSTANCE; }); - mFingerprintManager.setUdfpsOverlayController(new UdfpsOverlayController()); + final UdfpsOverlayController mUdfpsOverlayController = new UdfpsOverlayController(); + mFingerprintManager.setUdfpsOverlayController(mUdfpsOverlayController); final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); @@ -616,6 +618,7 @@ public class UdfpsController implements DozeReceiver { Context.RECEIVER_EXPORTED_UNAUDITED); udfpsHapticsSimulator.setUdfpsController(this); + udfpsShell.setUdfpsOverlayController(mUdfpsOverlayController); } /** diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsShell.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsShell.kt new file mode 100644 index 000000000000..b1d6e003319a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsShell.kt @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2022 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.systemui.biometrics + +import android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_BP +import android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_KEYGUARD +import android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_OTHER +import android.hardware.biometrics.BiometricOverlayConstants.REASON_AUTH_SETTINGS +import android.hardware.biometrics.BiometricOverlayConstants.REASON_ENROLL_ENROLLING +import android.hardware.biometrics.BiometricOverlayConstants.REASON_ENROLL_FIND_SENSOR +import android.hardware.biometrics.BiometricOverlayConstants.REASON_UNKNOWN +import android.hardware.fingerprint.IUdfpsOverlayController +import android.hardware.fingerprint.IUdfpsOverlayControllerCallback +import android.util.Log +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.statusbar.commandline.Command +import com.android.systemui.statusbar.commandline.CommandRegistry +import java.io.PrintWriter +import javax.inject.Inject + +private const val TAG = "UdfpsShell" +private const val REQUEST_ID = 2L +private const val SENSOR_ID = 0 + +/** + * Used to show and hide the UDFPS overlay with statusbar commands. + */ +@SysUISingleton +class UdfpsShell @Inject constructor( + commandRegistry: CommandRegistry +) : Command { + + /** + * Set in [UdfpsController.java] constructor, used to show and hide the UDFPS overlay. + * TODO: inject after b/229290039 is resolved + */ + var udfpsOverlayController: IUdfpsOverlayController? = null + + init { + commandRegistry.registerCommand("udfps") { this } + } + + override fun execute(pw: PrintWriter, args: List<String>) { + if (args.size == 1 && args[0] == "hide") { + hideOverlay() + } else if (args.size == 2 && args[0] == "show") { + showOverlay(getEnrollmentReason(args[1])) + } else { + invalidCommand(pw) + } + } + + override fun help(pw: PrintWriter) { + pw.println("Usage: adb shell cmd statusbar udfps <cmd>") + pw.println("Supported commands:") + pw.println(" - show <reason>") + pw.println(" -> supported reasons: [enroll-find-sensor, enroll-enrolling, auth-bp, " + + "auth-keyguard, auth-other, auth-settings]") + pw.println(" -> reason otherwise defaults to unknown") + pw.println(" - hide") + } + + private fun invalidCommand(pw: PrintWriter) { + pw.println("invalid command") + help(pw) + } + + private fun getEnrollmentReason(reason: String): Int { + return when (reason) { + "enroll-find-sensor" -> REASON_ENROLL_FIND_SENSOR + "enroll-enrolling" -> REASON_ENROLL_ENROLLING + "auth-bp" -> REASON_AUTH_BP + "auth-keyguard" -> REASON_AUTH_KEYGUARD + "auth-other" -> REASON_AUTH_OTHER + "auth-settings" -> REASON_AUTH_SETTINGS + else -> REASON_UNKNOWN + } + } + + private fun showOverlay(reason: Int) { + udfpsOverlayController?.showUdfpsOverlay( + REQUEST_ID, + SENSOR_ID, + reason, + object : IUdfpsOverlayControllerCallback.Stub() { + override fun onUserCanceled() { + Log.e(TAG, "User cancelled") + } + } + ) + } + + private fun hideOverlay() { + udfpsOverlayController?.hideUdfpsOverlay(SENSOR_ID) + } +}
\ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java index 80df1e3a7e5c..7779f42f1a2e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java @@ -150,6 +150,8 @@ public class UdfpsControllerTest extends SysuiTestCase { @Mock private UdfpsHapticsSimulator mUdfpsHapticsSimulator; @Mock + private UdfpsShell mUdfpsShell; + @Mock private KeyguardStateController mKeyguardStateController; @Mock private DisplayManager mDisplayManager; @@ -247,6 +249,7 @@ public class UdfpsControllerTest extends SysuiTestCase { mScreenLifecycle, mVibrator, mUdfpsHapticsSimulator, + mUdfpsShell, Optional.of(mHbmProvider), mKeyguardStateController, mDisplayManager, |