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