diff --git a/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt b/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt index bbdbe12..131b099 100644 --- a/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt +++ b/app/src/main/java/im/angry/openeuicc/OpenEuiccApplication.kt @@ -4,8 +4,6 @@ import android.app.Application import android.telephony.SubscriptionManager 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 { @@ -22,16 +20,6 @@ class OpenEuiccApplication : Application() { 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 - } - } - } + euiccChannelManager.closeAllStaleChannels() } } \ No newline at end of file diff --git a/app/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt b/app/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt index 4ce7df8..03774d9 100644 --- a/app/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt +++ b/app/src/main/java/im/angry/openeuicc/core/EuiccChannelManager.kt @@ -7,18 +7,19 @@ import android.se.omapi.SEService import android.telephony.UiccCardInfo import android.util.Log import im.angry.openeuicc.OpenEuiccApplication +import im.angry.openeuicc.util.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext +import java.lang.Exception import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine class EuiccChannelManager(private val context: Context) { companion object { const val TAG = "EuiccChannelManager" - const val MAX_SIMS = 3 } private val channels = mutableListOf() @@ -124,4 +125,19 @@ class EuiccChannelManager(private val context: Context) { seService?.shutdown() seService = null } + + // Clean up channels left open in TelephonyManager + // due to a (potentially) forced restart + // This should be called every time the application is restarted + fun closeAllStaleChannels() { + for (card in tm.uiccCardsInfo) { + for (channel in 0 until 10) { + try { + tm.iccCloseLogicalChannelBySlot(card.slotIndex, channel) + } catch (_: Exception) { + // We do not care + } + } + } + } } \ No newline at end of file