summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2016-05-19 14:26:42 -0400
committerJoey Grover <joeygrover@gmail.com>2016-05-19 14:26:42 -0400
commit10148bc0796b523120edbc497d5feadf34490cc5 (patch)
tree7824d7e44704ea24c979350ebb38a7fba57953a8
parent6c4abef06d45b72aacc60232a9e3f7673eeb0ab2 (diff)
downloadsdl_android-10148bc0796b523120edbc497d5feadf34490cc5.tar.gz
Made it possible to use AOA without having app up and running.
-rw-r--r--HelloSdl/AndroidManifest.xml17
-rw-r--r--HelloSdl/project.properties2
-rw-r--r--HelloSdl/res/xml/accessory_filter.xml7
-rw-r--r--HelloSdl/src/com/hellosdl/sdl/SdlService.java35
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/transport/SdlBroadcastReceiver.java10
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/transport/USBTransport.java30
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);
}
/**