Compare commits

..

1 commit

Author SHA1 Message Date
b59a85e120
refactor: sim toolkit 2025-03-05 19:08:22 +08:00
3 changed files with 33 additions and 38 deletions

View file

@ -1,12 +1,7 @@
package im.angry.openeuicc.ui package im.angry.openeuicc.ui
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.provider.Settings
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.widget.Toast
import im.angry.easyeuicc.R import im.angry.easyeuicc.R
import im.angry.openeuicc.util.SIMToolkit import im.angry.openeuicc.util.SIMToolkit
import im.angry.openeuicc.util.newInstanceEuicc import im.angry.openeuicc.util.newInstanceEuicc
@ -30,22 +25,8 @@ class UnprivilegedEuiccManagementFragment : EuiccManagementFragment() {
inflater.inflate(R.menu.fragment_sim_toolkit, menu) inflater.inflate(R.menu.fragment_sim_toolkit, menu)
menu.findItem(R.id.open_sim_toolkit).apply { menu.findItem(R.id.open_sim_toolkit).apply {
val slot = stk[slotId] ?: return@apply val slot = stk[slotId] ?: return@apply
isVisible = slot.intent != null isVisible = slot.available
setOnMenuItemClickListener { setOnMenuItemClickListener { slot.launch() }
val intent = slot.intent ?: return@setOnMenuItemClickListener false
if (intent.action == Settings.ACTION_APPLICATION_DETAILS_SETTINGS) {
val packageName = intent.data!!.schemeSpecificPart
val label = requireContext().packageManager.getApplicationLabel(packageName)
val message = requireContext().getString(R.string.toast_prompt_to_enable_sim_toolkit, label)
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
}
startActivity(intent)
true
}
} }
} }
} }
private fun PackageManager.getApplicationLabel(packageName: String): CharSequence =
getApplicationLabel(getApplicationInfo(packageName, 0))

View file

@ -43,7 +43,10 @@ class SIMToolkit(private val context: Context) {
get() = packageNames.flatMap(packageManager::getActivities) get() = packageNames.flatMap(packageManager::getActivities)
.filter(ActivityInfo::exported).map { ComponentName(it.packageName, it.name) } .filter(ActivityInfo::exported).map { ComponentName(it.packageName, it.name) }
private fun getActivityIntent(): Intent? { val available: Boolean
get() = getIntent() != null || getDisabledPackageName() != null
private fun getIntent(): Intent? {
for (activity in activities) { for (activity in activities) {
if (!components.contains(activity)) continue if (!components.contains(activity)) continue
if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue
@ -52,23 +55,31 @@ class SIMToolkit(private val context: Context) {
return launchIntent return launchIntent
} }
private fun getDisabledPackageIntent(): Intent? { private fun getDisabledPackageName() = packageNames.find {
val disabledPackageName = packageNames.find { try {
try { isDisabledState(packageManager.getApplicationEnabledSetting(it))
isDisabledState(packageManager.getApplicationEnabledSetting(it)) } catch (_: IllegalArgumentException) {
} catch (_: IllegalArgumentException) { false
false
}
} }
if (disabledPackageName == null) return null
return Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", disabledPackageName, null)
)
} }
val intent: Intent? fun launch(): Boolean {
get() = getActivityIntent() ?: getDisabledPackageIntent() var intent = getIntent()
if (intent == null) {
val pkgName = getDisabledPackageName() ?: return false
val message = context.getString(
R.string.toast_prompt_to_enable_sim_toolkit,
packageManager.getApplicationLabel(pkgName)
)
intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", pkgName, null)
)
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
}
context.startActivity(intent)
return true
}
} }
} }
@ -78,6 +89,9 @@ private fun isDisabledState(state: Int) = when (state) {
else -> false else -> false
} }
private fun PackageManager.getApplicationLabel(packageName: String): CharSequence =
getApplicationLabel(getApplicationInfo(packageName, 0))
private fun PackageManager.getLaunchIntent(packageName: String) = try { private fun PackageManager.getLaunchIntent(packageName: String) = try {
getLaunchIntentForPackage(packageName) getLaunchIntentForPackage(packageName)
} catch (_: PackageManager.NameNotFoundException) { } catch (_: PackageManager.NameNotFoundException) {

View file

@ -9,7 +9,7 @@
<!-- Toast --> <!-- Toast -->
<string name="toast_ara_m_copied">ARA-M SHA-1 copied to clipboard</string> <string name="toast_ara_m_copied">ARA-M SHA-1 copied to clipboard</string>
<string name="toast_prompt_to_enable_sim_toolkit">Please ENABLE your \"%s\" application</string> <string name="toast_prompt_to_enable_sim_toolkit">Please ENABLE your \&quot;%s\&quot; application</string>
<!-- Compatibility Check Descriptions --> <!-- Compatibility Check Descriptions -->
<string name="compatibility_check_system_features">System Features</string> <string name="compatibility_check_system_features">System Features</string>