diff options
author | Austin Kirk <askirk@umich.edu> | 2017-08-17 15:04:48 -0400 |
---|---|---|
committer | Austin Kirk <askirk@umich.edu> | 2017-08-17 15:04:48 -0400 |
commit | 4a9f6050af6185e6bd79e587db60afcdc3615cf2 (patch) | |
tree | 404794fd43a8a8b9cf888870a567134b4d89a628 /sdl_android/src/main/java/com | |
parent | 9e9ce6af4116bc4cc41fece52b6a7b36da22a126 (diff) | |
download | sdl_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.java | 39 | ||||
-rw-r--r-- | sdl_android/src/main/java/com/smartdevicelink/proxy/SystemCapabilityManager.java | 54 |
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); } } |