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 cd8a6aa..d703314 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,7 +1,12 @@
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
@@ -25,8 +30,22 @@ 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.available
- setOnMenuItemClickListener { slot.launch() }
+ 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
+ }
}
}
-}
\ No newline at end of file
+}
+
+
+private fun PackageManager.getApplicationLabel(packageName: String): CharSequence =
+ getApplicationLabel(getApplicationInfo(packageName, 0))
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 516841f..418b1aa 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,10 +43,7 @@ class SIMToolkit(private val context: Context) {
get() = packageNames.flatMap(packageManager::getActivities)
.filter(ActivityInfo::exported).map { ComponentName(it.packageName, it.name) }
- val available: Boolean
- get() = getIntent() != null || getDisabledPackageName() != null
-
- private fun getIntent(): Intent? {
+ private fun getActivityIntent(): Intent? {
for (activity in activities) {
if (!components.contains(activity)) continue
if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue
@@ -55,31 +52,23 @@ class SIMToolkit(private val context: Context) {
return launchIntent
}
- private fun getDisabledPackageName() = packageNames.find {
- try {
- isDisabledState(packageManager.getApplicationEnabledSetting(it))
- } catch (_: IllegalArgumentException) {
- false
+ 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)
+ )
}
- 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
- }
+ val intent: Intent?
+ get() = getActivityIntent() ?: getDisabledPackageIntent()
}
}
@@ -89,9 +78,6 @@ 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 c57476f..43bf44f 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