diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedEuiccManagementFragment.kt b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedEuiccManagementFragment.kt
index d703314..cd8a6aa 100644
--- a/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedEuiccManagementFragment.kt
+++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedEuiccManagementFragment.kt
@@ -1,12 +1,7 @@
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.MenuInflater
-import android.widget.Toast
import im.angry.easyeuicc.R
import im.angry.openeuicc.util.SIMToolkit
import im.angry.openeuicc.util.newInstanceEuicc
@@ -30,22 +25,8 @@ class UnprivilegedEuiccManagementFragment : EuiccManagementFragment() {
inflater.inflate(R.menu.fragment_sim_toolkit, menu)
menu.findItem(R.id.open_sim_toolkit).apply {
val slot = stk[slotId] ?: return@apply
- isVisible = slot.intent != null
- setOnMenuItemClickListener {
- 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
- }
+ isVisible = slot.available
+ setOnMenuItemClickListener { slot.launch() }
}
}
-}
-
-
-private fun PackageManager.getApplicationLabel(packageName: String): CharSequence =
- getApplicationLabel(getApplicationInfo(packageName, 0))
+}
\ No newline at end of file
diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt b/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt
index 418b1aa..516841f 100644
--- a/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt
+++ b/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt
@@ -43,7 +43,10 @@ class SIMToolkit(private val context: Context) {
get() = packageNames.flatMap(packageManager::getActivities)
.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) {
if (!components.contains(activity)) continue
if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue
@@ -52,23 +55,31 @@ class SIMToolkit(private val context: Context) {
return launchIntent
}
- private fun getDisabledPackageIntent(): Intent? {
- val disabledPackageName = packageNames.find {
- try {
- isDisabledState(packageManager.getApplicationEnabledSetting(it))
- } catch (_: IllegalArgumentException) {
- false
- }
+ private fun getDisabledPackageName() = 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 intent: Intent?
- get() = getActivityIntent() ?: getDisabledPackageIntent()
+ fun launch(): Boolean {
+ 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
}
+private fun PackageManager.getApplicationLabel(packageName: String): CharSequence =
+ getApplicationLabel(getApplicationInfo(packageName, 0))
+
private fun PackageManager.getLaunchIntent(packageName: String) = try {
getLaunchIntentForPackage(packageName)
} catch (_: PackageManager.NameNotFoundException) {
diff --git a/app-unpriv/src/main/res/values/strings.xml b/app-unpriv/src/main/res/values/strings.xml
index 43bf44f..c57476f 100644
--- a/app-unpriv/src/main/res/values/strings.xml
+++ b/app-unpriv/src/main/res/values/strings.xml
@@ -9,7 +9,7 @@
ARA-M SHA-1 copied to clipboard
- Please ENABLE your \"%s\" application
+ Please ENABLE your \"%s\" application
System Features