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.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.provider.Settings 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>) { data class Slot(private val context: Context, private val components: Set<ComponentName>) {
private val packageManager: PackageManager
get() = context.packageManager
private val packageNames: Iterable<String> private val packageNames: Iterable<String>
get() = components.map { it.packageName }.toSet() get() = components.map(ComponentName::getPackageName).toSet()
private val launchIntent: Intent? private val launchIntent: Intent?
get() = packageNames.firstNotNullOfOrNull(context.packageManager::getLaunchIntent) get() = packageNames.firstNotNullOfOrNull(packageManager::getLaunchIntent)
private val activities: Iterable<ComponentName> private val activities: Iterable<ComponentName>
get() = packageNames.flatMap(context.packageManager::getActivities) get() = packageNames.flatMap(packageManager::getActivities)
.filter { it.exported }.map { ComponentName(it.packageName, it.name) } .filter(ActivityInfo::exported).map { ComponentName(it.packageName, it.name) }
val available: Boolean val available: Boolean
get() = getIntent() != null || getDisabledPackageName() != null get() = getIntent() != null || getDisabledPackageName() != null
private fun getIntent(): Intent? { private fun getIntent(): Intent? {
try { for (activity in activities) {
val component = components.find(activities::contains) ?: return launchIntent if (!components.contains(activity)) continue
if (isDisabledState(context.packageManager.getComponentEnabledSetting(component))) if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue
return null return Intent.makeMainActivity(activity)
return Intent.makeMainActivity(component)
} catch (e: IllegalArgumentException) {
return null
} }
return launchIntent
} }
private fun getDisabledPackageName() = packageNames.find { private fun getDisabledPackageName() = packageNames.find {
try { try {
isDisabledState(context.packageManager.getApplicationEnabledSetting(it)) isDisabledState(packageManager.getApplicationEnabledSetting(it))
} catch (e: IllegalArgumentException) { } catch (_: IllegalArgumentException) {
false false
} }
} }
@ -67,7 +69,7 @@ class SIMToolkit(private val context: Context) {
val pkgName = getDisabledPackageName() ?: return false val pkgName = getDisabledPackageName() ?: return false
val message = context.getString( val message = context.getString(
R.string.toast_prompt_to_enable_sim_toolkit, R.string.toast_prompt_to_enable_sim_toolkit,
context.packageManager.getApplicationLabel(pkgName) packageManager.getApplicationLabel(pkgName)
) )
intent = Intent( intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Settings.ACTION_APPLICATION_DETAILS_SETTINGS,