From e4bd053414ff7b5fad98f922717c622298279ebc Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Fri, 12 Jun 2020 11:25:13 -0400 Subject: [PATCH] Controls UI - Properly sort, and set default on seed When seeding is complete, set the default structure to the one with the max number of controls. Tie breaker is first structure to have the max. Also, sort the structures, not the serviceinfos. Fixes: 158768701 Test: disable/enable Home app to test seeding Change-Id: If5379943afc5ae7cd0d93464ad2e38c8eb01c7f3 --- .../controls/ui/ControlsUiControllerImpl.kt | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt index 0f5aef7eeec11..1eb7e2168a6af 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt @@ -103,6 +103,22 @@ class ControlsUiControllerImpl @Inject constructor ( private lateinit var dismissGlobalActions: Runnable private val popupThemedContext = ContextThemeWrapper(context, R.style.Control_ListPopupWindow) + private val collator = Collator.getInstance(context.resources.configuration.locales[0]) + private val localeComparator = compareBy(collator) { + it.getTitle() + } + + private val onSeedingComplete = Consumer { + accepted -> + if (accepted) { + selectedStructure = controlsController.get().getFavorites().maxBy { + it.controls.size + } ?: EMPTY_STRUCTURE + updatePreferences(selectedStructure) + } + reload(parent) + } + override val available: Boolean get() = controlsController.get().available @@ -113,22 +129,13 @@ class ControlsUiControllerImpl @Inject constructor ( ): ControlsListingController.ControlsListingCallback { return object : ControlsListingController.ControlsListingCallback { override fun onServicesUpdated(serviceInfos: List) { - bgExecutor.execute { - val collator = Collator.getInstance(context.resources.configuration.locales[0]) - val localeComparator = compareBy(collator) { - it.loadLabel() - } - - val mList = serviceInfos.toMutableList() - mList.sortWith(localeComparator) - lastItems = mList.map { - SelectionItem(it.loadLabel(), "", it.loadIcon(), it.componentName) - } - uiExecutor.execute { - parent.removeAllViews() - if (lastItems.size > 0) { - onResult(lastItems) - } + val lastItems = serviceInfos.map { + SelectionItem(it.loadLabel(), "", it.loadIcon(), it.componentName) + } + uiExecutor.execute { + parent.removeAllViews() + if (lastItems.size > 0) { + onResult(lastItems) } } } @@ -144,8 +151,7 @@ class ControlsUiControllerImpl @Inject constructor ( allStructures = controlsController.get().getFavorites() selectedStructure = loadPreference(allStructures) - val cb = Consumer { _ -> reload(parent) } - if (controlsController.get().addSeedingFavoritesCallback(cb)) { + if (controlsController.get().addSeedingFavoritesCallback(onSeedingComplete)) { listingCallback = createCallback(::showSeedingView) } else if (selectedStructure.controls.isEmpty() && allStructures.size <= 1) { // only show initial view if there are really no favorites across any structure @@ -309,9 +315,12 @@ class ControlsUiControllerImpl @Inject constructor ( } val itemsByComponent = items.associateBy { it.componentName } - val itemsWithStructure = allStructures.mapNotNull { + val itemsWithStructure = mutableListOf() + allStructures.mapNotNullTo(itemsWithStructure) { itemsByComponent.get(it.componentName)?.copy(structure = it.structure) } + itemsWithStructure.sortWith(localeComparator) + val selectionItem = findSelectionItem(selectedStructure, itemsWithStructure) ?: items[0] var adapter = ItemAdapter(context, R.layout.controls_spinner_item).apply { @@ -441,6 +450,7 @@ class ControlsUiControllerImpl @Inject constructor ( } private fun updatePreferences(si: StructureInfo) { + if (si == EMPTY_STRUCTURE) return sharedPreferences.edit() .putString(PREF_COMPONENT, si.componentName.flattenToString()) .putString(PREF_STRUCTURE, si.structure.toString())