From c9932e3303e241d9e4acb8e5f19af97bb3ec288a Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 17:46:31 +0800 Subject: [PATCH 1/4] feat: filter with enabled profile class --- .../im/angry/openeuicc/ui/EuiccManagementFragment.kt | 8 ++------ .../src/main/java/im/angry/openeuicc/util/LPAUtils.kt | 10 ++++++---- .../im/angry/openeuicc/service/OpenEuiccService.kt | 11 ++++------- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt index 8e7b158..aa65ba9 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt @@ -195,7 +195,7 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, if (unfilteredProfileListFlow.value) channel.lpa.profiles else - channel.lpa.profiles.operational + channel.lpa.profiles.filterWithEnabled() } withContext(Dispatchers.Main) { @@ -227,11 +227,7 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, portId, iccid, enable, - reconnectTimeoutMillis = if (isUsb) { - 0 - } else { - 30 * 1000 - } + reconnectTimeoutMillis = if (isUsb) 0 else 30_000 ).waitDone() when (err) { diff --git a/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt index 0fe44c1..2e1b6b0 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt @@ -11,14 +11,16 @@ const val TAG = "LPAUtils" val LocalProfileInfo.displayName: String get() = nickName.ifEmpty { name } +val List.enabled: LocalProfileInfo? + get() = firstOrNull { it.isEnabled } val LocalProfileInfo.isEnabled: Boolean get() = state == LocalProfileInfo.State.Enabled -val List.operational: List - get() = filter { - it.profileClass == LocalProfileInfo.Clazz.Operational - } +fun List.filterWithEnabled(): List { + val profileClass = enabled?.profileClass ?: LocalProfileInfo.Clazz.Operational + return filter { it.profileClass == profileClass } +} val List.hasMultipleChips: Boolean get() = distinctBy { it.slotId }.size > 1 diff --git a/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt b/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt index 3c522c5..61e05b8 100644 --- a/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt +++ b/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt @@ -186,16 +186,13 @@ class OpenEuiccService : EuiccService(), OpenEuiccContextMarker { ) } - try { - return@withEuiccChannelManager euiccChannelManager.withEuiccChannel( - slotId, - port - ) { channel -> + return@withEuiccChannelManager try { + euiccChannelManager.withEuiccChannel(slotId, port) { channel -> val filteredProfiles = if (runBlocking { preferenceRepository.unfilteredProfileListFlow.first() }) channel.lpa.profiles else - channel.lpa.profiles.operational + channel.lpa.profiles.filterWithEnabled() val profiles = filteredProfiles.map { EuiccProfileInfo.Builder(it.iccid).apply { setProfileName(it.name) @@ -224,7 +221,7 @@ class OpenEuiccService : EuiccService(), OpenEuiccContextMarker { ) } } catch (e: EuiccChannelManager.EuiccChannelNotFoundException) { - return@withEuiccChannelManager GetEuiccProfileInfoListResult( + GetEuiccProfileInfoListResult( RESULT_FIRST_USER, arrayOf(), true -- 2.45.3 From a9fad6a7149fd53ad0cd8fe2254135c779ae967c Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 17:58:10 +0800 Subject: [PATCH 2/4] refactor --- .../java/im/angry/openeuicc/ui/EuiccManagementFragment.kt | 7 +++++-- .../src/main/java/im/angry/openeuicc/util/LPAUtils.kt | 5 ----- .../java/im/angry/openeuicc/service/OpenEuiccService.kt | 7 +++++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt index aa65ba9..819be62 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt @@ -194,8 +194,11 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, euiccChannelManager.notifyEuiccProfilesChanged(channel.logicalSlotId) if (unfilteredProfileListFlow.value) channel.lpa.profiles - else - channel.lpa.profiles.filterWithEnabled() + else { + val clazz = channel.lpa.profiles.enabled?.profileClass + ?: LocalProfileInfo.Clazz.Operational + channel.lpa.profiles.filter { it.profileClass == clazz } + } } withContext(Dispatchers.Main) { diff --git a/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt index 2e1b6b0..d3def4d 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt @@ -17,11 +17,6 @@ val List.enabled: LocalProfileInfo? val LocalProfileInfo.isEnabled: Boolean get() = state == LocalProfileInfo.State.Enabled -fun List.filterWithEnabled(): List { - val profileClass = enabled?.profileClass ?: LocalProfileInfo.Clazz.Operational - return filter { it.profileClass == profileClass } -} - val List.hasMultipleChips: Boolean get() = distinctBy { it.slotId }.size > 1 diff --git a/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt b/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt index 61e05b8..a8777c7 100644 --- a/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt +++ b/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt @@ -191,8 +191,11 @@ class OpenEuiccService : EuiccService(), OpenEuiccContextMarker { val filteredProfiles = if (runBlocking { preferenceRepository.unfilteredProfileListFlow.first() }) channel.lpa.profiles - else - channel.lpa.profiles.filterWithEnabled() + else { + val clazz = channel.lpa.profiles.enabled?.profileClass + ?: LocalProfileInfo.Clazz.Operational + channel.lpa.profiles.filter { it.profileClass == clazz } + } val profiles = filteredProfiles.map { EuiccProfileInfo.Builder(it.iccid).apply { setProfileName(it.name) -- 2.45.3 From 76a49d03e0de3cd4dbaa61e503519fbd61542ed0 Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 18:20:02 +0800 Subject: [PATCH 3/4] simplify --- .../main/java/im/angry/openeuicc/service/OpenEuiccService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt b/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt index a8777c7..4867da3 100644 --- a/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt +++ b/app/src/main/java/im/angry/openeuicc/service/OpenEuiccService.kt @@ -189,7 +189,7 @@ class OpenEuiccService : EuiccService(), OpenEuiccContextMarker { return@withEuiccChannelManager try { euiccChannelManager.withEuiccChannel(slotId, port) { channel -> val filteredProfiles = - if (runBlocking { preferenceRepository.unfilteredProfileListFlow.first() }) + if (preferenceRepository.unfilteredProfileListFlow.first()) channel.lpa.profiles else { val clazz = channel.lpa.profiles.enabled?.profileClass -- 2.45.3 From 991422adea30e37c31a129744f8e3d870459ab4a Mon Sep 17 00:00:00 2001 From: septs Date: Fri, 13 Dec 2024 20:11:08 +0800 Subject: [PATCH 4/4] chore --- .../angry/openeuicc/service/EuiccChannelManagerService.kt | 5 +---- .../src/main/java/im/angry/openeuicc/util/LPAUtils.kt | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/service/EuiccChannelManagerService.kt b/app-common/src/main/java/im/angry/openeuicc/service/EuiccChannelManagerService.kt index c4d16df..d9f051a 100644 --- a/app-common/src/main/java/im/angry/openeuicc/service/EuiccChannelManagerService.kt +++ b/app-common/src/main/java/im/angry/openeuicc/service/EuiccChannelManagerService.kt @@ -460,10 +460,7 @@ class EuiccChannelManagerService : LifecycleService(), OpenEuiccContextMarker { R.drawable.ic_task_switch ) { euiccChannelManager.beginTrackedOperation(slotId, portId) { - val (res, refreshed) = euiccChannelManager.withEuiccChannel( - slotId, - portId - ) { channel -> + val (res, refreshed) = euiccChannelManager.withEuiccChannel(slotId, portId) { channel -> if (!channel.lpa.switchProfile(iccid, enable, refresh = true)) { // Sometimes, we *can* enable or disable the profile, but we cannot // send the refresh command to the modem because the profile somehow diff --git a/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt index d3def4d..f868b68 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/LPAUtils.kt @@ -11,12 +11,12 @@ const val TAG = "LPAUtils" val LocalProfileInfo.displayName: String get() = nickName.ifEmpty { name } -val List.enabled: LocalProfileInfo? - get() = firstOrNull { it.isEnabled } - val LocalProfileInfo.isEnabled: Boolean get() = state == LocalProfileInfo.State.Enabled +val List.enabled: LocalProfileInfo? + get() = firstOrNull { it.isEnabled } + val List.hasMultipleChips: Boolean get() = distinctBy { it.slotId }.size > 1 -- 2.45.3