ProfileRenameFragment.kt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package im.angry.openeuicc.ui
  2. import android.app.Dialog
  3. import android.os.Bundle
  4. import android.view.LayoutInflater
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import android.widget.ProgressBar
  8. import android.widget.Toast
  9. import androidx.appcompat.widget.Toolbar
  10. import androidx.lifecycle.lifecycleScope
  11. import com.google.android.material.textfield.TextInputLayout
  12. import im.angry.openeuicc.common.R
  13. import im.angry.openeuicc.service.EuiccChannelManagerService.Companion.waitDone
  14. import im.angry.openeuicc.util.*
  15. import kotlinx.coroutines.launch
  16. class ProfileRenameFragment : BaseMaterialDialogFragment(), EuiccChannelFragmentMarker {
  17. companion object {
  18. const val TAG = "ProfileRenameFragment"
  19. fun newInstance(slotId: Int, portId: Int, iccid: String, currentName: String): ProfileRenameFragment {
  20. val instance = newInstanceEuicc(ProfileRenameFragment::class.java, slotId, portId)
  21. instance.requireArguments().apply {
  22. putString("iccid", iccid)
  23. putString("currentName", currentName)
  24. }
  25. return instance
  26. }
  27. }
  28. private lateinit var toolbar: Toolbar
  29. private lateinit var profileRenameNewName: TextInputLayout
  30. private lateinit var progress: ProgressBar
  31. private var renaming = false
  32. override fun onCreateView(
  33. inflater: LayoutInflater,
  34. container: ViewGroup?,
  35. savedInstanceState: Bundle?
  36. ): View {
  37. val view = inflater.inflate(R.layout.fragment_profile_rename, container, false)
  38. toolbar = view.requireViewById(R.id.toolbar)
  39. profileRenameNewName = view.requireViewById(R.id.profile_rename_new_name)
  40. progress = view.requireViewById(R.id.progress)
  41. toolbar.inflateMenu(R.menu.fragment_profile_rename)
  42. return view
  43. }
  44. override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  45. super.onViewCreated(view, savedInstanceState)
  46. toolbar.apply {
  47. setTitle(R.string.rename)
  48. setNavigationOnClickListener {
  49. if (!renaming) dismiss()
  50. }
  51. setOnMenuItemClickListener {
  52. if (!renaming) rename()
  53. true
  54. }
  55. }
  56. }
  57. override fun onStart() {
  58. super.onStart()
  59. profileRenameNewName.editText!!.setText(requireArguments().getString("currentName"))
  60. }
  61. override fun onResume() {
  62. super.onResume()
  63. setWidthPercent(95)
  64. }
  65. override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
  66. return super.onCreateDialog(savedInstanceState).also {
  67. it.setCanceledOnTouchOutside(false)
  68. }
  69. }
  70. private fun rename() {
  71. val name = profileRenameNewName.editText!!.text.toString().trim()
  72. if (name.length >= 64) {
  73. Toast.makeText(context, R.string.toast_profile_name_too_long, Toast.LENGTH_LONG).show()
  74. return
  75. }
  76. renaming = true
  77. progress.isIndeterminate = true
  78. progress.visibility = View.VISIBLE
  79. lifecycleScope.launch {
  80. ensureEuiccChannelManager()
  81. euiccChannelManagerService.waitForForegroundTask()
  82. euiccChannelManagerService.launchProfileRenameTask(
  83. slotId,
  84. portId,
  85. requireArguments().getString("iccid")!!,
  86. name
  87. ).waitDone()
  88. if (parentFragment is EuiccProfilesChangedListener) {
  89. (parentFragment as EuiccProfilesChangedListener).onEuiccProfilesChanged()
  90. }
  91. try {
  92. dismiss()
  93. } catch (e: IllegalStateException) {
  94. // Ignored
  95. }
  96. }
  97. }
  98. }