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