From 388f15a531f7293f856061ee40a5cc98d40610db Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 6 Jul 2024 18:29:01 -0400 Subject: [PATCH 1/2] ui: Scroll to USB fragment when inserted while app is active --- .../java/im/angry/openeuicc/ui/MainActivity.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt index 85af388..f74f955 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt @@ -65,7 +65,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { private val usbReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if (intent?.action == UsbManager.ACTION_USB_DEVICE_ATTACHED || intent?.action == UsbManager.ACTION_USB_DEVICE_DETACHED) { - refresh() + refresh(true) } } } @@ -121,7 +121,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { } } - private suspend fun init() { + private suspend fun init(fromUsbEvent: Boolean = false) { loading = true viewPager.visibility = View.GONE tabs.visibility = View.GONE @@ -165,10 +165,19 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { pages.add(Page("") { appContainer.uiComponentFactory.createNoEuiccPlaceholderFragment() }) pagerAdapter.notifyDataSetChanged() } + + if (fromUsbEvent && usbDevice != null) { + // If this refresh was triggered by a USB insertion while active, scroll to that page + viewPager.post { + viewPager.setCurrentItem(pages.size - 1, true) + } + } else { + viewPager.currentItem = 0 + } } } - private fun refresh() { + private fun refresh(fromUsbEvent: Boolean = false) { lifecycleScope.launch { loading = true viewPager.visibility = View.GONE @@ -177,7 +186,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { pages.clear() pagerAdapter.notifyDataSetChanged() - init() + init(fromUsbEvent) } } } \ No newline at end of file From b2fb3d23cb528eb0ec218ade8b4d7e98e7842089 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 6 Jul 2024 18:36:58 -0400 Subject: [PATCH 2/2] ui: Usb should use its own refresh progress bar --- .../java/im/angry/openeuicc/ui/MainActivity.kt | 16 +++------------- .../angry/openeuicc/ui/UsbCcidReaderFragment.kt | 8 +++++--- .../main/res/layout/fragment_usb_ccid_reader.xml | 10 ++++++++++ 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt index f74f955..e9a190e 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt @@ -50,16 +50,6 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { } } - var loading: Boolean - get() = loadingProgress.visibility == View.VISIBLE - set(value) { - loadingProgress.visibility = if (value) { - View.VISIBLE - } else { - View.GONE - } - } - protected lateinit var tm: TelephonyManager private val usbReceiver = object : BroadcastReceiver() { @@ -122,7 +112,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { } private suspend fun init(fromUsbEvent: Boolean = false) { - loading = true + loadingProgress.visibility = View.VISIBLE viewPager.visibility = View.GONE tabs.visibility = View.GONE @@ -142,7 +132,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { } withContext(Dispatchers.Main) { - loading = false + loadingProgress.visibility = View.GONE knownChannels.sortedBy { it.logicalSlotId }.forEach { channel -> pages.add(Page( @@ -179,7 +169,7 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { private fun refresh(fromUsbEvent: Boolean = false) { lifecycleScope.launch { - loading = true + loadingProgress.visibility = View.VISIBLE viewPager.visibility = View.GONE tabs.visibility = View.GONE diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/UsbCcidReaderFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/UsbCcidReaderFragment.kt index 3525147..3988b09 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/UsbCcidReaderFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/UsbCcidReaderFragment.kt @@ -14,6 +14,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button +import android.widget.ProgressBar import android.widget.TextView import androidx.fragment.app.Fragment import androidx.fragment.app.commit @@ -69,6 +70,7 @@ class UsbCcidReaderFragment : Fragment(), OpenEuiccContextMarker { private lateinit var text: TextView private lateinit var permissionButton: Button + private lateinit var loadingProgress: ProgressBar private var usbDevice: UsbDevice? = null private var usbChannel: EuiccChannel? = null @@ -82,6 +84,7 @@ class UsbCcidReaderFragment : Fragment(), OpenEuiccContextMarker { text = view.requireViewById(R.id.usb_reader_text) permissionButton = view.requireViewById(R.id.usb_grant_permission) + loadingProgress = view.requireViewById(R.id.loading) permissionButton.setOnClickListener { usbManager.requestPermission(usbDevice, usbPendingIntent) @@ -135,14 +138,13 @@ class UsbCcidReaderFragment : Fragment(), OpenEuiccContextMarker { private suspend fun tryLoadUsbChannel() { text.visibility = View.GONE permissionButton.visibility = View.GONE - - (requireActivity() as MainActivity).loading = true + loadingProgress.visibility = View.VISIBLE val (device, channel) = withContext(Dispatchers.IO) { euiccChannelManager.enumerateUsbEuiccChannel() } - (requireActivity() as MainActivity).loading = false + loadingProgress.visibility = View.GONE usbDevice = device usbChannel = channel diff --git a/app-common/src/main/res/layout/fragment_usb_ccid_reader.xml b/app-common/src/main/res/layout/fragment_usb_ccid_reader.xml index 1207990..287e340 100644 --- a/app-common/src/main/res/layout/fragment_usb_ccid_reader.xml +++ b/app-common/src/main/res/layout/fragment_usb_ccid_reader.xml @@ -4,6 +4,16 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + +