diff options
| author | Austin Kirk <askirk@umich.edu> | 2018-04-05 14:33:52 -0400 |
|---|---|---|
| committer | Austin Kirk <askirk@umich.edu> | 2018-04-05 14:33:52 -0400 |
| commit | 9fb278815c86ff347ac60ec451acecb886943501 (patch) | |
| tree | a550bfcfc38a46a1f184edc726c7801e13ec884a | |
| parent | 352c16222cf2823736a0bf585acf3c70a6248f11 (diff) | |
| download | sdl_android-feature/aoa_router.tar.gz | |
Functional with 2 appsfeature/aoa_router
-With 2 apps, you can select to use either as the app for USB and both are able to register using the router service
3 files changed, 39 insertions, 19 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java b/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java index d63755943..dbc15186d 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java +++ b/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java @@ -652,9 +652,10 @@ public class SdlRouterService extends Service{ case UsbTransferProvider.SENDING_PFD_ID: ParcelFileDescriptor pfd = (ParcelFileDescriptor) msg.obj; boolean success = false; - if(this.provider.get().getParcelFileDescriptor() == null){ + Log.d(TAG, "Received PFD message"); + if(service.getParcelFileDescriptor() == null && service.mAOAService == null){ Log.d(TAG, "Setting the PFD & opening accessory"); - this.provider.get().initAOAService(pfd); + service.initAOAService(pfd); success = true; }else{ Log.d(TAG, "We already set the PFD"); @@ -1243,18 +1244,20 @@ public class SdlRouterService extends Service{ @Override public void onTransportConnected() { - toasty("USB TRANSPORT CONNECTED Sir"); + toasty("USB Transport Connected"); SdlRouterService.this.onTransportConnected(TransportType.USB); } @Override public void onTransportDisconnected(String info) { + toasty("USB Transport Disconnected"); SdlRouterService.this.onTransportDisconnected(TransportType.USB); } @Override public void onTransportError(String info, Exception e) { - Log.d("USBTransport", info); + toasty("USB Transport Disconnected due to error"); + SdlRouterService.this.onTransportDisconnected(TransportType.USB); } }); try { @@ -1316,9 +1319,6 @@ public class SdlRouterService extends Service{ } public void onTransportDisconnected(TransportType type){ - if(altTransportService!=null){ //If we still have an alt transport open, then we don't need to tell the clients to close - return; - } if(type == TransportType.USB){ mAOAService.disconnect(); mAOAService = null; diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/USBAccessoryAttachmentActivity.java b/sdl_android/src/main/java/com/smartdevicelink/transport/USBAccessoryAttachmentActivity.java index 985ac70f7..073dcbea5 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/transport/USBAccessoryAttachmentActivity.java +++ b/sdl_android/src/main/java/com/smartdevicelink/transport/USBAccessoryAttachmentActivity.java @@ -51,11 +51,12 @@ import static com.smartdevicelink.transport.TransportConstants.FOREGROUND_EXTRA; * 3. set minimum SDK version to 12:
* <uses-sdk android:minSdkVersion="12"/>
*/
-public class USBAccessoryAttachmentActivity extends Activity {
+public class USBAccessoryAttachmentActivity extends Activity implements UsbTransferProvider.UsbTransferCallback {
private static final String TAG =
USBAccessoryAttachmentActivity.class.getSimpleName();
final String LOCAL_ROUTER_SERVICE_EXTRA = "router_service";
final String LOCAL_ROUTER_SERVICE_DID_START_OWN = "did_start";
+ UsbTransferProvider usbTransferProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -76,15 +77,13 @@ public class USBAccessoryAttachmentActivity extends Activity { if (UsbManager.ACTION_USB_ACCESSORY_ATTACHED.equals(action)) {
UsbAccessory usbAccessory = intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
- wakeUpRouterService(this, false, true, usbAccessory);
-
+ wakeUpRouterService(this, false, true, usbAccessory, this);
//AndroidTools.sendExplicitBroadcast(getApplicationContext(),usbAccessoryAttachedIntent,null);
}
-
- finish();
}
- private boolean wakeUpRouterService(final Context context, final boolean ping, final boolean altTransportWake, final UsbAccessory usbAccessory){
+
+ private boolean wakeUpRouterService(final Context context, final boolean ping, final boolean altTransportWake, final UsbAccessory usbAccessory, final UsbTransferProvider.UsbTransferCallback cb){
new ServiceFinder(context, context.getPackageName(), new ServiceFinder.ServiceFinderCallback() {
@Override
public void onComplete(Vector<ComponentName> routerServices) {
@@ -122,7 +121,7 @@ public class USBAccessoryAttachmentActivity extends Activity { context.sendBroadcast(restart);
if(altTransportWake && usbAccessory != null){
- new UsbTransferProvider(context,serviceIntent.getComponent(),usbAccessory);
+ usbTransferProvider = new UsbTransferProvider(context,serviceIntent.getComponent(),usbAccessory, cb);
}
} catch (SecurityException e) {
Log.e(TAG, "Security exception, process is bad");
@@ -130,7 +129,7 @@ public class USBAccessoryAttachmentActivity extends Activity { } else {
if (altTransportWake && usbAccessory != null) {
//wakeRouterServiceAltTransport(context);
- new UsbTransferProvider(context,runningBluetoothServicePackage.get(0),usbAccessory);
+ usbTransferProvider = new UsbTransferProvider(context,runningBluetoothServicePackage.get(0),usbAccessory, cb);
return;
}
return;
@@ -139,4 +138,10 @@ public class USBAccessoryAttachmentActivity extends Activity { });
return true;
}
+
+ @Override
+ public void onUsbTransferUpdate(boolean success) {
+ Log.i(TAG, success ? "Successfully transfered file descriptor" : "Failed to send file descriptor");
+ finish();
+ }
}
diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/UsbTransferProvider.java b/sdl_android/src/main/java/com/smartdevicelink/transport/UsbTransferProvider.java index 5592702c1..2b2020b85 100644 --- a/sdl_android/src/main/java/com/smartdevicelink/transport/UsbTransferProvider.java +++ b/sdl_android/src/main/java/com/smartdevicelink/transport/UsbTransferProvider.java @@ -36,6 +36,7 @@ public class UsbTransferProvider { final Messenger clientMessenger; ParcelFileDescriptor usbPfd; + final UsbTransferCallback callback; private ServiceConnection routerConnection= new ServiceConnection() { @@ -64,7 +65,7 @@ public class UsbTransferProvider { } }; - public UsbTransferProvider(Context context, ComponentName service, UsbAccessory usbAccessory){ + public UsbTransferProvider(Context context, ComponentName service, UsbAccessory usbAccessory, UsbTransferCallback callback){ if(context == null || service == null || usbAccessory == null){ throw new IllegalStateException("Supplied params are not correct. Context == null? "+ (context==null) + " ComponentName == null? " + (service == null) + " Usb Accessory == null? " + usbAccessory); } @@ -72,8 +73,9 @@ public class UsbTransferProvider { this.routerService = service; this.clientMessenger = new Messenger(new ClientHandler(this)); usbPfd = getFileDescriptor(usbAccessory); - if(usbPfd != null){ - checkIsConnected(); + this.callback = callback; + if(usbPfd != null) { + checkIsConnected(); } } @@ -93,7 +95,7 @@ public class UsbTransferProvider { public void checkIsConnected(){ if(!AndroidTools.isServiceExported(context,routerService) || !bindToService()){ //We are unable to bind to service - Log.e(TAG, "Unable to bind to servicec"); + Log.e(TAG, "Unable to bind to service"); unBindFromService(); } } @@ -137,6 +139,12 @@ public class UsbTransferProvider { routerServiceMessenger =null; } + private void handleUsbTransferResponse(boolean success){ + if(callback != null){ + callback.onUsbTransferUpdate(success); + } + } + static class ClientHandler extends Handler { final WeakReference<UsbTransferProvider> provider; @@ -150,16 +158,23 @@ public class UsbTransferProvider { if(provider.get()==null){ return; } + switch (msg.what) { case 5556: //TransportConstants.USB_ACC_RECEIVED: Log.d(TAG, "Successful USB transfer"); + provider.get().handleUsbTransferResponse(true); provider.get().finish(); break; default: + provider.get().handleUsbTransferResponse(false); break; } } }; + public interface UsbTransferCallback{ + public void onUsbTransferUpdate(boolean success); + } + } |
