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
This commit is contained in:
Alejandro Nijamkin
2022-11-09 11:43:16 -08:00
committed by Ale Nijamkin
parent c11ec4ac24
commit 75d365ef94
5 changed files with 80 additions and 16 deletions

View File

@@ -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"
}
}

View File

@@ -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,
)
)
}

View File

@@ -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]
}
}
}

View File

@@ -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"
}
}

View File

@@ -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,
),
),
)
)