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 516841f..254b31f 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,7 +3,6 @@ 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 @@ -30,35 +29,34 @@ 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(ComponentName::getPackageName).toSet() + get() = components.map { it.packageName }.toSet() private val launchIntent: Intent? - get() = packageNames.firstNotNullOfOrNull(packageManager::getLaunchIntent) + get() = packageNames.firstNotNullOfOrNull(context.packageManager::getLaunchIntent) private val activities: Iterable - get() = packageNames.flatMap(packageManager::getActivities) - .filter(ActivityInfo::exported).map { ComponentName(it.packageName, it.name) } + get() = packageNames.flatMap(context.packageManager::getActivities) + .filter { it.exported }.map { ComponentName(it.packageName, it.name) } val available: Boolean get() = getIntent() != null || getDisabledPackageName() != null private fun getIntent(): Intent? { - for (activity in activities) { - if (!components.contains(activity)) continue - if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue - return Intent.makeMainActivity(activity) + 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 } - return launchIntent } private fun getDisabledPackageName() = packageNames.find { try { - isDisabledState(packageManager.getApplicationEnabledSetting(it)) - } catch (_: IllegalArgumentException) { + isDisabledState(context.packageManager.getApplicationEnabledSetting(it)) + } catch (e: IllegalArgumentException) { false } } @@ -69,7 +67,7 @@ class SIMToolkit(private val context: Context) { val pkgName = getDisabledPackageName() ?: return false val message = context.getString( R.string.toast_prompt_to_enable_sim_toolkit, - packageManager.getApplicationLabel(pkgName) + context.packageManager.getApplicationLabel(pkgName) ) intent = Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS,