Skip to content

Commit 7bf138f

Browse files
Merge pull request #1321 from smartdevicelink/feature/scm_align_part3
Align SystemCapabilityManager with iOS (part3)
2 parents eba22e7 + f119e40 commit 7bf138f

7 files changed

Lines changed: 228 additions & 96 deletions

File tree

android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.smartdevicelink.proxy.rpc.GetSystemCapability;
2323
import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse;
2424
import com.smartdevicelink.proxy.rpc.HMICapabilities;
25+
import com.smartdevicelink.proxy.rpc.OnHMIStatus;
2526
import com.smartdevicelink.proxy.rpc.OnSystemCapabilityUpdated;
2627
import com.smartdevicelink.proxy.rpc.PhoneCapability;
2728
import com.smartdevicelink.proxy.rpc.PresetBankCapabilities;
@@ -34,7 +35,9 @@
3435
import com.smartdevicelink.proxy.rpc.WindowCapability;
3536
import com.smartdevicelink.proxy.rpc.WindowTypeCapabilities;
3637
import com.smartdevicelink.proxy.rpc.enums.AppServiceType;
38+
import com.smartdevicelink.proxy.rpc.enums.AudioStreamingState;
3739
import com.smartdevicelink.proxy.rpc.enums.DisplayType;
40+
import com.smartdevicelink.proxy.rpc.enums.HMILevel;
3841
import com.smartdevicelink.proxy.rpc.enums.HmiZoneCapabilities;
3942
import com.smartdevicelink.proxy.rpc.enums.ImageType;
4043
import com.smartdevicelink.proxy.rpc.enums.MediaClockFormat;
@@ -44,6 +47,7 @@
4447
import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason;
4548
import com.smartdevicelink.proxy.rpc.enums.SpeechCapabilities;
4649
import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
50+
import com.smartdevicelink.proxy.rpc.enums.SystemContext;
4751
import com.smartdevicelink.proxy.rpc.enums.WindowType;
4852
import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener;
4953
import com.smartdevicelink.proxy.rpc.listeners.OnRPCListener;
@@ -67,6 +71,7 @@
6771
import java.util.concurrent.CopyOnWriteArrayList;
6872

6973
import static org.mockito.ArgumentMatchers.any;
74+
import static org.mockito.ArgumentMatchers.eq;
7075
import static org.mockito.Mockito.doAnswer;
7176
import static org.mockito.Mockito.mock;
7277
import static org.mockito.Mockito.times;
@@ -216,6 +221,11 @@ public void sendRPC(RPCMessage message) {
216221
request.getOnRPCResponseListener().onResponse(CorrelationIdGenerator.generateId(), response);
217222
}
218223
}
224+
225+
@Override
226+
public void addOnRPCListener(FunctionID messageId, OnRPCListener listener) {
227+
listener.onReceived(new OnHMIStatus(HMILevel.HMI_FULL, AudioStreamingState.NOT_AUDIBLE, SystemContext.SYSCTXT_MAIN));
228+
}
219229
});
220230

221231
systemCapabilityManager.getCapability(SystemCapabilityType.VIDEO_STREAMING, new OnSystemCapabilityListener() {
@@ -234,6 +244,21 @@ public void onError(String info) {
234244
});
235245
}
236246

247+
private Answer<Void> createOnHMIStatusAnswer(final HMILevel hmiLevel){
248+
Answer<Void> onHMIStatusAnswer = new Answer<Void>() {
249+
@Override
250+
public Void answer(InvocationOnMock invocation) {
251+
Object[] args = invocation.getArguments();
252+
OnRPCListener onHMIStatusListener = (OnRPCListener) args[1];
253+
OnHMIStatus onHMIStatusFakeNotification = new OnHMIStatus();
254+
onHMIStatusFakeNotification.setHmiLevel(hmiLevel);
255+
onHMIStatusListener.onReceived(onHMIStatusFakeNotification);
256+
return null;
257+
}
258+
};
259+
return onHMIStatusAnswer;
260+
}
261+
237262
private Answer<Void> createOnSendGetSystemCapabilityAnswer (final boolean success, final Boolean subscribe) {
238263
Answer<Void> onSendGetSystemCapabilityAnswer = new Answer<Void>() {
239264
@Override
@@ -266,6 +291,7 @@ public void testGetCapability() {
266291

267292
// Test case 1 (capability not cached, listener not null, forceUpdate false)
268293
internalInterface = mock(ISdl.class);
294+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
269295
scm = new SystemCapabilityManager(internalInterface);
270296
onSystemCapabilityListener = mock(OnSystemCapabilityListener.class);
271297
doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class));
@@ -278,6 +304,7 @@ public void testGetCapability() {
278304

279305
// Test case 2 (capability cached, listener not null, forceUpdate true)
280306
internalInterface = mock(ISdl.class);
307+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
281308
scm = new SystemCapabilityManager(internalInterface);
282309
onSystemCapabilityListener = mock(OnSystemCapabilityListener.class);
283310
doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class));
@@ -290,6 +317,7 @@ public void testGetCapability() {
290317

291318
// Test case 3 (capability cached, listener null, forceUpdate true)
292319
internalInterface = mock(ISdl.class);
320+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
293321
scm = new SystemCapabilityManager(internalInterface);
294322
onSystemCapabilityListener = null;
295323
doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class));
@@ -301,6 +329,7 @@ public void testGetCapability() {
301329

302330
// Test case 4 (capability cached, listener null, forceUpdate false)
303331
internalInterface = mock(ISdl.class);
332+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
304333
scm = new SystemCapabilityManager(internalInterface);
305334
onSystemCapabilityListener = null;
306335
doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class));
@@ -310,10 +339,25 @@ public void testGetCapability() {
310339
verify(internalInterface, times(0)).sendRPC(any(GetSystemCapability.class));
311340
}
312341

