diff options
author | Bretty White <geekman3454@protonmail.com> | 2018-07-11 10:39:43 -0400 |
---|---|---|
committer | Bretty White <geekman3454@protonmail.com> | 2018-07-11 10:39:43 -0400 |
commit | fdda10b255f007cf495cb41634f6ecf8ca2ff15f (patch) | |
tree | b0dbec1dee057093aa29836cc1d40b50a67aa752 | |
parent | 6a9cf3530fceb52fc98a12e7ef30b366067c6648 (diff) | |
download | sdl_android-fdda10b255f007cf495cb41634f6ecf8ca2ff15f.tar.gz |
initial manager work
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(); + } |