diff options
author | Joey Grover <joeygrover@gmail.com> | 2016-05-19 14:26:42 -0400 |
---|---|---|
committer | Joey Grover <joeygrover@gmail.com> | 2016-05-19 14:26:42 -0400 |
commit | 10148bc0796b523120edbc497d5feadf34490cc5 (patch) | |
tree | 7824d7e44704ea24c979350ebb38a7fba57953a8 | |
parent | 6c4abef06d45b72aacc60232a9e3f7673eeb0ab2 (diff) | |
download | sdl_android-10148bc0796b523120edbc497d5feadf34490cc5.tar.gz |
Made it possible to use AOA without having app up and running.
-rw-r--r-- | HelloSdl/AndroidManifest.xml | 17 | ||||
-rw-r--r-- | HelloSdl/project.properties | 2 | ||||
-rw-r--r-- | HelloSdl/res/xml/accessory_filter.xml | 7 | ||||
-rw-r--r-- | HelloSdl/src/com/hellosdl/sdl/SdlService.java | 35 | ||||
-rw-r--r-- | sdl_android_lib/src/com/smartdevicelink/transport/SdlBroadcastReceiver.java | 10 | ||||
-rw-r--r-- | sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java | 30 |
6 files changed, 75 insertions, 26 deletions
diff --git a/HelloSdl/AndroidManifest.xml b/HelloSdl/AndroidManifest.xml index d15dbe2a6..d6d1c512b 100644 --- a/HelloSdl/AndroidManifest.xml +++ b/HelloSdl/AndroidManifest.xml @@ -5,13 +5,16 @@ android:versionName="1.0" > <uses-sdk - android:minSdkVersion="8" + android:minSdkVersion="12" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <!-- Required to use the USB Accessory mode --> + <uses-feature android:name="android.hardware.usb.accessory" /> + <application android:allowBackup="true" android:icon="@drawable/ic_launcher" @@ -26,7 +29,16 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> - + <activity android:name="com.smartdevicelink.transport.USBAccessoryAttachmentActivity" + android:launchMode="singleTop"> + <intent-filter> + <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> + </intent-filter> + + <meta-data + android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" + android:resource="@xml/accessory_filter" /> + </activity> <service android:name=".sdl.SdlService" ></service> @@ -37,6 +49,7 @@ <receiver android:name=".sdl.SdlReceiver" android:enabled="true" > <intent-filter> + <action android:name="com.smartdevicelink.USB_ACCESSORY_ATTACHED"/> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.bluetooth.device.action.ACL_CONNECTED"/> <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" /> diff --git a/HelloSdl/project.properties b/HelloSdl/project.properties index f76c1b9a4..13e8cfbf8 100644 --- a/HelloSdl/project.properties +++ b/HelloSdl/project.properties @@ -11,5 +11,5 @@ #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt # Project target. -target=android-19 +target=Google Inc.:Google APIs:19 android.library.reference.1=../sdl_android_lib diff --git a/HelloSdl/res/xml/accessory_filter.xml b/HelloSdl/res/xml/accessory_filter.xml new file mode 100644 index 000000000..9b4064622 --- /dev/null +++ b/HelloSdl/res/xml/accessory_filter.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<resource> + <usb-accessory + manufacturer="SDL" + model="Core" + version="1.0"/> +</resource> diff --git a/HelloSdl/src/com/hellosdl/sdl/SdlService.java b/HelloSdl/src/com/hellosdl/sdl/SdlService.java index 053d47d85..641aded59 100644 --- a/HelloSdl/src/com/hellosdl/sdl/SdlService.java +++ b/HelloSdl/src/com/hellosdl/sdl/SdlService.java @@ -4,7 +4,13 @@ package com.hellosdl.sdl; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; - +import android.annotation.SuppressLint; +import android.app.Service; +import android.content.Intent; +import android.hardware.usb.UsbAccessory; +import android.hardware.usb.UsbManager; +import android.os.IBinder; +import android.util.Log; import com.hellosdl.MainActivity; import com.hellosdl.R; import com.smartdevicelink.exception.SdlException; @@ -71,14 +77,10 @@ import com.smartdevicelink.proxy.rpc.UpdateTurnListResponse; import com.smartdevicelink.proxy.rpc.enums.FileType; import com.smartdevicelink.proxy.rpc.enums.SdlDisconnectedReason; import com.smartdevicelink.proxy.rpc.enums.TextAlignment; +import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.transport.MultiplexTransportConfig; import com.smartdevicelink.transport.SdlBroadcastReceiver; -import com.smartdevicelink.util.DebugTool; - -import android.app.Service; -import android.content.Intent; -import android.os.IBinder; -import android.util.Log; +import com.smartdevicelink.transport.USBTransportConfig; /** * While this class is just an extension off the base Android Service class, we hope in the future we can offer something @@ -117,7 +119,7 @@ public class SdlService extends Service implements IProxyListenerALM{ @Override public int onStartCommand(Intent intent, int flags, int startId) { if(proxy == null){ - startProxy(); + startProxy(intent); }else if (intent != null && intent.hasExtra(SdlBroadcastReceiver.FORCE_TRANSPORT_CONNECTED)){ proxy.forceOnConnected(); } @@ -135,12 +137,25 @@ public class SdlService extends Service implements IProxyListenerALM{ * ******************************************************* Methods for SdlProxy Management ******************************************************************************* *************************************************************************************************************************************************************************/ - public void startProxy() { + @SuppressLint("InlinedApi") + public void startProxy(Intent intent) { if (proxy == null) { try { + BaseTransportConfig transport = null; + if(intent!=null && intent.hasExtra(UsbManager.EXTRA_ACCESSORY)){ //If we want to support USB transport + if(android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.HONEYCOMB){ + Log.e(TAG, "Unable to start proxy. Android OS version is too low"); + return; + } + //We have a usb transport + transport = new USBTransportConfig(getBaseContext(),(UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY)); + }else{ + //If we don't want anything but USB then would just do a return here and bail + transport = new MultiplexTransportConfig(getBaseContext(), APP_ID); + } proxy = new SdlProxyALM(this, APP_NAME, true, APP_ID, - new MultiplexTransportConfig(getBaseContext(), APP_ID)); + transport); } catch (SdlException e) { e.printStackTrace(); diff --git a/sdl_android_lib/src/com/smartdevicelink/transport/SdlBroadcastReceiver.java b/sdl_android_lib/src/com/smartdevicelink/transport/SdlBroadcastReceiver.java index ae7484bcb..e57874ee8 100644 --- a/sdl_android_lib/src/com/smartdevicelink/transport/SdlBroadcastReceiver.java +++ b/sdl_android_lib/src/com/smartdevicelink/transport/SdlBroadcastReceiver.java @@ -57,12 +57,20 @@ public abstract class SdlBroadcastReceiver extends BroadcastReceiver{ if(!(action.equalsIgnoreCase(BOOT_COMPLETE) || action.equalsIgnoreCase(ACL_CONNECTED) || action.equalsIgnoreCase(STATE_CHANGED) + || action.equalsIgnoreCase(USBTransport.ACTION_USB_ACCESSORY_ATTACHED) || action.equalsIgnoreCase(TransportConstants.START_ROUTER_SERVICE_ACTION))){ //We don't want anything else here if the child class called super and has different intent filters //Log.i(TAG, "Unwanted intent from child class"); return; } + if(action.equalsIgnoreCase(USBTransport.ACTION_USB_ACCESSORY_ATTACHED)){ + Log.d(TAG, "Usb connected"); + intent.setAction(null); + onSdlEnabled(context, intent); + return; + } + boolean didStart = false; localRouterClass = defineLocalSdlRouterClass(); @@ -102,7 +110,7 @@ public abstract class SdlBroadcastReceiver extends BroadcastReceiver{ } } - + if (intent.getAction().contains("android.bluetooth.adapter.action.STATE_CHANGED")){ int state = intent.getExtras().getInt("android.bluetooth.adapter.extra.STATE"); diff --git a/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java b/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java index 72616084a..2f2091e5b 100644 --- a/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java +++ b/sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java @@ -446,19 +446,25 @@ public class USBTransport extends SdlTransport { */
private void initializeAccessory() {
logI("Looking for connected accessories");
- UsbManager usbManager = getUsbManager();
- UsbAccessory[] accessories = usbManager.getAccessoryList();
- if (accessories != null) {
- logD("Found total " + accessories.length + " accessories");
- for (UsbAccessory accessory : accessories) {
- if (isAccessorySupported(accessory)) {
- connectToAccessory(accessory);
- break;
- }
- }
- } else {
- logI("No connected accessories found");
+ 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);
}
/**
|