342+
public void testGetCapabilityHmiNone() {
343+
ISdl internalInterface = mock(ISdl.class);
344+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_NONE)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
345+
SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface);
346+
OnSystemCapabilityListener onSystemCapabilityListener = mock(OnSystemCapabilityListener.class);
347+
doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class));
348+
scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, null);
349+
VideoStreamingCapability retrievedCapability = (VideoStreamingCapability) scm.getCapability(SystemCapabilityType.VIDEO_STREAMING, onSystemCapabilityListener, false);
350+
assertNull(retrievedCapability);
351+
verify(internalInterface, times(0)).sendRPC(any(GetSystemCapability.class));
352+
verify(onSystemCapabilityListener, times(0)).onCapabilityRetrieved(any(Object.class));
353+
verify(onSystemCapabilityListener, times(1)).onError(any(String.class));
354+
}
355+
313356
public void testAddOnSystemCapabilityListenerWithSubscriptionsSupportedAndCapabilityCached() {
314357
SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(6, 0); // This version supports capability subscriptions
315358
sdlMsgVersion.setPatchVersion(0);
316359
ISdl internalInterface = mock(ISdl.class);
360+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
317361
when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion);
318362
SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface);
319363
scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, videoStreamingCapability);
@@ -359,6 +403,7 @@ public void testAddOnSystemCapabilityListenerWithSubscriptionsSupportedAndCapabi
359403
SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(6, 0); // This version supports capability subscriptions
360404
sdlMsgVersion.setPatchVersion(0);
361405
ISdl internalInterface = mock(ISdl.class);
406+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
362407
when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion);
363408
SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface);
364409
scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, null);
@@ -404,6 +449,7 @@ public void testAddOnSystemCapabilityListenerWithSubscriptionsNotSupportedAndCap
404449
SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(5, 0); // This version doesn't support capability subscriptions
405450
sdlMsgVersion.setPatchVersion(0);
406451
ISdl internalInterface = mock(ISdl.class);
452+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
407453
when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion);
408454
SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface);
409455
scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, videoStreamingCapability);
@@ -449,6 +495,7 @@ public void testAddOnSystemCapabilityListenerWithSubscriptionsNotSupportedAndCap
449495
SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(5, 0); // This version doesn't support capability subscriptions
450496
sdlMsgVersion.setPatchVersion(0);
451497
ISdl internalInterface = mock(ISdl.class);
498+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
452499
when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion);
453500
SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface);
454501
scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, null);
@@ -494,6 +541,7 @@ public void testAddOnSystemCapabilityListenerThenGetCapabilityWhenSubscriptionsA
494541
SdlMsgVersion sdlMsgVersion = new SdlMsgVersion(5, 0); // This version doesn't support capability subscriptions
495542
sdlMsgVersion.setPatchVersion(0);
496543
ISdl internalInterface = mock(ISdl.class);
544+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
497545
when(internalInterface.getSdlMsgVersion()).thenReturn(sdlMsgVersion);
498546
SystemCapabilityManager scm = new SystemCapabilityManager(internalInterface);
499547
scm.setCapability(SystemCapabilityType.VIDEO_STREAMING, videoStreamingCapability);
@@ -586,17 +634,17 @@ public void testGetAndAddListenerForDisplaysCapability() {
586634

587635

588636
// Test case 1 (capability cached, listener not null, forceUpdate true)
589-
// Force updating DISPLAYS capability should call onError()
590637
internalInterface = mock(ISdl.class);
638+
doAnswer(createOnHMIStatusAnswer(HMILevel.HMI_FULL)).when(internalInterface).addOnRPCListener(eq(FunctionID.ON_HMI_STATUS), any(OnRPCListener.class));
591639
scm = new SystemCapabilityManager(internalInterface);
592640
onSystemCapabilityListener = mock(OnSystemCapabilityListener.class);
593641
doAnswer(createOnSendGetSystemCapabilityAnswer(true, null)).when(internalInterface).sendRPC(any(GetSystemCapability.class));
594642
scm.setCapability(SystemCapabilityType.DISPLAYS, new DisplayCapabilities());
595643
retrievedCapability = (DisplayCapabilities) scm.getCapability(SystemCapabilityType.DISPLAYS, onSystemCapabilityListener, true);
596644
assertNotNull(retrievedCapability);
597645
verify(internalInterface, times(0)).sendRPC(any(GetSystemCapability.class));
598-
verify(onSystemCapabilityListener, times(0)).onCapabilityRetrieved(any(Object.class));
599-
verify(onSystemCapabilityListener, times(1)).onError(any(String.class));
646+
verify(onSystemCapabilityListener, times(1)).onCapabilityRetrieved(any(Object.class));
647+
verify(onSystemCapabilityListener, times(0)).onError(any(String.class));
600648

601649

602650
// Test case 2 (Add listener)
@@ -683,7 +731,6 @@ public void testOnSystemCapabilityUpdatedForDISPLAYS() {
683731
}
684732

685733
public void testOnSystemCapabilityUpdated(){
686-
687734
InternalSDLInterface iSDL = new InternalSDLInterface();
688735
String baseName = "NavTest", baseID = "37F98053AE";
689736
AppServiceCapability capability1 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, null, true, null);
@@ -948,13 +995,21 @@ public boolean removeOnRPCListener(FunctionID messageId, OnRPCListener listener)
948995
public Object getCapability(SystemCapabilityType systemCapabilityType){return null;}
949996

950997
@Override
951-
public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) { }
998+
public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener) {
999+
}
9521000

