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..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,22 +50,12 @@ 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() { 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,8 +111,8 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker { } } - private suspend fun init() { - loading = true + private suspend fun init(fromUsbEvent: Boolean = false) { + 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( @@ -165,19 +155,28 @@ 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 + loadingProgress.visibility = View.VISIBLE viewPager.visibility = View.GONE tabs.visibility = View.GONE pages.clear() pagerAdapter.notifyDataSetChanged() - init() + init(fromUsbEvent) } } } \ No newline at end of file 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"> + +