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 7564cc8..2e162b5 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 @@ -16,6 +16,7 @@ import android.widget.ImageButton import android.widget.PopupMenu import android.widget.TextView import android.widget.Toast +import androidx.appcompat.app.AlertDialog import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager @@ -26,6 +27,7 @@ import net.typeblog.lpac_jni.LocalProfileInfo import im.angry.openeuicc.common.R import im.angry.openeuicc.util.* import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.TimeoutCancellationException import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -138,6 +140,19 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, } refresh() fab.isEnabled = true + } catch (e: TimeoutCancellationException) { + // Timed out waiting for SIM to come back online, we can no longer assume that the LPA is still valid + AlertDialog.Builder(requireContext()).apply { + setMessage(R.string.enable_disable_timeout) + setPositiveButton(android.R.string.ok) { dialog, _ -> + dialog.dismiss() + requireActivity().finish() + } + setOnDismissListener { _ -> + requireActivity().finish() + } + show() + } } catch (e: Exception) { Log.d(TAG, "Failed to enable / disable profile $iccid") Log.d(TAG, Log.getStackTraceString(e)) diff --git a/app-common/src/main/res/values/strings.xml b/app-common/src/main/res/values/strings.xml index 5218785..ac6b9d4 100644 --- a/app-common/src/main/res/values/strings.xml +++ b/app-common/src/main/res/values/strings.xml @@ -16,6 +16,8 @@ Delete Rename + Timed out waiting for the eSIM chip to switch profiles. You might want to restart the application or even the phone. + Cannot switch to new eSIM profile. Nickname cannot be longer than 64 characters diff --git a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/impl/LocalProfileAssistantImpl.kt b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/impl/LocalProfileAssistantImpl.kt index b81a41a..246ead2 100644 --- a/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/impl/LocalProfileAssistantImpl.kt +++ b/libs/lpac-jni/src/main/java/net/typeblog/lpac_jni/impl/LocalProfileAssistantImpl.kt @@ -90,11 +90,7 @@ class LocalProfileAssistantImpl( override fun enableProfile(iccid: String, reconnectTimeout: Long): Boolean { val res = LpacJni.es10cEnableProfile(contextHandle, iccid) == 0 if (reconnectTimeout > 0) { - try { - tryReconnect(reconnectTimeout) - } catch (e: Exception) { - return false - } + tryReconnect(reconnectTimeout) } return res } @@ -102,11 +98,7 @@ class LocalProfileAssistantImpl( override fun disableProfile(iccid: String, reconnectTimeout: Long): Boolean { val res = LpacJni.es10cDisableProfile(contextHandle, iccid) == 0 if (reconnectTimeout > 0) { - try { - tryReconnect(reconnectTimeout) - } catch (e: Exception) { - return false - } + tryReconnect(reconnectTimeout) } return res }