diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/ui/QuickAvailabilityFragment.kt b/app-unpriv/src/main/java/im/angry/openeuicc/ui/QuickAvailabilityFragment.kt
index 3f4bf34..c9ce2bf 100644
--- a/app-unpriv/src/main/java/im/angry/openeuicc/ui/QuickAvailabilityFragment.kt
+++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/QuickAvailabilityFragment.kt
@@ -26,6 +26,7 @@ import kotlinx.coroutines.runBlocking
open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker {
companion object {
enum class Compatibility {
+ NOT_SUPPORTED,
COMPATIBLE,
NOT_COMPATIBLE,
}
@@ -36,14 +37,21 @@ open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker {
)
}
- private val conclusion: TextView by lazy { requireView().requireViewById(R.id.quick_availability_conclusion) }
+ private val conclusion: TextView by lazy {
+ requireView().requireViewById(R.id.quick_availability_conclusion)
+ }
- private val resultSlots: TextView by lazy { requireView().requireViewById(R.id.quick_availability_result_slots) }
+ private val resultSlots: TextView by lazy {
+ requireView().requireViewById(R.id.quick_availability_result_slots)
+ }
- private val resultNotes: TextView by lazy { requireView().requireViewById(R.id.quick_availability_result_notes) }
-
- private val hidden: CheckBox by lazy { requireView().requireViewById(R.id.quick_availability_hidden) }
+ private val resultNotes: TextView by lazy {
+ requireView().requireViewById(R.id.quick_availability_result_notes)
+ }
+ private val hidden: CheckBox by lazy {
+ requireView().requireViewById(R.id.quick_availability_hidden)
+ }
override fun onCreateView(
inflater: LayoutInflater,
@@ -58,7 +66,9 @@ open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker {
override fun onStart() {
super.onStart()
- lifecycleScope.launch { onCompatibilityUpdate() }
+ lifecycleScope.launch {
+ onCompatibilityUpdate(getCompatibilityCheckResult())
+ }
}
fun onContinueToApp() {
@@ -69,8 +79,7 @@ open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker {
(requireActivity() as QuickAvailabilityActivity).launchMainActivity()
}
- suspend fun onCompatibilityUpdate() {
- val result = getCompatibilityCheckResult()
+ fun onCompatibilityUpdate(result: CompatibilityResult) {
conclusion.text = formatConclusion(result)
if (result.compatibility != Compatibility.COMPATIBLE) return
resultSlots.isVisible = true
@@ -82,11 +91,11 @@ open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker {
}
suspend fun getCompatibilityCheckResult(): CompatibilityResult {
- val seService = connectSEService(requireContext())
- if (!seService.isConnected) {
- return CompatibilityResult(Compatibility.NOT_COMPATIBLE)
+ val service = connectSEService(requireContext())
+ if (!service.isConnected) {
+ return CompatibilityResult(Compatibility.NOT_SUPPORTED)
}
- val slots = seService.readers.filter { it.isSIM }.mapNotNull { reader ->
+ val slots = service.readers.filter { it.isSIM }.mapNotNull { reader ->
try {
// Note: we ONLY check the default ISD-R AID, because this test is for the _device_,
// NOT the eUICC. We don't care what AID a potential eUICC might use, all we need to
@@ -99,7 +108,6 @@ open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker {
// SecurityException is only thrown when Channel is constructed, which means everything else needs to succeed
reader.slotIndex
} catch (_: Exception) {
- // Ignore
null
}
}
@@ -113,6 +121,9 @@ open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker {
val usbHost = requireContext().packageManager
.hasSystemFeature(PackageManager.FEATURE_USB_HOST)
val resId = when (result.compatibility) {
+ Compatibility.NOT_SUPPORTED ->
+ R.string.quick_availability_not_supported
+
Compatibility.COMPATIBLE ->
R.string.quick_availability_compatible
diff --git a/app-unpriv/src/main/res/values/strings.xml b/app-unpriv/src/main/res/values/strings.xml
index 97da371..d3fef28 100644
--- a/app-unpriv/src/main/res/values/strings.xml
+++ b/app-unpriv/src/main/res/values/strings.xml
@@ -14,6 +14,7 @@
Quick Availability
Your smartphone can use %s compatible cards
+ Your smartphone is not supported with %s
Your smartphone is not compatible with %s
Your smartphone is not compatible with %s, but can be managed using a USB smart card reader
SIM card slots accessible: %s