Disable lockscreen shortcuts when the user enters lockdown mode

When lockdown mode is triggered, disable the lockscreen shortcuts until the user has left lockdown mode

Bug: b/285014861
Test: atest KeyguardQuickAffordanceInteractorTest.kt
Test: manual - while on lockscreen with quick affordance visible, enable lockdown mode. Observe the quick affordance becoming hidden. Unlock device, go back to lockscreen, and observe the quick affordance return.
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:09c1367cc5c8c7d63ed5022b552c79f72a87b61e)
Change-Id: I7755cf17893e3f98aa66640d68c43bba8bbe7459
This commit is contained in:
Brad Hinegardner
2023-05-31 22:02:08 +00:00
parent 2eb911d3cb
commit a6c3630d74
5 changed files with 40 additions and 3 deletions

View File

@@ -35,6 +35,7 @@ import com.android.systemui.dock.retrieveIsDocked
import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.FeatureFlags
import com.android.systemui.flags.Flags import com.android.systemui.flags.Flags
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceRegistry import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceRegistry
@@ -77,6 +78,7 @@ constructor(
private val logger: KeyguardQuickAffordancesMetricsLogger, private val logger: KeyguardQuickAffordancesMetricsLogger,
private val devicePolicyManager: DevicePolicyManager, private val devicePolicyManager: DevicePolicyManager,
private val dockManager: DockManager, private val dockManager: DockManager,
private val biometricSettingsRepository: BiometricSettingsRepository,
@Background private val backgroundDispatcher: CoroutineDispatcher, @Background private val backgroundDispatcher: CoroutineDispatcher,
@Application private val appContext: Context, @Application private val appContext: Context,
) { ) {
@@ -107,9 +109,10 @@ constructor(
quickAffordanceAlwaysVisible(position), quickAffordanceAlwaysVisible(position),
keyguardInteractor.isDozing, keyguardInteractor.isDozing,
keyguardInteractor.isKeyguardShowing, keyguardInteractor.isKeyguardShowing,
keyguardInteractor.isQuickSettingsVisible keyguardInteractor.isQuickSettingsVisible,
) { affordance, isDozing, isKeyguardShowing, isQuickSettingsVisible -> biometricSettingsRepository.isCurrentUserInLockdown,
if (!isDozing && isKeyguardShowing && !isQuickSettingsVisible) { ) { affordance, isDozing, isKeyguardShowing, isQuickSettingsVisible, isUserInLockdown ->
if (!isDozing && isKeyguardShowing && !isQuickSettingsVisible && !isUserInLockdown) {
affordance affordance
} else { } else {
KeyguardQuickAffordanceModel.Hidden KeyguardQuickAffordanceModel.Hidden

View File

@@ -44,6 +44,7 @@ import com.android.systemui.keyguard.data.quickaffordance.FakeKeyguardQuickAffor
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
@@ -99,6 +100,7 @@ class CustomizationProviderTest : SysuiTestCase() {
@Mock private lateinit var logger: KeyguardQuickAffordancesMetricsLogger @Mock private lateinit var logger: KeyguardQuickAffordancesMetricsLogger
private lateinit var dockManager: DockManagerFake private lateinit var dockManager: DockManagerFake
private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository
private lateinit var underTest: CustomizationProvider private lateinit var underTest: CustomizationProvider
private lateinit var testScope: TestScope private lateinit var testScope: TestScope
@@ -112,6 +114,7 @@ class CustomizationProviderTest : SysuiTestCase() {
whenever(backgroundHandler.looper).thenReturn(TestableLooper.get(this).looper) whenever(backgroundHandler.looper).thenReturn(TestableLooper.get(this).looper)
dockManager = DockManagerFake() dockManager = DockManagerFake()
biometricSettingsRepository = FakeBiometricSettingsRepository()
underTest = CustomizationProvider() underTest = CustomizationProvider()
val testDispatcher = UnconfinedTestDispatcher() val testDispatcher = UnconfinedTestDispatcher()
@@ -199,6 +202,7 @@ class CustomizationProviderTest : SysuiTestCase() {
logger = logger, logger = logger,
devicePolicyManager = devicePolicyManager, devicePolicyManager = devicePolicyManager,
dockManager = dockManager, dockManager = dockManager,
biometricSettingsRepository = biometricSettingsRepository,
backgroundDispatcher = testDispatcher, backgroundDispatcher = testDispatcher,
appContext = mContext, appContext = mContext,
) )

View File

@@ -38,6 +38,7 @@ import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanc
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
@@ -235,6 +236,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
@JvmField @Parameter(4) var startActivity: Boolean = false @JvmField @Parameter(4) var startActivity: Boolean = false
private lateinit var homeControls: FakeKeyguardQuickAffordanceConfig private lateinit var homeControls: FakeKeyguardQuickAffordanceConfig
private lateinit var dockManager: DockManagerFake private lateinit var dockManager: DockManagerFake
private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository
private lateinit var userTracker: UserTracker private lateinit var userTracker: UserTracker
@Before @Before
@@ -246,6 +248,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
homeControls = homeControls =
FakeKeyguardQuickAffordanceConfig(BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS) FakeKeyguardQuickAffordanceConfig(BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS)
dockManager = DockManagerFake() dockManager = DockManagerFake()
biometricSettingsRepository = FakeBiometricSettingsRepository()
val quickAccessWallet = val quickAccessWallet =
FakeKeyguardQuickAffordanceConfig( FakeKeyguardQuickAffordanceConfig(
BuiltInKeyguardQuickAffordanceKeys.QUICK_ACCESS_WALLET BuiltInKeyguardQuickAffordanceKeys.QUICK_ACCESS_WALLET
@@ -333,6 +336,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
logger = logger, logger = logger,
devicePolicyManager = devicePolicyManager, devicePolicyManager = devicePolicyManager,
dockManager = dockManager, dockManager = dockManager,
biometricSettingsRepository = biometricSettingsRepository,
backgroundDispatcher = testDispatcher, backgroundDispatcher = testDispatcher,
appContext = mContext, appContext = mContext,
) )

View File

@@ -40,6 +40,7 @@ import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanc
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
@@ -94,6 +95,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
private lateinit var qrCodeScanner: FakeKeyguardQuickAffordanceConfig private lateinit var qrCodeScanner: FakeKeyguardQuickAffordanceConfig
private lateinit var featureFlags: FakeFeatureFlags private lateinit var featureFlags: FakeFeatureFlags
private lateinit var dockManager: DockManagerFake private lateinit var dockManager: DockManagerFake
private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository
@Before @Before
fun setUp() { fun setUp() {
@@ -116,6 +118,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
testScope = TestScope(testDispatcher) testScope = TestScope(testDispatcher)
dockManager = DockManagerFake() dockManager = DockManagerFake()
biometricSettingsRepository = FakeBiometricSettingsRepository()
val localUserSelectionManager = val localUserSelectionManager =
KeyguardQuickAffordanceLocalUserSelectionManager( KeyguardQuickAffordanceLocalUserSelectionManager(
@@ -197,6 +200,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
logger = logger, logger = logger,
devicePolicyManager = devicePolicyManager, devicePolicyManager = devicePolicyManager,
dockManager = dockManager, dockManager = dockManager,
biometricSettingsRepository = biometricSettingsRepository,
backgroundDispatcher = testDispatcher, backgroundDispatcher = testDispatcher,
appContext = context, appContext = context,
) )
@@ -309,6 +313,24 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
assertThat(collectedValue()).isEqualTo(KeyguardQuickAffordanceModel.Hidden) assertThat(collectedValue()).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
} }
@Test
fun quickAffordance_hiddenWhenUserIsInLockdownMode() =
testScope.runTest {
biometricSettingsRepository.setIsUserInLockdown(true)
quickAccessWallet.setState(
KeyguardQuickAffordanceConfig.LockScreenState.Visible(
icon = ICON,
)
)
val collectedValue by
collectLastValue(
underTest.quickAffordance(KeyguardQuickAffordancePosition.BOTTOM_END)
)
assertThat(collectedValue).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
}
@Test @Test
fun quickAffordance_bottomStartAffordanceHiddenWhileDozing() = fun quickAffordance_bottomStartAffordanceHiddenWhileDozing() =
testScope.runTest { testScope.runTest {

View File

@@ -39,6 +39,7 @@ import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanc
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLegacySettingSyncer
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceLocalUserSelectionManager
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceRemoteUserSelectionManager
import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
@@ -107,6 +108,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
private lateinit var quickAccessWalletAffordanceConfig: FakeKeyguardQuickAffordanceConfig private lateinit var quickAccessWalletAffordanceConfig: FakeKeyguardQuickAffordanceConfig
private lateinit var qrCodeScannerAffordanceConfig: FakeKeyguardQuickAffordanceConfig private lateinit var qrCodeScannerAffordanceConfig: FakeKeyguardQuickAffordanceConfig
private lateinit var dockManager: DockManagerFake private lateinit var dockManager: DockManagerFake
private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository
@Before @Before
fun setUp() { fun setUp() {
@@ -123,6 +125,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
qrCodeScannerAffordanceConfig = qrCodeScannerAffordanceConfig =
FakeKeyguardQuickAffordanceConfig(BuiltInKeyguardQuickAffordanceKeys.QR_CODE_SCANNER) FakeKeyguardQuickAffordanceConfig(BuiltInKeyguardQuickAffordanceKeys.QR_CODE_SCANNER)
dockManager = DockManagerFake() dockManager = DockManagerFake()
biometricSettingsRepository = FakeBiometricSettingsRepository()
registry = registry =
FakeKeyguardQuickAffordanceRegistry( FakeKeyguardQuickAffordanceRegistry(
mapOf( mapOf(
@@ -233,6 +236,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
logger = logger, logger = logger,
devicePolicyManager = devicePolicyManager, devicePolicyManager = devicePolicyManager,
dockManager = dockManager, dockManager = dockManager,
biometricSettingsRepository = biometricSettingsRepository,
backgroundDispatcher = testDispatcher, backgroundDispatcher = testDispatcher,
appContext = mContext, appContext = mContext,
), ),