diff options
author | Bilal Alsharifi <599206+bilal-alsharifi@users.noreply.github.com> | 2020-04-09 15:32:56 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-09 15:32:56 -0400 |
commit | 7bf138ffe0bf858f2de06696e04f5da7024d24d3 (patch) | |
tree | 7fdf8f71dcc047f8401c390de574887bb98cfe55 /android/sdl_android/src | |
parent | eba22e7520e6acacae4a2a8c7de560167f9cfd05 (diff) | |
parent | f119e40af55c2ce1e5014f6c1d647b2fce7f68ff (diff) | |
download | sdl_android-7bf138ffe0bf858f2de06696e04f5da7024d24d3.tar.gz |
Merge pull request #1321 from smartdevicelink/feature/scm_align_part3
Align SystemCapabilityManager with iOS (part3)
Diffstat (limited to 'android/sdl_android/src')
4 files changed, 81 insertions, 10 deletions
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java index 489964d7e..87bed3d1b 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java @@ -22,6 +22,7 @@ import com.smartdevicelink.proxy.rpc.DisplayCapability; import com.smartdevicelink.proxy.rpc.GetSystemCapability; import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse; import com.smartdevicelink.proxy.rpc.HMICapabilities; +import com.smartdevicelink.proxy.rpc.OnHMIStatus; import com.smartdevicelink.proxy.rpc.OnSystemCapabilityUpdated; import com.smartdevicelink.proxy.rpc.PhoneCapability; import com.smartdevicelink.proxy.rpc.PresetBankCapabilities; @@ -34,7 +35,9 @@ import com.smartdevicelink.proxy.rpc.VideoStreamingCapability; import com.smartdevicelink.proxy.rpc.WindowCapability; import com.smartdevicelink.proxy.rpc.WindowTypeCapabilities; import com.smartdevicelink.proxy.rpc.enums.AppServiceType; +import com.smartdevicelink.proxy.rpc.enums.AudioStreamingState; import com.smartdevicelink.proxy.rpc.enums.DisplayType; +import com.smartdevicelink.proxy.rpc.enums.HMILevel; import com.smartdevicelink.proxy.rpc.enums.HmiZoneCapabilities; import com.smartdevicelink.proxy.rpc.enums.ImageType; import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat; @@ -44,6 +47,7 @@ import com.smartdevicelink.proxy.rpc.enums.Result; import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason; import com.smartdevicelink.proxy.rpc.enums.SpeechCapabilities; import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType; +import com.smartdevicelink.proxy.rpc.enums.SystemContext; import com.smartdevicelink.proxy.rpc.enums.WindowType; import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener; import com.smartdevicelink.proxy.rpc.listeners.OnRPCListener; @@ -67,6 +71,7 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -216,6 +221,11 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { request.getOnRPCResponseListener().onResponse(CorrelationIdGenerator.generateId(), response); } } + + @Override + public void addOnRPCListener(FunctionID messageId, OnRPCListener listener) { + listener.onReceived(new OnHMIStatus(HMILevel.HMI_FULL, AudioStreamingState.NOT_AUDIBLE, SystemContext.SYSCTXT_MAIN)); + } }); systemCapabilityManager.getCapability(SystemCapabilityType.VIDEO_STREAMING, new OnSystemCapabilityListener() { @@ -234,6 +244,21 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { }); } + private Answer<Void> createOnHMIStatusAnswer(final HMILevel hmiLevel){ + Answer<Void> onHMIStatusAnswer = new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) { + Object[] args = invocation.getArguments(); + OnRPCListener onHMIStatusListener = (OnRPCListener) args[1]; + OnHMIStatus onHMIStatusFakeNotification = new OnHMIStatus(); + onHMIStatusFakeNotification.setHmiLevel(hmiLevel); + onHMIStatusListener.onReceived(onHMIStatusFakeNotification); + return null; + } + }; + return onHMIStatusAnswer; + } + private Answer<Void> createOnSendGetSystemCapabilityAnswer (final boolean success, final Boolean subscribe) { Answer<Void> onSendGetSystemCapabilityAnswer = new Answer<Void>() { @Override @@ -266,6 +291,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { // Test case 1 (capability not cached, listener not null, forceUpdate false) internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); scm = new SystemCapabilityManager(internalInterface); onSystemCapabilityListener = mock(OnSystemCapabilityListener.class); doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class)); @@ -278,6 +304,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { // Test case 2 (capability cached, listener not null, forceUpdate true) internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); scm = new SystemCapabilityManager(internalInterface); onSystemCapabilityListener = mock(OnSystemCapabilityListener.class); doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class)); @@ -290,6 +317,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { // Test case 3 (capability cached, listener null, forceUpdate true) internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); scm = new SystemCapabilityManager(internalInterface); onSystemCapabilityListener = null; doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class)); @@ -301,6 +329,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { // Test case 4 (capability cached, listener null, forceUpdate false) internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); scm = new SystemCapabilityManager(internalInterface); onSystemCapabilityListener = null; doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class)); @@ -310,10 +339,25 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { verify(internalInterface, times(0)).sendRPC(any(GetSystemCapability.class)); } + public void testGetCapabilityHmiNone() { + ISdl internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_NONE)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); + SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface); + OnSystemCapabilityListener onSystemCapabilityListener = mock(OnSystemCapabilityListener.class); + doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class)); + scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, null); + VideoStreamingCapability retrievedCapability = (VideoStreamingCapability) scm.getCapability(SystemCapabilityType.VIDEO_STREAMING, onSystemCapabilityListener, false); + assertNull(retrievedCapability); + verify(internalInterface, times(0)).sendRPC(any(GetSystemCapability.class)); + verify(onSystemCapabilityListener, times(0)).onCapabilityRetrieved(any(Object.class)); + verify(onSystemCapabilityListener, times(1)).onError(any(String.class)); + } + public void testAddOnSystemCapabilityListenerWithSubscriptionsSupportedAndCapabilityCached() { SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(6, 0); // This version supports capability subscriptions sdlMsgVersion.setPatchVersion(0); ISdl internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion); SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface); scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, videoStreamingCapability); @@ -359,6 +403,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(6, 0); // This version supports capability subscriptions sdlMsgVersion.setPatchVersion(0); ISdl internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion); SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface); scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, null); @@ -404,6 +449,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(5, 0); // This version doesn't support capability subscriptions sdlMsgVersion.setPatchVersion(0); ISdl internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion); SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface); scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, videoStreamingCapability); @@ -449,6 +495,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(5, 0); // This version doesn't support capability subscriptions sdlMsgVersion.setPatchVersion(0); ISdl internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion); SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface); scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, null); @@ -494,6 +541,7 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(5, 0); // This version doesn't support capability subscriptions sdlMsgVersion.setPatchVersion(0); ISdl internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion); SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface); scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, videoStreamingCapability); @@ -586,8 +634,8 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { // Test case 1 (capability cached, listener not null, forceUpdate true) - // Force updating DISPLAYS capability should call onError() internalInterface = mock(ISdl.class); + doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class)); scm = new SystemCapabilityManager(internalInterface); onSystemCapabilityListener = mock(OnSystemCapabilityListener.class); doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class)); @@ -595,8 +643,8 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { retrievedCapability = (DisplayCapabilities) scm.getCapability(SystemCapabilityType.DISPLAYS, onSystemCapabilityListener, true); assertNotNull(retrievedCapability); verify(internalInterface, times(0)).sendRPC(any(GetSystemCapability.class)); - verify(onSystemCapabilityListener, times(0)).onCapabilityRetrieved(any(Object.class)); - verify(onSystemCapabilityListener, times(1)).onError(any(String.class)); + verify(onSystemCapabilityListener, times(1)).onCapabilityRetrieved(any(Object.class)); + verify(onSystemCapabilityListener, times(0)).onError(any(String.class)); // Test case 2 (Add listener) @@ -683,7 +731,6 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { } public void testOnSystemCapabilityUpdated(){ - InternalSDLInterface iSDL = new InternalSDLInterface(); String baseName = "NavTest", baseID = "37F98053AE"; AppServiceCapability capability1 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, null, true, null); @@ -948,13 +995,21 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { public Object getCapability(SystemCapabilityType systemCapabilityType){return null;} @Override - public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) { } + public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) { + } @Override - public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse(){return null;} + public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse() { + return null; + } + + @Override + public Object getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener, boolean forceUpdate) { + return null; + } @Override - public SdlMsgVersion getSdlMsgVersion(){ + public SdlMsgVersion getSdlMsgVersion() { return null; } @@ -1001,6 +1056,4 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 { @Override public void startRPCEncryption() {} } - - } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java index f87839254..b0ff164cd 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java @@ -872,6 +872,14 @@ public class SdlManager extends BaseSdlManager{ } @Override + public Object getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener, boolean forceUpdate) { + if (proxy != null && proxy.getSystemCapabilityManager() != null) { + return proxy.getSystemCapabilityManager().getCapability(systemCapabilityType, scListener, forceUpdate); + } + return null; + } + + @Override public boolean isCapabilitySupported(SystemCapabilityType systemCapabilityType){ return proxy.isCapabilitySupported(systemCapabilityType); } 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 2741ca62c..090ea7c80 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 @@ -154,6 +154,9 @@ public class VideoStreamManager extends BaseVideoStreamManager { } HMILevel prevHMILevel = hmiLevel; hmiLevel = onHMIStatus.getHmiLevel(); + if (!HMILevel.HMI_NONE.equals(hmiLevel) && VideoStreamManager.this.parameters == null) { + getVideoStreamingParams(); + } if (streamableLevels.contains(hmiLevel)) { checkState(); } @@ -201,7 +204,6 @@ public class VideoStreamManager extends BaseVideoStreamManager { @Override public void start(CompletionListener listener) { isTransportAvailable = internalInterface.isTransportForServiceAvailable(SessionType.NAV); - getVideoStreamingParams(); checkState(); super.start(listener); } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java index c69011e13..ad9969163 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java @@ -455,6 +455,14 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase> }
@Override
+ public Object getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener, boolean forceUpdate) {
+ if (_systemCapabilityManager != null) {
+ return _systemCapabilityManager.getCapability(systemCapabilityType, scListener, forceUpdate);
+ }
+ return null;
+ }
+
+ @Override
public SdlMsgVersion getSdlMsgVersion(){
try {
return SdlProxyBase.this.getSdlMsgVersion();
|