diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt b/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt index 20e0c5d..0eb433a 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt @@ -64,6 +64,9 @@ class CompatibilityCheckActivity: AppCompatActivity() { CompatibilityCheck.State.FAILURE -> { root.findViewById(R.id.compatibility_check_error).visibility = View.VISIBLE } + CompatibilityCheck.State.FAILURE_UNKNOWN -> { + root.findViewById(R.id.compatibility_check_unknown).visibility = View.VISIBLE + } else -> { root.findViewById(R.id.compatibility_check_progress_bar).visibility = View.VISIBLE } diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/util/CompatibilityCheck.kt b/app-unpriv/src/main/java/im/angry/openeuicc/util/CompatibilityCheck.kt index ad4b423..3d9c47b 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/util/CompatibilityCheck.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/util/CompatibilityCheck.kt @@ -9,6 +9,7 @@ import im.angry.easyeuicc.R import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext +import java.io.IOException fun getCompatibilityChecks(context: Context): List = listOf( @@ -38,6 +39,7 @@ abstract class CompatibilityCheck(context: Context) { NOT_STARTED, IN_PROGRESS, SUCCESS, + FAILURE_UNKNOWN, // The check technically failed, but no conclusion can be drawn FAILURE } @@ -49,7 +51,7 @@ abstract class CompatibilityCheck(context: Context) { val description: String get() = when { - state == State.FAILURE && this::failureDescription.isInitialized -> failureDescription + (state == State.FAILURE || state == State.FAILURE_UNKNOWN) && this::failureDescription.isInitialized -> failureDescription else -> defaultDescription } @@ -139,6 +141,14 @@ internal class IsdrChannelAccessCheck(private val context: Context): Compatibili // ref: https://android.googlesource.com/platform/frameworks/base/+/4fe64fb4712a99d5da9c9a0eb8fd5169b252e1e1/omapi/java/android/se/omapi/Session.java#305 // SecurityException is only thrown when Channel is constructed, which means everything else needs to succeed Pair(it.slotIndex, State.SUCCESS) + } catch (e: IOException) { + e.printStackTrace() + if (e.message?.contains("Secure Element is not present") == true) { + failureDescription = context.getString(R.string.compatibility_check_isdr_channel_desc_unknown) + Pair(it.slotIndex, State.FAILURE_UNKNOWN) + } else { + Pair(it.slotIndex, State.FAILURE) + } } catch (e: Exception) { e.printStackTrace() Pair(it.slotIndex, State.FAILURE) diff --git a/app-unpriv/src/main/res/drawable/ic_question_outline.xml b/app-unpriv/src/main/res/drawable/ic_question_outline.xml new file mode 100644 index 0000000..8c0d6eb --- /dev/null +++ b/app-unpriv/src/main/res/drawable/ic_question_outline.xml @@ -0,0 +1,5 @@ + + + diff --git a/app-unpriv/src/main/res/layout/compatibility_check_item.xml b/app-unpriv/src/main/res/layout/compatibility_check_item.xml index f75741a..0e46668 100644 --- a/app-unpriv/src/main/res/layout/compatibility_check_item.xml +++ b/app-unpriv/src/main/res/layout/compatibility_check_item.xml @@ -60,6 +60,14 @@ android:layout_width="32dp" android:layout_height="32dp" /> + + \ No newline at end of file diff --git a/app-unpriv/src/main/res/values/strings.xml b/app-unpriv/src/main/res/values/strings.xml index 5d4b9db..3a20af1 100644 --- a/app-unpriv/src/main/res/values/strings.xml +++ b/app-unpriv/src/main/res/values/strings.xml @@ -13,6 +13,7 @@ Only the following SIM slots are accessible via OMAPI: %s. ISD-R Channel Access Does your device support opening an ISD-R (management) channel to eSIMs via OMAPI? + Cannot determine whether ISD-R access through OMAPI is supported. You might want to retry with SIM cards inserted (any SIM card will do) if not already. OMAPI access to ISD-R is only possible on the following SIM slots: %s. Known Broken? Making sure your device is not known to have bugs associated with removable eSIMs.