implement DSDS switch

This commit is contained in:
Peter Cai 2022-05-01 21:15:45 -04:00
parent 331137a5ee
commit 8df559700f
5 changed files with 49 additions and 1 deletions

View file

@ -9,6 +9,7 @@
<entry key="app/src/main/res/layout/fragment_euicc.xml" value="0.19375" /> <entry key="app/src/main/res/layout/fragment_euicc.xml" value="0.19375" />
<entry key="app/src/main/res/layout/fragment_profile_download.xml" value="0.19375" /> <entry key="app/src/main/res/layout/fragment_profile_download.xml" value="0.19375" />
<entry key="app/src/main/res/layout/fragment_profile_rename.xml" value="0.19375" /> <entry key="app/src/main/res/layout/fragment_profile_rename.xml" value="0.19375" />
<entry key="app/src/main/res/menu/activity_main.xml" value="0.19375" />
<entry key="app/src/main/res/menu/activity_main_slot_spinner.xml" value="0.19375" /> <entry key="app/src/main/res/menu/activity_main_slot_spinner.xml" value="0.19375" />
<entry key="app/src/main/res/menu/fragment_profile_download.xml" value="0.19375" /> <entry key="app/src/main/res/menu/fragment_profile_download.xml" value="0.19375" />
<entry key="app/src/main/res/menu/fragment_profile_rename.xml" value="0.19375" /> <entry key="app/src/main/res/menu/fragment_profile_rename.xml" value="0.19375" />

View file

@ -1,18 +1,23 @@
package im.angry.openeuicc.ui package im.angry.openeuicc.ui
import android.os.Bundle import android.os.Bundle
import android.telephony.TelephonyManager
import android.util.Log import android.util.Log
import android.view.Menu import android.view.Menu
import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.Spinner import android.widget.Spinner
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import im.angry.openeuicc.OpenEUICCApplication import im.angry.openeuicc.OpenEUICCApplication
import im.angry.openeuicc.R import im.angry.openeuicc.R
import im.angry.openeuicc.core.EuiccChannelRepository import im.angry.openeuicc.core.EuiccChannelRepository
import im.angry.openeuicc.databinding.ActivityMainBinding import im.angry.openeuicc.databinding.ActivityMainBinding
import im.angry.openeuicc.util.dsdsEnabled
import im.angry.openeuicc.util.supportsDSDS
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
@ -31,11 +36,15 @@ class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding private lateinit var binding: ActivityMainBinding
private lateinit var tm: TelephonyManager
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
tm = getSystemService(TelephonyManager::class.java)
repo = (application as OpenEUICCApplication).euiccChannelRepo repo = (application as OpenEUICCApplication).euiccChannelRepo
spinnerAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item) spinnerAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item)
@ -46,7 +55,7 @@ class MainActivity : AppCompatActivity() {
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.activity_main_slot_spinner, menu) menuInflater.inflate(R.menu.activity_main, menu)
spinner = menu.findItem(R.id.spinner).actionView as Spinner spinner = menu.findItem(R.id.spinner).actionView as Spinner
spinner.adapter = spinnerAdapter spinner.adapter = spinnerAdapter
@ -65,9 +74,25 @@ class MainActivity : AppCompatActivity() {
} }
if (tm.supportsDSDS) {
val dsds = menu.findItem(R.id.dsds)
dsds.isVisible = true
dsds.isChecked = tm.dsdsEnabled
}
return true 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() { private suspend fun init() {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
repo.load() repo.load()

View file

@ -0,0 +1,12 @@
package im.angry.openeuicc.util
import android.telephony.TelephonyManager
val TelephonyManager.supportsDSDS: Boolean
get() = supportedModemCount == 2
var TelephonyManager.dsdsEnabled: Boolean
get() = activeModemCount >= 2
set(value) {
switchMultiSimConfig(if (value) { 2 } else {1})
}

View file

@ -7,4 +7,11 @@
app:actionViewClass="android.widget.Spinner" app:actionViewClass="android.widget.Spinner"
android:background="?android:attr/colorPrimary" android:background="?android:attr/colorPrimary"
app:showAsAction="always" /> app:showAsAction="always" />
<item
android:id="@+id/dsds"
android:title="@string/dsds"
android:checkable="true"
android:visible="false"
app:showAsAction="never" />
</menu> </menu>

View file

@ -3,6 +3,8 @@
<string name="no_euicc">No eUICC found on this device.</string> <string name="no_euicc">No eUICC found on this device.</string>
<string name="dsds">Dual SIM</string>
<string name="enabled">Enabled</string> <string name="enabled">Enabled</string>
<string name="disabled">Disabled</string> <string name="disabled">Disabled</string>
<string name="provider">Provider:</string> <string name="provider">Provider:</string>
@ -16,6 +18,7 @@
<string name="toast_profile_enabled">eSIM profile switched. Please wait for a while when the card is restarting.</string> <string name="toast_profile_enabled">eSIM profile switched. Please wait for a while when the card is restarting.</string>
<string name="toast_profile_enable_failed">Cannot switch to new eSIM profile.</string> <string name="toast_profile_enable_failed">Cannot switch to new eSIM profile.</string>
<string name="toast_profile_name_too_long">Nickname cannot be longer than 64 characters</string> <string name="toast_profile_name_too_long">Nickname cannot be longer than 64 characters</string>
<string name="toast_dsds_switched">DSDS state switched. Please wait until the modem restarts.</string>
<string name="profile_download">New eSIM</string> <string name="profile_download">New eSIM</string>
<string name="profile_download_server">Server (RSP / SM-DP+)</string> <string name="profile_download_server">Server (RSP / SM-DP+)</string>