From 8d8fc3f0d8469bbcc881991813907fbd0f6cb807 Mon Sep 17 00:00:00 2001 From: Achim Thesmann Date: Fri, 26 Jan 2024 07:34:05 +0000 Subject: Return correct result When we find an exemption for another process of the caller app's UID we need to return that exemption and not the verdict for the caller app. Test: manual test / atest BackgroundActivityLaunchTest Bug: 320758929 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:8ed0c0d1dd06d52900ed910a9d1270e406add282) Merged-In: I838e6d1bd4c1a1b25e206af15075c04eedf93e51 Change-Id: I838e6d1bd4c1a1b25e206af15075c04eedf93e51 --- .../java/com/android/server/wm/BackgroundActivityStartController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java index 4929df8061b2..a374b26557dc 100644 --- a/services/core/java/com/android/server/wm/BackgroundActivityStartController.java +++ b/services/core/java/com/android/server/wm/BackgroundActivityStartController.java @@ -936,7 +936,7 @@ public class BackgroundActivityStartController { BalVerdict balAllowedForUid = proc.areBackgroundActivityStartsAllowed( state.mAppSwitchState); if (balAllowedForUid.allows()) { - return balAllowedForCaller.withProcessInfo("process", proc); + return balAllowedForUid.withProcessInfo("process", proc); } } } -- cgit v1.2.3 From 6b659658e8062510b44fe0cd2b30dfbe867b4b3e Mon Sep 17 00:00:00 2001 From: Grace Cheng Date: Sat, 16 Dec 2023 04:52:58 +0000 Subject: Gate SideFpsOverlayViewBinder and DeviceEntrySideFpsOverlayInteractor on device having SFPS Add SFPS check to SideFpsOverlayViewBinder start() method and DeviceEntrySideFpsOverlayInteractor init() method Flag: NONE Fixes: 316606073 Test: atest SideFpsOverlayViewBinderTest Test: atest DeviceEntrySideFpsOverlayInteractorTest (cherry picked from commit fafbef1a604e9cc30ca129716d504dd29813bfcb) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:15305a73731b7540d0ac3a925fc990954b26827a) Merged-In: Id46fb9e849608c2e6ab7cffb52dcb6b35dd84298 Change-Id: Id46fb9e849608c2e6ab7cffb52dcb6b35dd84298 --- .../ui/binder/SideFpsOverlayViewBinder.kt | 92 ++++++++++++---------- .../DeviceEntrySideFpsOverlayInteractor.kt | 15 +++- .../ui/binder/SideFpsOverlayViewBinderTest.kt | 17 ++-- .../ui/viewmodel/SideFpsOverlayViewModelTest.kt | 1 + .../DeviceEntrySideFpsOverlayInteractorTest.kt | 1 + 5 files changed, 75 insertions(+), 51 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt index a8c9446fd689..c36e0e21d021 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinder.kt @@ -47,6 +47,7 @@ import com.android.systemui.keyguard.ui.viewmodel.SideFpsProgressBarViewModel import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.res.R import com.android.systemui.util.kotlin.sample +import dagger.Lazy import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine @@ -59,49 +60,56 @@ class SideFpsOverlayViewBinder constructor( @Application private val applicationScope: CoroutineScope, @Application private val applicationContext: Context, - private val biometricStatusInteractor: BiometricStatusInteractor, - private val displayStateInteractor: DisplayStateInteractor, - private val deviceEntrySideFpsOverlayInteractor: DeviceEntrySideFpsOverlayInteractor, - private val fpsUnlockTracker: FpsUnlockTracker, - private val layoutInflater: LayoutInflater, - private val sideFpsProgressBarViewModel: SideFpsProgressBarViewModel, - private val sfpsSensorInteractor: SideFpsSensorInteractor, - private val windowManager: WindowManager + private val biometricStatusInteractor: Lazy, + private val displayStateInteractor: Lazy, + private val deviceEntrySideFpsOverlayInteractor: Lazy, + private val fpsUnlockTracker: Lazy, + private val layoutInflater: Lazy, + private val sideFpsProgressBarViewModel: Lazy, + private val sfpsSensorInteractor: Lazy, + private val windowManager: Lazy ) : CoreStartable { override fun start() { if (!SideFpsControllerRefactor.isEnabled) { return } + applicationScope .launch { - combine( - biometricStatusInteractor.sfpsAuthenticationReason, - deviceEntrySideFpsOverlayInteractor.showIndicatorForDeviceEntry, - sideFpsProgressBarViewModel.isVisible, - ::Triple - ) - .sample(displayStateInteractor.isInRearDisplayMode, ::Pair) - .collect { (combinedFlows, isInRearDisplayMode: Boolean) -> - val ( - systemServerAuthReason, - showIndicatorForDeviceEntry, - progressBarIsVisible) = - combinedFlows - if (!isInRearDisplayMode) { - if (progressBarIsVisible) { - hide() - } else if (systemServerAuthReason != NotRunning) { - show() - } else if (showIndicatorForDeviceEntry) { - show() - } else { - hide() + sfpsSensorInteractor.get().isAvailable.collect { isSfpsAvailable -> + if (isSfpsAvailable) { + combine( + biometricStatusInteractor.get().sfpsAuthenticationReason, + deviceEntrySideFpsOverlayInteractor + .get() + .showIndicatorForDeviceEntry, + sideFpsProgressBarViewModel.get().isVisible, + ::Triple + ) + .sample(displayStateInteractor.get().isInRearDisplayMode, ::Pair) + .collect { (combinedFlows, isInRearDisplayMode: Boolean) -> + val ( + systemServerAuthReason, + showIndicatorForDeviceEntry, + progressBarIsVisible) = + combinedFlows + if (!isInRearDisplayMode) { + if (progressBarIsVisible) { + hide() + } else if (systemServerAuthReason != NotRunning) { + show() + } else if (showIndicatorForDeviceEntry) { + show() + } else { + hide() + } + } } - } } + } } - .invokeOnCompletion { fpsUnlockTracker.stopTracking() } + .invokeOnCompletion { fpsUnlockTracker.get().stopTracking() } } private var overlayView: View? = null @@ -113,29 +121,29 @@ constructor( if (it.isAttachedToWindow) { lottie = it.requireViewById(R.id.sidefps_animation) lottie?.pauseAnimation() - windowManager.removeView(it) + windowManager.get().removeView(it) } } - overlayView = layoutInflater.inflate(R.layout.sidefps_view, null, false) + overlayView = layoutInflater.get().inflate(R.layout.sidefps_view, null, false) val overlayViewModel = SideFpsOverlayViewModel( applicationContext, - biometricStatusInteractor, - deviceEntrySideFpsOverlayInteractor, - displayStateInteractor, - sfpsSensorInteractor, - sideFpsProgressBarViewModel + biometricStatusInteractor.get(), + deviceEntrySideFpsOverlayInteractor.get(), + displayStateInteractor.get(), + sfpsSensorInteractor.get(), + sideFpsProgressBarViewModel.get() ) - bind(overlayView!!, overlayViewModel, fpsUnlockTracker, windowManager) + bind(overlayView!!, overlayViewModel, fpsUnlockTracker.get(), windowManager.get()) overlayView!!.visibility = View.INVISIBLE - windowManager.addView(overlayView, overlayViewModel.defaultOverlayViewParams) + windowManager.get().addView(overlayView, overlayViewModel.defaultOverlayViewParams) } /** Hide the side fingerprint sensor indicator */ private fun hide() { if (overlayView != null) { - windowManager.removeView(overlayView) + windowManager.get().removeView(overlayView) overlayView = null } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt index de15fd6a958f..ecf78d550a3f 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt @@ -22,15 +22,19 @@ import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application +import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor +import com.android.systemui.keyguard.data.repository.BiometricType import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository import com.android.systemui.res.R import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge +import kotlinx.coroutines.launch /** * Encapsulates business logic for device entry events that impact the side fingerprint sensor @@ -40,6 +44,7 @@ import kotlinx.coroutines.flow.merge class DeviceEntrySideFpsOverlayInteractor @Inject constructor( + @Application private val applicationScope: CoroutineScope, @Application private val context: Context, deviceEntryFingerprintAuthRepository: DeviceEntryFingerprintAuthRepository, private val primaryBouncerInteractor: PrimaryBouncerInteractor, @@ -48,7 +53,15 @@ constructor( ) { init { - alternateBouncerInteractor.setAlternateBouncerUIAvailable(true, TAG) + if (!DeviceEntryUdfpsRefactor.isEnabled) { + applicationScope.launch { + deviceEntryFingerprintAuthRepository.availableFpSensorType.collect { sensorType -> + if (sensorType == BiometricType.SIDE_FINGERPRINT) { + alternateBouncerInteractor.setAlternateBouncerUIAvailable(true, TAG) + } + } + } + } } private val showIndicatorForPrimaryBouncer: Flow = diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt index b4ae00ddd608..42d2c98f324c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt @@ -217,6 +217,7 @@ class SideFpsOverlayViewBinderTest : SysuiTestCase() { deviceEntrySideFpsOverlayInteractor = DeviceEntrySideFpsOverlayInteractor( + testScope.backgroundScope, mContext, deviceEntryFingerprintAuthRepository, primaryBouncerInteractor, @@ -260,14 +261,14 @@ class SideFpsOverlayViewBinderTest : SysuiTestCase() { SideFpsOverlayViewBinder( testScope.backgroundScope, mContext, - biometricStatusInteractor, - displayStateInteractor, - deviceEntrySideFpsOverlayInteractor, - fpsUnlockTracker, - layoutInflater, - sideFpsProgressBarViewModel, - sfpsSensorInteractor, - windowManager + { biometricStatusInteractor }, + { displayStateInteractor }, + { deviceEntrySideFpsOverlayInteractor }, + { fpsUnlockTracker }, + { layoutInflater }, + { sideFpsProgressBarViewModel }, + { sfpsSensorInteractor }, + { windowManager } ) context.addMockSystemService(DisplayManager::class.java, displayManager) diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt index 2267bdcafad8..983e4b3a9922 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModelTest.kt @@ -220,6 +220,7 @@ class SideFpsOverlayViewModelTest : SysuiTestCase() { deviceEntrySideFpsOverlayInteractor = DeviceEntrySideFpsOverlayInteractor( + testScope.backgroundScope, mContext, deviceEntryFingerprintAuthRepository, primaryBouncerInteractor, diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt index 70d3f81de35f..b00984cd2e3b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt @@ -110,6 +110,7 @@ class DeviceEntrySideFpsOverlayInteractorTest : SysuiTestCase() { ) underTest = DeviceEntrySideFpsOverlayInteractor( + testScope.backgroundScope, mContext, FakeDeviceEntryFingerprintAuthRepository(), primaryBouncerInteractor, -- cgit v1.2.3