Compare commits

..

1 commit

Author SHA1 Message Date
b59a85e120
refactor: sim toolkit 2025-03-05 19:08:22 +08:00

View file

@ -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<ComponentName>) {
private val packageManager: PackageManager
get() = context.packageManager
private val packageNames: Iterable<String>
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<ComponentName>
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,