浏览代码

MainActivity: Reload when USB devices are attached / detached

Peter Cai 1 年之前
父节点
当前提交
1a1364f788
共有 1 个文件被更改,包括 25 次插入3 次删除
  1. 25 3
      app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt

+ 25 - 3
app-common/src/main/java/im/angry/openeuicc/ui/MainActivity.kt

@@ -1,7 +1,11 @@
 package im.angry.openeuicc.ui
 
 import android.annotation.SuppressLint
+import android.content.BroadcastReceiver
+import android.content.Context
 import android.content.Intent
+import android.content.IntentFilter
+import android.hardware.usb.UsbManager
 import android.os.Bundle
 import android.telephony.TelephonyManager
 import android.util.Log
@@ -13,7 +17,7 @@ import android.widget.ArrayAdapter
 import android.widget.ProgressBar
 import android.widget.Spinner
 import androidx.fragment.app.Fragment
-import androidx.fragment.app.commit
+import androidx.fragment.app.commitNow
 import androidx.lifecycle.lifecycleScope
 import im.angry.openeuicc.common.R
 import im.angry.openeuicc.util.*
@@ -45,6 +49,14 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
 
     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()
+            }
+        }
+    }
+
     @SuppressLint("WrongConstant", "UnspecifiedRegisterReceiverFlag")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -55,6 +67,16 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
         tm = telephonyManager
 
         spinnerAdapter = ArrayAdapter<String>(this, R.layout.spinner_item)
+
+        registerReceiver(usbReceiver, IntentFilter().apply {
+            addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
+            addAction(UsbManager.ACTION_USB_DEVICE_DETACHED)
+        })
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        unregisterReceiver(usbReceiver)
     }
 
     override fun onCreateOptionsMenu(menu: Menu): Boolean {
@@ -164,8 +186,8 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
         lifecycleScope.launch {
             loading = true
 
-            supportFragmentManager.commit {
-                fragments.firstOrNull()?.let {
+            supportFragmentManager.commitNow {
+                fragments.forEach {
                     remove(it)
                 }
             }