SlotSelectFragment.kt 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package im.angry.openeuicc.ui
  2. import android.content.DialogInterface
  3. import android.os.Bundle
  4. import android.view.LayoutInflater
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import android.widget.ArrayAdapter
  8. import android.widget.Spinner
  9. import androidx.appcompat.widget.Toolbar
  10. import im.angry.openeuicc.common.R
  11. import im.angry.openeuicc.core.EuiccChannel
  12. import im.angry.openeuicc.util.*
  13. class SlotSelectFragment : BaseMaterialDialogFragment(), OpenEuiccContextMarker {
  14. companion object {
  15. const val TAG = "SlotSelectFragment"
  16. fun newInstance(knownChannels: List<EuiccChannel>): SlotSelectFragment {
  17. return SlotSelectFragment().apply {
  18. arguments = Bundle().apply {
  19. putIntArray("slotIds", knownChannels.map { it.slotId }.toIntArray())
  20. putIntArray("logicalSlotIds", knownChannels.map { it.logicalSlotId }.toIntArray())
  21. putIntArray("portIds", knownChannels.map { it.portId }.toIntArray())
  22. }
  23. }
  24. }
  25. }
  26. interface SlotSelectedListener {
  27. fun onSlotSelected(slotId: Int, portId: Int)
  28. fun onSlotSelectCancelled()
  29. }
  30. private lateinit var toolbar: Toolbar
  31. private lateinit var spinner: Spinner
  32. private lateinit var adapter: ArrayAdapter<String>
  33. private lateinit var slotIds: IntArray
  34. private lateinit var logicalSlotIds: IntArray
  35. private lateinit var portIds: IntArray
  36. override fun onCreateView(
  37. inflater: LayoutInflater,
  38. container: ViewGroup?,
  39. savedInstanceState: Bundle?
  40. ): View? {
  41. val view = inflater.inflate(R.layout.fragment_slot_select, container, false)
  42. toolbar = view.requireViewById(R.id.toolbar)
  43. toolbar.setTitle(R.string.slot_select)
  44. toolbar.inflateMenu(R.menu.fragment_slot_select)
  45. adapter = ArrayAdapter<String>(inflater.context, R.layout.spinner_item)
  46. spinner = view.requireViewById(R.id.spinner)
  47. spinner.adapter = adapter
  48. return view
  49. }
  50. override fun onStart() {
  51. super.onStart()
  52. slotIds = requireArguments().getIntArray("slotIds")!!
  53. logicalSlotIds = requireArguments().getIntArray("logicalSlotIds")!!
  54. portIds = requireArguments().getIntArray("portIds")!!
  55. logicalSlotIds.forEach { id ->
  56. adapter.add(getString(R.string.channel_name_format, id))
  57. }
  58. toolbar.setNavigationOnClickListener {
  59. (requireActivity() as SlotSelectedListener).onSlotSelectCancelled()
  60. }
  61. toolbar.setOnMenuItemClickListener {
  62. val slotId = slotIds[spinner.selectedItemPosition]
  63. val portId = portIds[spinner.selectedItemPosition]
  64. (requireActivity() as SlotSelectedListener).onSlotSelected(slotId, portId)
  65. dismiss()
  66. true
  67. }
  68. }
  69. override fun onResume() {
  70. super.onResume()
  71. setWidthPercent(75)
  72. }
  73. override fun onCancel(dialog: DialogInterface) {
  74. super.onCancel(dialog)
  75. (requireActivity() as SlotSelectedListener).onSlotSelectCancelled()
  76. }
  77. }