summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Pietal <mpietal@google.com> 2020-06-12 11:25:13 -0400
committer Matt Pietal <mpietal@google.com> 2020-06-12 11:25:13 -0400
commite4bd053414ff7b5fad98f922717c622298279ebc (patch)
tree1e4e01263c966e22149ac2e5d77db28a1a40f0eb
parentb749be45c7b3627127b9d052937c77b3d302e4e5 (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.kt48
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())