diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt b/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt index 254b31f..516841f 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt @@ -3,6 +3,7 @@ package im.angry.openeuicc.util import android.content.ComponentName import android.content.Context import android.content.Intent +import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.net.Uri import android.provider.Settings @@ -29,34 +30,35 @@ class SIMToolkit(private val context: Context) { } data class Slot(private val context: Context, private val components: Set) { + private val packageManager: PackageManager + get() = context.packageManager + private val packageNames: Iterable - get() = components.map { it.packageName }.toSet() + get() = components.map(ComponentName::getPackageName).toSet() private val launchIntent: Intent? - get() = packageNames.firstNotNullOfOrNull(context.packageManager::getLaunchIntent) + get() = packageNames.firstNotNullOfOrNull(packageManager::getLaunchIntent) private val activities: Iterable - get() = packageNames.flatMap(context.packageManager::getActivities) - .filter { it.exported }.map { ComponentName(it.packageName, it.name) } + get() = packageNames.flatMap(packageManager::getActivities) + .filter(ActivityInfo::exported).map { ComponentName(it.packageName, it.name) } val available: Boolean get() = getIntent() != null || getDisabledPackageName() != null private fun getIntent(): Intent? { - try { - val component = components.find(activities::contains) ?: return launchIntent - if (isDisabledState(context.packageManager.getComponentEnabledSetting(component))) - return null - return Intent.makeMainActivity(component) - } catch (e: IllegalArgumentException) { - return null + for (activity in activities) { + if (!components.contains(activity)) continue + if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue + return Intent.makeMainActivity(activity) } + return launchIntent } private fun getDisabledPackageName() = packageNames.find { try { - isDisabledState(context.packageManager.getApplicationEnabledSetting(it)) - } catch (e: IllegalArgumentException) { + isDisabledState(packageManager.getApplicationEnabledSetting(it)) + } catch (_: IllegalArgumentException) { false } } @@ -67,7 +69,7 @@ class SIMToolkit(private val context: Context) { val pkgName = getDisabledPackageName() ?: return false val message = context.getString( R.string.toast_prompt_to_enable_sim_toolkit, - context.packageManager.getApplicationLabel(pkgName) + packageManager.getApplicationLabel(pkgName) ) intent = Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS,