From 1220bbd92e37e2990b188a55c86376777618a9e1 Mon Sep 17 00:00:00 2001 From: Julian Kast Date: Tue, 8 Sep 2020 18:37:33 -0400 Subject: Revert "Revert "Merge branch 'develop' into remove-deprecated-transport-apis"" This reverts commit 2e682ca50fdf8c3fe11ab1b9e0dfe5ddc59008b4. --- .../managers/audio/AudioStreamManagerTest.java | 24 ++++-- .../managers/file/FileManagerTests.java | 26 +++--- .../lifecycle/SystemCapabilityManagerTests.java | 49 +----------- .../managers/screen/SoftButtonManagerTests.java | 10 ++- .../screen/TextAndGraphicManagerTests.java | 6 +- .../managers/video/VideoStreamManagerTests.java | 32 ++++---- .../smartdevicelink/SdlConnection/SdlSession.java | 3 + .../managers/audio/AudioStreamManager.java | 38 +++++---- .../smartdevicelink/managers/file/FileManager.java | 2 + .../managers/lockscreen/LockScreenManager.java | 3 + .../managers/permission/PermissionManager.java | 2 + .../managers/screen/ScreenManager.java | 2 + .../managers/screen/SoftButtonManager.java | 2 + .../managers/screen/SubscribeButtonManager.java | 3 + .../managers/screen/TextAndGraphicManager.java | 2 + .../screen/choiceset/ChoiceSetManager.java | 2 + .../managers/screen/menu/MenuManager.java | 3 + .../managers/screen/menu/VoiceCommandManager.java | 3 + .../managers/video/HapticInterfaceManager.java | 8 +- .../managers/video/VideoStreamManager.java | 92 ++++++++++++++-------- .../com/smartdevicelink/protocol/SdlPacket.java | 3 + .../com/smartdevicelink/protocol/SdlProtocol.java | 2 + .../protocol/heartbeat/HeartbeatMonitor.java | 64 +++++++-------- .../protocol/heartbeat/IHeartbeatMonitor.java | 64 +++++++-------- .../heartbeat/IHeartbeatMonitorListener.java | 46 ++++++----- .../streaming/StreamPacketizer.java | 3 + .../transport/SdlBroadcastReceiver.java | 3 + 27 files changed, 278 insertions(+), 219 deletions(-) (limited to 'android/sdl_android/src') diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java index c5837c2cb..1d5d12059 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/audio/AudioStreamManagerTest.java @@ -12,6 +12,8 @@ import androidx.test.platform.app.InstrumentationRegistry; import com.smartdevicelink.SdlConnection.SdlSession; import com.smartdevicelink.managers.CompletionListener; import com.smartdevicelink.managers.audio.AudioStreamManager.SampleType; +import com.smartdevicelink.managers.lifecycle.OnSystemCapabilityListener; +import com.smartdevicelink.managers.lifecycle.SystemCapabilityManager; import com.smartdevicelink.protocol.enums.SessionType; import com.smartdevicelink.proxy.interfaces.IAudioStreamListener; import com.smartdevicelink.proxy.interfaces.ISdl; @@ -39,7 +41,9 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -65,9 +69,11 @@ public class AudioStreamManagerTest extends TestCase { public void testCreatingAudioStreamManager() { ISdl internalInterface = mock(ISdl.class); + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); AudioPassThruCapabilities audioCapabilities = new AudioPassThruCapabilities(SamplingRate._16KHZ, BitsPerSample._16_BIT, AudioType.PCM); doReturn(true).when(internalInterface).isConnected(); - doReturn(audioCapabilities).when(internalInterface).getCapability(SystemCapabilityType.PCM_STREAMING); + doReturn(audioCapabilities).when(systemCapabilityManager).getCapability(eq(SystemCapabilityType.PCM_STREAMING), (OnSystemCapabilityListener) isNull(), anyBoolean()); new AudioStreamManager(internalInterface, mContext); } @@ -101,9 +107,11 @@ public class AudioStreamManagerTest extends TestCase { }; ISdl internalInterface = mock(ISdl.class); + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); AudioPassThruCapabilities audioCapabilities = new AudioPassThruCapabilities(SamplingRate._16KHZ, BitsPerSample._16_BIT, AudioType.PCM); doReturn(true).when(internalInterface).isConnected(); - doReturn(audioCapabilities).when(internalInterface).getCapability(SystemCapabilityType.PCM_STREAMING); + doReturn(audioCapabilities).when(systemCapabilityManager).getCapability(eq(SystemCapabilityType.PCM_STREAMING), (OnSystemCapabilityListener) isNull(), anyBoolean()); doAnswer(audioServiceAnswer).when(internalInterface).addServiceListener(any(SessionType.class), any(ISdlServiceListener.class)); doAnswer(audioServiceAnswer).when(internalInterface).startAudioService(any(Boolean.class)); @@ -289,8 +297,10 @@ public class AudioStreamManagerTest extends TestCase { }; ISdl internalInterface = mock(ISdl.class); + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); doReturn(true).when(internalInterface).isConnected(); - doReturn(audioCapabilities).when(internalInterface).getCapability(any(SystemCapabilityType.class)); + doReturn(audioCapabilities).when(systemCapabilityManager).getCapability(any(SystemCapabilityType.class), (OnSystemCapabilityListener) isNull(), anyBoolean()); doAnswer(audioServiceAnswer).when(internalInterface).addServiceListener(any(SessionType.class), any(ISdlServiceListener.class)); doAnswer(audioServiceAnswer).when(internalInterface).startAudioService(any(Boolean.class)); @@ -517,8 +527,10 @@ public class AudioStreamManagerTest extends TestCase { }; ISdl internalInterface = mock(ISdl.class); + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); doReturn(true).when(internalInterface).isConnected(); - doReturn(audioCapabilities).when(internalInterface).getCapability(any(SystemCapabilityType.class)); + doReturn(audioCapabilities).when(systemCapabilityManager).getCapability(any(SystemCapabilityType.class), (OnSystemCapabilityListener) isNull(), anyBoolean()); doAnswer(audioServiceAnswer).when(internalInterface).addServiceListener(any(SessionType.class), any(ISdlServiceListener.class)); doAnswer(audioServiceAnswer).when(internalInterface).startAudioService(any(Boolean.class)); @@ -594,8 +606,10 @@ public class AudioStreamManagerTest extends TestCase { }; ISdl internalInterface = mock(ISdl.class); + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); doReturn(true).when(internalInterface).isConnected(); - doReturn(audioCapabilities).when(internalInterface).getCapability(any(SystemCapabilityType.class)); + doReturn(audioCapabilities).when(systemCapabilityManager).getCapability(any(SystemCapabilityType.class), (OnSystemCapabilityListener) isNull(), anyBoolean()); doAnswer(audioServiceAnswer).when(internalInterface).addServiceListener(any(SessionType.class), any(ISdlServiceListener.class)); doAnswer(audioServiceAnswer).when(internalInterface).startAudioService(any(Boolean.class)); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java index 8908346d2..34cc6bf2a 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java @@ -248,7 +248,7 @@ public class FileManagerTests { final ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onListDeleteRequestSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onListDeleteRequestSuccess).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); final List fileNames = new ArrayList<>(); fileNames.add("Julian"); @@ -280,7 +280,7 @@ public class FileManagerTests { final ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onListDeleteRequestFail).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onListDeleteRequestFail).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); final List fileNames = new ArrayList<>(); fileNames.add("Julian"); @@ -403,7 +403,7 @@ public class FileManagerTests { final ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onSendRequestsFailOnError).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onSendRequestsFailOnError).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); SdlFile validFile2 = new SdlFile(); validFile2.setName(TestValues.GENERAL_STRING + "2"); @@ -434,7 +434,7 @@ public class FileManagerTests { } }); - verify(internalInterface, times(5)).sendRequests(any(List.class),any(OnMultipleRequestListener.class)); + verify(internalInterface, times(5)).sendRPCs(any(List.class),any(OnMultipleRequestListener.class)); } /** @@ -552,7 +552,7 @@ public class FileManagerTests { ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onListFileUploadSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onListFileUploadSuccess).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); FileManagerConfig fileManagerConfig = new FileManagerConfig(); final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig); @@ -573,7 +573,7 @@ public class FileManagerTests { }); } }); - verify(internalInterface, times(0)).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + verify(internalInterface, times(0)).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); } /** @@ -584,7 +584,7 @@ public class FileManagerTests { ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onListFileUploadSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onListFileUploadSuccess).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); FileManagerConfig fileManagerConfig = new FileManagerConfig(); final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig); @@ -606,7 +606,7 @@ public class FileManagerTests { }); } }); - verify(internalInterface, times(1)).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + verify(internalInterface, times(1)).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); } /** @@ -702,7 +702,7 @@ public class FileManagerTests { ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onListFileUploadSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onListFileUploadSuccess).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); FileManagerConfig fileManagerConfig = new FileManagerConfig(); @@ -739,7 +739,7 @@ public class FileManagerTests { ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onSendRequestsFailPartialOnError).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onSendRequestsFailPartialOnError).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); SdlFile validFile2 = new SdlFile(); validFile2.setName(TestValues.GENERAL_STRING + "2"); @@ -788,7 +788,7 @@ public class FileManagerTests { ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onListFileUploadSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onListFileUploadSuccess).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); FileManagerConfig fileManagerConfig = new FileManagerConfig(); final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig); @@ -908,7 +908,7 @@ public class FileManagerTests { final ISdl internalInterface = mock(ISdl.class); doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class)); - doAnswer(onListFileUploadSuccess).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + doAnswer(onListFileUploadSuccess).when(internalInterface).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); final SdlFile validFile2 = new SdlFile(); validFile2.setName(TestValues.GENERAL_STRING + "2"); @@ -944,7 +944,7 @@ public class FileManagerTests { } }); - verify(internalInterface, times(1)).sendRequests(any(List.class), any(OnMultipleRequestListener.class)); + verify(internalInterface, times(1)).sendRPCs(any(List.class), any(OnMultipleRequestListener.class)); } /** diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/lifecycle/SystemCapabilityManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/lifecycle/SystemCapabilityManagerTests.java index 109bf6316..a14e98383 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/lifecycle/SystemCapabilityManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/lifecycle/SystemCapabilityManagerTests.java @@ -959,17 +959,9 @@ public class SystemCapabilityManagerTests { @Override public void startVideoService(VideoStreamingParameters parameters, boolean encrypted) { } - @Override - public void sendRPCRequest(RPCRequest message) {} - @Override public void sendRPC(RPCMessage message) {} - @Override - public void sendRequests(List rpcs, OnMultipleRequestListener listener) { - - } - @Override public void sendRPCs(List rpcs, OnMultipleRequestListener listener) { @@ -1021,23 +1013,12 @@ public class SystemCapabilityManagerTests { return false; } - @Override - public Object getCapability(SystemCapabilityType systemCapabilityType){return null;} - - @Override - public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) { - } @Override public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse() { return null; } - @Override - public Object getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener, boolean forceUpdate) { - return null; - } - @Override public SdlMsgVersion getSdlMsgVersion() { return null; @@ -1048,46 +1029,24 @@ public class SystemCapabilityManagerTests { return new Version(1,0,0); } - - @Override - public boolean isCapabilitySupported(SystemCapabilityType systemCapabilityType){ - return false; - } - - @Override - public void addOnSystemCapabilityListener(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener listener) { } - - @Override - public boolean removeOnSystemCapabilityListener(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener listener) { return false; } - @Override public boolean isTransportForServiceAvailable(SessionType serviceType) { return false; } @Override - public void startAudioService(boolean isEncrypted, AudioStreamingCodec codec, - AudioStreamingParams params) {} + public void startAudioService(boolean encrypted){} @Override - public IVideoStreamListener startVideoStream(boolean isEncrypted, VideoStreamingParameters parameters){ - return null; - } + public void startRPCEncryption() {} @Override - public IAudioStreamListener startAudioStream(boolean isEncrypted, AudioStreamingCodec codec, - AudioStreamingParams params) { + public Taskmaster getTaskmaster() { return null; } @Override - public void startAudioService(boolean encrypted){} - - @Override - public void startRPCEncryption() {} - - @Override - public Taskmaster getTaskmaster() { + public SystemCapabilityManager getSystemCapabilityManager() { return null; } } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java index e5daf375b..b43be2af6 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/SoftButtonManagerTests.java @@ -3,12 +3,12 @@ package com.smartdevicelink.managers.screen; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.smartdevicelink.managers.CompletionListener; import com.livio.taskmaster.Taskmaster; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.managers.file.MultipleFileCompletionListener; import com.smartdevicelink.managers.file.filetypes.SdlArtwork; import com.smartdevicelink.managers.lifecycle.OnSystemCapabilityListener; +import com.smartdevicelink.managers.lifecycle.SystemCapabilityManager; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.rpc.DisplayCapability; @@ -51,6 +51,7 @@ import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -89,7 +90,7 @@ public class SoftButtonManagerTests { doAnswer(onHMIStatusAnswer).when(internalInterface).addOnRPCNotificationListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCNotificationListener.class)); - // When internalInterface.addOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onSystemCapabilityListener) is called + // When internalInterface.getSystemCapabilityManager().addOnSystemCapabilityListener(SystemCapabilityType.DISPLAYS, onSystemCapabilityListener) is called // inside SoftButtonManager, respond with a fake response to let the SoftButtonManager continue working. Answer onSystemCapabilityAnswer = new Answer() { @Override @@ -108,8 +109,9 @@ public class SoftButtonManagerTests { return null; } }; - doAnswer(onSystemCapabilityAnswer).when(internalInterface).addOnSystemCapabilityListener(eq(SystemCapabilityType.DISPLAYS), any(OnSystemCapabilityListener.class)); - + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doAnswer(onSystemCapabilityAnswer).when(systemCapabilityManager).addOnSystemCapabilityListener(eq(SystemCapabilityType.DISPLAYS), any(OnSystemCapabilityListener.class)); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); // When fileManager.uploadArtworks() is called inside the SoftButtonManager, respond with // a fake onComplete() callback to let the SoftButtonManager continue working. diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java index 2bb0164fb..e5deb7f30 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/screen/TextAndGraphicManagerTests.java @@ -11,6 +11,7 @@ import com.smartdevicelink.managers.ManagerUtility; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.managers.file.filetypes.SdlArtwork; import com.smartdevicelink.managers.lifecycle.OnSystemCapabilityListener; +import com.smartdevicelink.managers.lifecycle.SystemCapabilityManager; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.rpc.DisplayCapability; @@ -43,6 +44,7 @@ import static junit.framework.TestCase.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -102,7 +104,9 @@ public class TextAndGraphicManagerTests { return null; } }; - doAnswer(onSystemCapabilityAnswer).when(internalInterface).addOnSystemCapabilityListener(eq(SystemCapabilityType.DISPLAYS), any(OnSystemCapabilityListener.class)); + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doAnswer(onSystemCapabilityAnswer).when(systemCapabilityManager).addOnSystemCapabilityListener(eq(SystemCapabilityType.DISPLAYS), any(OnSystemCapabilityListener.class)); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); textAndGraphicManager = new TextAndGraphicManager(internalInterface, fileManager, softButtonManager); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java index a393bf34f..2a09311e9 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/video/VideoStreamManagerTests.java @@ -2,20 +2,21 @@ package com.smartdevicelink.managers.video; import android.content.Context; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.test.ext.junit.runners.AndroidJUnit4; import android.util.DisplayMetrics; import android.view.Display; import android.view.MotionEvent; import android.view.View; +import androidx.annotation.NonNull; +import androidx.test.ext.junit.runners.AndroidJUnit4; + import com.smartdevicelink.managers.CompletionListener; import com.smartdevicelink.managers.lifecycle.OnSystemCapabilityListener; +import com.smartdevicelink.managers.lifecycle.SystemCapabilityManager; import com.smartdevicelink.protocol.enums.FunctionID; import com.smartdevicelink.protocol.enums.SessionType; import com.smartdevicelink.proxy.interfaces.ISdl; import com.smartdevicelink.proxy.interfaces.ISdlServiceListener; -import com.smartdevicelink.proxy.interfaces.IVideoStreamListener; import com.smartdevicelink.proxy.rpc.ImageResolution; import com.smartdevicelink.proxy.rpc.OnHMIStatus; import com.smartdevicelink.proxy.rpc.OnTouchEvent; @@ -39,13 +40,13 @@ import org.junit.runner.RunWith; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; -import java.nio.ByteBuffer; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertNotNull; @@ -54,11 +55,11 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; /** * This is a unit test class for the SmartDeviceLink video streaming manager class : @@ -139,6 +140,9 @@ public class VideoStreamManagerTests { public void testHMILevelNotFull(){ final ISdl internalInterface = mock(ISdl.class); + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); + when(internalInterface.getProtocolVersion()).thenReturn((new Version(5,0,0))); RegisterAppInterfaceResponse mockRegisterAppInterfaceResponse = new RegisterAppInterfaceResponse(); @@ -147,7 +151,7 @@ public class VideoStreamManagerTests { mockRegisterAppInterfaceResponse.setVehicleType(mockVehicleType); when(internalInterface.getRegisterAppInterfaceResponse()).thenReturn(mockRegisterAppInterfaceResponse); - when(internalInterface.isCapabilitySupported(SystemCapabilityType.VIDEO_STREAMING)).thenReturn(true); + when(systemCapabilityManager.isCapabilitySupported(SystemCapabilityType.VIDEO_STREAMING)).thenReturn(true); final VideoStreamManager videoStreamManager = new VideoStreamManager(internalInterface); videoStreamManager.start(new CompletionListener() { @@ -174,7 +178,10 @@ public class VideoStreamManagerTests { final Set listenerSet = new HashSet<>(); when(internalInterface.getProtocolVersion()).thenReturn(new Version(5,0,0)); - when(internalInterface.isCapabilitySupported(SystemCapabilityType.VIDEO_STREAMING)).thenReturn(true); + + SystemCapabilityManager systemCapabilityManager = mock(SystemCapabilityManager.class); + doReturn(systemCapabilityManager).when(internalInterface).getSystemCapabilityManager(); + when(systemCapabilityManager.isCapabilitySupported(SystemCapabilityType.VIDEO_STREAMING)).thenReturn(true); Answer onGetCapability = new Answer() { @Override @@ -186,7 +193,7 @@ public class VideoStreamManagerTests { } }; - doAnswer(onGetCapability).when(internalInterface).getCapability(eq(SystemCapabilityType.VIDEO_STREAMING), any(OnSystemCapabilityListener.class)); + doAnswer(onGetCapability).when(systemCapabilityManager).getCapability(eq(SystemCapabilityType.VIDEO_STREAMING), any(OnSystemCapabilityListener.class), anyBoolean()); Answer onAddServiceListener = new Answer() { @Override @@ -247,14 +254,7 @@ public class VideoStreamManagerTests { doAnswer(onRemoveServiceListener).when(internalInterface).removeServiceListener(eq(SessionType.NAV), any(ISdlServiceListener.class)); - when(internalInterface.startVideoStream(anyBoolean(), any(VideoStreamingParameters.class))).thenReturn(new IVideoStreamListener() { - @Override - public void sendFrame(byte[] data, int offset, int length, long presentationTimeUs) throws ArrayIndexOutOfBoundsException {} - @Override - public void sendFrame(ByteBuffer data, long presentationTimeUs) {} - }); - - when(internalInterface.getCapability(SystemCapabilityType.VIDEO_STREAMING)).thenReturn(TestValues.GENERAL_VIDEOSTREAMINGCAPABILITY); + when(systemCapabilityManager.getCapability(eq(SystemCapabilityType.VIDEO_STREAMING), any(OnSystemCapabilityListener.class), anyBoolean())).thenReturn(TestValues.GENERAL_VIDEOSTREAMINGCAPABILITY); final VideoStreamManager videoStreamManager = new VideoStreamManager(internalInterface); videoStreamManager.start(new CompletionListener() { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java b/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java index d9017bd69..c57743a2f 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/SdlConnection/SdlSession.java @@ -34,6 +34,8 @@ package com.smartdevicelink.SdlConnection; import android.content.Context; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.exception.SdlException; import com.smartdevicelink.protocol.SdlPacket; import com.smartdevicelink.protocol.SdlProtocol; @@ -50,6 +52,7 @@ import com.smartdevicelink.util.Version; import java.lang.ref.WeakReference; import java.util.concurrent.CopyOnWriteArrayList; +@RestrictTo(RestrictTo.Scope.LIBRARY) public class SdlSession extends BaseSdlSession { private static final String TAG = "SdlSession"; diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java index f7cc7b7a5..52b4db580 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/audio/AudioStreamManager.java @@ -40,6 +40,7 @@ import android.os.Handler; import android.os.Looper; import androidx.annotation.IntDef; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.SdlConnection.SdlSession; import com.smartdevicelink.managers.CompletionListener; @@ -185,6 +186,7 @@ public class AudioStreamManager extends BaseAudioStreamManager { * Creates a new object of AudioStreamManager * @param internalInterface The internal interface to the connected device. */ + @RestrictTo(RestrictTo.Scope.LIBRARY) public AudioStreamManager(@NonNull ISdl internalInterface, @NonNull Context context) { super(internalInterface); this.queue = new LinkedList<>(); @@ -218,25 +220,28 @@ public class AudioStreamManager extends BaseAudioStreamManager { } private void getAudioStreamingCapabilities(){ - internalInterface.getCapability(SystemCapabilityType.PCM_STREAMING, new OnSystemCapabilityListener() { - @Override - public void onCapabilityRetrieved(Object capability) { - if(capability != null && capability instanceof AudioPassThruCapabilities){ - audioStreamingCapabilities = (AudioPassThruCapabilities) capability; - checkState(); + if (internalInterface.getSystemCapabilityManager() != null) { + internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.PCM_STREAMING, new OnSystemCapabilityListener() { + @Override + public void onCapabilityRetrieved(Object capability) { + if (capability != null && capability instanceof AudioPassThruCapabilities) { + audioStreamingCapabilities = (AudioPassThruCapabilities) capability; + checkState(); + } } - } - @Override - public void onError(String info) { - DebugTool.logError(TAG, "Error retrieving audio streaming capability: " + info); - streamingStateMachine.transitionToState(StreamingStateMachine.ERROR); - transitionToState(ERROR); - } - }); + @Override + public void onError(String info) { + DebugTool.logError(TAG, "Error retrieving audio streaming capability: " + info); + streamingStateMachine.transitionToState(StreamingStateMachine.ERROR); + transitionToState(ERROR); + } + }, false); + } } @Override + @RestrictTo(RestrictTo.Scope.LIBRARY) public void dispose() { stopAudioStream(new CompletionListener() { @Override @@ -268,7 +273,10 @@ public class AudioStreamManager extends BaseAudioStreamManager { return; } - AudioPassThruCapabilities capabilities = (AudioPassThruCapabilities) internalInterface.getCapability(SystemCapabilityType.PCM_STREAMING); + AudioPassThruCapabilities capabilities = null; + if (internalInterface.getSystemCapabilityManager() != null) { + capabilities = (AudioPassThruCapabilities) internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.PCM_STREAMING, null, false); + } if (capabilities != null) { switch (capabilities.getSamplingRate()) { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/FileManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/FileManager.java index f03c24084..0efc3b6ff 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/FileManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/file/FileManager.java @@ -36,6 +36,7 @@ import android.content.Context; import android.content.res.Resources; import android.net.Uri; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.managers.file.filetypes.SdlFile; import com.smartdevicelink.proxy.interfaces.ISdl; @@ -71,6 +72,7 @@ public class FileManager extends BaseFileManager { * @param context an instances of Context interface to global information for application * @param fileManagerConfig an instance of the FileManagerConfig gives access to artworkRetryCount and fileRetryCount to let us if those file types can be re-upload if they fail */ + @RestrictTo(RestrictTo.Scope.LIBRARY) public FileManager(ISdl internalInterface, Context context, FileManagerConfig fileManagerConfig) { // setup super(internalInterface, fileManagerConfig); diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java index 48ab19960..06f992875 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java @@ -38,6 +38,8 @@ import android.content.Intent; import android.content.IntentFilter; import android.graphics.Bitmap; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.managers.BaseSubManager; import com.smartdevicelink.managers.CompletionListener; import com.smartdevicelink.protocol.enums.FunctionID; @@ -64,6 +66,7 @@ import java.lang.ref.WeakReference; * The LockscreenManager handles the logic of showing and hiding the lock screen.
* */ +@RestrictTo(RestrictTo.Scope.LIBRARY) public class LockScreenManager extends BaseSubManager { private static final String TAG = "LockScreenManager"; diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/permission/PermissionManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/permission/PermissionManager.java index e3a85bb1b..7430c3143 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/permission/PermissionManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/permission/PermissionManager.java @@ -33,6 +33,7 @@ package com.smartdevicelink.managers.permission; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.proxy.interfaces.ISdl; @@ -51,6 +52,7 @@ import com.smartdevicelink.proxy.interfaces.ISdl; * * @param internalInterface */ + @RestrictTo(RestrictTo.Scope.LIBRARY) public PermissionManager(@NonNull ISdl internalInterface) { super(internalInterface); } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java index 5065294a9..31c6da0b1 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/ScreenManager.java @@ -33,6 +33,7 @@ package com.smartdevicelink.managers.screen; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.proxy.interfaces.ISdl; @@ -44,6 +45,7 @@ import com.smartdevicelink.proxy.interfaces.ISdl; */ public class ScreenManager extends BaseScreenManager { + @RestrictTo(RestrictTo.Scope.LIBRARY) public ScreenManager(@NonNull ISdl internalInterface, @NonNull FileManager fileManager) { super(internalInterface, fileManager); } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SoftButtonManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SoftButtonManager.java index b7a2e2958..5499d3a5a 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SoftButtonManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SoftButtonManager.java @@ -33,6 +33,7 @@ package com.smartdevicelink.managers.screen; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.proxy.interfaces.ISdl; @@ -42,6 +43,7 @@ import com.smartdevicelink.proxy.interfaces.ISdl; * SoftButtonManager gives the developer the ability to control how soft buttons are displayed on the head unit.
* Note: This class must be accessed through the SdlManager->ScreenManager. Do not instantiate it by itself.
*/ +@RestrictTo(RestrictTo.Scope.LIBRARY) class SoftButtonManager extends BaseSoftButtonManager { /** diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SubscribeButtonManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SubscribeButtonManager.java index b5dafa5fd..9f08bef36 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SubscribeButtonManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/SubscribeButtonManager.java @@ -1,6 +1,8 @@ package com.smartdevicelink.managers.screen; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.proxy.interfaces.ISdl; /** @@ -9,6 +11,7 @@ import com.smartdevicelink.proxy.interfaces.ISdl; * Note: This class must be accessed through the SdlManager. Do not instantiate it by itself.
* */ +@RestrictTo(RestrictTo.Scope.LIBRARY) class SubscribeButtonManager extends BaseSubscribeButtonManager { SubscribeButtonManager(@NonNull ISdl internalInterface) { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/TextAndGraphicManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/TextAndGraphicManager.java index 3d05bc7cd..fe216ea5f 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/TextAndGraphicManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/TextAndGraphicManager.java @@ -33,6 +33,7 @@ package com.smartdevicelink.managers.screen; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.R; import com.smartdevicelink.managers.file.FileManager; @@ -46,6 +47,7 @@ import com.smartdevicelink.proxy.rpc.enums.FileType; * Note: This class must be accessed through the SdlManager. Do not instantiate it by itself.
* */ +@RestrictTo(RestrictTo.Scope.LIBRARY) class TextAndGraphicManager extends BaseTextAndGraphicManager { TextAndGraphicManager(@NonNull ISdl internalInterface, @NonNull FileManager fileManager, @NonNull SoftButtonManager softButtonManager) { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java index 32ff8c0eb..f0895fe22 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/choiceset/ChoiceSetManager.java @@ -33,6 +33,7 @@ package com.smartdevicelink.managers.screen.choiceset; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.proxy.interfaces.ISdl; @@ -42,6 +43,7 @@ import com.smartdevicelink.proxy.interfaces.ISdl; * ChoiceSetManager gives the developer the ability to control how soft choice sets are displayed on the head unit.
* Note: This class must be accessed through the SdlManager->ScreenManager. Do not instantiate it by itself.
*/ +@RestrictTo(RestrictTo.Scope.LIBRARY) public class ChoiceSetManager extends BaseChoiceSetManager { /** diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/MenuManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/MenuManager.java index 4a28a2792..d29312cdf 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/MenuManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/MenuManager.java @@ -32,6 +32,8 @@ package com.smartdevicelink.managers.screen.menu; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.managers.file.FileManager; import com.smartdevicelink.proxy.interfaces.ISdl; @@ -42,6 +44,7 @@ import com.smartdevicelink.proxy.interfaces.ISdl; * * The MenuManager takes MenuCell objects and creates and sends all necessary RPCs to build out a menu */ +@RestrictTo(RestrictTo.Scope.LIBRARY) public class MenuManager extends BaseMenuManager { public MenuManager(ISdl internalInterface, FileManager fileManager) { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommandManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommandManager.java index a892d3a2c..afde7404d 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommandManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/screen/menu/VoiceCommandManager.java @@ -32,6 +32,8 @@ package com.smartdevicelink.managers.screen.menu; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.proxy.interfaces.ISdl; /** @@ -41,6 +43,7 @@ import com.smartdevicelink.proxy.interfaces.ISdl; * * The VoiceCommandManager takes a List of VoiceCommand objects and sets them on the Head unit for you. */ +@RestrictTo(RestrictTo.Scope.LIBRARY) public class VoiceCommandManager extends BaseVoiceCommandManager { public VoiceCommandManager(ISdl internalInterface) { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/HapticInterfaceManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/HapticInterfaceManager.java index f1b9fd4f3..78b6bb03b 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/HapticInterfaceManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/HapticInterfaceManager.java @@ -65,7 +65,7 @@ class HapticInterfaceManager extends BaseHapticInterfaceManager { ISdl proxy = proxyHolder.get(); SendHapticData msg = new SendHapticData(); msg.setHapticRectData(userHapticData); - proxy.sendRPCRequest(msg); + proxy.sendRPC(msg); } } @@ -99,8 +99,10 @@ class HapticInterfaceManager extends BaseHapticInterfaceManager { if (proxyHolder.get() != null) { ISdl proxy = proxyHolder.get(); - VideoStreamingCapability videoStreamingCapability = (VideoStreamingCapability) - proxy.getCapability(SystemCapabilityType.VIDEO_STREAMING); + VideoStreamingCapability videoStreamingCapability = null; + if (proxy.getSystemCapabilityManager() != null) { + videoStreamingCapability = (VideoStreamingCapability) proxy.getSystemCapabilityManager().getCapability(SystemCapabilityType.VIDEO_STREAMING, null, false); + } if (videoStreamingCapability != null && videoStreamingCapability.getScale() != null) { scale = videoStreamingCapability.getScale(); } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java index a55cecb4d..77467f429 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java @@ -40,6 +40,8 @@ import android.view.Display; import android.view.InputDevice; import android.view.MotionEvent; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.SdlConnection.SdlSession; import com.smartdevicelink.encoder.VirtualDisplayEncoder; import com.smartdevicelink.managers.BaseSubManager; @@ -121,7 +123,10 @@ public class VideoStreamManager extends BaseVideoStreamManager { stateMachine.transitionToState(StreamingStateMachine.ERROR); return; } - VideoStreamingCapability capability = (VideoStreamingCapability) internalInterface.getCapability(SystemCapabilityType.VIDEO_STREAMING); + VideoStreamingCapability capability = null; + if (internalInterface.getSystemCapabilityManager() != null) { + capability = (VideoStreamingCapability) internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.VIDEO_STREAMING, null, false); + } if(capability != null && Boolean.TRUE.equals(capability.getIsHapticSpatialDataSupported())){ hapticManager = new HapticInterfaceManager(internalInterface); } @@ -188,6 +193,7 @@ public class VideoStreamManager extends BaseVideoStreamManager { }; // MANAGER APIs + @RestrictTo(RestrictTo.Scope.LIBRARY) public VideoStreamManager(ISdl internalInterface){ super(internalInterface); @@ -232,28 +238,33 @@ public class VideoStreamManager extends BaseVideoStreamManager { private void getVideoStreamingParams(){ if(internalInterface.getProtocolVersion().getMajor() >= 5) { - internalInterface.getCapability(SystemCapabilityType.VIDEO_STREAMING, new OnSystemCapabilityListener() { - @Override - public void onCapabilityRetrieved(Object capability) { - VideoStreamingParameters params = new VideoStreamingParameters(); - params.update((VideoStreamingCapability)capability, vehicleMake); //Streaming parameters are ready time to stream - VideoStreamManager.this.parameters = params; + if (internalInterface.getSystemCapabilityManager() != null) { + internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.VIDEO_STREAMING, new OnSystemCapabilityListener() { + @Override + public void onCapabilityRetrieved(Object capability) { + VideoStreamingParameters params = new VideoStreamingParameters(); + params.update((VideoStreamingCapability) capability, vehicleMake); //Streaming parameters are ready time to stream + VideoStreamManager.this.parameters = params; - checkState(); + checkState(); - } + } - @Override - public void onError(String info) { - DebugTool.logError(TAG, "Error retrieving video streaming capability: " + info); - stateMachine.transitionToState(StreamingStateMachine.ERROR); - transitionToState(ERROR); - } - }); + @Override + public void onError(String info) { + DebugTool.logError(TAG, "Error retrieving video streaming capability: " + info); + stateMachine.transitionToState(StreamingStateMachine.ERROR); + transitionToState(ERROR); + } + }, false); + } }else{ //We just use default video streaming params VideoStreamingParameters params = new VideoStreamingParameters(); - DisplayCapabilities dispCap = (DisplayCapabilities)internalInterface.getCapability(SystemCapabilityType.DISPLAY); + DisplayCapabilities dispCap = null; + if (internalInterface.getSystemCapabilityManager() != null) { + dispCap = (DisplayCapabilities) internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.DISPLAY, null, false); + } if(dispCap !=null){ params.setResolution(dispCap.getScreenParams().getImageResolution()); } @@ -277,31 +288,37 @@ public class VideoStreamManager extends BaseVideoStreamManager { this.context = new WeakReference<>(context); this.remoteDisplayClass = remoteDisplayClass; int majorProtocolVersion = internalInterface.getProtocolVersion().getMajor(); - if(majorProtocolVersion >= 5 && !internalInterface.isCapabilitySupported(SystemCapabilityType.VIDEO_STREAMING)){ + boolean isCapabilitySupported = internalInterface.getSystemCapabilityManager() != null && internalInterface.getSystemCapabilityManager().isCapabilitySupported(SystemCapabilityType.VIDEO_STREAMING); + if(majorProtocolVersion >= 5 && !isCapabilitySupported){ DebugTool.logError(TAG, "Video streaming not supported on this module"); stateMachine.transitionToState(StreamingStateMachine.ERROR); return; } if(parameters == null){ if(majorProtocolVersion >= 5) { - internalInterface.getCapability(SystemCapabilityType.VIDEO_STREAMING, new OnSystemCapabilityListener() { - @Override - public void onCapabilityRetrieved(Object capability) { - VideoStreamingParameters params = new VideoStreamingParameters(); - params.update((VideoStreamingCapability)capability, vehicleMake); //Streaming parameters are ready time to stream - startStreaming(params, encrypted); - } + if (internalInterface.getSystemCapabilityManager() != null) { + internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.VIDEO_STREAMING, new OnSystemCapabilityListener() { + @Override + public void onCapabilityRetrieved(Object capability) { + VideoStreamingParameters params = new VideoStreamingParameters(); + params.update((VideoStreamingCapability) capability, vehicleMake); //Streaming parameters are ready time to stream + startStreaming(params, encrypted); + } - @Override - public void onError(String info) { - stateMachine.transitionToState(StreamingStateMachine.ERROR); - DebugTool.logError(TAG, "Error retrieving video streaming capability: " + info); - } - }); + @Override + public void onError(String info) { + stateMachine.transitionToState(StreamingStateMachine.ERROR); + DebugTool.logError(TAG, "Error retrieving video streaming capability: " + info); + } + }, false); + } }else{ //We just use default video streaming params VideoStreamingParameters params = new VideoStreamingParameters(); - DisplayCapabilities dispCap = (DisplayCapabilities)internalInterface.getCapability(SystemCapabilityType.DISPLAY); + DisplayCapabilities dispCap = null; + if (internalInterface.getSystemCapabilityManager() != null) { + dispCap = (DisplayCapabilities) internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.DISPLAY, null, false); + } if(dispCap !=null){ params.setResolution(dispCap.getScreenParams().getImageResolution()); } @@ -378,6 +395,7 @@ public class VideoStreamManager extends BaseVideoStreamManager { * Stops streaming, ends video streaming service and removes service listeners. */ @Override + @RestrictTo(RestrictTo.Scope.LIBRARY) public void dispose(){ stopStreaming(); @@ -465,14 +483,20 @@ public class VideoStreamManager extends BaseVideoStreamManager { //Get touch scalars ImageResolution resolution = null; if(internalInterface.getProtocolVersion().getMajor() >= 5){ //At this point we should already have the capability - VideoStreamingCapability capability = (VideoStreamingCapability) internalInterface.getCapability(SystemCapabilityType.VIDEO_STREAMING); + VideoStreamingCapability capability = null; + if (internalInterface.getSystemCapabilityManager() != null) { + capability = (VideoStreamingCapability) internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.VIDEO_STREAMING, null, false); + } if(capability != null){ resolution = capability.getPreferredResolution(); } } if(resolution == null){ //Either the protocol version is too low to access video streaming caps, or they were null - DisplayCapabilities dispCap = (DisplayCapabilities) internalInterface.getCapability(SystemCapabilityType.DISPLAY); + DisplayCapabilities dispCap = null; + if (internalInterface.getSystemCapabilityManager() != null) { + dispCap = (DisplayCapabilities) internalInterface.getSystemCapabilityManager().getCapability(SystemCapabilityType.DISPLAY, null, false); + } if (dispCap != null) { resolution = (dispCap.getScreenParams().getImageResolution()); } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java index 21a34c695..723af1939 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java @@ -3,9 +3,12 @@ package com.smartdevicelink.protocol; import android.os.Parcel; import android.os.Parcelable; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.transport.utl.TransportRecord; import com.smartdevicelink.util.DebugTool; +@RestrictTo(RestrictTo.Scope.LIBRARY) public class SdlPacket extends BaseSdlPacket implements Parcelable { private static final String TAG = "SdlPacket"; private static final int EXTRA_PARCEL_DATA_LENGTH = 24; diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java index 9825900e9..fd6ac275f 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlProtocol.java @@ -33,6 +33,7 @@ package com.smartdevicelink.protocol; import androidx.annotation.NonNull; +import androidx.annotation.RestrictTo; import com.smartdevicelink.protocol.enums.SessionType; import com.smartdevicelink.transport.MultiplexTransportConfig; @@ -45,6 +46,7 @@ import java.util.Collections; @SuppressWarnings("WeakerAccess") +@RestrictTo(RestrictTo.Scope.LIBRARY) public class SdlProtocol extends SdlProtocolBase { private static final String TAG ="SdlProtocol"; diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/HeartbeatMonitor.java b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/HeartbeatMonitor.java index ce314595d..dd65cc3a4 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/HeartbeatMonitor.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/HeartbeatMonitor.java @@ -1,41 +1,43 @@ -/* - * Copyright (c) 2017 - 2019, SmartDeviceLink Consortium, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the SmartDeviceLink Consortium, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ +/* + * Copyright (c) 2017 - 2019, SmartDeviceLink Consortium, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the SmartDeviceLink Consortium, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package com.smartdevicelink.protocol.heartbeat; import android.os.Handler; import android.os.Looper; +import androidx.annotation.RestrictTo; +@RestrictTo(RestrictTo.Scope.LIBRARY) public class HeartbeatMonitor implements IHeartbeatMonitor { public static final int HEARTBEAT_INTERVAL = 5000; diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitor.java b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitor.java index 2c98413d7..6ad5fb001 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitor.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitor.java @@ -1,37 +1,39 @@ -/* - * Copyright (c) 2017 - 2019, SmartDeviceLink Consortium, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the SmartDeviceLink Consortium, Inc. nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ +/* + * Copyright (c) 2017 - 2019, SmartDeviceLink Consortium, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the SmartDeviceLink Consortium, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ package com.smartdevicelink.protocol.heartbeat; +import androidx.annotation.RestrictTo; +@RestrictTo(RestrictTo.Scope.LIBRARY) public interface IHeartbeatMonitor { /** * Starts the monitor. If the monitor is already started, nothing happens. diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitorListener.java b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitorListener.java index da814f3ee..26f3535b2 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitorListener.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/protocol/heartbeat/IHeartbeatMonitorListener.java @@ -29,24 +29,28 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ -package com.smartdevicelink.protocol.heartbeat; - -/** - * Listener (aka delegate) that actually knows how to work with the outside - * world. - */ -public interface IHeartbeatMonitorListener { - /** - * The listener should create and send a heartbeat message. - * - * @param monitor the caller - */ - public void sendHeartbeat(IHeartbeatMonitor monitor); - - /** - * Notifies the listener that the heartbeat timed out. - * - * @param monitor the caller - */ - public void heartbeatTimedOut(IHeartbeatMonitor monitor); -} +package com.smartdevicelink.protocol.heartbeat; + +import androidx.annotation.RestrictTo; + +/** + * Listener (aka delegate) that actually knows how to work with the outside + * world. + */ + +@RestrictTo(RestrictTo.Scope.LIBRARY) +public interface IHeartbeatMonitorListener { + /** + * The listener should create and send a heartbeat message. + * + * @param monitor the caller + */ + public void sendHeartbeat(IHeartbeatMonitor monitor); + + /** + * Notifies the listener that the heartbeat timed out. + * + * @param monitor the caller + */ + public void heartbeatTimedOut(IHeartbeatMonitor monitor); +} diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/streaming/StreamPacketizer.java b/android/sdl_android/src/main/java/com/smartdevicelink/streaming/StreamPacketizer.java index 1a1ee4156..24608ecfe 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/streaming/StreamPacketizer.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/streaming/StreamPacketizer.java @@ -31,6 +31,8 @@ */ package com.smartdevicelink.streaming; +import androidx.annotation.RestrictTo; + import com.smartdevicelink.SdlConnection.SdlSession; import com.smartdevicelink.managers.CompletionListener; import com.smartdevicelink.protocol.ProtocolMessage; @@ -45,6 +47,7 @@ import java.nio.ByteBuffer; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +@RestrictTo(RestrictTo.Scope.LIBRARY) public class StreamPacketizer extends AbstractPacketizer implements IVideoStreamListener, IAudioStreamListener, Runnable{ public final static String TAG = "StreamPacketizer"; diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlBroadcastReceiver.java b/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlBroadcastReceiver.java index 7d7a3d676..bad3ccc2e 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlBroadcastReceiver.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/transport/SdlBroadcastReceiver.java @@ -51,6 +51,8 @@ import android.os.Looper; import android.os.Parcelable; import android.util.AndroidRuntimeException; +import androidx.annotation.CallSuper; + import com.smartdevicelink.R; import com.smartdevicelink.transport.RouterServiceValidator.TrustedListCallback; import com.smartdevicelink.transport.enums.TransportType; @@ -96,6 +98,7 @@ public abstract class SdlBroadcastReceiver extends BroadcastReceiver{ } @Override + @CallSuper public void onReceive(Context context, Intent intent) { //Log.i(TAG, "Sdl Receiver Activated"); final String action = intent.getAction(); -- cgit v1.2.1