9531001
@Override
954-
public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse(){return null;}
1002+
public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse() {
1003+
return null;
1004+
}
1005+
1006+
@Override
1007+
public Object getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener, boolean forceUpdate) {
1008+
return null;
1009+
}
9551010

9561011
@Override
957-
public SdlMsgVersion getSdlMsgVersion(){
1012+
public SdlMsgVersion getSdlMsgVersion() {
9581013
return null;
9591014
}
9601015

@@ -1001,6 +1056,4 @@ public void startAudioService(boolean encrypted){}
10011056
@Override
10021057
public void startRPCEncryption() {}
10031058
}
1004-
1005-
10061059
}

android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManager.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,14 @@ public RegisterAppInterfaceResponse getRegisterAppInterfaceResponse() {
871871
return proxy.getRegisterAppInterfaceResponse();
872872
}
873873

874+
@Override
875+
public Object getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener, boolean forceUpdate) {
876+
if (proxy != null && proxy.getSystemCapabilityManager() != null) {
877+
return proxy.getSystemCapabilityManager().getCapability(systemCapabilityType, scListener, forceUpdate);
878+
}
879+
return null;
880+
}
881+
874882
@Override
875883
public boolean isCapabilitySupported(SystemCapabilityType systemCapabilityType){
876884
return proxy.isCapabilitySupported(systemCapabilityType);

android/sdl_android/src/main/java/com/smartdevicelink/managers/video/VideoStreamManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ public void onNotified(RPCNotification notification) {
154154
}
155155
HMILevel prevHMILevel = hmiLevel;
156156
hmiLevel = onHMIStatus.getHmiLevel();
157+
if (!HMILevel.HMI_NONE.equals(hmiLevel) && VideoStreamManager.this.parameters == null) {
158+
getVideoStreamingParams();
159+
}
157160
if (streamableLevels.contains(hmiLevel)) {
158161
checkState();
159162
}
@@ -201,7 +204,6 @@ public VideoStreamManager(ISdl internalInterface){
201204
@Override
202205
public void start(CompletionListener listener) {
203206
isTransportAvailable = internalInterface.isTransportForServiceAvailable(SessionType.NAV);
204-
getVideoStreamingParams();
205207
checkState();
206208
super.start(listener);
207209
}

android/sdl_android/src/main/java/com/smartdevicelink/proxy/SdlProxyBase.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,14 @@ public void getCapability(SystemCapabilityType systemCapabilityType, OnSystemCap
454454
SdlProxyBase.this.getCapability(systemCapabilityType, scListener);
455455
}
456456

457+
@Override
458+
public Object getCapability(SystemCapabilityType systemCapabilityType, OnSystemCapabilityListener scListener, boolean forceUpdate) {
459+
if (_systemCapabilityManager != null) {
460+
return _systemCapabilityManager.getCapability(systemCapabilityType, scListener, forceUpdate);
461+
}
462+
return null;
463+
}
464+
457465
@Override
458466
public SdlMsgVersion getSdlMsgVersion(){
459467
try {

0 commit comments

Comments
 (0)