From 5f88bf089cd4703b498c75533a62fa53465366a5 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 16 Dec 2023 09:29:23 -0500 Subject: [PATCH] EuiccChannelManager: try TelephonyManager even if euicc is removable However, we still prioritize OMAPI if it is available for removable cards. --- .../openeuicc/core/EuiccChannelManager.kt | 20 ++++++++++++------- .../core/PrivilegedEuiccChannelManager.kt | 8 +++++++- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt b/app-common/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt index ab3914c..6484b21 100644 --- a/app-common/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt +++ b/app-common/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt @@ -57,6 +57,18 @@ open class EuiccChannelManager(protected val context: Context) { return null } + protected fun tryOpenEuiccChannelUnprivileged(uiccInfo: UiccCardInfo, channelInfo: EuiccChannelInfo): EuiccChannel? { + Log.i(TAG, "Trying OMAPI for slot ${uiccInfo.slotIndex}") + try { + return OmapiChannel(seService!!, channelInfo) + } catch (e: IllegalArgumentException) { + // Failed + Log.w(TAG, "OMAPI APDU interface unavailable for slot ${uiccInfo.slotIndex}.") + } + + return null + } + private suspend fun tryOpenEuiccChannel(uiccInfo: UiccCardInfo): EuiccChannel? { lock.withLock { ensureSEService() @@ -81,13 +93,7 @@ open class EuiccChannelManager(protected val context: Context) { var euiccChannel: EuiccChannel? = tryOpenEuiccChannelPrivileged(uiccInfo, channelInfo) if (euiccChannel == null) { - Log.i(TAG, "Trying OMAPI for slot ${uiccInfo.slotIndex}") - try { - euiccChannel = OmapiChannel(seService!!, channelInfo) - } catch (e: IllegalArgumentException) { - // Failed - Log.w(TAG, "OMAPI APDU interface unavailable for slot ${uiccInfo.slotIndex}.") - } + euiccChannel = tryOpenEuiccChannelUnprivileged(uiccInfo, channelInfo) } if (euiccChannel != null) { diff --git a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelManager.kt b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelManager.kt index b262e49..aa1d8c5 100644 --- a/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelManager.kt +++ b/app/src/main/java/im/angry/openeuicc/core/PrivilegedEuiccChannelManager.kt @@ -12,7 +12,13 @@ class PrivilegedEuiccChannelManager(context: Context): EuiccChannelManager(conte override fun checkPrivileges() = true // TODO: Implement proper system app check override fun tryOpenEuiccChannelPrivileged(uiccInfo: UiccCardInfo, channelInfo: EuiccChannelInfo): EuiccChannel? { - if (uiccInfo.isEuicc && !uiccInfo.isRemovable) { + if (uiccInfo.isRemovable) { + // Attempt unprivileged (OMAPI) before TelephonyManager + // but still try TelephonyManager in case OMAPI is broken + super.tryOpenEuiccChannelUnprivileged(uiccInfo, channelInfo)?.let { return it } + } + + if (uiccInfo.isEuicc) { Log.i(TAG, "Trying TelephonyManager for slot ${uiccInfo.slotIndex}") // TODO: On Tiramisu, we should also connect all available "ports" for MEP support try {