Compare commits

..

1 commit

Author SHA1 Message Date
28a5de1c01
refactor: sim toolkit 2025-03-05 17:15:33 +08:00

View file

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