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
}