Skip to content

Commit

Permalink
perf: auto check QUERY_ALL_PACKAGES
Browse files Browse the repository at this point in the history
  • Loading branch information
lisonge committed Apr 25, 2024
1 parent 83a4e5f commit 31ad156
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 15 deletions.
15 changes: 15 additions & 0 deletions app/src/main/kotlin/li/songe/gkd/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.dylanc.activityresult.launcher.RequestPermissionLauncher
import com.dylanc.activityresult.launcher.StartActivityLauncher
import com.ramcosta.composedestinations.DestinationsNavHost
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
Expand All @@ -27,6 +28,8 @@ import li.songe.gkd.util.LocalNavController
import li.songe.gkd.util.LocalPickContentLauncher
import li.songe.gkd.util.LocalRequestPermissionLauncher
import li.songe.gkd.util.UpgradeDialog
import li.songe.gkd.util.appInfoCacheFlow
import li.songe.gkd.util.initOrResetAppInfoCache
import li.songe.gkd.util.map
import li.songe.gkd.util.storeFlow

Expand Down Expand Up @@ -79,6 +82,18 @@ class MainActivity : CompositionActivity({
activityVisibleFlow.update { it + 1 }
}

override fun onResume() {
super.onResume()

// https://github.com/gkd-kit/gkd/issues/543
// ContextCompat.checkSelfPermission(app, Manifest.permission.QUERY_ALL_PACKAGES) always is GRANTED
if (appInfoCacheFlow.value.count { e -> !e.value.isSystem && !e.value.hidden } < 16) {
lifecycleScope.launch(Dispatchers.IO) {
initOrResetAppInfoCache()
}
}
}

override fun onStop() {
super.onStop()
activityVisibleFlow.update { it - 1 }
Expand Down
11 changes: 0 additions & 11 deletions app/src/main/kotlin/li/songe/gkd/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,14 @@ package li.songe.gkd
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import li.songe.gkd.data.RawSubscription
import li.songe.gkd.data.SubsItem
import li.songe.gkd.db.DbSet
import li.songe.gkd.service.updateLauncherAppId
import li.songe.gkd.util.appInfoCacheFlow
import li.songe.gkd.util.authActionFlow
import li.songe.gkd.util.checkUpdate
import li.songe.gkd.util.initFolder
import li.songe.gkd.util.initOrResetAppInfoCache
import li.songe.gkd.util.launchTry
import li.songe.gkd.util.logZipDir
import li.songe.gkd.util.newVersionApkDir
Expand All @@ -30,14 +27,6 @@ class MainViewModel : ViewModel() {
// 每次打开页面更新记录桌面 appId
updateLauncherAppId()

// https://github.com/gkd-kit/gkd/issues/543
viewModelScope.launchTry(Dispatchers.IO) {
while (appInfoCacheFlow.value.size < 16) {
initOrResetAppInfoCache()
delay(10_000)
}
}

val localSubsItem = SubsItem(
id = -2, order = -2, mtime = System.currentTimeMillis()
)
Expand Down
11 changes: 7 additions & 4 deletions app/src/main/kotlin/li/songe/gkd/util/AppInfoState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,14 @@ private fun updateAppInfo(appId: String) {
suspend fun initOrResetAppInfoCache() {
if (updateAppMutex.isLocked) return
updateAppMutex.withLock {
val appMap = mutableMapOf<String, AppInfo>()
val oldAppIds = appInfoCacheFlow.value.keys
val appMap = appInfoCacheFlow.value.toMutableMap()
app.packageManager.getInstalledPackages(0).forEach { packageInfo ->
val info = packageInfo.toAppInfo()
if (info != null) {
appMap[packageInfo.packageName] = info
if (!oldAppIds.contains(packageInfo.packageName)) {
val info = packageInfo.toAppInfo()
if (info != null) {
appMap[packageInfo.packageName] = info
}
}
}
appInfoCacheFlow.value = appMap.toImmutableMap()
Expand Down

0 comments on commit 31ad156

Please sign in to comment.