ソースを参照

Add a different note for the incompatible result

Peter Cai 6 ヶ月 前
コミット
4991f2580e

+ 23 - 14
app-unpriv/src/main/java/im/angry/openeuicc/ui/QuickCompatibilityFragment.kt

@@ -4,6 +4,7 @@ import android.content.pm.PackageManager
 import android.icu.text.ListFormatter
 import android.os.Build
 import android.os.Bundle
+import android.se.omapi.Reader
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -17,8 +18,6 @@ import im.angry.openeuicc.util.EUICC_DEFAULT_ISDR_AID
 import im.angry.openeuicc.util.UnprivilegedEuiccContextMarker
 import im.angry.openeuicc.util.connectSEService
 import im.angry.openeuicc.util.decodeHex
-import im.angry.openeuicc.util.isSIM
-import im.angry.openeuicc.util.slotIndex
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.runBlocking
 
@@ -66,22 +65,26 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
     }
 
     private fun onContinueToApp() {
-        runBlocking {
-            preferenceRepository.skipQuickAvailabilityFlow
-                .updatePreference(true)
-        }
         requireActivity().finish()
     }
 
     private fun onCompatibilityUpdate(result: CompatibilityResult) {
         conclusion.text = formatConclusion(result)
-        if (result.compatibility != Compatibility.COMPATIBLE) return
-        resultSlots.isVisible = true
-        resultSlots.text = getString(
-            R.string.quick_compatibility_result_slots,
-            ListFormatter.getInstance().format(result.slots)
-        )
-        resultNotes.isVisible = true
+        if (result.compatibility == Compatibility.COMPATIBLE) {
+            runBlocking {
+                preferenceRepository.skipQuickAvailabilityFlow
+                    .updatePreference(true)
+            }
+            resultSlots.isVisible = true
+            resultSlots.text = getString(
+                R.string.quick_compatibility_result_slots,
+                ListFormatter.getInstance().format(result.slots)
+            )
+            resultNotes.isVisible = true
+        } else {
+            resultNotes.isVisible = true
+            resultNotes.text = getString(R.string.quick_compatibility_result_notes_incompatible)
+        }
     }
 
     private suspend fun getCompatibilityCheckResult(): CompatibilityResult {
@@ -132,4 +135,10 @@ open class QuickCompatibilityFragment : Fragment(), UnprivilegedEuiccContextMark
         appendLine("VERSION.RELEASE: ${Build.VERSION.RELEASE}")
         appendLine("VERSION.SDK_INT: ${Build.VERSION.SDK_INT}")
     }
-}
+}
+
+val Reader.isSIM: Boolean
+    get() = name.startsWith("SIM")
+
+val Reader.slotIndex: Int
+    get() = (name.replace("SIM", "").toIntOrNull() ?: 1)

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

@@ -18,5 +18,6 @@
     <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_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>
 </resources>