Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4bd0534 authored by Matt Pietal's avatar Matt Pietal
Browse files

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
parent b749be45
Loading
Loading
Loading
Loading
+29 −19
Original line number Diff line number Diff line
@@ -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,15 +129,7 @@ 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 {
                val lastItems = serviceInfos.map {
                    SelectionItem(it.loadLabel(), "", it.loadIcon(), it.componentName)
                }
                uiExecutor.execute {
@@ -133,7 +141,6 @@ class ControlsUiControllerImpl @Inject constructor (
            }
        }
    }
    }

    override fun show(parent: ViewGroup, dismissGlobalActions: Runnable) {
        Log.d(ControlsUiController.TAG, "show()")
@@ -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())