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/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 218c685..861e481 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -18,6 +18,9 @@ android:id="@+id/no_euicc_placeholder" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_marginStart="40dp" + android:layout_marginEnd="40dp" + android:gravity="center" android:text="@string/no_euicc" /> diff --git a/app/src/main/res/menu/activity_main_slot_spinner.xml b/app/src/main/res/menu/activity_main.xml similarity index 68% 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..163d84c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,9 @@ OpenEUICC - No eUICC found on this device. + No eUICC found on this device.\nOn some devices, you may need to enable dual SIM first in the menu of this app. + + Dual SIM Enabled Disabled @@ -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+)