From 6324c80601c7c7fdbdc1d137d2f33bd8fbdc3f02 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 21 Jan 2025 21:17:40 +0800 Subject: [PATCH 1/5] feat: force use tmapi --- .../java/im/angry/openeuicc/ui/SettingsFragment.kt | 2 +- .../java/im/angry/openeuicc/util/PreferenceUtils.kt | 2 ++ .../openeuicc/core/PrivilegedEuiccChannelFactory.kt | 3 ++- .../angry/openeuicc/ui/PrivilegedSettingsFragment.kt | 10 ++++++++++ app/src/main/res/values/strings.xml | 4 ++++ app/src/main/res/xml/pref_privileged_settings.xml | 12 ++++++++++++ 6 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/xml/pref_privileged_settings.xml diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt index fab680f..c54d6a1 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt @@ -122,7 +122,7 @@ open class SettingsFragment: PreferenceFragmentCompat() { return true } - private fun CheckBoxPreference.bindBooleanFlow(flow: PreferenceFlowWrapper) { + protected fun CheckBoxPreference.bindBooleanFlow(flow: PreferenceFlowWrapper) { lifecycleScope.launch { flow.collect { isChecked = it } } diff --git a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt index f5e3ca2..9e69a8e 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt @@ -31,6 +31,7 @@ internal object PreferenceKeys { // ---- Developer Options ---- val DEVELOPER_OPTIONS_ENABLED = booleanPreferencesKey("developer_options_enabled") + val FORCE_USE_TMAPI = booleanPreferencesKey("force_use_tmapi") val UNFILTERED_PROFILE_LIST = booleanPreferencesKey("unfiltered_profile_list") val IGNORE_TLS_CERTIFICATE = booleanPreferencesKey("ignore_tls_certificate") } @@ -48,6 +49,7 @@ class PreferenceRepository(private val context: Context) { // ---- Developer Options ---- val developerOptionsEnabledFlow = bindFlow(PreferenceKeys.DEVELOPER_OPTIONS_ENABLED, false) + val forceUseTMAPIFlow = bindFlow(PreferenceKeys.FORCE_USE_TMAPI, false) val unfilteredProfileListFlow = bindFlow(PreferenceKeys.UNFILTERED_PROFILE_LIST, false) val ignoreTLSCertificateFlow = bindFlow(PreferenceKeys.IGNORE_TLS_CERTIFICATE, false) diff --git a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt index b690c79..e0d23d1 100644 --- a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt +++ b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt @@ -5,6 +5,7 @@ import android.util.Log import im.angry.openeuicc.OpenEuiccApplication import im.angry.openeuicc.R import im.angry.openeuicc.util.* +import kotlinx.coroutines.flow.first import java.lang.IllegalArgumentException class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFactory(context) { @@ -21,7 +22,7 @@ class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFacto super.tryOpenEuiccChannel(port)?.let { return it } } - if (port.card.isEuicc) { + if (port.card.isEuicc || context.preferenceRepository.forceUseTMAPIFlow.first()) { Log.i( DefaultEuiccChannelManager.TAG, "Trying TelephonyManager for slot ${port.card.physicalSlotIndex} port ${port.portIndex}" diff --git a/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt b/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt index 3306c73..d167606 100644 --- a/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt +++ b/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt @@ -1,11 +1,17 @@ package im.angry.openeuicc.ui import android.os.Bundle +import androidx.preference.CheckBoxPreference import androidx.preference.Preference +import im.angry.openeuicc.R +import im.angry.openeuicc.util.preferenceRepository class PrivilegedSettingsFragment : SettingsFragment() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { super.onCreatePreferences(savedInstanceState, rootKey) + addPreferencesFromResource(R.xml.pref_privileged_settings) + mergePreferenceOverlay("pref_developer_overlay", "pref_developer") + // It's stupid to _disable_ things for privileged, but for now, the per-app locale picker // is not usable for apps signed with the platform key. // ref: @@ -13,5 +19,9 @@ class PrivilegedSettingsFragment : SettingsFragment() { // eventually work for platform-signed apps. Or, at some point we might introduce our own // locale picker, which hopefully works whether privileged or not. requirePreference("pref_advanced_language").isVisible = false + + // Force use TelephonyManager API + requirePreference("pref_developer_force_use_tmapi") + .bindBooleanFlow(preferenceRepository.forceUseTMAPIFlow) } } \ 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 47c88bd..ab1b412 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,4 +22,8 @@ Your device supports eSIMs. To connect to mobile network, download your eSIM issued by a carrier, or insert a physical SIM. Skip Download eSIM + + + Force use TMAPI (TelephonyManager API) + TMAPI will not be enabled in non-euicc mode and some removable eSIM cards may not work.\nEnable this option to skip detection and force TMAPI to be enabled. \ No newline at end of file diff --git a/app/src/main/res/xml/pref_privileged_settings.xml b/app/src/main/res/xml/pref_privileged_settings.xml new file mode 100644 index 0000000..6277065 --- /dev/null +++ b/app/src/main/res/xml/pref_privileged_settings.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file From d053be28e507efa85a30140d086ec64c3c0680fb Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 21 Jan 2025 22:10:27 +0800 Subject: [PATCH 2/5] chore: use long summery preference category in developer options --- app-common/src/main/res/xml/pref_settings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app-common/src/main/res/xml/pref_settings.xml b/app-common/src/main/res/xml/pref_settings.xml index bb5bd50..944bd27 100644 --- a/app-common/src/main/res/xml/pref_settings.xml +++ b/app-common/src/main/res/xml/pref_settings.xml @@ -52,7 +52,7 @@ - @@ -69,7 +69,7 @@ app:summary="@string/pref_developer_ignore_tls_certificate_desc" app:title="@string/pref_developer_ignore_tls_certificate" /> - + Date: Sun, 2 Feb 2025 21:18:52 +0800 Subject: [PATCH 3/5] chore: rename preference name --- .../main/java/im/angry/openeuicc/util/PreferenceUtils.kt | 2 +- .../angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt | 2 +- .../im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt | 4 ++-- app/src/main/res/values/strings.xml | 4 ++-- app/src/main/res/xml/pref_privileged_settings.xml | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt index 9e69a8e..fa7261a 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt @@ -49,7 +49,7 @@ class PreferenceRepository(private val context: Context) { // ---- Developer Options ---- val developerOptionsEnabledFlow = bindFlow(PreferenceKeys.DEVELOPER_OPTIONS_ENABLED, false) - val forceUseTMAPIFlow = bindFlow(PreferenceKeys.FORCE_USE_TMAPI, false) + val preferUseTMAPIFlow = bindFlow(PreferenceKeys.FORCE_USE_TMAPI, false) val unfilteredProfileListFlow = bindFlow(PreferenceKeys.UNFILTERED_PROFILE_LIST, false) val ignoreTLSCertificateFlow = bindFlow(PreferenceKeys.IGNORE_TLS_CERTIFICATE, false) diff --git a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt index e0d23d1..50045e9 100644 --- a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt +++ b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt @@ -22,7 +22,7 @@ class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFacto super.tryOpenEuiccChannel(port)?.let { return it } } - if (port.card.isEuicc || context.preferenceRepository.forceUseTMAPIFlow.first()) { + if (port.card.isEuicc || context.preferenceRepository.preferUseTMAPIFlow.first()) { Log.i( DefaultEuiccChannelManager.TAG, "Trying TelephonyManager for slot ${port.card.physicalSlotIndex} port ${port.portIndex}" diff --git a/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt b/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt index d167606..9736999 100644 --- a/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt +++ b/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt @@ -21,7 +21,7 @@ class PrivilegedSettingsFragment : SettingsFragment() { requirePreference("pref_advanced_language").isVisible = false // Force use TelephonyManager API - requirePreference("pref_developer_force_use_tmapi") - .bindBooleanFlow(preferenceRepository.forceUseTMAPIFlow) + requirePreference("pref_developer_prefer_use_tmapi") + .bindBooleanFlow(preferenceRepository.preferUseTMAPIFlow) } } \ 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 ab1b412..d0c1e05 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,6 +24,6 @@ Download eSIM - Force use TMAPI (TelephonyManager API) - TMAPI will not be enabled in non-euicc mode and some removable eSIM cards may not work.\nEnable this option to skip detection and force TMAPI to be enabled. + Prefer Use TMAPI + TMAPI (TelephonyManager API) will not be enabled in non-euicc mode and some removable eSIM cards may not work.\nEnable this option to skip detection and force TMAPI to be enabled. \ No newline at end of file diff --git a/app/src/main/res/xml/pref_privileged_settings.xml b/app/src/main/res/xml/pref_privileged_settings.xml index 6277065..f06e149 100644 --- a/app/src/main/res/xml/pref_privileged_settings.xml +++ b/app/src/main/res/xml/pref_privileged_settings.xml @@ -5,8 +5,8 @@ app:key="pref_developer_overlay"> + app:key="pref_developer_prefer_use_tmapi" + app:summary="@string/pref_developer_prefer_use_tmapi_desc" + app:title="@string/pref_developer_prefer_use_tmapi" /> \ No newline at end of file From f3fa192531d2760c82bb6b33b3fa93d541bf9235 Mon Sep 17 00:00:00 2001 From: septs Date: Sun, 2 Feb 2025 22:33:38 +0800 Subject: [PATCH 4/5] chore: rename preference name --- .idea/deploymentTargetSelector.xml | 4 ++-- .idea/kotlinc.xml | 2 +- .../main/java/im/angry/openeuicc/util/PreferenceUtils.kt | 4 ++-- .../angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt | 2 +- .../im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt | 4 ++-- app/src/main/res/values/strings.xml | 4 ++-- app/src/main/res/xml/pref_privileged_settings.xml | 6 +++--- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 8096d6c..46b2f38 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -2,10 +2,10 @@ - + - + diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index e805548..fe63bb6 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt index fa7261a..cfa3d80 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/PreferenceUtils.kt @@ -31,7 +31,7 @@ internal object PreferenceKeys { // ---- Developer Options ---- val DEVELOPER_OPTIONS_ENABLED = booleanPreferencesKey("developer_options_enabled") - val FORCE_USE_TMAPI = booleanPreferencesKey("force_use_tmapi") + val REMOVABLE_TMAPI = booleanPreferencesKey("removable_tmapi") val UNFILTERED_PROFILE_LIST = booleanPreferencesKey("unfiltered_profile_list") val IGNORE_TLS_CERTIFICATE = booleanPreferencesKey("ignore_tls_certificate") } @@ -49,7 +49,7 @@ class PreferenceRepository(private val context: Context) { // ---- Developer Options ---- val developerOptionsEnabledFlow = bindFlow(PreferenceKeys.DEVELOPER_OPTIONS_ENABLED, false) - val preferUseTMAPIFlow = bindFlow(PreferenceKeys.FORCE_USE_TMAPI, false) + val removableTMAPIFlow = bindFlow(PreferenceKeys.REMOVABLE_TMAPI, false) val unfilteredProfileListFlow = bindFlow(PreferenceKeys.UNFILTERED_PROFILE_LIST, false) val ignoreTLSCertificateFlow = bindFlow(PreferenceKeys.IGNORE_TLS_CERTIFICATE, false) diff --git a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt index 50045e9..fddc2bd 100644 --- a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt +++ b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt @@ -22,7 +22,7 @@ class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFacto super.tryOpenEuiccChannel(port)?.let { return it } } - if (port.card.isEuicc || context.preferenceRepository.preferUseTMAPIFlow.first()) { + if (port.card.isEuicc || context.preferenceRepository.removableTMAPIFlow.first()) { Log.i( DefaultEuiccChannelManager.TAG, "Trying TelephonyManager for slot ${port.card.physicalSlotIndex} port ${port.portIndex}" diff --git a/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt b/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt index 9736999..6c75b3c 100644 --- a/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt +++ b/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt @@ -21,7 +21,7 @@ class PrivilegedSettingsFragment : SettingsFragment() { requirePreference("pref_advanced_language").isVisible = false // Force use TelephonyManager API - requirePreference("pref_developer_prefer_use_tmapi") - .bindBooleanFlow(preferenceRepository.preferUseTMAPIFlow) + requirePreference("pref_developer_tmapi_removable") + .bindBooleanFlow(preferenceRepository.removableTMAPIFlow) } } \ 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 d0c1e05..36e584a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,6 +24,6 @@ Download eSIM - Prefer Use TMAPI - TMAPI (TelephonyManager API) will not be enabled in non-euicc mode and some removable eSIM cards may not work.\nEnable this option to skip detection and force TMAPI to be enabled. + Using TMAPI for removable + TMAPI (TelephonyManager API) will not be enabled in non-euicc mode and some removable eSIM cards may not work.\nEnable this option to skip detection and force TMAPI to be enabled. \ No newline at end of file diff --git a/app/src/main/res/xml/pref_privileged_settings.xml b/app/src/main/res/xml/pref_privileged_settings.xml index f06e149..4411d42 100644 --- a/app/src/main/res/xml/pref_privileged_settings.xml +++ b/app/src/main/res/xml/pref_privileged_settings.xml @@ -5,8 +5,8 @@ app:key="pref_developer_overlay"> + app:key="pref_developer_tmapi_removable" + app:summary="@string/pref_developer_tmapi_removable_desc" + app:title="@string/pref_developer_tmapi_removable" /> \ No newline at end of file From 703bcb9cd60a2e6bdb7a87f6f463c61c797b3c12 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 4 Mar 2025 22:26:53 +0800 Subject: [PATCH 5/5] chore: remove .idea folder --- .idea/deploymentTargetSelector.xml | 4 ++-- .idea/kotlinc.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 46b2f38..8096d6c 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -2,10 +2,10 @@ - + - + diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index fe63bb6..e805548 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file