summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkos Rapitis <mrapitis@ford.com>2016-11-17 15:36:43 -0500
committerMarkos Rapitis <mrapitis@ford.com>2016-11-17 15:36:43 -0500
commit793f6395d993582f60c57fa3da2844b6e48b5ed0 (patch)
treef90a38b284efcac177f1539f91239597226f8adc
parenta1c73c388c7b76c6b4779fe8c7ca1b317c53dd96 (diff)
downloadsdl_android-793f6395d993582f60c57fa3da2844b6e48b5ed0.tar.gz
Cleaned up aoa logic to gracefully handle connect / disconnect events. Added ability to disable shareConnection parameter from aoa transport.
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java49
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/transport/USBTransportConfig.java11
2 files changed, 28 insertions, 32 deletions
diff --git a/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java b/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java
index 2f2091e5b..31ac70124 100644
--- a/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java
+++ b/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java
@@ -20,9 +20,6 @@ import com.smartdevicelink.exception.SdlExceptionCause;
import com.smartdevicelink.protocol.SdlPacket;
import com.smartdevicelink.trace.SdlTrace;
import com.smartdevicelink.trace.enums.InterfaceActivityDirection;
-import com.smartdevicelink.transport.ITransportListener;
-import com.smartdevicelink.transport.SdlTransport;
-import com.smartdevicelink.transport.SiphonServer;
import com.smartdevicelink.transport.enums.TransportType;
import com.smartdevicelink.util.DebugTool;
@@ -37,7 +34,10 @@ import com.smartdevicelink.util.DebugTool;
*/
@SuppressLint("NewApi")
public class USBTransport extends SdlTransport {
- /**
+
+ // Boolean to monitor if the transport is in a disconnecting state
+ private boolean _disconnecting = false;
+ /**
* Broadcast action: sent when a USB accessory is attached.
*
* UsbManager.EXTRA_ACCESSORY extra contains UsbAccessory object that has
@@ -279,7 +279,6 @@ public class USBTransport extends SdlTransport {
filter.addAction(ACTION_USB_PERMISSION);
getContext().registerReceiver(mUSBReceiver, filter);
- initializeAccessory();
} catch (Exception e) {
String msg = "Couldn't start opening connection";
logE(msg, e);
@@ -352,7 +351,15 @@ public class USBTransport extends SdlTransport {
* @param msg Disconnect reason message, if any
* @param ex Disconnect exception, if any
*/
- private void disconnect(String msg, Exception ex) {
+ private synchronized void disconnect(String msg, Exception ex) {
+
+ // If already disconnecting, return
+ if (_disconnecting) {
+ // No need to recursively call
+ return;
+ }
+ _disconnecting = true;
+
final State state = getState();
switch (state) {
case LISTENING:
@@ -372,6 +379,7 @@ public class USBTransport extends SdlTransport {
if (mOutputStream != null) {
try {
mOutputStream.close();
+ mOutputStream = null;
} catch (IOException e) {
logW("Can't close output stream", e);
mOutputStream = null;
@@ -380,6 +388,7 @@ public class USBTransport extends SdlTransport {
if (mInputStream != null) {
try {
mInputStream.close();
+ mInputStream = null;
} catch (IOException e) {
logW("Can't close input stream", e);
mInputStream = null;
@@ -388,6 +397,7 @@ public class USBTransport extends SdlTransport {
if (mParcelFD != null) {
try {
mParcelFD.close();
+ mParcelFD = null;
} catch (IOException e) {
logW("Can't close file descriptor", e);
mParcelFD = null;
@@ -428,6 +438,7 @@ public class USBTransport extends SdlTransport {
"; doing nothing");
break;
}
+ _disconnecting = false;
}
/**
@@ -442,32 +453,6 @@ public class USBTransport extends SdlTransport {
}
/**
- * Looks for an already connected compatible accessory and connect to it.
- */
- private void initializeAccessory() {
- logI("Looking for connected accessories");
- UsbAccessory acc = mConfig.getUsbAccessory();
- if(acc == null || !isAccessorySupported(acc)){ //Check to see if our config included an accessory and that it is supported. If not, see if there are any other accessories connected.
- UsbManager usbManager = getUsbManager();
- UsbAccessory[] accessories = usbManager.getAccessoryList();
- if (accessories != null) {
- logD("Found total " + accessories.length + " accessories");
- for (UsbAccessory accessory : accessories) {
- if (isAccessorySupported(accessory)) {
- acc = accessory;
- break;
- }
- }
- } else {
- logI("No connected accessories found");
- return;
- }
- }
-
- connectToAccessory(acc);
- }
-
- /**
* Checks if the specified connected USB accessory is what we expect.
*
* @param accessory Accessory to check
diff --git a/sdl_android_lib/src/com/smartdevicelink/transport/USBTransportConfig.java b/sdl_android_lib/src/com/smartdevicelink/transport/USBTransportConfig.java
index 0309753a9..baf0dafac 100644
--- a/sdl_android_lib/src/com/smartdevicelink/transport/USBTransportConfig.java
+++ b/sdl_android_lib/src/com/smartdevicelink/transport/USBTransportConfig.java
@@ -19,6 +19,17 @@ public class USBTransportConfig extends BaseTransportConfig {
this.usbAccessory = usbAccessory;
}
+ public USBTransportConfig (Context mainActivity, boolean shareConnection) {
+ this.mainActivity = mainActivity;
+ super.shareConnection = shareConnection;
+ }
+
+ public USBTransportConfig (Context mainActivity, UsbAccessory usbAccessory, boolean shareConnection) {
+ this.mainActivity = mainActivity;
+ this.usbAccessory = usbAccessory;
+ super.shareConnection = shareConnection;
+ }
+
public Context getUSBContext () {
return mainActivity;
}