From 1c69639bc9e2fffc27a93bac6b3dc3f4ab7a225f Mon Sep 17 00:00:00 2001 From: Oskar Date: Sat, 3 Feb 2024 18:59:21 +0100 Subject: [PATCH] Sort app results first if they start with the query (#4044) --- .../search/LawnchairAppSearchAlgorithm.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt b/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt index 48e6d901b8e..8ca8f5d5bef 100644 --- a/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt +++ b/lawnchair/src/app/lawnchair/search/LawnchairAppSearchAlgorithm.kt @@ -173,6 +173,7 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c return apps.asSequence() .filter { StringMatcherUtility.matches(queryTextLower, it.title.toString(), matcher) } .filterHiddenApps(queryTextLower) + .sortedWith(queryComparator(queryTextLower)) .take(maxResultsCount) .toList() } @@ -182,7 +183,7 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c val filteredApps = apps.asSequence() .filterHiddenApps(queryTextLower) .toList() - val matches = FuzzySearch.extractSorted( + val matches = FuzzySearch.extractTop( queryTextLower, filteredApps, { it.sectionName + it.title }, @@ -190,8 +191,10 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c 65, ) - return matches.take(maxResultsCount) + return matches .map { it.referent } + .sortedWith(queryComparator(queryTextLower)) + .take(maxResultsCount) } private fun Sequence.filterHiddenApps(query: String): Sequence { @@ -206,4 +209,11 @@ class LawnchairAppSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm(c filter { it.toComponentKey().toString() !in hiddenApps } } } + + private fun queryComparator(query: String): Comparator { + return compareBy( + { it.title.toString().startsWith(query, true).not() }, + { it.title.toString() }, + ) + } }