Merge "Remove and cleanup flag for Custom lockscreen shortcuts" into udc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
5f09337381
@@ -272,7 +272,6 @@ filegroup {
|
||||
"tests/src/com/android/systemui/dock/DockManagerFake.java",
|
||||
"tests/src/com/android/systemui/dump/LogBufferHelper.kt",
|
||||
"tests/src/com/android/systemui/statusbar/phone/FakeKeyguardStateController.java",
|
||||
"tests/src/com/android/systemui/keyguard/domain/quickaffordance/FakeKeyguardQuickAffordanceRegistry.kt",
|
||||
|
||||
/* Biometric converted tests */
|
||||
"tests/src/com/android/systemui/biometrics/BiometricTestExtensions.kt",
|
||||
|
||||
@@ -168,16 +168,6 @@ object Flags {
|
||||
// TODO(b/255607168): Tracking Bug
|
||||
@JvmField val DOZING_MIGRATION_1 = unreleasedFlag(213, "dozing_migration_1")
|
||||
|
||||
/**
|
||||
* Whether to enable the code powering customizable lock screen quick affordances.
|
||||
*
|
||||
* This flag enables any new prebuilt quick affordances as well.
|
||||
*/
|
||||
// TODO(b/255618149): Tracking Bug
|
||||
@JvmField
|
||||
val CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES =
|
||||
releasedFlag(216, "customizable_lock_screen_quick_affordances")
|
||||
|
||||
/**
|
||||
* Migrates control of the LightRevealScrim's reveal effect and amount from legacy code to the
|
||||
* new KeyguardTransitionRepository.
|
||||
|
||||
@@ -50,7 +50,6 @@ import com.android.systemui.keyguard.data.quickaffordance.KeyguardDataQuickAffor
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardFaceAuthModule;
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardRepositoryModule;
|
||||
import com.android.systemui.keyguard.domain.interactor.StartKeyguardTransitionModule;
|
||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceModule;
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger;
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLoggerImpl;
|
||||
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel;
|
||||
@@ -91,7 +90,6 @@ import kotlinx.coroutines.CoroutineDispatcher;
|
||||
includes = {
|
||||
FalsingModule.class,
|
||||
KeyguardDataQuickAffordanceModule.class,
|
||||
KeyguardQuickAffordanceModule.class,
|
||||
KeyguardRepositoryModule.class,
|
||||
KeyguardFaceAuthModule.class,
|
||||
StartKeyguardTransitionModule.class,
|
||||
|
||||
@@ -24,8 +24,6 @@ import com.android.systemui.CoreStartable
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.dagger.qualifiers.Application
|
||||
import com.android.systemui.dagger.qualifiers.Background
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
|
||||
import com.android.systemui.settings.UserFileManager
|
||||
import com.android.systemui.settings.UserTracker
|
||||
@@ -42,7 +40,6 @@ import javax.inject.Inject
|
||||
*/
|
||||
@SysUISingleton
|
||||
class MuteQuickAffordanceCoreStartable @Inject constructor(
|
||||
private val featureFlags: FeatureFlags,
|
||||
private val userTracker: UserTracker,
|
||||
private val ringerModeTracker: RingerModeTracker,
|
||||
private val userFileManager: UserFileManager,
|
||||
@@ -54,8 +51,6 @@ class MuteQuickAffordanceCoreStartable @Inject constructor(
|
||||
private val observer = Observer(this::updateLastNonSilentRingerMode)
|
||||
|
||||
override fun start() {
|
||||
if (!featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)) return
|
||||
|
||||
// only listen to ringerModeInternal changes when Mute is one of the selected affordances
|
||||
keyguardQuickAffordanceRepository
|
||||
.selections
|
||||
|
||||
@@ -38,7 +38,6 @@ import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanc
|
||||
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
|
||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
||||
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceRegistry
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardPickerFlag
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePickerRepresentation
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardSlotPickerRepresentation
|
||||
@@ -68,7 +67,6 @@ class KeyguardQuickAffordanceInteractor
|
||||
@Inject
|
||||
constructor(
|
||||
private val keyguardInteractor: KeyguardInteractor,
|
||||
private val registry: KeyguardQuickAffordanceRegistry<out KeyguardQuickAffordanceConfig>,
|
||||
private val lockPatternUtils: LockPatternUtils,
|
||||
private val keyguardStateController: KeyguardStateController,
|
||||
private val userTracker: UserTracker,
|
||||
@@ -83,20 +81,13 @@ constructor(
|
||||
@Background private val backgroundDispatcher: CoroutineDispatcher,
|
||||
@Application private val appContext: Context,
|
||||
) {
|
||||
private val isUsingRepository: Boolean
|
||||
get() = featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)
|
||||
|
||||
/**
|
||||
* Whether the UI should use the long press gesture to activate quick affordances.
|
||||
*
|
||||
* If `false`, the UI goes back to using single taps.
|
||||
*/
|
||||
fun useLongPress(): Flow<Boolean> =
|
||||
if (featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)) {
|
||||
dockManager.retrieveIsDocked().map { !it }
|
||||
} else {
|
||||
flowOf(false)
|
||||
}
|
||||
fun useLongPress(): Flow<Boolean> = dockManager.retrieveIsDocked().map { !it }
|
||||
|
||||
/** Returns an observable for the quick affordance at the given position. */
|
||||
suspend fun quickAffordance(
|
||||
@@ -147,14 +138,9 @@ constructor(
|
||||
expandable: Expandable?,
|
||||
slotId: String,
|
||||
) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val (decodedSlotId, decodedConfigKey) = configKey.decode()
|
||||
val config =
|
||||
if (isUsingRepository) {
|
||||
val (slotId, decodedConfigKey) = configKey.decode()
|
||||
repository.get().selections.value[slotId]?.find { it.key == decodedConfigKey }
|
||||
} else {
|
||||
registry.get(configKey)
|
||||
}
|
||||
repository.get().selections.value[decodedSlotId]?.find { it.key == decodedConfigKey }
|
||||
if (config == null) {
|
||||
Log.e(TAG, "Affordance config with key of \"$configKey\" not found!")
|
||||
return
|
||||
@@ -183,7 +169,6 @@ constructor(
|
||||
* @return `true` if the affordance was selected successfully; `false` otherwise.
|
||||
*/
|
||||
suspend fun select(slotId: String, affordanceId: String): Boolean {
|
||||
check(isUsingRepository)
|
||||
if (isFeatureDisabledByDevicePolicy()) {
|
||||
return false
|
||||
}
|
||||
@@ -226,7 +211,6 @@ constructor(
|
||||
* the affordance was not on the slot to begin with).
|
||||
*/
|
||||
suspend fun unselect(slotId: String, affordanceId: String?): Boolean {
|
||||
check(isUsingRepository)
|
||||
if (isFeatureDisabledByDevicePolicy()) {
|
||||
return false
|
||||
}
|
||||
@@ -286,17 +270,12 @@ constructor(
|
||||
|
||||
private fun quickAffordanceInternal(
|
||||
position: KeyguardQuickAffordancePosition
|
||||
): Flow<KeyguardQuickAffordanceModel> {
|
||||
return if (isUsingRepository) {
|
||||
repository
|
||||
.get()
|
||||
.selections
|
||||
.map { it[position.toSlotId()] ?: emptyList() }
|
||||
.flatMapLatest { configs -> combinedConfigs(position, configs) }
|
||||
} else {
|
||||
combinedConfigs(position, registry.getAll(position))
|
||||
}
|
||||
}
|
||||
): Flow<KeyguardQuickAffordanceModel> =
|
||||
repository
|
||||
.get()
|
||||
.selections
|
||||
.map { it[position.toSlotId()] ?: emptyList() }
|
||||
.flatMapLatest { configs -> combinedConfigs(position, configs) }
|
||||
|
||||
private fun combinedConfigs(
|
||||
position: KeyguardQuickAffordancePosition,
|
||||
@@ -326,12 +305,7 @@ constructor(
|
||||
states[index] as KeyguardQuickAffordanceConfig.LockScreenState.Visible
|
||||
val configKey = configs[index].key
|
||||
KeyguardQuickAffordanceModel.Visible(
|
||||
configKey =
|
||||
if (isUsingRepository) {
|
||||
configKey.encode(position.toSlotId())
|
||||
} else {
|
||||
configKey
|
||||
},
|
||||
configKey = configKey.encode(position.toSlotId()),
|
||||
icon = visibleState.icon,
|
||||
activationState = visibleState.activationState,
|
||||
)
|
||||
@@ -397,8 +371,6 @@ constructor(
|
||||
}
|
||||
|
||||
suspend fun getSlotPickerRepresentations(): List<KeyguardSlotPickerRepresentation> {
|
||||
check(isUsingRepository)
|
||||
|
||||
if (isFeatureDisabledByDevicePolicy()) {
|
||||
return emptyList()
|
||||
}
|
||||
@@ -416,7 +388,6 @@ constructor(
|
||||
name = Contract.FlagsTable.FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED,
|
||||
value =
|
||||
!isFeatureDisabledByDevicePolicy() &&
|
||||
featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES) &&
|
||||
appContext.resources.getBoolean(R.bool.custom_lockscreen_shortcuts_enabled),
|
||||
),
|
||||
KeyguardPickerFlag(
|
||||
|
||||
@@ -1,30 +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.keyguard.domain.quickaffordance
|
||||
|
||||
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
|
||||
@Module
|
||||
interface KeyguardQuickAffordanceModule {
|
||||
@Binds
|
||||
fun keyguardQuickAffordanceRegistry(
|
||||
impl: KeyguardQuickAffordanceRegistryImpl
|
||||
): KeyguardQuickAffordanceRegistry<out KeyguardQuickAffordanceConfig>
|
||||
}
|
||||
@@ -1,66 +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.keyguard.domain.quickaffordance
|
||||
|
||||
import com.android.systemui.keyguard.data.quickaffordance.HomeControlsKeyguardQuickAffordanceConfig
|
||||
import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
|
||||
import com.android.systemui.keyguard.data.quickaffordance.QrCodeScannerKeyguardQuickAffordanceConfig
|
||||
import com.android.systemui.keyguard.data.quickaffordance.QuickAccessWalletKeyguardQuickAffordanceConfig
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
|
||||
import javax.inject.Inject
|
||||
|
||||
/** Central registry of all known quick affordance configs. */
|
||||
interface KeyguardQuickAffordanceRegistry<T : KeyguardQuickAffordanceConfig> {
|
||||
fun getAll(position: KeyguardQuickAffordancePosition): List<T>
|
||||
fun get(key: String): T
|
||||
}
|
||||
|
||||
class KeyguardQuickAffordanceRegistryImpl
|
||||
@Inject
|
||||
constructor(
|
||||
homeControls: HomeControlsKeyguardQuickAffordanceConfig,
|
||||
quickAccessWallet: QuickAccessWalletKeyguardQuickAffordanceConfig,
|
||||
qrCodeScanner: QrCodeScannerKeyguardQuickAffordanceConfig,
|
||||
) : KeyguardQuickAffordanceRegistry<KeyguardQuickAffordanceConfig> {
|
||||
private val configsByPosition =
|
||||
mapOf(
|
||||
KeyguardQuickAffordancePosition.BOTTOM_START to
|
||||
listOf(
|
||||
homeControls,
|
||||
),
|
||||
KeyguardQuickAffordancePosition.BOTTOM_END to
|
||||
listOf(
|
||||
quickAccessWallet,
|
||||
qrCodeScanner,
|
||||
),
|
||||
)
|
||||
private val configByKey =
|
||||
configsByPosition.values.flatten().associateBy { config -> config.key }
|
||||
|
||||
override fun getAll(
|
||||
position: KeyguardQuickAffordancePosition,
|
||||
): List<KeyguardQuickAffordanceConfig> {
|
||||
return configsByPosition.getValue(position)
|
||||
}
|
||||
|
||||
override fun get(
|
||||
key: String,
|
||||
): KeyguardQuickAffordanceConfig {
|
||||
return configByKey.getValue(key)
|
||||
}
|
||||
}
|
||||
@@ -175,7 +175,6 @@ class CustomizationProviderTest : SysuiTestCase() {
|
||||
)
|
||||
val featureFlags =
|
||||
FakeFeatureFlags().apply {
|
||||
set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
|
||||
set(Flags.LOCKSCREEN_CUSTOM_CLOCKS, true)
|
||||
set(Flags.REVAMPED_WALLPAPER_UI, true)
|
||||
set(Flags.WALLPAPER_FULLSCREEN_PREVIEW, true)
|
||||
@@ -191,7 +190,6 @@ class CustomizationProviderTest : SysuiTestCase() {
|
||||
bouncerRepository = FakeKeyguardBouncerRepository(),
|
||||
configurationRepository = FakeConfigurationRepository(),
|
||||
),
|
||||
registry = mock(),
|
||||
lockPatternUtils = lockPatternUtils,
|
||||
keyguardStateController = keyguardStateController,
|
||||
userTracker = userTracker,
|
||||
|
||||
@@ -24,8 +24,6 @@ import androidx.lifecycle.Observer
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
|
||||
import com.android.systemui.settings.UserFileManager
|
||||
import com.android.systemui.settings.UserTracker
|
||||
@@ -58,8 +56,6 @@ import org.mockito.MockitoAnnotations
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class MuteQuickAffordanceCoreStartableTest : SysuiTestCase() {
|
||||
|
||||
@Mock
|
||||
private lateinit var featureFlags: FeatureFlags
|
||||
@Mock
|
||||
private lateinit var userTracker: UserTracker
|
||||
@Mock
|
||||
@@ -78,8 +74,6 @@ class MuteQuickAffordanceCoreStartableTest : SysuiTestCase() {
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
|
||||
whenever(featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)).thenReturn(true)
|
||||
|
||||
val config: KeyguardQuickAffordanceConfig = mock()
|
||||
whenever(config.key).thenReturn(BuiltInKeyguardQuickAffordanceKeys.MUTE)
|
||||
|
||||
@@ -90,7 +84,6 @@ class MuteQuickAffordanceCoreStartableTest : SysuiTestCase() {
|
||||
testScope = TestScope(testDispatcher)
|
||||
|
||||
underTest = MuteQuickAffordanceCoreStartable(
|
||||
featureFlags,
|
||||
userTracker,
|
||||
ringerModeTracker,
|
||||
userFileManager,
|
||||
@@ -101,20 +94,7 @@ class MuteQuickAffordanceCoreStartableTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun featureFlagIsOFF_doNothingWithKeyguardQuickAffordanceRepository() = testScope.runTest {
|
||||
//given
|
||||
whenever(featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)).thenReturn(false)
|
||||
|
||||
//when
|
||||
underTest.start()
|
||||
|
||||
//then
|
||||
verifyZeroInteractions(keyguardQuickAffordanceRepository)
|
||||
coroutineContext.cancelChildren()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun featureFlagIsON_callToKeyguardQuickAffordanceRepository() = testScope.runTest {
|
||||
fun callToKeyguardQuickAffordanceRepository() = testScope.runTest {
|
||||
//given
|
||||
val ringerModeInternal = mock<MutableLiveData<Int>>()
|
||||
whenever(ringerModeTracker.ringerModeInternal).thenReturn(ringerModeInternal)
|
||||
|
||||
@@ -40,7 +40,6 @@ import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanc
|
||||
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.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
@@ -300,7 +299,6 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
||||
)
|
||||
val featureFlags =
|
||||
FakeFeatureFlags().apply {
|
||||
set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, false)
|
||||
set(Flags.FACE_AUTH_REFACTOR, true)
|
||||
}
|
||||
val testDispatcher = StandardTestDispatcher()
|
||||
@@ -312,20 +310,6 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
||||
featureFlags = featureFlags,
|
||||
)
|
||||
.keyguardInteractor,
|
||||
registry =
|
||||
FakeKeyguardQuickAffordanceRegistry(
|
||||
mapOf(
|
||||
KeyguardQuickAffordancePosition.BOTTOM_START to
|
||||
listOf(
|
||||
homeControls,
|
||||
),
|
||||
KeyguardQuickAffordancePosition.BOTTOM_END to
|
||||
listOf(
|
||||
quickAccessWallet,
|
||||
qrCodeScanner,
|
||||
),
|
||||
),
|
||||
),
|
||||
lockPatternUtils = lockPatternUtils,
|
||||
keyguardStateController = keyguardStateController,
|
||||
userTracker = userTracker,
|
||||
@@ -345,6 +329,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun onQuickAffordanceTriggered() =
|
||||
testScope.runTest {
|
||||
val key = BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS
|
||||
setUpMocks(
|
||||
needStrongAuthAfterBoot = needStrongAuthAfterBoot,
|
||||
keyguardIsUnlocked = keyguardIsUnlocked,
|
||||
@@ -367,7 +352,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
||||
}
|
||||
|
||||
underTest.onQuickAffordanceTriggered(
|
||||
configKey = BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS,
|
||||
configKey = "${KeyguardQuickAffordancePosition.BOTTOM_START.toSlotId()}::${key}",
|
||||
expandable = expandable,
|
||||
slotId = "",
|
||||
)
|
||||
|
||||
@@ -44,7 +44,6 @@ import com.android.systemui.keyguard.data.repository.FakeBiometricSettingsReposi
|
||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
||||
import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
|
||||
import com.android.systemui.keyguard.domain.model.KeyguardQuickAffordanceModel
|
||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
||||
import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePickerRepresentation
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.ActivationState
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
|
||||
@@ -102,6 +101,15 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
|
||||
overrideResource(R.bool.custom_lockscreen_shortcuts_enabled, true)
|
||||
overrideResource(
|
||||
R.array.config_keyguardQuickAffordanceDefaults,
|
||||
arrayOf(
|
||||
KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START + ":" +
|
||||
BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS,
|
||||
KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END + ":" +
|
||||
BuiltInKeyguardQuickAffordanceKeys.QUICK_ACCESS_WALLET
|
||||
)
|
||||
)
|
||||
|
||||
repository = FakeKeyguardRepository()
|
||||
repository.setKeyguardShowing(true)
|
||||
@@ -164,7 +172,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
)
|
||||
featureFlags =
|
||||
FakeFeatureFlags().apply {
|
||||
set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, false)
|
||||
set(Flags.FACE_AUTH_REFACTOR, true)
|
||||
}
|
||||
|
||||
@@ -176,20 +183,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
underTest =
|
||||
KeyguardQuickAffordanceInteractor(
|
||||
keyguardInteractor = withDeps.keyguardInteractor,
|
||||
registry =
|
||||
FakeKeyguardQuickAffordanceRegistry(
|
||||
mapOf(
|
||||
KeyguardQuickAffordancePosition.BOTTOM_START to
|
||||
listOf(
|
||||
homeControls,
|
||||
),
|
||||
KeyguardQuickAffordancePosition.BOTTOM_END to
|
||||
listOf(
|
||||
quickAccessWallet,
|
||||
qrCodeScanner,
|
||||
),
|
||||
),
|
||||
),
|
||||
lockPatternUtils = lockPatternUtils,
|
||||
keyguardStateController = keyguardStateController,
|
||||
userTracker = userTracker,
|
||||
@@ -225,7 +218,9 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
assertThat(collectedValue())
|
||||
.isInstanceOf(KeyguardQuickAffordanceModel.Visible::class.java)
|
||||
val visibleModel = collectedValue() as KeyguardQuickAffordanceModel.Visible
|
||||
assertThat(visibleModel.configKey).isEqualTo(configKey)
|
||||
assertThat(visibleModel.configKey).isEqualTo(
|
||||
"${KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START}::${configKey}"
|
||||
)
|
||||
assertThat(visibleModel.icon).isEqualTo(ICON)
|
||||
assertThat(visibleModel.icon.contentDescription)
|
||||
.isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID))
|
||||
@@ -250,7 +245,9 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
assertThat(collectedValue())
|
||||
.isInstanceOf(KeyguardQuickAffordanceModel.Visible::class.java)
|
||||
val visibleModel = collectedValue() as KeyguardQuickAffordanceModel.Visible
|
||||
assertThat(visibleModel.configKey).isEqualTo(configKey)
|
||||
assertThat(visibleModel.configKey).isEqualTo(
|
||||
"${KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END}::${configKey}"
|
||||
)
|
||||
assertThat(visibleModel.icon).isEqualTo(ICON)
|
||||
assertThat(visibleModel.icon.contentDescription)
|
||||
.isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID))
|
||||
@@ -387,7 +384,9 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
assertThat(collectedValue())
|
||||
.isInstanceOf(KeyguardQuickAffordanceModel.Visible::class.java)
|
||||
val visibleModel = collectedValue() as KeyguardQuickAffordanceModel.Visible
|
||||
assertThat(visibleModel.configKey).isEqualTo(configKey)
|
||||
assertThat(visibleModel.configKey).isEqualTo(
|
||||
"${KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START}::${configKey}"
|
||||
)
|
||||
assertThat(visibleModel.icon).isEqualTo(ICON)
|
||||
assertThat(visibleModel.icon.contentDescription)
|
||||
.isEqualTo(ContentDescription.Resource(res = CONTENT_DESCRIPTION_RESOURCE_ID))
|
||||
@@ -401,8 +400,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
R.array.config_keyguardQuickAffordanceDefaults,
|
||||
arrayOf<String>(),
|
||||
)
|
||||
|
||||
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
|
||||
homeControls.setState(
|
||||
KeyguardQuickAffordanceConfig.LockScreenState.Visible(icon = ICON)
|
||||
)
|
||||
@@ -543,7 +540,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun unselect_one() =
|
||||
testScope.runTest {
|
||||
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
|
||||
homeControls.setState(
|
||||
KeyguardQuickAffordanceConfig.LockScreenState.Visible(icon = ICON)
|
||||
)
|
||||
@@ -620,7 +616,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun useLongPress_whenDocked_isFalse() =
|
||||
testScope.runTest {
|
||||
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
|
||||
dockManager.setIsDocked(true)
|
||||
|
||||
val useLongPress by collectLastValue(underTest.useLongPress())
|
||||
@@ -631,7 +626,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun useLongPress_whenNotDocked_isTrue() =
|
||||
testScope.runTest {
|
||||
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
|
||||
dockManager.setIsDocked(false)
|
||||
|
||||
val useLongPress by collectLastValue(underTest.useLongPress())
|
||||
@@ -642,7 +636,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun useLongPress_whenNotDocked_isTrue_changedTo_whenDocked_isFalse() =
|
||||
testScope.runTest {
|
||||
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
|
||||
dockManager.setIsDocked(false)
|
||||
val firstUseLongPress by collectLastValue(underTest.useLongPress())
|
||||
runCurrent()
|
||||
@@ -660,7 +653,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
||||
@Test
|
||||
fun unselect_all() =
|
||||
testScope.runTest {
|
||||
featureFlags.set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, true)
|
||||
homeControls.setState(
|
||||
KeyguardQuickAffordanceConfig.LockScreenState.Visible(icon = ICON)
|
||||
)
|
||||
|
||||
@@ -1,40 +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.keyguard.domain.quickaffordance
|
||||
|
||||
import com.android.systemui.keyguard.data.quickaffordance.FakeKeyguardQuickAffordanceConfig
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
|
||||
|
||||
/** Fake implementation of [FakeKeyguardQuickAffordanceRegistry], for tests. */
|
||||
class FakeKeyguardQuickAffordanceRegistry(
|
||||
private val configsByPosition:
|
||||
Map<KeyguardQuickAffordancePosition, List<FakeKeyguardQuickAffordanceConfig>>,
|
||||
) : KeyguardQuickAffordanceRegistry<FakeKeyguardQuickAffordanceConfig> {
|
||||
|
||||
override fun getAll(
|
||||
position: KeyguardQuickAffordancePosition
|
||||
): List<FakeKeyguardQuickAffordanceConfig> {
|
||||
return configsByPosition.getValue(position)
|
||||
}
|
||||
|
||||
override fun get(
|
||||
key: String,
|
||||
): FakeKeyguardQuickAffordanceConfig {
|
||||
return configsByPosition.values.flatten().associateBy { config -> config.key }.getValue(key)
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import android.os.UserHandle
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.internal.logging.testing.UiEventLoggerFake
|
||||
import com.android.internal.widget.LockPatternUtils
|
||||
import com.android.systemui.R
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.animation.DialogLaunchAnimator
|
||||
import com.android.systemui.animation.Expandable
|
||||
@@ -47,7 +48,6 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractorFactory
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardLongPressInteractor
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractorFactory
|
||||
import com.android.systemui.keyguard.domain.quickaffordance.FakeKeyguardQuickAffordanceRegistry
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.ActivationState
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
|
||||
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
|
||||
@@ -102,7 +102,6 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
||||
|
||||
private lateinit var testScope: TestScope
|
||||
private lateinit var repository: FakeKeyguardRepository
|
||||
private lateinit var registry: FakeKeyguardQuickAffordanceRegistry
|
||||
private lateinit var homeControlsQuickAffordanceConfig: FakeKeyguardQuickAffordanceConfig
|
||||
private lateinit var quickAccessWalletAffordanceConfig: FakeKeyguardQuickAffordanceConfig
|
||||
private lateinit var qrCodeScannerAffordanceConfig: FakeKeyguardQuickAffordanceConfig
|
||||
@@ -112,6 +111,18 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
||||
@Before
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
|
||||
overrideResource(R.bool.custom_lockscreen_shortcuts_enabled, true)
|
||||
overrideResource(
|
||||
R.array.config_keyguardQuickAffordanceDefaults,
|
||||
arrayOf(
|
||||
KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START + ":" +
|
||||
BuiltInKeyguardQuickAffordanceKeys.HOME_CONTROLS,
|
||||
KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END + ":" +
|
||||
BuiltInKeyguardQuickAffordanceKeys.QUICK_ACCESS_WALLET
|
||||
)
|
||||
)
|
||||
|
||||
whenever(burnInHelperWrapper.burnInOffset(anyInt(), any()))
|
||||
.thenReturn(RETURNED_BURN_IN_OFFSET)
|
||||
|
||||
@@ -125,23 +136,8 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
||||
FakeKeyguardQuickAffordanceConfig(BuiltInKeyguardQuickAffordanceKeys.QR_CODE_SCANNER)
|
||||
dockManager = DockManagerFake()
|
||||
biometricSettingsRepository = FakeBiometricSettingsRepository()
|
||||
registry =
|
||||
FakeKeyguardQuickAffordanceRegistry(
|
||||
mapOf(
|
||||
KeyguardQuickAffordancePosition.BOTTOM_START to
|
||||
listOf(
|
||||
homeControlsQuickAffordanceConfig,
|
||||
),
|
||||
KeyguardQuickAffordancePosition.BOTTOM_END to
|
||||
listOf(
|
||||
quickAccessWalletAffordanceConfig,
|
||||
qrCodeScannerAffordanceConfig,
|
||||
),
|
||||
),
|
||||
)
|
||||
val featureFlags =
|
||||
FakeFeatureFlags().apply {
|
||||
set(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES, false)
|
||||
set(Flags.FACE_AUTH_REFACTOR, true)
|
||||
set(Flags.LOCK_SCREEN_LONG_PRESS_ENABLED, false)
|
||||
set(Flags.LOCK_SCREEN_LONG_PRESS_DIRECT_TO_WPP, false)
|
||||
@@ -152,7 +148,6 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
||||
repository = withDeps.repository
|
||||
|
||||
whenever(userTracker.userHandle).thenReturn(mock())
|
||||
whenever(userTracker.userId).thenReturn(10)
|
||||
whenever(lockPatternUtils.getStrongAuthForUser(anyInt()))
|
||||
.thenReturn(LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED)
|
||||
val testDispatcher = StandardTestDispatcher()
|
||||
@@ -225,7 +220,6 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
||||
quickAffordanceInteractor =
|
||||
KeyguardQuickAffordanceInteractor(
|
||||
keyguardInteractor = keyguardInteractor,
|
||||
registry = registry,
|
||||
lockPatternUtils = lockPatternUtils,
|
||||
keyguardStateController = keyguardStateController,
|
||||
userTracker = userTracker,
|
||||
@@ -700,7 +694,8 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
||||
KeyguardQuickAffordanceConfig.LockScreenState.Hidden
|
||||
}
|
||||
config.setState(lockScreenState)
|
||||
return config.key
|
||||
|
||||
return "${position.toSlotId()}::${config.key}"
|
||||
}
|
||||
|
||||
private fun assertQuickAffordanceViewModel(
|
||||
|
||||
Reference in New Issue
Block a user