Merge "Revert "Revert "Dismiss Auth Biometric Prompt when expanding shade""" into tm-dev
This commit is contained in:
@@ -15,9 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.systemui.biometrics
|
package com.android.systemui.biometrics
|
||||||
|
|
||||||
|
import com.android.systemui.broadcast.BroadcastSender
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
||||||
|
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener
|
||||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
|
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,6 +30,7 @@ class UdfpsBpViewController(
|
|||||||
statusBarStateController: StatusBarStateController,
|
statusBarStateController: StatusBarStateController,
|
||||||
panelExpansionStateManager: PanelExpansionStateManager,
|
panelExpansionStateManager: PanelExpansionStateManager,
|
||||||
systemUIDialogManager: SystemUIDialogManager,
|
systemUIDialogManager: SystemUIDialogManager,
|
||||||
|
val broadcastSender: BroadcastSender,
|
||||||
dumpManager: DumpManager
|
dumpManager: DumpManager
|
||||||
) : UdfpsAnimationViewController<UdfpsBpView>(
|
) : UdfpsAnimationViewController<UdfpsBpView>(
|
||||||
view,
|
view,
|
||||||
@@ -37,4 +40,29 @@ class UdfpsBpViewController(
|
|||||||
dumpManager
|
dumpManager
|
||||||
) {
|
) {
|
||||||
override val tag = "UdfpsBpViewController"
|
override val tag = "UdfpsBpViewController"
|
||||||
|
private val bpPanelExpansionListener = PanelExpansionListener { event ->
|
||||||
|
// Notification shade can be expanded but not visible (fraction: 0.0), for example
|
||||||
|
// when a heads-up notification (HUN) is showing.
|
||||||
|
notificationShadeVisible = event.expanded && event.fraction > 0f
|
||||||
|
view.onExpansionChanged(event.fraction)
|
||||||
|
cancelAuth()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun cancelAuth() {
|
||||||
|
if (shouldPauseAuth()) {
|
||||||
|
broadcastSender.closeSystemDialogs()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewAttached() {
|
||||||
|
super.onViewAttached()
|
||||||
|
|
||||||
|
panelExpansionStateManager.addExpansionListener(bpPanelExpansionListener)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewDetached() {
|
||||||
|
super.onViewDetached()
|
||||||
|
|
||||||
|
panelExpansionStateManager.removeExpansionListener(bpPanelExpansionListener)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,10 @@ import static com.android.systemui.classifier.Classifier.UDFPS_AUTHENTICATION;
|
|||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.hardware.biometrics.BiometricFingerprintConstants;
|
import android.hardware.biometrics.BiometricFingerprintConstants;
|
||||||
import android.hardware.display.DisplayManager;
|
import android.hardware.display.DisplayManager;
|
||||||
@@ -51,6 +54,7 @@ import com.android.internal.util.LatencyTracker;
|
|||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator;
|
import com.android.systemui.animation.ActivityLaunchAnimator;
|
||||||
import com.android.systemui.biometrics.dagger.BiometricsBackground;
|
import com.android.systemui.biometrics.dagger.BiometricsBackground;
|
||||||
|
import com.android.systemui.broadcast.BroadcastSender;
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.doze.DozeReceiver;
|
import com.android.systemui.doze.DozeReceiver;
|
||||||
@@ -124,6 +128,7 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
@NonNull private final UnlockedScreenOffAnimationController
|
@NonNull private final UnlockedScreenOffAnimationController
|
||||||
mUnlockedScreenOffAnimationController;
|
mUnlockedScreenOffAnimationController;
|
||||||
@NonNull private final LatencyTracker mLatencyTracker;
|
@NonNull private final LatencyTracker mLatencyTracker;
|
||||||
|
@NonNull private final BroadcastSender mBroadcastSender;
|
||||||
@VisibleForTesting @NonNull final BiometricDisplayListener mOrientationListener;
|
@VisibleForTesting @NonNull final BiometricDisplayListener mOrientationListener;
|
||||||
@NonNull private final ActivityLaunchAnimator mActivityLaunchAnimator;
|
@NonNull private final ActivityLaunchAnimator mActivityLaunchAnimator;
|
||||||
|
|
||||||
@@ -204,7 +209,7 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
mUnlockedScreenOffAnimationController, mHalControlsIllumination,
|
mUnlockedScreenOffAnimationController, mHalControlsIllumination,
|
||||||
mHbmProvider, requestId, reason, callback,
|
mHbmProvider, requestId, reason, callback,
|
||||||
(view, event, fromUdfpsView) -> onTouch(requestId, event,
|
(view, event, fromUdfpsView) -> onTouch(requestId, event,
|
||||||
fromUdfpsView), mActivityLaunchAnimator)));
|
fromUdfpsView), mActivityLaunchAnimator, mBroadcastSender)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -333,6 +338,20 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
return velocity > 750f;
|
return velocity > 750f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
if (mOverlay != null
|
||||||
|
&& mOverlay.getRequestReason() != REASON_AUTH_KEYGUARD
|
||||||
|
&& Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
|
||||||
|
Log.d(TAG, "ACTION_CLOSE_SYSTEM_DIALOGS received, mRequestReason: "
|
||||||
|
+ mOverlay.getRequestReason());
|
||||||
|
mOverlay.cancel();
|
||||||
|
hideUdfpsOverlay();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forwards touches to the udfps controller / view
|
* Forwards touches to the udfps controller / view
|
||||||
*/
|
*/
|
||||||
@@ -587,6 +606,7 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
@NonNull LatencyTracker latencyTracker,
|
@NonNull LatencyTracker latencyTracker,
|
||||||
@NonNull ActivityLaunchAnimator activityLaunchAnimator,
|
@NonNull ActivityLaunchAnimator activityLaunchAnimator,
|
||||||
@NonNull Optional<AlternateUdfpsTouchProvider> aternateTouchProvider,
|
@NonNull Optional<AlternateUdfpsTouchProvider> aternateTouchProvider,
|
||||||
|
@NonNull BroadcastSender broadcastSender,
|
||||||
@BiometricsBackground Executor biometricsExecutor) {
|
@BiometricsBackground Executor biometricsExecutor) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mExecution = execution;
|
mExecution = execution;
|
||||||
@@ -617,6 +637,7 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
mLatencyTracker = latencyTracker;
|
mLatencyTracker = latencyTracker;
|
||||||
mActivityLaunchAnimator = activityLaunchAnimator;
|
mActivityLaunchAnimator = activityLaunchAnimator;
|
||||||
mAlternateTouchProvider = aternateTouchProvider.orElse(null);
|
mAlternateTouchProvider = aternateTouchProvider.orElse(null);
|
||||||
|
mBroadcastSender = broadcastSender;
|
||||||
mBiometricExecutor = biometricsExecutor;
|
mBiometricExecutor = biometricsExecutor;
|
||||||
|
|
||||||
mOrientationListener = new BiometricDisplayListener(
|
mOrientationListener = new BiometricDisplayListener(
|
||||||
@@ -634,6 +655,11 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
final UdfpsOverlayController mUdfpsOverlayController = new UdfpsOverlayController();
|
final UdfpsOverlayController mUdfpsOverlayController = new UdfpsOverlayController();
|
||||||
mFingerprintManager.setUdfpsOverlayController(mUdfpsOverlayController);
|
mFingerprintManager.setUdfpsOverlayController(mUdfpsOverlayController);
|
||||||
|
|
||||||
|
final IntentFilter filter = new IntentFilter();
|
||||||
|
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
|
||||||
|
context.registerReceiver(mBroadcastReceiver, filter,
|
||||||
|
Context.RECEIVER_EXPORTED_UNAUDITED);
|
||||||
|
|
||||||
udfpsHapticsSimulator.setUdfpsController(this);
|
udfpsHapticsSimulator.setUdfpsController(this);
|
||||||
udfpsShell.setUdfpsOverlayController(mUdfpsOverlayController);
|
udfpsShell.setUdfpsOverlayController(mUdfpsOverlayController);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import androidx.annotation.LayoutRes
|
|||||||
import com.android.keyguard.KeyguardUpdateMonitor
|
import com.android.keyguard.KeyguardUpdateMonitor
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.ActivityLaunchAnimator
|
||||||
|
import com.android.systemui.broadcast.BroadcastSender
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||||
import com.android.systemui.statusbar.LockscreenShadeTransitionController
|
import com.android.systemui.statusbar.LockscreenShadeTransitionController
|
||||||
@@ -83,7 +84,8 @@ class UdfpsControllerOverlay(
|
|||||||
@ShowReason val requestReason: Int,
|
@ShowReason val requestReason: Int,
|
||||||
private val controllerCallback: IUdfpsOverlayControllerCallback,
|
private val controllerCallback: IUdfpsOverlayControllerCallback,
|
||||||
private val onTouch: (View, MotionEvent, Boolean) -> Boolean,
|
private val onTouch: (View, MotionEvent, Boolean) -> Boolean,
|
||||||
private val activityLaunchAnimator: ActivityLaunchAnimator
|
private val activityLaunchAnimator: ActivityLaunchAnimator,
|
||||||
|
private val broadcastSender: BroadcastSender
|
||||||
) {
|
) {
|
||||||
/** The view, when [isShowing], or null. */
|
/** The view, when [isShowing], or null. */
|
||||||
var overlayView: UdfpsView? = null
|
var overlayView: UdfpsView? = null
|
||||||
@@ -102,8 +104,8 @@ class UdfpsControllerOverlay(
|
|||||||
fitInsetsTypes = 0
|
fitInsetsTypes = 0
|
||||||
gravity = android.view.Gravity.TOP or android.view.Gravity.LEFT
|
gravity = android.view.Gravity.TOP or android.view.Gravity.LEFT
|
||||||
layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
|
layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
|
||||||
flags =
|
flags = (Utils.FINGERPRINT_OVERLAY_LAYOUT_PARAM_FLAGS
|
||||||
(Utils.FINGERPRINT_OVERLAY_LAYOUT_PARAM_FLAGS or WindowManager.LayoutParams.FLAG_SPLIT_TOUCH)
|
or WindowManager.LayoutParams.FLAG_SPLIT_TOUCH)
|
||||||
privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY
|
privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY
|
||||||
// Avoid announcing window title.
|
// Avoid announcing window title.
|
||||||
accessibilityTitle = " "
|
accessibilityTitle = " "
|
||||||
@@ -225,6 +227,7 @@ class UdfpsControllerOverlay(
|
|||||||
statusBarStateController,
|
statusBarStateController,
|
||||||
panelExpansionStateManager,
|
panelExpansionStateManager,
|
||||||
dialogManager,
|
dialogManager,
|
||||||
|
broadcastSender,
|
||||||
dumpManager
|
dumpManager
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* 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.app.Instrumentation
|
||||||
|
import android.testing.AndroidTestingRunner
|
||||||
|
import android.testing.TestableLooper
|
||||||
|
import android.testing.ViewUtils
|
||||||
|
import androidx.test.filters.SmallTest
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
|
||||||
|
import com.android.internal.jank.InteractionJankMonitor
|
||||||
|
import com.android.internal.logging.testing.UiEventLoggerFake
|
||||||
|
import com.android.systemui.R
|
||||||
|
import com.android.systemui.SysuiTestCase
|
||||||
|
import com.android.systemui.broadcast.BroadcastSender
|
||||||
|
import com.android.systemui.dump.DumpManager
|
||||||
|
import com.android.systemui.statusbar.StatusBarStateControllerImpl
|
||||||
|
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
||||||
|
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
|
||||||
|
import com.android.systemui.util.mockito.any
|
||||||
|
import org.junit.After
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.spy
|
||||||
|
import org.mockito.Mockito.times
|
||||||
|
import org.mockito.Mockito.verify
|
||||||
|
import org.mockito.junit.MockitoJUnit
|
||||||
|
|
||||||
|
@SmallTest
|
||||||
|
@RunWith(AndroidTestingRunner::class)
|
||||||
|
@TestableLooper.RunWithLooper
|
||||||
|
class UdfpsBpViewControllerTest : SysuiTestCase() {
|
||||||
|
|
||||||
|
@JvmField @Rule var rule = MockitoJUnit.rule()
|
||||||
|
|
||||||
|
@Mock lateinit var dumpManager: DumpManager
|
||||||
|
@Mock lateinit var systemUIDialogManager: SystemUIDialogManager
|
||||||
|
@Mock lateinit var broadcastSender: BroadcastSender
|
||||||
|
@Mock lateinit var interactionJankMonitor: InteractionJankMonitor
|
||||||
|
@Mock lateinit var panelExpansionStateManager: PanelExpansionStateManager
|
||||||
|
|
||||||
|
private lateinit var instrumentation: Instrumentation
|
||||||
|
private lateinit var uiEventLogger: UiEventLoggerFake
|
||||||
|
private lateinit var udfpsBpView: UdfpsBpView
|
||||||
|
private lateinit var statusBarStateController: StatusBarStateControllerImpl
|
||||||
|
private lateinit var udfpsBpViewController: UdfpsBpViewController
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setup() {
|
||||||
|
instrumentation = getInstrumentation()
|
||||||
|
instrumentation.runOnMainSync { createUdfpsView() }
|
||||||
|
instrumentation.waitForIdleSync()
|
||||||
|
|
||||||
|
uiEventLogger = UiEventLoggerFake()
|
||||||
|
statusBarStateController =
|
||||||
|
StatusBarStateControllerImpl(uiEventLogger, dumpManager, interactionJankMonitor)
|
||||||
|
udfpsBpViewController = UdfpsBpViewController(
|
||||||
|
udfpsBpView,
|
||||||
|
statusBarStateController,
|
||||||
|
panelExpansionStateManager,
|
||||||
|
systemUIDialogManager,
|
||||||
|
broadcastSender,
|
||||||
|
dumpManager)
|
||||||
|
udfpsBpViewController.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun tearDown() {
|
||||||
|
if (udfpsBpViewController.isAttachedToWindow) {
|
||||||
|
instrumentation.runOnMainSync { ViewUtils.detachView(udfpsBpView) }
|
||||||
|
instrumentation.waitForIdleSync()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createUdfpsView() {
|
||||||
|
context.setTheme(R.style.Theme_AppCompat)
|
||||||
|
context.orCreateTestableResources.addOverride(
|
||||||
|
com.android.internal.R.integer.config_udfps_illumination_transition_ms, 0)
|
||||||
|
udfpsBpView = UdfpsBpView(context, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun addExpansionListener() {
|
||||||
|
instrumentation.runOnMainSync { ViewUtils.attachView(udfpsBpView) }
|
||||||
|
instrumentation.waitForIdleSync()
|
||||||
|
|
||||||
|
// Both UdfpsBpViewController & UdfpsAnimationViewController add listener
|
||||||
|
verify(panelExpansionStateManager, times(2)).addExpansionListener(any())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun removeExpansionListener() {
|
||||||
|
instrumentation.runOnMainSync { ViewUtils.attachView(udfpsBpView) }
|
||||||
|
instrumentation.waitForIdleSync()
|
||||||
|
instrumentation.runOnMainSync { ViewUtils.detachView(udfpsBpView) }
|
||||||
|
instrumentation.waitForIdleSync()
|
||||||
|
|
||||||
|
// Both UdfpsBpViewController & UdfpsAnimationViewController remove listener
|
||||||
|
verify(panelExpansionStateManager, times(2)).removeExpansionListener(any())
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,6 +40,7 @@ import com.android.keyguard.KeyguardUpdateMonitor
|
|||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator
|
import com.android.systemui.animation.ActivityLaunchAnimator
|
||||||
|
import com.android.systemui.broadcast.BroadcastSender
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
import com.android.systemui.plugins.statusbar.StatusBarStateController
|
||||||
import com.android.systemui.statusbar.LockscreenShadeTransitionController
|
import com.android.systemui.statusbar.LockscreenShadeTransitionController
|
||||||
@@ -102,6 +103,7 @@ class UdfpsControllerOverlayTest : SysuiTestCase() {
|
|||||||
@Mock private lateinit var udfpsView: UdfpsView
|
@Mock private lateinit var udfpsView: UdfpsView
|
||||||
@Mock private lateinit var udfpsEnrollView: UdfpsEnrollView
|
@Mock private lateinit var udfpsEnrollView: UdfpsEnrollView
|
||||||
@Mock private lateinit var activityLaunchAnimator: ActivityLaunchAnimator
|
@Mock private lateinit var activityLaunchAnimator: ActivityLaunchAnimator
|
||||||
|
@Mock private lateinit var broadcastSender: BroadcastSender
|
||||||
@Captor private lateinit var layoutParamsCaptor: ArgumentCaptor<WindowManager.LayoutParams>
|
@Captor private lateinit var layoutParamsCaptor: ArgumentCaptor<WindowManager.LayoutParams>
|
||||||
|
|
||||||
private val onTouch = { _: View, _: MotionEvent, _: Boolean -> true }
|
private val onTouch = { _: View, _: MotionEvent, _: Boolean -> true }
|
||||||
@@ -131,7 +133,8 @@ class UdfpsControllerOverlayTest : SysuiTestCase() {
|
|||||||
keyguardUpdateMonitor, dialogManager, dumpManager, transitionController,
|
keyguardUpdateMonitor, dialogManager, dumpManager, transitionController,
|
||||||
configurationController, systemClock, keyguardStateController,
|
configurationController, systemClock, keyguardStateController,
|
||||||
unlockedScreenOffAnimationController, HAL_CONTROLS_ILLUMINATION, hbmProvider,
|
unlockedScreenOffAnimationController, HAL_CONTROLS_ILLUMINATION, hbmProvider,
|
||||||
REQUEST_ID, reason, controllerCallback, onTouch, activityLaunchAnimator)
|
REQUEST_ID, reason, controllerCallback, onTouch, activityLaunchAnimator,
|
||||||
|
broadcastSender)
|
||||||
block()
|
block()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.animation.ActivityLaunchAnimator;
|
import com.android.systemui.animation.ActivityLaunchAnimator;
|
||||||
|
import com.android.systemui.broadcast.BroadcastSender;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.keyguard.ScreenLifecycle;
|
import com.android.systemui.keyguard.ScreenLifecycle;
|
||||||
import com.android.systemui.plugins.FalsingManager;
|
import com.android.systemui.plugins.FalsingManager;
|
||||||
@@ -187,6 +188,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
|||||||
private ActivityLaunchAnimator mActivityLaunchAnimator;
|
private ActivityLaunchAnimator mActivityLaunchAnimator;
|
||||||
@Mock
|
@Mock
|
||||||
private AlternateUdfpsTouchProvider mAlternateTouchProvider;
|
private AlternateUdfpsTouchProvider mAlternateTouchProvider;
|
||||||
|
@Mock
|
||||||
|
private BroadcastSender mBroadcastSender;
|
||||||
|
|
||||||
// Capture listeners so that they can be used to send events
|
// Capture listeners so that they can be used to send events
|
||||||
@Captor private ArgumentCaptor<IUdfpsOverlayController> mOverlayCaptor;
|
@Captor private ArgumentCaptor<IUdfpsOverlayController> mOverlayCaptor;
|
||||||
@@ -267,6 +270,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
|||||||
mLatencyTracker,
|
mLatencyTracker,
|
||||||
mActivityLaunchAnimator,
|
mActivityLaunchAnimator,
|
||||||
Optional.of(mAlternateTouchProvider),
|
Optional.of(mAlternateTouchProvider),
|
||||||
|
mBroadcastSender,
|
||||||
mBiometricsExecutor);
|
mBiometricsExecutor);
|
||||||
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
|
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
|
||||||
mOverlayController = mOverlayCaptor.getValue();
|
mOverlayController = mOverlayCaptor.getValue();
|
||||||
|
|||||||
Reference in New Issue
Block a user