MainActivity.kt 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package im.angry.openeuicc.ui
  2. import android.os.Bundle
  3. import android.util.Log
  4. import android.view.Menu
  5. import android.view.View
  6. import android.widget.AdapterView
  7. import android.widget.ArrayAdapter
  8. import android.widget.Spinner
  9. import androidx.appcompat.app.AppCompatActivity
  10. import androidx.lifecycle.lifecycleScope
  11. import im.angry.openeuicc.R
  12. import im.angry.openeuicc.core.EuiccChannelRepositoryProxy
  13. import im.angry.openeuicc.databinding.ActivityMainBinding
  14. import kotlinx.coroutines.Dispatchers
  15. import kotlinx.coroutines.launch
  16. import kotlinx.coroutines.withContext
  17. class MainActivity : AppCompatActivity() {
  18. companion object {
  19. const val TAG = "MainActivity"
  20. }
  21. private val repo = EuiccChannelRepositoryProxy(this)
  22. private lateinit var spinnerAdapter: ArrayAdapter<String>
  23. private lateinit var spinner: Spinner
  24. private val fragments = arrayListOf<EuiccManagementFragment>()
  25. private lateinit var binding: ActivityMainBinding
  26. override fun onCreate(savedInstanceState: Bundle?) {
  27. super.onCreate(savedInstanceState)
  28. binding = ActivityMainBinding.inflate(layoutInflater)
  29. setContentView(binding.root)
  30. spinnerAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item)
  31. lifecycleScope.launch {
  32. init()
  33. }
  34. }
  35. override fun onCreateOptionsMenu(menu: Menu): Boolean {
  36. menuInflater.inflate(R.menu.activity_main_slot_spinner, menu)
  37. spinner = menu.findItem(R.id.spinner).actionView as Spinner
  38. spinner.adapter = spinnerAdapter
  39. spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
  40. override fun onItemSelected(
  41. parent: AdapterView<*>?,
  42. view: View?,
  43. position: Int,
  44. id: Long
  45. ) {
  46. supportFragmentManager.beginTransaction().replace(R.id.fragment_root, fragments[position]).commit()
  47. }
  48. override fun onNothingSelected(parent: AdapterView<*>?) {
  49. }
  50. }
  51. return true
  52. }
  53. private suspend fun init() {
  54. withContext(Dispatchers.IO) {
  55. repo.load()
  56. repo.availableChannels.forEach {
  57. Log.d(TAG, it.name)
  58. Log.d(TAG, it.lpa.eid)
  59. }
  60. }
  61. withContext(Dispatchers.Main) {
  62. repo.availableChannels.forEach {
  63. spinnerAdapter.add(it.name)
  64. fragments.add(EuiccManagementFragment(it))
  65. }
  66. if (fragments.isNotEmpty()) {
  67. binding.noEuiccPlaceholder.visibility = View.GONE
  68. supportFragmentManager.beginTransaction().replace(R.id.fragment_root, fragments.first()).commit()
  69. }
  70. }
  71. }
  72. }