SlotSelectFragment.kt 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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(): SlotSelectFragment {
  17. return SlotSelectFragment()
  18. }
  19. }
  20. interface SlotSelectedListener {
  21. fun onSlotSelected(slotId: Int, portId: Int)
  22. fun onSlotSelectCancelled()
  23. }
  24. private lateinit var toolbar: Toolbar
  25. private lateinit var spinner: Spinner
  26. private val channels: List<EuiccChannel> by lazy {
  27. euiccChannelManager.knownChannels.sortedBy { it.logicalSlotId }
  28. }
  29. override fun onCreateView(
  30. inflater: LayoutInflater,
  31. container: ViewGroup?,
  32. savedInstanceState: Bundle?
  33. ): View? {
  34. val view = inflater.inflate(R.layout.fragment_slot_select, container, false)
  35. toolbar = view.requireViewById(R.id.toolbar)
  36. toolbar.setTitle(R.string.slot_select)
  37. toolbar.inflateMenu(R.menu.fragment_slot_select)
  38. val adapter = ArrayAdapter<String>(inflater.context, R.layout.spinner_item)
  39. spinner = view.requireViewById(R.id.spinner)
  40. spinner.adapter = adapter
  41. channels.forEach { channel ->
  42. adapter.add(getString(R.string.channel_name_format, channel.logicalSlotId))
  43. }
  44. toolbar.setNavigationOnClickListener {
  45. (requireActivity() as SlotSelectedListener).onSlotSelectCancelled()
  46. }
  47. toolbar.setOnMenuItemClickListener {
  48. val channel = channels[spinner.selectedItemPosition]
  49. (requireActivity() as SlotSelectedListener).onSlotSelected(channel.slotId, channel.portId)
  50. dismiss()
  51. true
  52. }
  53. return view
  54. }
  55. override fun onResume() {
  56. super.onResume()
  57. setWidthPercent(75)
  58. }
  59. override fun onCancel(dialog: DialogInterface) {
  60. super.onCancel(dialog)
  61. (requireActivity() as SlotSelectedListener).onSlotSelectCancelled()
  62. }
  63. }