summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBretty White <geekman3454@protonmail.com>2018-07-11 10:39:43 -0400
committerBretty White <geekman3454@protonmail.com>2018-07-11 10:39:43 -0400
commitfdda10b255f007cf495cb41634f6ecf8ca2ff15f (patch)
treeb0dbec1dee057093aa29836cc1d40b50a67aa752
parent6a9cf3530fceb52fc98a12e7ef30b366067c6648 (diff)
downloadsdl_android-fdda10b255f007cf495cb41634f6ecf8ca2ff15f.tar.gz
initial manager work
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/api/BaseSubManager.java48
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/api/CompletionListener.java10
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/api/ProxyBridge.java532
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java358
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java68
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/proxy/interfaces/ISdl.java49
6 files changed, 1056 insertions, 9 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/api/BaseSubManager.java b/sdl_android/src/main/java/com/smartdevicelink/api/BaseSubManager.java
new file mode 100644
index 000000000..3a99dde82
--- /dev/null
+++ b/sdl_android/src/main/java/com/smartdevicelink/api/BaseSubManager.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.api;
+
+import android.support.annotation.NonNull;
+
+import com.smartdevicelink.proxy.interfaces.ISdl;
+
+/**
+ * <strong>BaseSubManager</strong> <br>
+ *
+ * Note: This class is extended by SubManagers <br>
+ *
+ * It is broken down to these areas: <br>
+ *
+ * 1. <br>
+ */
+public abstract class BaseSubManager {
+
+ // states - if this gets more complicated we can move elsewhere
+ public enum ManagerState {
+ SETTING_UP,
+ READY,
+ SHUTDOWN,
+ ;
+ }
+
+ protected ISdl internalInterface;
+ protected ManagerState state;
+
+ public BaseSubManager(@NonNull ISdl internalInterface){
+ this.internalInterface = internalInterface;
+ this.state = ManagerState.SETTING_UP;
+ }
+
+ /**
+ * <p>Called when manager is being torn down</p>
+ */
+ public void dispose(){
+ this.state = ManagerState.SHUTDOWN;
+ }
+
+ protected void transitionToState(ManagerState state) {
+ this.state = state;
+ }
+
+ protected ManagerState getState() {
+ return state;
+ }
+}
diff --git a/sdl_android/src/main/java/com/smartdevicelink/api/CompletionListener.java b/sdl_android/src/main/java/com/smartdevicelink/api/CompletionListener.java
new file mode 100644
index 000000000..631a39fa8
--- /dev/null
+++ b/sdl_android/src/main/java/com/smartdevicelink/api/CompletionListener.java
@@ -0,0 +1,10 @@
+package com.smartdevicelink.api;
+
+public interface CompletionListener {
+
+ /**
+ * Returns whether a specific operation was successful or not
+ * @param success - success or fail
+ */
+ void onComplete(boolean success);
+}
diff --git a/sdl_android/src/main/java/com/smartdevicelink/api/ProxyBridge.java b/sdl_android/src/main/java/com/smartdevicelink/api/ProxyBridge.java
new file mode 100644
index 000000000..4dadad170
--- /dev/null
+++ b/sdl_android/src/main/java/com/smartdevicelink/api/ProxyBridge.java
@@ -0,0 +1,532 @@
+package com.smartdevicelink.api;
+
+import android.util.SparseArray;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCMessage;
+import com.smartdevicelink.proxy.callbacks.OnServiceEnded;
+import com.smartdevicelink.proxy.callbacks.OnServiceNACKed;
+import com.smartdevicelink.proxy.interfaces.IProxyListenerBase;
+import com.smartdevicelink.proxy.rpc.AddCommandResponse;
+import com.smartdevicelink.proxy.rpc.AddSubMenuResponse;
+import com.smartdevicelink.proxy.rpc.AlertManeuverResponse;
+import com.smartdevicelink.proxy.rpc.AlertResponse;
+import com.smartdevicelink.proxy.rpc.ButtonPressResponse;
+import com.smartdevicelink.proxy.rpc.ChangeRegistrationResponse;
+import com.smartdevicelink.proxy.rpc.CreateInteractionChoiceSetResponse;
+import com.smartdevicelink.proxy.rpc.DeleteCommandResponse;
+import com.smartdevicelink.proxy.rpc.DeleteFileResponse;
+import com.smartdevicelink.proxy.rpc.DeleteInteractionChoiceSetResponse;
+import com.smartdevicelink.proxy.rpc.DeleteSubMenuResponse;
+import com.smartdevicelink.proxy.rpc.DiagnosticMessageResponse;
+import com.smartdevicelink.proxy.rpc.DialNumberResponse;
+import com.smartdevicelink.proxy.rpc.EndAudioPassThruResponse;
+import com.smartdevicelink.proxy.rpc.GenericResponse;
+import com.smartdevicelink.proxy.rpc.GetDTCsResponse;
+import com.smartdevicelink.proxy.rpc.GetInteriorVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse;
+import com.smartdevicelink.proxy.rpc.GetVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.GetWayPointsResponse;
+import com.smartdevicelink.proxy.rpc.ListFilesResponse;
+import com.smartdevicelink.proxy.rpc.OnAudioPassThru;
+import com.smartdevicelink.proxy.rpc.OnButtonEvent;
+import com.smartdevicelink.proxy.rpc.OnButtonPress;
+import com.smartdevicelink.proxy.rpc.OnCommand;
+import com.smartdevicelink.proxy.rpc.OnDriverDistraction;
+import com.smartdevicelink.proxy.rpc.OnHMIStatus;
+import com.smartdevicelink.proxy.rpc.OnHashChange;
+import com.smartdevicelink.proxy.rpc.OnInteriorVehicleData;
+import com.smartdevicelink.proxy.rpc.OnKeyboardInput;
+import com.smartdevicelink.proxy.rpc.OnLanguageChange;
+import com.smartdevicelink.proxy.rpc.OnLockScreenStatus;
+import com.smartdevicelink.proxy.rpc.OnPermissionsChange;
+import com.smartdevicelink.proxy.rpc.OnStreamRPC;
+import com.smartdevicelink.proxy.rpc.OnSystemRequest;
+import com.smartdevicelink.proxy.rpc.OnTBTClientState;
+import com.smartdevicelink.proxy.rpc.OnTouchEvent;
+import com.smartdevicelink.proxy.rpc.OnVehicleData;
+import com.smartdevicelink.proxy.rpc.OnWayPointChange;
+import com.smartdevicelink.proxy.rpc.PerformAudioPassThruResponse;
+import com.smartdevicelink.proxy.rpc.PerformInteractionResponse;
+import com.smartdevicelink.proxy.rpc.PutFileResponse;
+import com.smartdevicelink.proxy.rpc.ReadDIDResponse;
+import com.smartdevicelink.proxy.rpc.ResetGlobalPropertiesResponse;
+import com.smartdevicelink.proxy.rpc.ScrollableMessageResponse;
+import com.smartdevicelink.proxy.rpc.SendHapticDataResponse;
+import com.smartdevicelink.proxy.rpc.SendLocationResponse;
+import com.smartdevicelink.proxy.rpc.SetAppIconResponse;
+import com.smartdevicelink.proxy.rpc.SetDisplayLayoutResponse;
+import com.smartdevicelink.proxy.rpc.SetGlobalPropertiesResponse;
+import com.smartdevicelink.proxy.rpc.SetInteriorVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.SetMediaClockTimerResponse;
+import com.smartdevicelink.proxy.rpc.ShowConstantTbtResponse;
+import com.smartdevicelink.proxy.rpc.ShowResponse;
+import com.smartdevicelink.proxy.rpc.SliderResponse;
+import com.smartdevicelink.proxy.rpc.SpeakResponse;
+import com.smartdevicelink.proxy.rpc.StreamRPCResponse;
+import com.smartdevicelink.proxy.rpc.SubscribeButtonResponse;
+import com.smartdevicelink.proxy.rpc.SubscribeVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.SubscribeWayPointsResponse;
+import com.smartdevicelink.proxy.rpc.SystemRequestResponse;
+import com.smartdevicelink.proxy.rpc.UnsubscribeButtonResponse;
+import com.smartdevicelink.proxy.rpc.UnsubscribeVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.UnsubscribeWayPointsResponse;
+import com.smartdevicelink.proxy.rpc.UpdateTurnListResponse;
+import com.smartdevicelink.proxy.rpc.enums.SdlDisconnectedReason;
+
+import java.util.concurrent.CopyOnWriteArrayList;
+
+public class ProxyBridge implements IProxyListenerBase{
+ private final Object RPC_LISTENER_LOCK = new Object();
+ protected SparseArray<CopyOnWriteArrayList<OnRPCListener>> rpcListeners = null;
+ final LifecycleListener lifecycleListener;
+
+ public interface OnRPCListener {
+ void onRpcReceived(int functionID, RPCMessage message);
+ }
+
+ protected interface LifecycleListener{
+ void onProxyClosed(String info, Exception e, SdlDisconnectedReason reason);
+ void onServiceEnded(OnServiceEnded serviceEnded);
+ void onServiceNACKed(OnServiceNACKed serviceNACKed);
+ void onError(String info, Exception e);
+ }
+
+ public ProxyBridge( LifecycleListener lifecycleListener){
+ this.lifecycleListener = lifecycleListener;
+ rpcListeners = new SparseArray<>();
+ }
+
+ public boolean onRPCReceived(final RPCMessage message){
+ synchronized(RPC_LISTENER_LOCK){
+ final int id = FunctionID.getFunctionId(message.getFunctionName());
+ CopyOnWriteArrayList<OnRPCListener> listeners = rpcListeners.get(id);
+ if(listeners!=null && listeners.size()>0) {
+ for (OnRPCListener listener : listeners) {
+ listener.onRpcReceived(id,message);
+ }
+ return true;
+ }
+ return false;
+ }
+ }
+
+ protected void addRpcListener(FunctionID id, OnRPCListener listener){
+ synchronized(RPC_LISTENER_LOCK){
+ if (id != null && listener != null) {
+ if (rpcListeners.indexOfKey(id.getId()) < 0) {
+ rpcListeners.put(id.getId(), new CopyOnWriteArrayList<OnRPCListener>());
+ }
+ rpcListeners.get(id.getId()).add(listener);
+ }
+ }
+ }
+
+ public boolean removeOnRPCListener(FunctionID id, OnRPCListener listener){
+ synchronized(RPC_LISTENER_LOCK){
+ if(rpcListeners!= null
+ && id != null
+ && listener != null
+ && rpcListeners.indexOfKey(id.getId()) >= 0){
+ return rpcListeners.get(id.getId()).remove(listener);
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void onProxyClosed(String info, Exception e, SdlDisconnectedReason reason) {
+ lifecycleListener.onProxyClosed(info,e,reason);
+ }
+
+ @Override
+ public void onServiceEnded(OnServiceEnded serviceEnded) {
+ lifecycleListener.onServiceEnded(serviceEnded);
+
+ }
+
+ @Override
+ public void onServiceNACKed(OnServiceNACKed serviceNACKed) {
+ lifecycleListener.onServiceNACKed(serviceNACKed);
+
+ }
+ @Override
+ public void onError(String info, Exception e) {
+ lifecycleListener.onError(info, e);
+ }
+
+ @Override
+ public void onOnStreamRPC(OnStreamRPC notification) {
+ onRPCReceived(notification);
+
+ }
+
+ @Override
+ public void onStreamRPCResponse(StreamRPCResponse response) {
+ onRPCReceived(response);
+ }
+
+ @Override
+ public void onOnHMIStatus(OnHMIStatus notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onGenericResponse(GenericResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnCommand(OnCommand notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onAddCommandResponse(AddCommandResponse response) {
+ onRPCReceived(response);
+ }
+
+ @Override
+ public void onAddSubMenuResponse(AddSubMenuResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onCreateInteractionChoiceSetResponse(CreateInteractionChoiceSetResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onAlertResponse(AlertResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onDeleteCommandResponse(DeleteCommandResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onDeleteInteractionChoiceSetResponse(DeleteInteractionChoiceSetResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onDeleteSubMenuResponse(DeleteSubMenuResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onPerformInteractionResponse(PerformInteractionResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onResetGlobalPropertiesResponse(ResetGlobalPropertiesResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSetGlobalPropertiesResponse(SetGlobalPropertiesResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSetMediaClockTimerResponse(SetMediaClockTimerResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onShowResponse(ShowResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSpeakResponse(SpeakResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnButtonEvent(OnButtonEvent notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onOnButtonPress(OnButtonPress notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onSubscribeButtonResponse(SubscribeButtonResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onUnsubscribeButtonResponse(UnsubscribeButtonResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnPermissionsChange(OnPermissionsChange notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onSubscribeVehicleDataResponse(SubscribeVehicleDataResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onUnsubscribeVehicleDataResponse(UnsubscribeVehicleDataResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onGetVehicleDataResponse(GetVehicleDataResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnVehicleData(OnVehicleData notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onPerformAudioPassThruResponse(PerformAudioPassThruResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onEndAudioPassThruResponse(EndAudioPassThruResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnAudioPassThru(OnAudioPassThru notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onPutFileResponse(PutFileResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onDeleteFileResponse(DeleteFileResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onListFilesResponse(ListFilesResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSetAppIconResponse(SetAppIconResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onScrollableMessageResponse(ScrollableMessageResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onChangeRegistrationResponse(ChangeRegistrationResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSetDisplayLayoutResponse(SetDisplayLayoutResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnLanguageChange(OnLanguageChange notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onOnHashChange(OnHashChange notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onSliderResponse(SliderResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnDriverDistraction(OnDriverDistraction notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onOnTBTClientState(OnTBTClientState notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onOnSystemRequest(OnSystemRequest notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onSystemRequestResponse(SystemRequestResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnKeyboardInput(OnKeyboardInput notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onOnTouchEvent(OnTouchEvent notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onDiagnosticMessageResponse(DiagnosticMessageResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onReadDIDResponse(ReadDIDResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onGetDTCsResponse(GetDTCsResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnLockScreenNotification(OnLockScreenStatus notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onDialNumberResponse(DialNumberResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSendLocationResponse(SendLocationResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onShowConstantTbtResponse(ShowConstantTbtResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onAlertManeuverResponse(AlertManeuverResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onUpdateTurnListResponse(UpdateTurnListResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onServiceDataACK(int dataSize) {
+
+ }
+
+ @Override
+ public void onGetWayPointsResponse(GetWayPointsResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSubscribeWayPointsResponse(SubscribeWayPointsResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onUnsubscribeWayPointsResponse(UnsubscribeWayPointsResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnWayPointChange(OnWayPointChange notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onGetSystemCapabilityResponse(GetSystemCapabilityResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onGetInteriorVehicleDataResponse(GetInteriorVehicleDataResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onButtonPressResponse(ButtonPressResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onSetInteriorVehicleDataResponse(SetInteriorVehicleDataResponse response) {
+ onRPCReceived(response);
+
+ }
+
+ @Override
+ public void onOnInteriorVehicleData(OnInteriorVehicleData notification) {
+ onRPCReceived(notification);
+ }
+
+ @Override
+ public void onSendHapticDataResponse(SendHapticDataResponse response) {
+ onRPCReceived(response);
+ }
+}
diff --git a/sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java b/sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java
new file mode 100644
index 000000000..99f0accde
--- /dev/null
+++ b/sdl_android/src/main/java/com/smartdevicelink/api/SdlManager.java
@@ -0,0 +1,358 @@
+package com.smartdevicelink.api;
+
+import android.content.Context;
+
+import com.smartdevicelink.exception.SdlException;
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.protocol.enums.SessionType;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.SdlProxyBase;
+import com.smartdevicelink.proxy.callbacks.OnServiceEnded;
+import com.smartdevicelink.proxy.callbacks.OnServiceNACKed;
+import com.smartdevicelink.proxy.interfaces.IAudioStreamListener;
+import com.smartdevicelink.proxy.interfaces.ISdl;
+import com.smartdevicelink.proxy.interfaces.ISdlServiceListener;
+import com.smartdevicelink.proxy.interfaces.IVideoStreamListener;
+import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener;
+import com.smartdevicelink.proxy.rpc.SdlMsgVersion;
+import com.smartdevicelink.proxy.rpc.TTSChunk;
+import com.smartdevicelink.proxy.rpc.enums.AppHMIType;
+import com.smartdevicelink.proxy.rpc.enums.Language;
+import com.smartdevicelink.proxy.rpc.enums.SdlDisconnectedReason;
+import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
+import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener;
+import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener;
+import com.smartdevicelink.streaming.audio.AudioStreamingCodec;
+import com.smartdevicelink.streaming.audio.AudioStreamingParams;
+import com.smartdevicelink.streaming.video.VideoStreamingParameters;
+import com.smartdevicelink.transport.BaseTransportConfig;
+
+import java.util.List;
+import java.util.Vector;
+
+/**
+ * <strong>SDLManager</strong> <br>
+ *
+ * This is the main point of contact between an application and SDL <br>
+ *
+ * It is broken down to these areas: <br>
+ *
+ * 1. SDLManagerBuilder <br>
+ * 2. ISdl Interface along with its overridden methods - This can be passed into attached managers <br>
+ * 3. Sending Requests <br>
+ * 4. Helper methods
+ */
+public class SdlManager implements ProxyBridge.LifecycleListener {
+
+ private static String TAG = "Sdl Manager";
+ private SdlProxyBase proxy;
+
+ // Required parameters for builder
+ private String appId, appName;
+ private boolean isMediaApp;
+ private Language hmiLanguage;
+ private Vector<AppHMIType> hmiTypes;
+ private BaseTransportConfig transport;
+ private Context context;
+ private Vector<String> vrSynonyms;
+ private Vector<TTSChunk> ttsChunks;
+
+ private ProxyBridge proxyBridge;
+ //public LockScreenConfig lockScreenConfig;
+
+ // Managers
+ /*
+ private FileManager fileManager;
+ private VideoStreamingManager videoStreamingManager;
+ private AudioStreamManager audioStreamManager;
+ private LockscreenManager lockscreenManager;
+ private ScreenManager screenManager;
+ private PermissionManager permissionManager;
+ */
+
+ private SdlManager() {}
+
+ private void initialize(){
+ // proxy bridge
+ this.proxyBridge = new ProxyBridge(this);
+ // instantiate managers
+ /*
+ this.fileManager = new FileManager(_internalInterface, context);
+ this.lockscreenManager = new LockscreenManager(lockScreenConfig, context, _internalInterface);
+ this.screenManager = new ScreenManager(_internalInterface, this.fileManager);
+ this.permissionManager = new PermissionManager(_internalInterface);
+ this.videoStreamingManager = new VideoStreamingManager(context, _internalInterface);
+ this.audioStreamManager = new AudioStreamManager(_internalInterface);
+ */
+ }
+
+ private void dispose() {
+ /*
+ this.fileManager.dispose();
+ this.lockscreenManager.dispose();
+ this.audioStreamManager.dispose();
+ this.screenManager.dispose();
+ this.permissionManager.dispose();
+ this.videoStreamingManager.dispose();
+ this.audioStreamManager.dispose();
+ */
+ }
+
+ // BUILDER
+
+ public static class Builder {
+ SdlManager sdlManager;
+
+ public Builder(){
+ sdlManager = new SdlManager();
+ }
+
+ public Builder setAppId(final String appId){
+ sdlManager.appId = appId;
+ return this;
+ }
+
+ public Builder setAppName(final String appName){
+ sdlManager.appName = appName;
+ return this;
+ }
+
+ public Builder setIsMediaApp(final Boolean isMediaApp){
+ sdlManager.isMediaApp = isMediaApp;
+ return this;
+ }
+
+ public Builder setLanguage(final Language hmiLanguage){
+ sdlManager.hmiLanguage = hmiLanguage;
+ return this;
+ }
+
+ /*public Builder setLockScreenConfig (final LockScreenConfig lockScreenConfig){
+ sdlManager.lockScreenConfig = lockScreenConfig;
+ return this;
+ }*/
+
+ public Builder setHMITypes(final Vector<AppHMIType> hmiTypes){
+ sdlManager.hmiTypes = hmiTypes;
+ return this;
+ }
+
+ public Builder setVrSynonyms(final Vector<String> vrSynonyms) {
+ sdlManager.vrSynonyms = vrSynonyms;
+ return this;
+ }
+
+ public Builder setTtsName(final Vector<TTSChunk> ttsChunks) {
+ sdlManager.ttsChunks = ttsChunks;
+ return this;
+ }
+
+ /**
+ * This Object type may change with the transport refactor
+ */
+ public Builder setTransportType(BaseTransportConfig transport){
+ sdlManager.transport = transport;
+ return this;
+ }
+
+ public Builder setContext(Context context){
+ sdlManager.context = context;
+ return this;
+ }
+
+ @SuppressWarnings("unchecked")
+ public SdlManager build() {
+ try {
+ sdlManager.initialize();
+ sdlManager.proxy = new SdlProxyBase(sdlManager.proxyBridge, sdlManager.appName, sdlManager.isMediaApp, sdlManager.hmiLanguage, sdlManager.hmiLanguage, sdlManager.hmiTypes, sdlManager.appId, sdlManager.transport, sdlManager.vrSynonyms, sdlManager.ttsChunks) {};
+ } catch (SdlException e) {
+ e.printStackTrace();
+ }
+ return sdlManager;
+ }
+ }
+
+ // MANAGER GETTERS
+
+ /*public FileManager getFileManager() {
+ return fileManager;
+ }
+
+ public VideoStreamingManager getVideoStreamingManager() {
+ return videoStreamingManager;
+ }
+
+ public AudioStreamManager getAudioStreamManager() {
+ return audioStreamManager;
+ }
+
+ public ScreenManager getScreenManager() {
+ return screenManager;
+ }
+
+ public LockscreenManager getLockscreenManager() {
+ return lockscreenManager;
+ }
+
+ public PermissionManager getPermissionManager() {
+ return permissionManager;
+ }*/
+
+ // SENDING REQUESTS
+
+ public void sendRPCRequest(RPCRequest request) throws SdlException {
+ proxy.sendRPCRequest(request);
+ }
+
+ public void sendSequentialRequests(final List<? extends RPCRequest> rpcs, final OnMultipleRequestListener listener) throws SdlException {
+ proxy.sendSequentialRequests(rpcs, listener);
+ }
+
+ public void sendRequests(List<? extends RPCRequest> rpcs, final OnMultipleRequestListener listener) throws SdlException {
+ proxy.sendRequests(rpcs, listener);
+ }
+
+ // LIFECYCLE / OTHER
+
+ @Override
+ public void onProxyClosed(String info, Exception e, SdlDisconnectedReason reason){
+ this.dispose();
+ }
+
+ @Override
+ public void onServiceEnded(OnServiceEnded serviceEnded){
+
+ }
+
+ @Override
+ public void onServiceNACKed(OnServiceNACKed serviceNACKed){
+
+ }
+
+ @Override
+ public void onError(String info, Exception e){
+
+ }
+
+ // INTERNAL INTERFACE
+
+ private ISdl _internalInterface = new ISdl() {
+ @Override
+ public void start() {
+ try{
+ proxy.initializeProxy();
+ }catch (SdlException e){
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void stop() {
+ try{
+ proxy.dispose();
+ }catch (SdlException e){
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public boolean isConnected() {
+ return proxy.getIsConnected();
+ }
+
+ @Override
+ public void addServiceListener(SessionType serviceType, ISdlServiceListener sdlServiceListener) {
+ proxy.addServiceListener(serviceType,sdlServiceListener);
+ }
+
+ @Override
+ public void removeServiceListener(SessionType serviceType, ISdlServiceListener sdlServiceListener) {
+ proxy.removeServiceListener(serviceType,sdlServiceListener);
+ }
+
+ @Override
+ public void startVideoService(VideoStreamingParameters parameters, boolean encrypted) {
+ if(proxy.getIsConnected()){
+ proxy.startVideoStream(encrypted,parameters);
+ }
+ }
+
+ @Override
+ public IVideoStreamListener startVideoStream(boolean isEncrypted, VideoStreamingParameters parameters){
+ return proxy.startVideoStream(isEncrypted, parameters);
+ }
+
+ @Override
+ public void stopVideoService() {
+ if(proxy.getIsConnected()){
+ proxy.endVideoStream();
+ }
+ }
+
+ @Override
+ public void startAudioService(boolean isEncrypted, AudioStreamingCodec codec,
+ AudioStreamingParams params) {
+ if(proxy.getIsConnected()){
+ proxy.startAudioStream(isEncrypted, codec, params);
+ }
+ }
+
+ @Override
+ public IAudioStreamListener startAudioStream(boolean isEncrypted, AudioStreamingCodec codec,
+ AudioStreamingParams params) {
+ return proxy.startAudioStream(isEncrypted, codec, params);
+ }
+
+ @Override
+ public void stopAudioService() {
+ if(proxy.getIsConnected()){
+ proxy.endAudioStream();
+ }
+ }
+
+ @Override
+ public void sendRPCRequest(RPCRequest message){
+ try {
+ proxy.sendRPCRequest(message);
+ } catch (SdlException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void addOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {
+ proxy.addOnRPCNotificationListener(notificationId,listener);
+ }
+
+ @Override
+ public boolean removeOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {
+ return proxy.removeOnRPCNotificationListener(notificationId,listener);
+ }
+
+ @Override
+ public Object getCapability(SystemCapabilityType systemCapabilityType){
+ return proxy.getCapability(systemCapabilityType);
+ }
+
+ @Override
+ public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) {
+ proxy.getCapability(systemCapabilityType, scListener);
+ }
+
+ @Override
+ public boolean isCapabilitySupported(SystemCapabilityType systemCapabilityType){
+ return proxy.isCapabilitySupported(systemCapabilityType);
+ }
+
+ @Override
+ public SdlMsgVersion getSdlMsgVersion(){
+ try {
+ return proxy.getSdlMsgVersion();
+ } catch (SdlException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+ };
+
+}
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 7d25745d9..da7e2b181 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java
@@ -300,13 +300,6 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
}
@Override
- public void startAudioService(boolean encrypted) {
- if(isConnected()){
- sdlSession.startService(SessionType.PCM,sdlSession.getSessionId(),encrypted);
- }
- }
-
- @Override
public void stopAudioService() {
if(isConnected()){
sdlSession.endService(SessionType.PCM,sdlSession.getSessionId());
@@ -331,6 +324,50 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
public boolean removeOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {
return SdlProxyBase.this.removeOnRPCNotificationListener(notificationId,listener);
}
+
+ @Override
+ public Object getCapability(SystemCapabilityType systemCapabilityType){
+ return SdlProxyBase.this.getCapability(systemCapabilityType);
+ }
+
+ @Override
+ public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) {
+ SdlProxyBase.this.getCapability(systemCapabilityType, scListener);
+ }
+
+ @Override
+ public SdlMsgVersion getSdlMsgVersion(){
+ try {
+ return SdlProxyBase.this.getSdlMsgVersion();
+ } catch (SdlException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isCapabilitySupported(SystemCapabilityType systemCapabilityType){
+ return SdlProxyBase.this.isCapabilitySupported(systemCapabilityType);
+ }
+
+ @Override
+ public void startAudioService(boolean isEncrypted, AudioStreamingCodec codec,
+ AudioStreamingParams params) {
+ if(getIsConnected()){
+ SdlProxyBase.this.startAudioStream(isEncrypted, codec, params);
+ }
+ }
+
+ @Override
+ public IVideoStreamListener startVideoStream(boolean isEncrypted, VideoStreamingParameters parameters){
+ return SdlProxyBase.this.startVideoStream(isEncrypted, parameters);
+ }
+
+ @Override
+ public IAudioStreamListener startAudioStream(boolean isEncrypted, AudioStreamingCodec codec,
+ AudioStreamingParams params) {
+ return SdlProxyBase.this.startAudioStream(isEncrypted, codec, params);
+ }
};
private void notifyPutFileStreamError(Exception e, String info)
@@ -564,6 +601,12 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
}
}
}
+
+ public SdlProxyBase(proxyListenerType listener, String appName, Boolean isMediaApp, Language languageDesired, Language hmiDisplayLanguageDesired, Vector<AppHMIType> appType, String appID,
+ BaseTransportConfig transportConfig, Vector<String> vrSynonyms, Vector<TTSChunk> ttsName) throws SdlException {
+ performBaseCommon(listener, null, true, appName, ttsName, null, vrSynonyms, isMediaApp,
+ null, languageDesired, hmiDisplayLanguageDesired, appType, appID, null, null,null, false, false, null, null, transportConfig);
+ }
/**
* Constructor.
@@ -1315,7 +1358,7 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
}
// Function to initialize new proxy connection
- private void initializeProxy() throws SdlException {
+ public void initializeProxy() throws SdlException {
// Reset all of the flags and state variables
_haveReceivedFirstNonNoneHMILevel = false;
_haveReceivedFirstFocusLevel = false;
@@ -3490,6 +3533,15 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
}
/**
+ * Get SDL Message Version
+ * @return SdlMsgVersion
+ * @throws SdlException
+ */
+ public SdlMsgVersion getSdlMsgVersion() throws SdlException{
+ return _sdlMsgVersion;
+ }
+
+ /**
* Takes a list of RPCRequests and sends it to SDL in a synchronous fashion. Responses are captured through callback on OnMultipleRequestListener.
* For sending requests asynchronously, use sendRequests <br>
*
diff --git a/sdl_android/src/main/java/com/smartdevicelink/proxy/interfaces/ISdl.java b/sdl_android/src/main/java/com/smartdevicelink/proxy/interfaces/ISdl.java
index 9177a146b..73a2d346b 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/proxy/interfaces/ISdl.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/proxy/interfaces/ISdl.java
@@ -3,7 +3,11 @@ package com.smartdevicelink.proxy.interfaces;
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.protocol.enums.SessionType;
import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.SdlMsgVersion;
+import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener;
+import com.smartdevicelink.streaming.audio.AudioStreamingCodec;
+import com.smartdevicelink.streaming.audio.AudioStreamingParams;
import com.smartdevicelink.streaming.video.VideoStreamingParameters;
/*
@@ -83,10 +87,17 @@ public interface ISdl {
void stopVideoService();
/**
+ * Starts the video streaming service
+ * @param isEncrypted flag to start this service with encryption or not
+ * @param parameters desired video streaming params for this sevice to be started with
+ */
+ IVideoStreamListener startVideoStream(boolean isEncrypted, VideoStreamingParameters parameters);
+
+ /**
* Starts the Audio streaming service
* @param encrypted flag to start this service with encryption or not
*/
- void startAudioService(boolean encrypted);
+ void startAudioService(boolean encrypted, AudioStreamingCodec codec, AudioStreamingParams params);
/**
* Stops the audio service if open
@@ -94,6 +105,15 @@ public interface ISdl {
void stopAudioService();
/**
+ * Start Audio Stream and return IAudioStreamListener
+ * @param isEncrypted
+ * @param codec
+ * @param params
+ * @return IAudioStreamListener
+ */
+ IAudioStreamListener startAudioStream(boolean isEncrypted, AudioStreamingCodec codec, AudioStreamingParams params);
+
+ /**
* Pass an RPC message through the proxy to be sent to the connected module
* @param message RPCRequest that should be sent to the module
*/
@@ -113,4 +133,31 @@ public interface ISdl {
*/
boolean removeOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener);
+ /**
+ * Get SystemCapabilityType Object
+ * @param systemCapabilityType
+ * @return Object
+ */
+ Object getCapability(SystemCapabilityType systemCapabilityType);
+
+ /**
+ * Get Capability
+ * @param systemCapabilityType
+ * @param scListener
+ */
+ void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener);
+
+ /**
+ * Check if capability is supported
+ * @param systemCapabilityType
+ * @return Boolean
+ */
+ boolean isCapabilitySupported(SystemCapabilityType systemCapabilityType);
+
+ /**
+ * Get SdlMsgVersion
+ * @return SdlMsgVersion
+ */
+ SdlMsgVersion getSdlMsgVersion();
+
}