From 714084012959ad21edd6f98775da969aa202735e Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 3 May 2022 16:34:15 -0400 Subject: [PATCH] Clean up TelephonyManager channels in case of a forced restart --- .../im/angry/openeuicc/OpenEuiccApplication.kt | 17 +++++++++++++++++ .../core/TelephonyManagerApduChannel.kt | 2 -- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt b/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt index 30e021a..dacdd7d 100644 --- a/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt +++ b/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt @@ -3,6 +3,8 @@ package im.angry.openeuicc import android.app.Application import android.telephony.TelephonyManager import im.angry.openeuicc.core.EuiccChannelManager +import im.angry.openeuicc.util.* +import java.lang.Exception class OpenEuiccApplication : Application() { val telephonyManager by lazy { @@ -12,4 +14,19 @@ class OpenEuiccApplication : Application() { val euiccChannelManager by lazy { EuiccChannelManager(this) } + + override fun onCreate() { + super.onCreate() + // Clean up channels left open in TelephonyManager + // due to a (potentially) forced restart + for (slotId in 0 until EuiccChannelManager.MAX_SIMS) { + for (channel in 0 until 10) { + try { + telephonyManager.iccCloseLogicalChannelBySlot(slotId, channel) + } catch (_: Exception) { + // We do not care + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduChannel.kt b/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduChannel.kt index 74eae6d..f7b315b 100644 --- a/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduChannel.kt +++ b/app/src/main/java/im/angry/openeuicc/core/TelephonyManagerApduChannel.kt @@ -21,8 +21,6 @@ class TelephonyManagerApduChannel( // TODO: On Tiramisu, we need to specify the portId also if we want MEP support fun tryConnectUiccSlot(tm: TelephonyManager, slotId: Int): Pair? { try { - // FIXME: Clean up previously opened channels across restarts - tm.iccCloseLogicalChannelBySlot(slotId, 1) val channel = tm.iccOpenLogicalChannelBySlot(slotId, EUICC_APP_ID, 0) if (channel.status != STATUS_NO_ERROR || channel.channel == INVALID_CHANNEL) { Log.e(TAG, "Unable to open eUICC channel for slot ${slotId} via TelephonyManager: ${channel.status}")