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+)