UnprivilegedEuiccManagementFragment.kt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package im.angry.openeuicc.ui
  2. import android.content.pm.PackageManager
  3. import android.provider.Settings
  4. import android.view.Menu
  5. import android.view.MenuInflater
  6. import android.view.MenuItem
  7. import android.widget.Toast
  8. import im.angry.easyeuicc.R
  9. import im.angry.openeuicc.core.EuiccChannel
  10. import im.angry.openeuicc.util.SIMToolkit
  11. import im.angry.openeuicc.util.newInstanceEuicc
  12. import im.angry.openeuicc.util.slotId
  13. class UnprivilegedEuiccManagementFragment : EuiccManagementFragment() {
  14. companion object {
  15. const val TAG = "UnprivilegedEuiccManagementFragment"
  16. fun newInstance(
  17. slotId: Int,
  18. portId: Int,
  19. seId: EuiccChannel.SecureElementId
  20. ): EuiccManagementFragment =
  21. newInstanceEuicc(UnprivilegedEuiccManagementFragment::class.java, slotId, portId, seId)
  22. }
  23. private val stk by lazy {
  24. SIMToolkit(requireContext())
  25. }
  26. override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
  27. super.onCreateOptionsMenu(menu, inflater)
  28. inflater.inflate(R.menu.fragment_sim_toolkit, menu)
  29. }
  30. override fun onPrepareOptionsMenu(menu: Menu) {
  31. super.onPrepareOptionsMenu(menu)
  32. menu.findItem(R.id.open_sim_toolkit).apply {
  33. intent = stk[slotId]?.intent
  34. isVisible = intent != null
  35. }
  36. }
  37. override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
  38. R.id.open_sim_toolkit -> {
  39. SIMToolkit.getDisabledPackageName(item.intent)?.also { packageName ->
  40. val label = requireContext().packageManager.getApplicationLabel(packageName)
  41. val message = getString(R.string.toast_prompt_to_enable_sim_toolkit, label)
  42. Toast.makeText(requireContext(), message, Toast.LENGTH_LONG).show()
  43. }
  44. super.onOptionsItemSelected(item) // handling intent
  45. }
  46. else -> super.onOptionsItemSelected(item)
  47. }
  48. }
  49. private fun PackageManager.getApplicationLabel(packageName: String): CharSequence =
  50. getApplicationLabel(getApplicationInfo(packageName, 0))