Compare commits

...

3 commits

Author SHA1 Message Date
402e09a376
Merge branch 'master' into refresh-after-switch 2025-03-10 09:29:16 +08:00
88eb1ce0e2 feat: update TelephonyManager preference key and implement context marker interface (#167)
Reviewed-on: PeterCxy/OpenEUICC#167
Co-authored-by: septs <github@septs.pw>
Co-committed-by: septs <github@septs.pw>
2025-03-09 22:47:02 +01:00
74cc08ce8e chore: remove visibility attribute from euicc memory reset preference (#166)
Reviewed-on: PeterCxy/OpenEUICC#166
Co-authored-by: septs <github@septs.pw>
Co-committed-by: septs <github@septs.pw>
2025-03-09 04:22:07 +01:00
5 changed files with 20 additions and 7 deletions

View file

@ -77,7 +77,6 @@
<CheckBoxPreference <CheckBoxPreference
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:isPreferenceVisible="false"
app:key="pref_developer_euicc_memory_reset" app:key="pref_developer_euicc_memory_reset"
app:summary="@string/pref_developer_euicc_memory_reset_desc" app:summary="@string/pref_developer_euicc_memory_reset_desc"
app:title="@string/pref_developer_euicc_memory_reset" /> app:title="@string/pref_developer_euicc_memory_reset" />

View file

@ -8,7 +8,8 @@ import im.angry.openeuicc.util.*
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import java.lang.IllegalArgumentException import java.lang.IllegalArgumentException
class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFactory(context) { class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFactory(context),
PrivilegedEuiccContextMarker {
private val tm by lazy { private val tm by lazy {
(context.applicationContext as OpenEuiccApplication).appContainer.telephonyManager (context.applicationContext as OpenEuiccApplication).appContainer.telephonyManager
} }
@ -22,7 +23,7 @@ class PrivilegedEuiccChannelFactory(context: Context) : DefaultEuiccChannelFacto
super.tryOpenEuiccChannel(port)?.let { return it } 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( Log.i(
DefaultEuiccChannelManager.TAG, DefaultEuiccChannelManager.TAG,
"Trying TelephonyManager for slot ${port.card.physicalSlotIndex} port ${port.portIndex}" "Trying TelephonyManager for slot ${port.card.physicalSlotIndex} port ${port.portIndex}"

View file

@ -6,7 +6,7 @@ import androidx.preference.Preference
import im.angry.openeuicc.R import im.angry.openeuicc.R
import im.angry.openeuicc.util.* import im.angry.openeuicc.util.*
class PrivilegedSettingsFragment : SettingsFragment() { class PrivilegedSettingsFragment : SettingsFragment(), PrivilegedEuiccContextMarker {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
super.onCreatePreferences(savedInstanceState, rootKey) super.onCreatePreferences(savedInstanceState, rootKey)
addPreferencesFromResource(R.xml.pref_privileged_settings) addPreferencesFromResource(R.xml.pref_privileged_settings)
@ -21,7 +21,7 @@ class PrivilegedSettingsFragment : SettingsFragment() {
requirePreference<Preference>("pref_advanced_language").isVisible = false requirePreference<Preference>("pref_advanced_language").isVisible = false
// Force use TelephonyManager API // Force use TelephonyManager API
requirePreference<CheckBoxPreference>("pref_developer_tmapi_removable") requirePreference<CheckBoxPreference>("pref_developer_removable_telephony_manager")
.bindBooleanFlow((preferenceRepository as PrivilegedPreferenceRepository).removableTelephonyManagerFlow) .bindBooleanFlow(preferenceRepository.removableTelephonyManagerFlow)
} }
} }

View file

@ -5,10 +5,23 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.ServiceConnection import android.content.ServiceConnection
import android.os.IBinder import android.os.IBinder
import androidx.fragment.app.Fragment
import java.util.concurrent.Executors import java.util.concurrent.Executors
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine 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<IBinder?, () -> Unit> = suspend fun Context.bindServiceSuspended(intent: Intent, flags: Int): Pair<IBinder?, () -> Unit> =
suspendCoroutine { cont -> suspendCoroutine { cont ->
var binder: IBinder? var binder: IBinder?

View file

@ -5,7 +5,7 @@
app:key="pref_developer_overlay"> app:key="pref_developer_overlay">
<CheckBoxPreference <CheckBoxPreference
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="pref_developer_tmapi_removable" app:key="pref_developer_removable_telephony_manager"
app:summary="@string/pref_developer_telephony_manager_removable_desc" app:summary="@string/pref_developer_telephony_manager_removable_desc"
app:title="@string/pref_developer_telephony_manager_removable" /> app:title="@string/pref_developer_telephony_manager_removable" />
</PreferenceCategory> </PreferenceCategory>