chore: simplify stk logic

This commit is contained in:
septs 2025-03-07 02:22:36 +08:00
parent b66a40ef55
commit 8cafb3dd59
Signed by: septs
SSH key fingerprint: SHA256:ElK0p6DNkbsqYUdJ3I9QHDVf21SQD0c2r+hd7s/r5Co
2 changed files with 21 additions and 25 deletions

View file

@ -39,9 +39,7 @@ class UnprivilegedEuiccManagementFragment : EuiccManagementFragment() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.open_sim_toolkit) {
val intent = item.intent ?: return false
if (intent.action == Settings.ACTION_APPLICATION_DETAILS_SETTINGS) {
val packageName = intent.data!!.schemeSpecificPart
SIMToolkit.getDisabledPackageName(item.intent)?.also { packageName ->
val label = requireContext().packageManager.getApplicationLabel(packageName)
val message = getString(R.string.toast_prompt_to_enable_sim_toolkit, label)
Toast.makeText(requireContext(), message, Toast.LENGTH_LONG).show()

View file

@ -31,9 +31,10 @@ class SIMToolkit(private val context: Context) {
data class Slot(private val packageManager: PackageManager, private val components: Set<ComponentName>) {
private val packageNames: Iterable<String>
get() = components.map(ComponentName::getPackageName).toSet()
.filter(packageManager::isInstalledApp)
private val launchIntent: Intent?
get() = packageNames.firstNotNullOfOrNull(packageManager::getLaunchIntent)
get() = packageNames.firstNotNullOfOrNull(packageManager::getLaunchIntentForPackage)
private val activities: Iterable<ComponentName>
get() = packageNames.flatMap(packageManager::getActivities)
@ -49,23 +50,23 @@ class SIMToolkit(private val context: Context) {
}
private fun getDisabledPackageIntent(): Intent? {
val disabledPackageName = packageNames.find {
try {
isDisabledState(packageManager.getApplicationEnabledSetting(it))
} catch (_: IllegalArgumentException) {
false
}
}
if (disabledPackageName == null) return null
return Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", disabledPackageName, null)
)
val disabledPackageName = packageNames
.find { isDisabledState(packageManager.getApplicationEnabledSetting(it)) }
?: return null
val uri = Uri.fromParts("package", disabledPackageName, null)
return Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, uri)
}
val intent: Intent?
get() = getActivityIntent() ?: getDisabledPackageIntent()
}
companion object {
fun getDisabledPackageName(intent: Intent?): String? {
if (intent?.action != Settings.ACTION_APPLICATION_DETAILS_SETTINGS) return null
return intent.data?.schemeSpecificPart
}
}
}
private fun isDisabledState(state: Int) = when (state) {
@ -74,15 +75,12 @@ private fun isDisabledState(state: Int) = when (state) {
else -> false
}
private fun PackageManager.getLaunchIntent(packageName: String) = try {
getLaunchIntentForPackage(packageName)
private fun PackageManager.isInstalledApp(packageName: String) = try {
getPackageInfo(packageName, 0)
true
} catch (_: PackageManager.NameNotFoundException) {
null
false
}
private fun PackageManager.getActivities(packageName: String) = try {
getPackageInfo(packageName, PackageManager.GET_ACTIVITIES)
.activities?.toList() ?: emptyList()
} catch (_: PackageManager.NameNotFoundException) {
emptyList()
}
private fun PackageManager.getActivities(packageName: String) =
getPackageInfo(packageName, PackageManager.GET_ACTIVITIES).activities?.toList() ?: emptyList()