diff options
| author | 2020-06-12 11:25:13 -0400 | |
|---|---|---|
| committer | 2020-06-12 11:25:13 -0400 | |
| commit | e4bd053414ff7b5fad98f922717c622298279ebc (patch) | |
| tree | 1e4e01263c966e22149ac2e5d77db28a1a40f0eb | |
| parent | b749be45c7b3627127b9d052937c77b3d302e4e5 (diff) | |
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
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt | 48 |
1 files 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 0f5aef7eeec1..1eb7e2168a6a 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<SelectionItem, CharSequence>(collator) { + it.getTitle() + } + + private val onSeedingComplete = Consumer<Boolean> { + 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<ControlsServiceInfo>) { - bgExecutor.execute { - val collator = Collator.getInstance(context.resources.configuration.locales[0]) - val localeComparator = compareBy<ControlsServiceInfo, CharSequence>(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<Boolean> { _ -> 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<SelectionItem>() + 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()) |