diff --git a/.idea/misc.xml b/.idea/misc.xml
index 2008b36..0e4c1b7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,6 +9,7 @@
+
diff --git a/app/src/main/java/im/angry/openeuicc/ui/MainActivity.kt b/app/src/main/java/im/angry/openeuicc/ui/MainActivity.kt
index 5551219..7b90f54 100644
--- a/app/src/main/java/im/angry/openeuicc/ui/MainActivity.kt
+++ b/app/src/main/java/im/angry/openeuicc/ui/MainActivity.kt
@@ -1,18 +1,23 @@
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.OpenEUICCApplication
import im.angry.openeuicc.R
import im.angry.openeuicc.core.EuiccChannelRepository
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.launch
import kotlinx.coroutines.withContext
@@ -31,11 +36,15 @@ class MainActivity : AppCompatActivity() {
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 = getSystemService(TelephonyManager::class.java)
+
repo = (application as OpenEUICCApplication).euiccChannelRepo
spinnerAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item)
@@ -46,7 +55,7 @@ class MainActivity : AppCompatActivity() {
}
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.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
}
+ 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) {
repo.load()
diff --git a/app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt b/app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt
new file mode 100644
index 0000000..a1ae2d1
--- /dev/null
+++ b/app/src/main/java/im/angry/openeuicc/util/TelephonyUtils.kt
@@ -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})
+ }
\ No newline at end of file
diff --git a/app/src/main/res/menu/activity_main_slot_spinner.xml b/app/src/main/res/menu/activity_main.xml
similarity index 66%
rename from app/src/main/res/menu/activity_main_slot_spinner.xml
rename to app/src/main/res/menu/activity_main.xml
index 9d1f42c..7386e70 100644
--- a/app/src/main/res/menu/activity_main_slot_spinner.xml
+++ b/app/src/main/res/menu/activity_main.xml
@@ -7,4 +7,11 @@
app:actionViewClass="android.widget.Spinner"
android:background="?android:attr/colorPrimary"
app:showAsAction="always" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 78f6010..e4731aa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,6 +3,8 @@
No eUICC found on this device.
+ Dual SIM
+
Enabled
Disabled
Provider:
@@ -16,6 +18,7 @@
eSIM profile switched. Please wait for a while when the card is restarting.
Cannot switch to new eSIM profile.
Nickname cannot be longer than 64 characters
+ DSDS state switched. Please wait until the modem restarts.
New eSIM
Server (RSP / SM-DP+)