From 67927cf7ef74817cd4eb75e9acb45b82c5e65d5b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 12 Jul 2024 17:17:32 -0400 Subject: [PATCH] fix: Do not look for channel in the process of switching profiles Fixes #36 --- .../java/im/angry/openeuicc/ui/EuiccManagementFragment.kt | 4 ++-- .../java/im/angry/openeuicc/util/EuiccChannelFragmentUtils.kt | 4 +++- 2 files changed, 5 insertions(+), 3 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 5dd633e..d49fa70 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 @@ -180,7 +180,7 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, return@beginTrackedOperation false } - if (!refreshed && channel.slotId != EuiccChannelManager.USB_CHANNEL_ID) { + if (!refreshed && !isUsb) { withContext(Dispatchers.Main) { AlertDialog.Builder(requireContext()).apply { setMessage(R.string.switch_did_not_refresh) @@ -197,7 +197,7 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, return@beginTrackedOperation true } - if (channel.slotId != EuiccChannelManager.USB_CHANNEL_ID) { + if (!isUsb) { try { euiccChannelManager.waitForReconnect( slotId, diff --git a/app-common/src/main/java/im/angry/openeuicc/util/EuiccChannelFragmentUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/EuiccChannelFragmentUtils.kt index 5df1a0a..a324ac3 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/EuiccChannelFragmentUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/EuiccChannelFragmentUtils.kt @@ -23,11 +23,13 @@ fun newInstanceEuicc(clazz: Class, slotId: Int, portId: Int, addArguments return instance } +// Convenient methods to avoid using `channel` for these +// `channel` requires that the channel actually exists in EuiccChannelManager, which is +// not always the case during operations such as switching val T.slotId: Int where T: Fragment, T: EuiccChannelFragmentMarker get() = requireArguments().getInt("slotId") val T.portId: Int where T: Fragment, T: EuiccChannelFragmentMarker get() = requireArguments().getInt("portId") - val T.isUsb: Boolean where T: Fragment, T: EuiccChannelFragmentMarker get() = requireArguments().getInt("slotId") == EuiccChannelManager.USB_CHANNEL_ID