From a5d7e0049c88321bb4ca65904d3959db0fc66516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=93=AD=E5=93=AD=E7=9D=A6=E5=A4=B4=E4=BA=BA?= <159055762+VictorModi@users.noreply.github.com> Date: Fri, 7 Jun 2024 21:14:34 +0800 Subject: [PATCH] Fix: Array out-of-bounds crash due to some cases of AppRule update (#154) * Fix: Array out of bounds due to some cases in AppRule * Why not just .firstOrNull ? * My mom said ?.let{} would be better. --- .../getter/ui/fragment/AppRulesFragment.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/cn/lyric/getter/ui/fragment/AppRulesFragment.kt b/app/src/main/java/cn/lyric/getter/ui/fragment/AppRulesFragment.kt index a189fbc..02ffa57 100644 --- a/app/src/main/java/cn/lyric/getter/ui/fragment/AppRulesFragment.kt +++ b/app/src/main/java/cn/lyric/getter/ui/fragment/AppRulesFragment.kt @@ -164,13 +164,16 @@ class AppRulesFragment : Fragment() { appRules.forEach { appRule -> var appInfos: AppInfos? = null if (appInfosPackNames.contains(appRule.packageName)) { - val packageInfo = installedPackages.filter { it.packageName == appRule.packageName }[0] - val applicationInfo = packageInfo.applicationInfo - appInfos = AppInfos(applicationInfo.loadLabel(packageManager).toString(), applicationInfo.loadIcon(packageManager), packageInfo.packageName, packageInfo.versionCode, appRule) - + val packageInfo = installedPackages.firstOrNull { it.packageName == appRule.packageName } + packageInfo?.let { + val applicationInfo = packageInfo.applicationInfo + appInfos = AppInfos(applicationInfo.loadLabel(packageManager).toString(), applicationInfo.loadIcon(packageManager), packageInfo.packageName, packageInfo.versionCode, appRule) + } } else if (config.showAllRules) { - val packageInfo = installedPackages.filter { it.packageName == "com.android.systemui" }[0] - appInfos = AppInfos(appRule.name, packageInfo.applicationInfo.loadIcon(packageManager), appRule.packageName, 0, appRule, false) + val packageInfo = installedPackages.firstOrNull { it.packageName == "com.android.systemui" } + packageInfo?.let { + appInfos = AppInfos(appRule.name, packageInfo.applicationInfo.loadIcon(packageManager), appRule.packageName, 0, appRule, false) + } } goMainThread { appInfos?.let { appAdapter.addData(it) } } } @@ -191,4 +194,4 @@ class AppRulesFragment : Fragment() { } _binding = null } -} \ No newline at end of file +}