mirror of
https://github.com/He4eT/yamf_launcher.git
synced 2026-05-05 01:47:24 +00:00
Updated search to not update the entire thing
This commit is contained in:
parent
7d540aa76d
commit
faea9c95e3
3 changed files with 20 additions and 18 deletions
|
|
@ -75,6 +75,7 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
||||||
recyclerView.layoutManager = LinearLayoutManager(this)
|
recyclerView.layoutManager = LinearLayoutManager(this)
|
||||||
installedApps = getInstalledApps()
|
installedApps = getInstalledApps()
|
||||||
filteredApps = mutableListOf()
|
filteredApps = mutableListOf()
|
||||||
|
filteredApps.addAll(installedApps)
|
||||||
val newApps = mutableListOf<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>()
|
val newApps = mutableListOf<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>()
|
||||||
newApps.addAll(installedApps)
|
newApps.addAll(installedApps)
|
||||||
adapter = AppMenuAdapter(this@AppMenuActivity, newApps, this, this,this, menuMode)
|
adapter = AppMenuAdapter(this@AppMenuActivity, newApps, this, this,this, menuMode)
|
||||||
|
|
@ -155,21 +156,24 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
||||||
private fun filterItems(query: String?) {
|
private fun filterItems(query: String?) {
|
||||||
CoroutineScope(Dispatchers.Default).launch {
|
CoroutineScope(Dispatchers.Default).launch {
|
||||||
val cleanQuery = query?.clean()
|
val cleanQuery = query?.clean()
|
||||||
filteredApps.clear()
|
val newFilteredApps = mutableListOf<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>()
|
||||||
|
|
||||||
if (cleanQuery.isNullOrEmpty()) {
|
if (cleanQuery.isNullOrEmpty()) {
|
||||||
filteredApps.addAll(installedApps)
|
newFilteredApps.addAll(installedApps)
|
||||||
} else {
|
} else {
|
||||||
installedApps.forEachIndexed {index, it ->
|
installedApps.forEachIndexed {index, it ->
|
||||||
val cleanItemText = sharedPreferenceManager.getAppName(this@AppMenuActivity, it.first.applicationInfo.packageName, it.second.second, it.first.applicationInfo.loadLabel(packageManager)).toString().clean()
|
val cleanItemText = sharedPreferenceManager.getAppName(this@AppMenuActivity, it.first.applicationInfo.packageName, it.second.second, it.first.applicationInfo.loadLabel(packageManager)).toString().clean()
|
||||||
if (cleanItemText.contains(cleanQuery, ignoreCase = true)) {
|
if (cleanItemText.contains(cleanQuery, ignoreCase = true)) {
|
||||||
filteredApps.add(it)
|
newFilteredApps.add(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val changes = detectChanges(filteredApps, newFilteredApps)
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
adapter.updateAllApps(filteredApps)
|
applyChanges(changes, newFilteredApps)
|
||||||
}
|
}
|
||||||
|
filteredApps = newFilteredApps
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -198,6 +202,7 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
super.onStop()
|
super.onStop()
|
||||||
job.cancel()
|
job.cancel()
|
||||||
|
//finish()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -228,16 +233,10 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
||||||
|
|
||||||
private fun detectChanges(oldList: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>, newList: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>): List<Change> {
|
private fun detectChanges(oldList: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>, newList: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>): List<Change> {
|
||||||
val changes = mutableListOf<Change>()
|
val changes = mutableListOf<Change>()
|
||||||
|
val removalChanges = mutableListOf<Change>()
|
||||||
val oldSet = oldList.map { Pair(it.first.applicationInfo.packageName, it.second.second) }.toSet()
|
val oldSet = oldList.map { Pair(it.first.applicationInfo.packageName, it.second.second) }.toSet()
|
||||||
val newSet = newList.map { Pair(it.first.applicationInfo.packageName, it.second.second) }.toSet()
|
val newSet = newList.map { Pair(it.first.applicationInfo.packageName, it.second.second) }.toSet()
|
||||||
|
|
||||||
// Detect removals
|
|
||||||
oldList.forEachIndexed { index, oldItem ->
|
|
||||||
if (!newSet.contains(Pair(oldItem.first.applicationInfo.packageName, oldItem.second.second))) {
|
|
||||||
changes.add(Change(ChangeType.REMOVE, index))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detect insertions
|
// Detect insertions
|
||||||
newList.forEachIndexed { index, newItem ->
|
newList.forEachIndexed { index, newItem ->
|
||||||
if (!oldSet.contains(Pair(newItem.first.applicationInfo.packageName, newItem.second.second))) {
|
if (!oldSet.contains(Pair(newItem.first.applicationInfo.packageName, newItem.second.second))) {
|
||||||
|
|
@ -245,6 +244,13 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Detect removals
|
||||||
|
oldList.forEachIndexed { index, oldItem ->
|
||||||
|
if (!newSet.contains(Pair(oldItem.first.applicationInfo.packageName, oldItem.second.second))) {
|
||||||
|
removalChanges.add(Change(ChangeType.REMOVE, index))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Detect updates
|
// Detect updates
|
||||||
oldList.forEachIndexed { index, oldItem ->
|
oldList.forEachIndexed { index, oldItem ->
|
||||||
if (newSet.contains(Pair(oldItem.first.applicationInfo.packageName, oldItem.second.second))) {
|
if (newSet.contains(Pair(oldItem.first.applicationInfo.packageName, oldItem.second.second))) {
|
||||||
|
|
@ -255,6 +261,8 @@ class AppMenuActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
changes.addAll(removalChanges.reversed())
|
||||||
|
|
||||||
return changes
|
return changes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -137,11 +137,4 @@ class AppMenuAdapter(
|
||||||
fun updateApp(position: Int, app: Pair<LauncherActivityInfo, Pair<UserHandle, Int>>) {
|
fun updateApp(position: Int, app: Pair<LauncherActivityInfo, Pair<UserHandle, Int>>) {
|
||||||
apps[position] = app
|
apps[position] = app
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("NotifyDataSetChanged")
|
|
||||||
fun updateAllApps(newApps: List<Pair<LauncherActivityInfo, Pair<UserHandle, Int>>>) {
|
|
||||||
apps.clear()
|
|
||||||
apps.addAll(newApps)
|
|
||||||
notifyDataSetChanged()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -55,6 +55,7 @@
|
||||||
android:drawablePadding="8dp"
|
android:drawablePadding="8dp"
|
||||||
android:editTextColor="#f3f3f3"
|
android:editTextColor="#f3f3f3"
|
||||||
android:hint="Search..."
|
android:hint="Search..."
|
||||||
|
android:singleLine="true"
|
||||||
android:textAppearance="@android:style/TextAppearance.DeviceDefault"
|
android:textAppearance="@android:style/TextAppearance.DeviceDefault"
|
||||||
android:textSize="25sp" />
|
android:textSize="25sp" />
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue