feat: open stk from menu #56
6 changed files with 87 additions and 2 deletions
|
@ -22,9 +22,12 @@
|
|||
|
||||
<activity
|
||||
android:name="im.angry.openeuicc.ui.CompatibilityCheckActivity"
|
||||
android:label="@string/compatibility_check"
|
||||
android:exported="false" />
|
||||
android:exported="false"
|
||||
android:label="@string/compatibility_check" />
|
||||
|
||||
</application>
|
||||
|
||||
<queries>
|
||||
<package android:name="com.android.stk" />
|
||||
</queries>
|
||||
</manifest>
|
|
@ -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()
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
9
app-unpriv/src/main/res/menu/fragment_sim_toolkit.xml
Normal file
9
app-unpriv/src/main/res/menu/fragment_sim_toolkit.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/open_sim_toolkit"
|
||||
android:title="@string/open_sim_toolkit"
|
||||
android:visible="false"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
|
@ -2,6 +2,7 @@
|
|||
<string name="app_name" translatable="false">EasyEUICC</string>
|
||||
<string name="channel_name_format">SIM %d</string>
|
||||
<string name="compatibility_check">Compatibility Check</string>
|
||||
<string name="open_sim_toolkit">Open SIM Toolkit</string>
|
||||
|
||||
<!-- Compatibility Check Descriptions -->
|
||||
<string name="compatibility_check_system_features">System Features</string>
|
||||
|
|
Loading…
Add table
Reference in a new issue