From c35c0fe3ed96abb5e55a0ccf9c8e9a31fc969b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Fran=C4=8De=C5=A1kin?= Date: Sat, 6 Apr 2019 21:51:28 +0200 Subject: [PATCH] Fix: Taisync didn't reconnect if the USB is not unplugged and plugged again --- .../mavlink/qgroundcontrol/QGCActivity.java | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/android/src/org/mavlink/qgroundcontrol/QGCActivity.java b/android/src/org/mavlink/qgroundcontrol/QGCActivity.java index b10ce7ccd..2c772f6b4 100644 --- a/android/src/org/mavlink/qgroundcontrol/QGCActivity.java +++ b/android/src/org/mavlink/qgroundcontrol/QGCActivity.java @@ -76,6 +76,7 @@ public class QGCActivity extends QtActivity private static final String ACTION_USB_PERMISSION = "org.mavlink.qgroundcontrol.action.USB_PERMISSION"; private static PendingIntent _usbPermissionIntent = null; private TaiSync taiSync = null; + private Timer probeAccessoriesTimer = null; public static Context m_context; @@ -225,7 +226,15 @@ public class QGCActivity extends QtActivity IntentFilter accessoryFilter = new IntentFilter(ACTION_USB_PERMISSION); filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED); registerReceiver(mOpenAccessoryReceiver, accessoryFilter); - probeAccessories(); + + probeAccessoriesTimer = new Timer(); + probeAccessoriesTimer.schedule(new TimerTask() { + @Override + public void run() + { + probeAccessories(); + } + }, 0, 3000); } catch(Exception e) { Log.e(TAG, "Exception: " + e); } @@ -243,6 +252,9 @@ public class QGCActivity extends QtActivity @Override protected void onDestroy() { + if (probeAccessoriesTimer != null) { + probeAccessoriesTimer.cancel(); + } unregisterReceiver(mOpenAccessoryReceiver); try { if(_wakeLock != null) { @@ -706,22 +718,26 @@ public class QGCActivity extends QtActivity } } + Object probeAccessoriesLock = new Object(); + private void probeAccessories() { final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); new Thread(new Runnable() { public void run() { - Log.i(TAG, "probeAccessories"); - UsbAccessory[] accessories = _usbManager.getAccessoryList(); - if (accessories != null) { - for (UsbAccessory usbAccessory : accessories) { - if (_usbManager.hasPermission(usbAccessory)) { - openAccessory(usbAccessory); - } else { - Log.i(TAG, "requestPermission"); - _usbManager.requestPermission(usbAccessory, pendingIntent); + synchronized(openAccessoryLock) { + Log.i(TAG, "probeAccessories"); + UsbAccessory[] accessories = _usbManager.getAccessoryList(); + if (accessories != null) { + for (UsbAccessory usbAccessory : accessories) { + if (_usbManager.hasPermission(usbAccessory)) { + openAccessory(usbAccessory); + } else { + Log.i(TAG, "requestPermission"); + _usbManager.requestPermission(usbAccessory, pendingIntent); + } } - } + } } } }).start(); -- 2.22.0