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