| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package im.angry.openeuicc.ui
- import android.os.Bundle
- import android.telephony.TelephonyManager
- import android.util.Log
- import android.view.Menu
- import android.view.MenuItem
- import android.view.View
- import android.widget.AdapterView
- import android.widget.ArrayAdapter
- import android.widget.Spinner
- import android.widget.Toast
- import androidx.appcompat.app.AppCompatActivity
- import androidx.lifecycle.lifecycleScope
- import im.angry.openeuicc.R
- import im.angry.openeuicc.core.EuiccChannelManager
- import im.angry.openeuicc.databinding.ActivityMainBinding
- import im.angry.openeuicc.util.*
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
- import kotlinx.coroutines.withContext
- class MainActivity : AppCompatActivity() {
- companion object {
- const val TAG = "MainActivity"
- }
- private lateinit var manager: EuiccChannelManager
- private lateinit var spinnerAdapter: ArrayAdapter<String>
- private lateinit var spinner: Spinner
- private val fragments = arrayListOf<EuiccManagementFragment>()
- private lateinit var binding: ActivityMainBinding
- private lateinit var tm: TelephonyManager
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = ActivityMainBinding.inflate(layoutInflater)
- setContentView(binding.root)
- tm = openEuiccApplication.telephonyManager
- manager = openEuiccApplication.euiccChannelManager
- spinnerAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item)
- lifecycleScope.launch {
- init()
- }
- }
- override fun onCreateOptionsMenu(menu: Menu): Boolean {
- menuInflater.inflate(R.menu.activity_main, menu)
- spinner = menu.findItem(R.id.spinner).actionView as Spinner
- spinner.adapter = spinnerAdapter
- spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(
- parent: AdapterView<*>?,
- view: View?,
- position: Int,
- id: Long
- ) {
- supportFragmentManager.beginTransaction().replace(R.id.fragment_root, fragments[position]).commit()
- }
- override fun onNothingSelected(parent: AdapterView<*>?) {
- }
- }
- if (tm.supportsDSDS) {
- val dsds = menu.findItem(R.id.dsds)
- dsds.isVisible = true
- dsds.isChecked = tm.dsdsEnabled
- }
- return true
- }
- override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
- R.id.dsds -> {
- tm.dsdsEnabled = !item.isChecked
- Toast.makeText(this, R.string.toast_dsds_switched, Toast.LENGTH_LONG).show()
- finish()
- true
- }
- else -> false
- }
- private suspend fun init() {
- withContext(Dispatchers.IO) {
- manager.enumerateEuiccChannels()
- manager.knownChannels.forEach {
- Log.d(TAG, it.name)
- Log.d(TAG, it.lpa.eid)
- openEuiccApplication.subscriptionManager.tryRefreshCachedEuiccInfo(it.cardId)
- }
- }
- withContext(Dispatchers.Main) {
- manager.knownChannels.forEach { channel ->
- spinnerAdapter.add(channel.name)
- fragments.add(EuiccManagementFragment.newInstance(channel.slotId))
- }
- if (fragments.isNotEmpty()) {
- binding.noEuiccPlaceholder.visibility = View.GONE
- supportFragmentManager.beginTransaction().replace(R.id.fragment_root, fragments.first()).commit()
- }
- }
- }
- }
|