From 85dfd44b4f8632e8462ff7426463feba8f1e6f9d Mon Sep 17 00:00:00 2001 From: septs Date: Mon, 7 Jul 2025 15:14:41 +0800 Subject: [PATCH 1/2] refactor: activity --- .../openeuicc/ui/QuickAvailabilityFragment.kt | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) 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..993ebbc 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 @@ -36,14 +36,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 +65,9 @@ open class QuickAvailabilityFragment : Fragment(), OpenEuiccContextMarker { override fun onStart() { super.onStart() - lifecycleScope.launch { onCompatibilityUpdate() } + lifecycleScope.launch { + onCompatibilityUpdate(getCompatibilityCheckResult()) + } } fun onContinueToApp() { @@ -69,8 +78,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 From 9541c14112d2f93dada9ed9a9e5e881e6f74acd6 Mon Sep 17 00:00:00 2001 From: septs Date: Mon, 7 Jul 2025 15:14:41 +0800 Subject: [PATCH 2/2] refactor: activity --- .../openeuicc/ui/QuickAvailabilityFragment.kt | 37 ++++++++++++------- app-unpriv/src/main/res/values/strings.xml | 1 + 2 files changed, 25 insertions(+), 13 deletions(-) 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