From 88eb1ce0e22efff875e35eaa5025dec0c1a2eae2 Mon Sep 17 00:00:00 2001 From: septs Date: Sun, 9 Mar 2025 22:47:02 +0100 Subject: [PATCH] feat: update TelephonyManager preference key and implement context marker interface (#167) Reviewed-on: https://gitea.angry.im/PeterCxy/OpenEUICC/pulls/167 Co-authored-by: septs Co-committed-by: septs --- .../openeuicc/core/PrivilegedEuiccChannelFactory.kt | 5 +++-- .../openeuicc/ui/PrivilegedSettingsFragment.kt | 6 +++--- .../java/im/angry/openeuicc/util/PrivilegedUtils.kt | 13 +++++++++++++ app/src/main/res/xml/pref_privileged_settings.xml | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) 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 2044c02..6dccda9 100644 --- a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt +++ b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelFactory.kt @@ -8,7 +8,8 @@ import im.angry.openeuicc.util.* import kotlinx.coroutines.flow.first import java.lang.IllegalArgumentException -class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFactory(context) { +class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFactory(context), + PrivilegedEuiccContextMarker { private val tm by lazy { (context.applicationContext as OpenEuiccApplication).appContainer.telephonyManager } @@ -22,7 +23,7 @@ class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFacto super.tryOpenEuiccChannel(port)?.let { return it } } - if (port.card.isEuicc || (context.preferenceRepository as PrivilegedPreferenceRepository).removableTelephonyManagerFlow.first()) { + if (port.card.isEuicc || preferenceRepository.removableTelephonyManagerFlow.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 7229688..c67d880 100644 --- a/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt +++ b/app/src/main/java/im/angry/openeuicc/ui/PrivilegedSettingsFragment.kt @@ -6,7 +6,7 @@ import androidx.preference.Preference import im.angry.openeuicc.R import im.angry.openeuicc.util.* -class PrivilegedSettingsFragment : SettingsFragment() { +class PrivilegedSettingsFragment : SettingsFragment(), PrivilegedEuiccContextMarker { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { super.onCreatePreferences(savedInstanceState, rootKey) addPreferencesFromResource(R.xml.pref_privileged_settings) @@ -21,7 +21,7 @@ class PrivilegedSettingsFragment : SettingsFragment() { requirePreference("pref_advanced_language").isVisible = false // Force use TelephonyManager API - requirePreference("pref_developer_tmapi_removable") - .bindBooleanFlow((preferenceRepository as PrivilegedPreferenceRepository).removableTelephonyManagerFlow) + requirePreference("pref_developer_removable_telephony_manager") + .bindBooleanFlow(preferenceRepository.removableTelephonyManagerFlow) } } \ No newline at end of file diff --git a/app/src/main/java/im/angry/openeuicc/util/PrivilegedUtils.kt b/app/src/main/java/im/angry/openeuicc/util/PrivilegedUtils.kt index e295f26..21c8002 100644 --- a/app/src/main/java/im/angry/openeuicc/util/PrivilegedUtils.kt +++ b/app/src/main/java/im/angry/openeuicc/util/PrivilegedUtils.kt @@ -5,10 +5,23 @@ import android.content.Context import android.content.Intent import android.content.ServiceConnection import android.os.IBinder +import androidx.fragment.app.Fragment import java.util.concurrent.Executors import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine +interface PrivilegedEuiccContextMarker { + val privilegedEuiccMarkerContext: Context + get() = when (this) { + is Context -> this + is Fragment -> requireContext() + else -> throw RuntimeException("PrivilegedEuiccContextMarker shall only be used on Fragments or UI types that derive from Context") + } + + val preferenceRepository: PrivilegedPreferenceRepository + get() = privilegedEuiccMarkerContext.preferenceRepository as PrivilegedPreferenceRepository +} + suspend fun Context.bindServiceSuspended(intent: Intent, flags: Int): Pair Unit> = suspendCoroutine { cont -> var binder: IBinder? diff --git a/app/src/main/res/xml/pref_privileged_settings.xml b/app/src/main/res/xml/pref_privileged_settings.xml index 339233b..5279126 100644 --- a/app/src/main/res/xml/pref_privileged_settings.xml +++ b/app/src/main/res/xml/pref_privileged_settings.xml @@ -5,7 +5,7 @@ app:key="pref_developer_overlay">