diff --git a/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt b/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt
index f8d5956..829d7a0 100644
--- a/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt
+++ b/app/src/main/java/com/github/kr328/clash/PackagesActivity.kt
@@ -50,7 +50,6 @@ class PackagesActivity : BaseActivity() {
it.applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM != 0
)
}
- .sorted(compareBy(PackagesAdapter.AppInfo::label))
.toList()
}
}
@@ -73,10 +72,13 @@ class PackagesActivity : BaseActivity() {
progress.visibility = View.GONE
+ refreshChannel.offer(Unit)
+
while (isActive) {
refreshChannel.receive()
adapter.applyFilter(keyword, sort, decrease, systemApp)
+ mainList.scrollToPosition(0)
delay(200)
}
diff --git a/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt b/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt
index 3d12061..f0e4a7d 100644
--- a/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt
+++ b/app/src/main/java/com/github/kr328/clash/adapter/PackagesAdapter.kt
@@ -46,6 +46,16 @@ class PackagesAdapter(private val context: Context,
&& (systemApp || !it.isSystem)
}
.sorted { a, b ->
+ val sA = selectedPackages.contains(a.packageName)
+ val sB = selectedPackages.contains(b.packageName)
+
+ if ( sA != sB ) {
+ when {
+ sA -> return@sorted -1
+ sB -> return@sorted 1
+ }
+ }
+
val result = when (sort) {
Sort.NAME -> a.label.compareTo(b.label, true)
Sort.PACKAGE -> a.packageName.compareTo(b.packageName)
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 07ef2ed..6c38418 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -23,8 +23,8 @@
- access_control_mode_all
- - access_control_mode_blacklist
- access_control_mode_whitelist
+ - access_control_mode_blacklist