Loading packages/SystemUI/shared/src/com/android/systemui/shared/keyguard/data/content/KeyguardQuickAffordanceProviderContract.kt +2 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ object KeyguardQuickAffordanceProviderContract { const val SLOT_ID = "slot_id" /** String. Unique ID for the selected affordance. */ const val AFFORDANCE_ID = "affordance_id" /** String. Human-readable name for the affordance. */ const val AFFORDANCE_NAME = "affordance_name" } } Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProvider.kt +7 −4 Original line number Diff line number Diff line Loading @@ -199,16 +199,19 @@ class KeyguardQuickAffordanceProvider : arrayOf( Contract.SelectionTable.Columns.SLOT_ID, Contract.SelectionTable.Columns.AFFORDANCE_ID, Contract.SelectionTable.Columns.AFFORDANCE_NAME, ) ) .apply { val affordanceIdsBySlotId = interactor.getSelections() affordanceIdsBySlotId.entries.forEach { (slotId, affordanceIds) -> affordanceIds.forEach { affordanceId -> val affordanceRepresentationsBySlotId = interactor.getSelections() affordanceRepresentationsBySlotId.entries.forEach { (slotId, affordanceRepresentations) -> affordanceRepresentations.forEach { affordanceRepresentation -> addRow( arrayOf( slotId, affordanceId, affordanceRepresentation.id, affordanceRepresentation.name, ) ) } Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt +9 −3 Original line number Diff line number Diff line Loading @@ -189,12 +189,18 @@ constructor( } /** Returns affordance IDs indexed by slot ID, for all known slots. */ fun getSelections(): Map<String, List<String>> { fun getSelections(): Map<String, List<KeyguardQuickAffordancePickerRepresentation>> { check(isUsingRepository) val slots = repository.get().getSlotPickerRepresentations() val selections = repository.get().getSelections() return repository.get().getSlotPickerRepresentations().associate { slotRepresentation -> slotRepresentation.id to (selections[slotRepresentation.id] ?: emptyList()) val affordanceById = getAffordancePickerRepresentations().associateBy { affordance -> affordance.id } return slots.associate { slot -> slot.id to (selections[slot.id] ?: emptyList()).mapNotNull { affordanceId -> affordanceById[affordanceId] } } } Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProviderTest.kt +19 −3 Original line number Diff line number Diff line Loading @@ -99,10 +99,12 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { setOf( FakeKeyguardQuickAffordanceConfig( key = AFFORDANCE_1, pickerName = AFFORDANCE_1_NAME, pickerIconResourceId = 1, ), FakeKeyguardQuickAffordanceConfig( key = AFFORDANCE_2, pickerName = AFFORDANCE_2_NAME, pickerIconResourceId = 2, ), ), Loading Loading @@ -176,6 +178,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { runBlocking(IMMEDIATE) { val slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START val affordanceId = AFFORDANCE_2 val affordanceName = AFFORDANCE_2_NAME insertSelection( slotId = slotId, Loading @@ -188,6 +191,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = slotId, affordanceId = affordanceId, affordanceName = affordanceName, ) ) ) Loading Loading @@ -219,12 +223,12 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { listOf( Affordance( id = AFFORDANCE_1, name = AFFORDANCE_1, name = AFFORDANCE_1_NAME, iconResourceId = 1, ), Affordance( id = AFFORDANCE_2, name = AFFORDANCE_2, name = AFFORDANCE_2_NAME, iconResourceId = 2, ), ) Loading Loading @@ -259,6 +263,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START, affordanceId = AFFORDANCE_1, affordanceName = AFFORDANCE_1_NAME, ) ) ) Loading Loading @@ -290,6 +295,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START, affordanceId = AFFORDANCE_1, affordanceName = AFFORDANCE_1_NAME, ) ) ) Loading Loading @@ -323,7 +329,13 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { cursor.getColumnIndex(Contract.SelectionTable.Columns.SLOT_ID) val affordanceIdColumnIndex = cursor.getColumnIndex(Contract.SelectionTable.Columns.AFFORDANCE_ID) if (slotIdColumnIndex == -1 || affordanceIdColumnIndex == -1) { val affordanceNameColumnIndex = cursor.getColumnIndex(Contract.SelectionTable.Columns.AFFORDANCE_NAME) if ( slotIdColumnIndex == -1 || affordanceIdColumnIndex == -1 || affordanceNameColumnIndex == -1 ) { return@buildList } Loading @@ -332,6 +344,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = cursor.getString(slotIdColumnIndex), affordanceId = cursor.getString(affordanceIdColumnIndex), affordanceName = cursor.getString(affordanceNameColumnIndex), ) ) } Loading Loading @@ -419,11 +432,14 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { data class Selection( val slotId: String, val affordanceId: String, val affordanceName: String, ) companion object { private val IMMEDIATE = Dispatchers.Main.immediate private const val AFFORDANCE_1 = "affordance_1" private const val AFFORDANCE_2 = "affordance_2" private const val AFFORDANCE_1_NAME = "affordance_1_name" private const val AFFORDANCE_2_NAME = "affordance_2_name" } } packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt +43 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ 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 import com.android.systemui.plugins.ActivityStarter Loading Loading @@ -314,7 +315,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { .isEqualTo( mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to listOf(homeControls.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = homeControls.key, name = homeControls.pickerName, iconResourceId = homeControls.pickerIconResourceId, ), ), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to emptyList(), ) ) Loading Loading @@ -343,7 +350,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { .isEqualTo( mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to emptyList(), ) ) Loading Loading @@ -375,9 +388,21 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { .isEqualTo( mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to listOf(qrCodeScanner.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = qrCodeScanner.key, name = qrCodeScanner.pickerName, iconResourceId = qrCodeScanner.pickerIconResourceId, ), ), ) ) Loading Loading @@ -441,7 +466,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to emptyList(), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), ) ) Loading Loading @@ -502,7 +533,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to emptyList(), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), ) ) Loading Loading
packages/SystemUI/shared/src/com/android/systemui/shared/keyguard/data/content/KeyguardQuickAffordanceProviderContract.kt +2 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,8 @@ object KeyguardQuickAffordanceProviderContract { const val SLOT_ID = "slot_id" /** String. Unique ID for the selected affordance. */ const val AFFORDANCE_ID = "affordance_id" /** String. Human-readable name for the affordance. */ const val AFFORDANCE_NAME = "affordance_name" } } Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProvider.kt +7 −4 Original line number Diff line number Diff line Loading @@ -199,16 +199,19 @@ class KeyguardQuickAffordanceProvider : arrayOf( Contract.SelectionTable.Columns.SLOT_ID, Contract.SelectionTable.Columns.AFFORDANCE_ID, Contract.SelectionTable.Columns.AFFORDANCE_NAME, ) ) .apply { val affordanceIdsBySlotId = interactor.getSelections() affordanceIdsBySlotId.entries.forEach { (slotId, affordanceIds) -> affordanceIds.forEach { affordanceId -> val affordanceRepresentationsBySlotId = interactor.getSelections() affordanceRepresentationsBySlotId.entries.forEach { (slotId, affordanceRepresentations) -> affordanceRepresentations.forEach { affordanceRepresentation -> addRow( arrayOf( slotId, affordanceId, affordanceRepresentation.id, affordanceRepresentation.name, ) ) } Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt +9 −3 Original line number Diff line number Diff line Loading @@ -189,12 +189,18 @@ constructor( } /** Returns affordance IDs indexed by slot ID, for all known slots. */ fun getSelections(): Map<String, List<String>> { fun getSelections(): Map<String, List<KeyguardQuickAffordancePickerRepresentation>> { check(isUsingRepository) val slots = repository.get().getSlotPickerRepresentations() val selections = repository.get().getSelections() return repository.get().getSlotPickerRepresentations().associate { slotRepresentation -> slotRepresentation.id to (selections[slotRepresentation.id] ?: emptyList()) val affordanceById = getAffordancePickerRepresentations().associateBy { affordance -> affordance.id } return slots.associate { slot -> slot.id to (selections[slot.id] ?: emptyList()).mapNotNull { affordanceId -> affordanceById[affordanceId] } } } Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProviderTest.kt +19 −3 Original line number Diff line number Diff line Loading @@ -99,10 +99,12 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { setOf( FakeKeyguardQuickAffordanceConfig( key = AFFORDANCE_1, pickerName = AFFORDANCE_1_NAME, pickerIconResourceId = 1, ), FakeKeyguardQuickAffordanceConfig( key = AFFORDANCE_2, pickerName = AFFORDANCE_2_NAME, pickerIconResourceId = 2, ), ), Loading Loading @@ -176,6 +178,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { runBlocking(IMMEDIATE) { val slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START val affordanceId = AFFORDANCE_2 val affordanceName = AFFORDANCE_2_NAME insertSelection( slotId = slotId, Loading @@ -188,6 +191,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = slotId, affordanceId = affordanceId, affordanceName = affordanceName, ) ) ) Loading Loading @@ -219,12 +223,12 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { listOf( Affordance( id = AFFORDANCE_1, name = AFFORDANCE_1, name = AFFORDANCE_1_NAME, iconResourceId = 1, ), Affordance( id = AFFORDANCE_2, name = AFFORDANCE_2, name = AFFORDANCE_2_NAME, iconResourceId = 2, ), ) Loading Loading @@ -259,6 +263,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START, affordanceId = AFFORDANCE_1, affordanceName = AFFORDANCE_1_NAME, ) ) ) Loading Loading @@ -290,6 +295,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START, affordanceId = AFFORDANCE_1, affordanceName = AFFORDANCE_1_NAME, ) ) ) Loading Loading @@ -323,7 +329,13 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { cursor.getColumnIndex(Contract.SelectionTable.Columns.SLOT_ID) val affordanceIdColumnIndex = cursor.getColumnIndex(Contract.SelectionTable.Columns.AFFORDANCE_ID) if (slotIdColumnIndex == -1 || affordanceIdColumnIndex == -1) { val affordanceNameColumnIndex = cursor.getColumnIndex(Contract.SelectionTable.Columns.AFFORDANCE_NAME) if ( slotIdColumnIndex == -1 || affordanceIdColumnIndex == -1 || affordanceNameColumnIndex == -1 ) { return@buildList } Loading @@ -332,6 +344,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = cursor.getString(slotIdColumnIndex), affordanceId = cursor.getString(affordanceIdColumnIndex), affordanceName = cursor.getString(affordanceNameColumnIndex), ) ) } Loading Loading @@ -419,11 +432,14 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { data class Selection( val slotId: String, val affordanceId: String, val affordanceName: String, ) companion object { private val IMMEDIATE = Dispatchers.Main.immediate private const val AFFORDANCE_1 = "affordance_1" private const val AFFORDANCE_2 = "affordance_2" private const val AFFORDANCE_1_NAME = "affordance_1_name" private const val AFFORDANCE_2_NAME = "affordance_2_name" } }
packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt +43 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ 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 import com.android.systemui.plugins.ActivityStarter Loading Loading @@ -314,7 +315,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { .isEqualTo( mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to listOf(homeControls.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = homeControls.key, name = homeControls.pickerName, iconResourceId = homeControls.pickerIconResourceId, ), ), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to emptyList(), ) ) Loading Loading @@ -343,7 +350,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { .isEqualTo( mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to emptyList(), ) ) Loading Loading @@ -375,9 +388,21 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { .isEqualTo( mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to listOf(qrCodeScanner.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = qrCodeScanner.key, name = qrCodeScanner.pickerName, iconResourceId = qrCodeScanner.pickerIconResourceId, ), ), ) ) Loading Loading @@ -441,7 +466,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to emptyList(), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), ) ) Loading Loading @@ -502,7 +533,13 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() { mapOf( KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START to emptyList(), KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END to listOf(quickAccessWallet.key), listOf( KeyguardQuickAffordancePickerRepresentation( id = quickAccessWallet.key, name = quickAccessWallet.pickerName, iconResourceId = quickAccessWallet.pickerIconResourceId, ), ), ) ) Loading