diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index fbe777c..45ed941 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,8 +16,6 @@
-
-
DataHolder.usbConnected.value = false
UsbManager.ACTION_USB_DEVICE_ATTACHED -> DataHolder.usbConnected.value = true
}
+
+
+ synchronized(this) {
+ val device: UsbDevice? = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)
+
+ if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
+ device?.apply {
+ connectUsb(true)
+ }
+ } else {
+ onErrorReported("permission denied for device")
+ }
+ }
+
checkAndUpdateUsbConnection()
+
+
+
+
+
}
}
@@ -138,6 +164,46 @@ class MainActivity : AppCompatActivity() {
}
}
+ private fun connectUsb(permissionGranted: Boolean) {
+ Log.d(TAG, "connectUsb() called, permission variable = $permissionGranted")
+ val manager = getSystemService(Context.USB_SERVICE) as UsbManager
+ val availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager)
+
+ if (availableDrivers.isEmpty()) {
+ onErrorReported("No Device is Connected")
+ } else {
+ mDriver = availableDrivers[0]
+
+ if (mConnection == null) {
+ requestUserPermission(manager, mDriver.device)
+ } else {
+// setupService()
+ }
+ }
+ }
+
+ private fun requestUserPermission(manager: UsbManager, device: UsbDevice) {
+ val mPendingIntent: PendingIntent
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
+ mPendingIntent = PendingIntent.getBroadcast(
+ this,
+ 0,
+ Intent(Constants.ACTION_USB_PERMISSION),
+ PendingIntent.FLAG_MUTABLE
+ )
+ } else {
+ mPendingIntent = PendingIntent.getBroadcast(
+ this,
+ 0,
+ Intent(Constants.ACTION_USB_PERMISSION),
+ PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
+ )
+ }
+
+ val filter = IntentFilter(Constants.ACTION_USB_PERMISSION)
+ registerReceiver(usbReceiver, filter)
+ manager.requestPermission(device, mPendingIntent)
+ }
private fun setupListeners() {
binding.cvItem1.setOnClickListener {
DataHolder.selectedTestType = TestType.SICKLECERT
@@ -258,6 +324,14 @@ class MainActivity : AppCompatActivity() {
stopLocationUpdates()
}
+
+ fun onErrorReported(msg: String) {
+ Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
+ if (!isFinishing)
+ onBackPressed()
+ }
+
+
override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array, grantResults: IntArray
) {