SlotSelectFragment.kt 2.3 KB

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