From 75d365ef9466d7dbf7049b43cbeff6db8bb5cc5f Mon Sep 17 00:00:00 2001 From: Alejandro Nijamkin Date: Wed, 9 Nov 2022 11:43:16 -0800 Subject: [PATCH] Exposes affordance names through content provider. We need the names so we can build the summary for the settings item in the settings app. For example, if the user picks home controls for the left slot and wallet for the right slot, we want to show "Home, Wallet" on the settings screen. Bug: 256662519 Test: Unit tests expanded. Manually verified with the next CL on the chain to verify that it works end-to-end. Change-Id: I4cf67b118340ba264c481ab79a67ad45d6620ff0 --- ...KeyguardQuickAffordanceProviderContract.kt | 2 + .../KeyguardQuickAffordanceProvider.kt | 11 +++-- .../KeyguardQuickAffordanceInteractor.kt | 12 +++-- .../KeyguardQuickAffordanceProviderTest.kt | 22 +++++++-- .../KeyguardQuickAffordanceInteractorTest.kt | 49 ++++++++++++++++--- 5 files changed, 80 insertions(+), 16 deletions(-) diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/keyguard/data/content/KeyguardQuickAffordanceProviderContract.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/keyguard/data/content/KeyguardQuickAffordanceProviderContract.kt index f60db2ad2687f..71469a363f741 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/keyguard/data/content/KeyguardQuickAffordanceProviderContract.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/keyguard/data/content/KeyguardQuickAffordanceProviderContract.kt @@ -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" } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProvider.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProvider.kt index 1f1ed007fca0a..bfc60c17225f8 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProvider.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProvider.kt @@ -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, ) ) } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt index 45eb6f5012874..c8216c5d72d7e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt @@ -189,12 +189,18 @@ constructor( } /** Returns affordance IDs indexed by slot ID, for all known slots. */ - fun getSelections(): Map> { + fun getSelections(): Map> { 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] + } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProviderTest.kt index 8395f02cbc41e..5e27a500125ba 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProviderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardQuickAffordanceProviderTest.kt @@ -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, ), ), @@ -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, @@ -188,6 +191,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = slotId, affordanceId = affordanceId, + affordanceName = affordanceName, ) ) ) @@ -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, ), ) @@ -259,6 +263,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START, affordanceId = AFFORDANCE_1, + affordanceName = AFFORDANCE_1_NAME, ) ) ) @@ -290,6 +295,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START, affordanceId = AFFORDANCE_1, + affordanceName = AFFORDANCE_1_NAME, ) ) ) @@ -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 } @@ -332,6 +344,7 @@ class KeyguardQuickAffordanceProviderTest : SysuiTestCase() { Selection( slotId = cursor.getString(slotIdColumnIndex), affordanceId = cursor.getString(affordanceIdColumnIndex), + affordanceName = cursor.getString(affordanceNameColumnIndex), ) ) } @@ -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" } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt index c47e6f52c5962..4850ea5ffed2e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt @@ -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 @@ -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(), ) ) @@ -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(), ) ) @@ -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, + ), + ), ) ) @@ -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, + ), + ), ) ) @@ -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, + ), + ), ) )