diff --git a/app-unpriv/src/main/AndroidManifest.xml b/app-unpriv/src/main/AndroidManifest.xml index e72b112..cb1ef5f 100644 --- a/app-unpriv/src/main/AndroidManifest.xml +++ b/app-unpriv/src/main/AndroidManifest.xml @@ -22,9 +22,12 @@ + android:exported="false" + android:label="@string/compatibility_check" /> + + + \ No newline at end of file diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt b/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt index f117038..2531676 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt @@ -1,9 +1,15 @@ package im.angry.openeuicc.di import androidx.fragment.app.Fragment +import im.angry.openeuicc.core.EuiccChannel +import im.angry.openeuicc.ui.EuiccManagementFragment +import im.angry.openeuicc.ui.UnprivilegedEuiccManagementFragment import im.angry.openeuicc.ui.UnprivilegedNoEuiccPlaceholderFragment class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() { + override fun createEuiccManagementFragment(channel: EuiccChannel): EuiccManagementFragment = + UnprivilegedEuiccManagementFragment.newInstance(channel.slotId, channel.portId) + override fun createNoEuiccPlaceholderFragment(): Fragment = UnprivilegedNoEuiccPlaceholderFragment() } \ No newline at end of file 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 new file mode 100644 index 0000000..dceece2 --- /dev/null +++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/UnprivilegedEuiccManagementFragment.kt @@ -0,0 +1,39 @@ +package im.angry.openeuicc.ui + +import android.util.Log +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import im.angry.easyeuicc.R +import im.angry.openeuicc.util.SIMToolkit +import im.angry.openeuicc.util.isUsb +import im.angry.openeuicc.util.newInstanceEuicc +import im.angry.openeuicc.util.slotId + + +class UnprivilegedEuiccManagementFragment : EuiccManagementFragment() { + companion object { + const val TAG = "UnprivilegedEuiccManagementFragment" + + fun newInstance(slotId: Int, portId: Int): EuiccManagementFragment = + newInstanceEuicc(UnprivilegedEuiccManagementFragment::class.java, slotId, portId) + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) + inflater.inflate(R.menu.fragment_sim_toolkit, menu) + menu.findItem(R.id.open_sim_toolkit).isVisible = + slotId != -1 && !isUsb && SIMToolkit.isInstalled(requireContext()) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean = + when (item.itemId) { + R.id.open_sim_toolkit -> { + Log.d(TAG, "Opening SIM Toolkit for SlotId: $slotId") + startActivity(SIMToolkit.intent(requireContext(), slotId)) + true + } + + else -> super.onOptionsItemSelected(item) + } +} \ 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 new file mode 100644 index 0000000..762fead --- /dev/null +++ b/app-unpriv/src/main/java/im/angry/openeuicc/util/SIMToolkit.kt @@ -0,0 +1,27 @@ +package im.angry.openeuicc.util + +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager.NameNotFoundException + +object SIMToolkit { + private const val PKG_NAME = "com.android.stk" + + fun isInstalled(context: Context): Boolean = context.let { + try { + it.packageManager.getPackageInfo(PKG_NAME, 0) + true + } catch (_: NameNotFoundException) { + false + } + } + + fun intent(context: Context, slotId: Int): Intent? { + val intent = context.packageManager.getLaunchIntentForPackage(PKG_NAME) ?: return null + if (intent.component?.shortClassName == ".StkMain1" && slotId == 1) { + intent.component = ComponentName(PKG_NAME, "$PKG_NAME.StkMain2") + } + return intent + } +} diff --git a/app-unpriv/src/main/res/menu/fragment_sim_toolkit.xml b/app-unpriv/src/main/res/menu/fragment_sim_toolkit.xml new file mode 100644 index 0000000..610b3a1 --- /dev/null +++ b/app-unpriv/src/main/res/menu/fragment_sim_toolkit.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app-unpriv/src/main/res/values/strings.xml b/app-unpriv/src/main/res/values/strings.xml index 124bedf..5abc4bf 100644 --- a/app-unpriv/src/main/res/values/strings.xml +++ b/app-unpriv/src/main/res/values/strings.xml @@ -2,6 +2,7 @@ EasyEUICC SIM %d Compatibility Check + Open SIM Toolkit System Features