Merge "Revert "Dismiss Auth Biometric Prompt when expanding shade"" into tm-dev am: 4332951cdb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18817387 Change-Id: I80f6c02548f3e691dbe1cfc51aa2fff4dcb27831 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -15,11 +15,9 @@
|
|||||||
*/
|
*/
|
||||||
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
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30,7 +28,6 @@ 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,
|
||||||
@@ -40,29 +37,4 @@ 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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ 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;
|
||||||
@@ -128,7 +127,6 @@ 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;
|
||||||
|
|
||||||
@@ -209,7 +207,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, mBroadcastSender)));
|
fromUdfpsView), mActivityLaunchAnimator)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -606,7 +604,6 @@ 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;
|
||||||
@@ -637,7 +634,6 @@ 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(
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ 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
|
||||||
@@ -84,8 +83,7 @@ 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
|
||||||
@@ -104,8 +102,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 = (Utils.FINGERPRINT_OVERLAY_LAYOUT_PARAM_FLAGS
|
flags =
|
||||||
or WindowManager.LayoutParams.FLAG_SPLIT_TOUCH)
|
(Utils.FINGERPRINT_OVERLAY_LAYOUT_PARAM_FLAGS 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 = " "
|
||||||
@@ -227,7 +225,6 @@ class UdfpsControllerOverlay(
|
|||||||
statusBarStateController,
|
statusBarStateController,
|
||||||
panelExpansionStateManager,
|
panelExpansionStateManager,
|
||||||
dialogManager,
|
dialogManager,
|
||||||
broadcastSender,
|
|
||||||
dumpManager
|
dumpManager
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,118 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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,7 +40,6 @@ 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
|
||||||
@@ -103,7 +102,6 @@ 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 }
|
||||||
@@ -133,8 +131,7 @@ 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,7 +66,6 @@ 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;
|
||||||
@@ -188,8 +187,6 @@ 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;
|
||||||
@@ -270,7 +267,6 @@ 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