Browse Source

Use OMAPI access instead of ISD-R access to determine compatibility

...but still show ISD-R check results
Peter Cai 6 months ago
parent
commit
29b2cba673

+ 19 - 4
app-unpriv/src/main/java/im/angry/openeuicc/ui/QuickCompatibilityFragment.kt

@@ -33,7 +33,8 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
 
         data class CompatibilityResult(
             val compatibility: Compatibility,
-            val slots: List<String> = emptyList()
+            val slotsOmapi: List<String> = emptyList(),
+            val slotsIsdr: List<String> = emptyList()
         )
     }
 
@@ -45,6 +46,10 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
         requireView().requireViewById(R.id.quick_compatibility_result_slots)
     }
 
+    private val resultSlotsIsdr: TextView by lazy {
+        requireView().requireViewById(R.id.quick_compatibility_result_slots_isdr)
+    }
+
     private val resultNotes: TextView by lazy {
         requireView().requireViewById(R.id.quick_compatibility_result_notes)
     }
@@ -97,8 +102,17 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
             resultSlots.isVisible = true
             resultSlots.text = getString(
                 R.string.quick_compatibility_result_slots,
-                ListFormatter.getInstance().format(result.slots)
+                ListFormatter.getInstance().format(result.slotsOmapi)
             )
+            resultSlotsIsdr.isVisible = true
+            resultSlotsIsdr.text = if (result.slotsIsdr.isEmpty()) {
+                getString(R.string.quick_compatibility_unknown)
+            } else {
+                getString(
+                    R.string.quick_compatibility_result_slots_isdr,
+                    ListFormatter.getInstance().format(result.slotsIsdr)
+                )
+            }
             resultNotes.isVisible = true
         } else {
             resultNotes.isVisible = true
@@ -112,6 +126,7 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
         if (!service.isConnected) {
             return CompatibilityResult(Compatibility.NOT_COMPATIBLE)
         }
+        val omapiSlots = service.readers.filter { it.isSIM }.map { it.slotIndex }
         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_,
@@ -128,10 +143,10 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
                 null
             }
         }
-        if (slots.isEmpty()) {
+        if (omapiSlots.isEmpty()) {
             return CompatibilityResult(Compatibility.NOT_COMPATIBLE)
         }
-        return CompatibilityResult(Compatibility.COMPATIBLE, slots = slots.map { "SIM$it" })
+        return CompatibilityResult(Compatibility.COMPATIBLE, slotsOmapi = omapiSlots.map { "SIM$it" }, slotsIsdr = slots.map { "SIM$it" })
     }
 
     open fun formatConclusion(result: CompatibilityResult): String {

+ 7 - 0
app-unpriv/src/main/res/layout/fragment_quick_compatibility.xml

@@ -31,6 +31,13 @@
         android:layout_marginBottom="16dp"
         android:visibility="gone" />
 
+    <TextView
+        android:id="@+id/quick_compatibility_result_slots_isdr"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="16dp"
+        android:visibility="gone" />
+
     <TextView
         android:id="@+id/quick_compatibility_result_notes"
         android:layout_width="wrap_content"

+ 2 - 0
app-unpriv/src/main/res/values/strings.xml

@@ -17,8 +17,10 @@
     <string name="quick_compatibility_not_compatible">Your smartphone is not compatible with %s</string>
     <string name="quick_compatibility_not_compatible_but_usb">Your smartphone is not fully compatible with %s. However, you can still use a USB smart card reader for near-full functionality.</string>
     <string name="quick_compatibility_result_slots">SIM card slots accessible: %s</string>
+    <string name="quick_compatibility_result_slots_isdr">ISD-R access: %s</string>
     <string name="quick_compatibility_result_notes">Note: these results are for reference only. Even if a SIM slot is not listed above, it <i>may</i> be compatible as well once a SIM card is inserted.</string>
     <string name="quick_compatibility_result_notes_incompatible">Note: if you currently do not have any SIM card inserted, try the compatibility check again after inserting one. Any SIM card will do.</string>
     <string name="quick_compatibility_button_continue">Continue</string>
     <string name="quick_compatibility_skip">Don\'t show this message again</string>
+    <string name="quick_compatibility_unknown">Unknown</string>
 </resources>