summaryrefslogtreecommitdiff
path: root/sdl_android/src/main/java/com
diff options
context:
space:
mode:
authorAustin Kirk <askirk@umich.edu>2017-08-17 15:04:48 -0400
committerAustin Kirk <askirk@umich.edu>2017-08-17 15:04:48 -0400
commit4a9f6050af6185e6bd79e587db60afcdc3615cf2 (patch)
tree404794fd43a8a8b9cf888870a567134b4d89a628 /sdl_android/src/main/java/com
parent9e9ce6af4116bc4cc41fece52b6a7b36da22a126 (diff)
downloadsdl_android-4a9f6050af6185e6bd79e587db60afcdc3615cf2.tar.gz
Refactor SystemCapabilityManager, fix unit test, move initialization of SdlProxyBase
At this point `getCapability()` will cause an unchecked cast warning when requesting a list of capabilities
Diffstat (limited to 'sdl_android/src/main/java/com')
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java39
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java54
2 files changed, 38 insertions, 55 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java b/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
index 16cd0e805..226c8fd2c 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
@@ -97,7 +97,6 @@ import com.smartdevicelink.trace.enums.InterfaceActivityDirection;
import com.smartdevicelink.transport.BaseTransportConfig;
import com.smartdevicelink.transport.SiphonServer;
import com.smartdevicelink.transport.enums.TransportType;
-import com.smartdevicelink.util.CorrelationIdGenerator;
import com.smartdevicelink.util.DebugTool;
public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase> {
@@ -1824,20 +1823,6 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
}
}
}
-
- //Initialize _systemCapabilityManager here.
- _systemCapabilityManager = new SystemCapabilityManager(new SystemCapabilityManager.ISystemCapabilityManager() {
- @Override
- public void onSendPacketRequest(RPCRequest message) {
- message.setCorrelationID(CorrelationIdGenerator.generateId());
- try {
- sendRPCRequest(message);
- } catch (SdlException e) {
- e.printStackTrace();
- }
- }
- });
- _systemCapabilityManager.parseRAIResponse(rai);
}
private void handleRPCMessage(Hashtable<String, Object> hash) {
@@ -1860,6 +1845,19 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
_appInterfaceRegisterd = true;
}
processRaiResponse(msg);
+
+ //Initialize _systemCapabilityManager here.
+ _systemCapabilityManager = new SystemCapabilityManager(new SystemCapabilityManager.ISystemCapabilityManager() {
+ @Override
+ public void onSendPacketRequest(RPCRequest message) {
+ try {
+ sendRPCRequest(message);
+ } catch (SdlException e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ _systemCapabilityManager.parseRAIResponse(msg);
Intent sendIntent = createBroadcastIntent();
updateBroadcastIntent(sendIntent, "RPC_NAME", FunctionID.REGISTER_APP_INTERFACE.toString());
@@ -5546,14 +5544,13 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
sendRPCRequest(msg);
}
- public Object getSystemCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener){
- if(scListener == null){
- return _systemCapabilityManager.getSystemCapability(systemCapabilityType);
- }else{
- return _systemCapabilityManager.getSystemCapability(systemCapabilityType, scListener);
- }
+ public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener){
+ _systemCapabilityManager.getCapability(systemCapabilityType, scListener);
}
+ public Object getCapability(SystemCapabilityType systemCapabilityType){
+ return _systemCapabilityManager.getCapability(systemCapabilityType);
+ }
/******************** END Public Helper Methods *************************/
diff --git a/sdl_android/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java b/sdl_android/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java
index 7ca82ddc1..6776f15cb 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java
@@ -6,6 +6,7 @@ import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse;
import com.smartdevicelink.proxy.rpc.RegisterAppInterfaceResponse;
import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener;
+import com.smartdevicelink.util.CorrelationIdGenerator;
import java.util.HashMap;
@@ -34,41 +35,40 @@ public class SystemCapabilityManager {
/**
* @param systemCapabilityType Type of capability desired
- * @param scListener callback for
- * @return
+ * @param scListener callback to execute upon retrieving capability
*/
- public Object getSystemCapability(final SystemCapabilityType systemCapabilityType, final OnSystemCapabilityListener scListener){
+ public void getCapability(final SystemCapabilityType systemCapabilityType, final OnSystemCapabilityListener scListener){
Object capability = cachedSystemCapabilities.get(systemCapabilityType);
if(capability != null){
scListener.onCapabilityRetrieved(capability);
- return capability;
}else if(scListener == null){
- return null;
+ return;
}
- capability = getSystemCapabilityCommon(systemCapabilityType);
- scListener.onCapabilityRetrieved(capability);
- return capability;
+ retrieveCapability(systemCapabilityType, scListener);
}
- public Object getSystemCapability(final SystemCapabilityType systemCapabilityType){
+ /**
+ * @param systemCapabilityType Type of capability desired
+ * @return Desired capability if it is cached in the manager, otherwise returns a null object
+ * and works in the background to retrieve the capability for the next call
+ */
+ public Object getCapability(final SystemCapabilityType systemCapabilityType){
Object capability = cachedSystemCapabilities.get(systemCapabilityType);
if(capability != null){
return capability;
}
- return getSystemCapabilityCommon(systemCapabilityType);
+ retrieveCapability(systemCapabilityType, null);
+ return null;
}
/**
* @param systemCapabilityType Type of capability desired
- * @return Synchronous result returned by GetSystemCapabilityResponse, null if systemCapabilityType is null
+ * passes GetSystemCapabilityType request to `callback` to be sent by proxy
*/
- private Object getSystemCapabilityCommon(final SystemCapabilityType systemCapabilityType){
-
- final Object RETURN_LOCK = new Object();
-
- GetSystemCapability request = new GetSystemCapability();
+ private void retrieveCapability(final SystemCapabilityType systemCapabilityType, final OnSystemCapabilityListener scListener){
+ final GetSystemCapability request = new GetSystemCapability();
request.setSystemCapabilityType(systemCapabilityType);
request.setOnRPCResponseListener(new OnRPCResponseListener() {
@Override
@@ -76,28 +76,14 @@ public class SystemCapabilityManager {
if(response.getSuccess()){
Object retrievedCapability = ((GetSystemCapabilityResponse) response).getSystemCapability().getCapabilityForType(systemCapabilityType);
cachedSystemCapabilities.put(systemCapabilityType, retrievedCapability);
- }
- synchronized(RETURN_LOCK){
- RETURN_LOCK.notify();
+ scListener.onCapabilityRetrieved(retrievedCapability);
+ }else{
+ scListener.onError(response.getInfo());
}
}
});
-
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- synchronized(RETURN_LOCK){
- RETURN_LOCK.wait();
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }).start();
+ request.setCorrelationID(CorrelationIdGenerator.generateId());
callback.onSendPacketRequest(request);
-
- return cachedSystemCapabilities.get(systemCapabilityType);
}
}