Skip to content

Commit a652198

Browse files
committed
Merge branch 'develop' into bugfix/issue_1400
2 parents d679c2c + 3a2800d commit a652198

14 files changed

Lines changed: 800 additions & 407 deletions

File tree

android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import android.util.Log;
1313

1414
import com.smartdevicelink.managers.CompletionListener;
15+
import com.smartdevicelink.managers.screen.OnButtonListener;
1516
import com.smartdevicelink.managers.SdlManager;
1617
import com.smartdevicelink.managers.SdlManagerListener;
1718
import com.smartdevicelink.managers.file.filetypes.SdlArtwork;
@@ -27,9 +28,12 @@
2728
import com.smartdevicelink.proxy.RPCNotification;
2829
import com.smartdevicelink.proxy.TTSChunkFactory;
2930
import com.smartdevicelink.proxy.rpc.Alert;
31+
import com.smartdevicelink.proxy.rpc.OnButtonEvent;
32+
import com.smartdevicelink.proxy.rpc.OnButtonPress;
3033
import com.smartdevicelink.proxy.rpc.OnHMIStatus;
3134
import com.smartdevicelink.proxy.rpc.Speak;
3235
import com.smartdevicelink.proxy.rpc.enums.AppHMIType;
36+
import com.smartdevicelink.proxy.rpc.enums.ButtonName;
3337
import com.smartdevicelink.proxy.rpc.enums.FileType;
3438
import com.smartdevicelink.proxy.rpc.enums.HMILevel;
3539
import com.smartdevicelink.proxy.rpc.enums.InteractionMode;
@@ -183,6 +187,7 @@ public void onNotified(RPCNotification notification) {
183187
performWelcomeSpeak();
184188
performWelcomeShow();
185189
preloadChoices();
190+
subscribeToButtons();
186191
}
187192
}
188193
});
@@ -370,6 +375,36 @@ public void onComplete(boolean success) {
370375
});
371376
}
372377

378+
/**
379+
* Attempts to Subscribe to all preset buttons
380+
*/
381+
private void subscribeToButtons() {
382+
ButtonName[] buttonNames = {ButtonName.PLAY_PAUSE, ButtonName.SEEKLEFT, ButtonName.SEEKRIGHT, ButtonName.AC_MAX, ButtonName.AC, ButtonName.RECIRCULATE,
383+
ButtonName.FAN_UP, ButtonName.FAN_DOWN, ButtonName.TEMP_UP, ButtonName.TEMP_DOWN, ButtonName.FAN_DOWN, ButtonName.DEFROST_MAX, ButtonName.DEFROST_REAR, ButtonName.DEFROST,
384+
ButtonName.UPPER_VENT, ButtonName.LOWER_VENT, ButtonName.VOLUME_UP, ButtonName.VOLUME_DOWN, ButtonName.EJECT, ButtonName.SOURCE, ButtonName.SHUFFLE, ButtonName.REPEAT};
385+
386+
OnButtonListener onButtonListener = new OnButtonListener() {
387+
@Override
388+
public void onPress(ButtonName buttonName, OnButtonPress buttonPress) {
389+
sdlManager.getScreenManager().setTextField1(buttonName + " pressed");
390+
}
391+
392+
@Override
393+
public void onEvent(ButtonName buttonName, OnButtonEvent buttonEvent) {
394+
sdlManager.getScreenManager().setTextField2(buttonName + " " + buttonEvent.getButtonEventMode());
395+
}
396+
397+
@Override
398+
public void onError(String info) {
399+
Log.i(TAG, "onError: " + info);
400+
}
401+
};
402+
403+
for (ButtonName buttonName : buttonNames) {
404+
sdlManager.getScreenManager().addButtonListener(buttonName, onButtonListener);
405+
}
406+
}
407+
373408
/**
374409
* Will show a sample test message on screen as well as speak a sample test message
375410
*/
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
package com.smartdevicelink.managers.screen;
2+
3+
import com.smartdevicelink.AndroidTestCase2;
4+
import com.smartdevicelink.managers.BaseSubManager;
5+
import com.smartdevicelink.proxy.RPCMessage;
6+
import com.smartdevicelink.proxy.RPCRequest;
7+
import com.smartdevicelink.proxy.interfaces.ISdl;
8+
import com.smartdevicelink.proxy.rpc.OnButtonEvent;
9+
import com.smartdevicelink.proxy.rpc.OnButtonPress;
10+
import com.smartdevicelink.proxy.rpc.SubscribeButton;
11+
import com.smartdevicelink.proxy.rpc.SubscribeButtonResponse;
12+
import com.smartdevicelink.proxy.rpc.UnsubscribeButton;
13+
import com.smartdevicelink.proxy.rpc.UnsubscribeButtonResponse;
14+
import com.smartdevicelink.proxy.rpc.enums.ButtonName;
15+
import com.smartdevicelink.proxy.rpc.enums.Result;
16+
17+
import org.mockito.invocation.InvocationOnMock;
18+
import org.mockito.stubbing.Answer;
19+
20+
import static org.mockito.ArgumentMatchers.any;
21+
import static org.mockito.Mockito.doAnswer;
22+
import static org.mockito.Mockito.mock;
23+
24+
public class SubscribeButtonManagerTest extends AndroidTestCase2 {
25+
private SubscribeButtonManager subscribeButtonManager;
26+
private ISdl internalInterface;
27+
28+
private Answer<Void> onSubscribe_UnsubscribeSuccess = new Answer<Void>() {
29+
@Override
30+
public Void answer(InvocationOnMock invocation) {
31+
Object[] args = invocation.getArguments();
32+
RPCRequest message = (RPCRequest) args[0];
33+
if(message instanceof SubscribeButton){
34+
SubscribeButtonResponse subscribeButtonResponse = new SubscribeButtonResponse();
35+
subscribeButtonResponse.setSuccess(true);
36+
message.getOnRPCResponseListener().onResponse(message.getCorrelationID(),subscribeButtonResponse);
37+
}
38+
if(message instanceof UnsubscribeButton) {
39+
UnsubscribeButtonResponse unsubscribeButtonResponse = new UnsubscribeButtonResponse();
40+
unsubscribeButtonResponse.setSuccess(true);
41+
message.getOnRPCResponseListener().onResponse(message.getCorrelationID(), unsubscribeButtonResponse);
42+
}
43+
return null;
44+
}
45+
};
46+
47+
48+
private Answer<Void> onSubscribeFail = new Answer<Void>() {
49+
@Override
50+
public Void answer(InvocationOnMock invocation) {
51+
Object[] args = invocation.getArguments();
52+
RPCRequest message = (RPCRequest) args[0];
53+
if(message instanceof SubscribeButton){
54+
SubscribeButtonResponse subscribeButtonResponse = new SubscribeButtonResponse();
55+
subscribeButtonResponse.setSuccess(false);
56+
message.getOnRPCResponseListener().onError(message.getCorrelationID(), Result.GENERIC_ERROR, "Fail");
57+
}
58+
return null;
59+
}
60+
};
61+
private OnButtonListener listener = new OnButtonListener() {
62+
@Override
63+
public void onPress(ButtonName buttonName, OnButtonPress buttonPress) {
64+
65+
}
66+
67+
@Override
68+
public void onEvent(ButtonName buttonName, OnButtonEvent buttonEvent) {
69+
70+
}
71+
72+
@Override
73+
public void onError(String info) {
74+
75+
}
76+
};
77+
78+
private OnButtonListener listener2 = new OnButtonListener() {
79+
@Override
80+
public void onPress(ButtonName buttonName, OnButtonPress buttonPress) {
81+
82+
}
83+
84+
@Override
85+
public void onEvent(ButtonName buttonName, OnButtonEvent buttonEvent) {
86+
87+
}
88+
89+
@Override
90+
public void onError(String info) {
91+
92+
}
93+
};
94+
95+
@Override
96+
public void setUp() throws Exception {
97+
super.setUp();
98+
internalInterface = mock(ISdl.class);
99+
subscribeButtonManager = new SubscribeButtonManager(internalInterface);
100+
}
101+
102+
public void testInstantiation(){
103+
assertNotNull(subscribeButtonManager.onButtonListeners);
104+
assertEquals(subscribeButtonManager.getState(), BaseSubManager.SETTING_UP);
105+
}
106+
107+
public void testDispose() {
108+
subscribeButtonManager.addButtonListener(ButtonName.VOLUME_UP, listener);
109+
subscribeButtonManager.dispose();
110+
assertTrue(subscribeButtonManager.onButtonListeners.size() == 0);
111+
}
112+
113+
public void testAddButtonListener() {
114+
doAnswer(onSubscribe_UnsubscribeSuccess).when(internalInterface).sendRPC(any(RPCMessage.class));
115+
116+
subscribeButtonManager.addButtonListener(null, null);
117+
assertTrue(subscribeButtonManager.onButtonListeners.size() == 0);
118+
119+
subscribeButtonManager.addButtonListener(null, listener);
120+
assertTrue(subscribeButtonManager.onButtonListeners.size() == 0);
121+
122+
subscribeButtonManager.addButtonListener(ButtonName.VOLUME_UP, listener);
123+
assertTrue(subscribeButtonManager.onButtonListeners.containsKey(ButtonName.VOLUME_UP));
124+
125+
}
126+
127+
public void testAddButtonListenerError(){
128+
doAnswer(onSubscribeFail).when(internalInterface).sendRPC(any(RPCMessage.class));
129+
subscribeButtonManager.addButtonListener(ButtonName.VOLUME_UP, listener);
130+
assertFalse(subscribeButtonManager.onButtonListeners.containsKey(ButtonName.VOLUME_UP));
131+
}
132+
133+
public void testRemoveButtonListener() {
134+
doAnswer(onSubscribe_UnsubscribeSuccess).when(internalInterface).sendRPC(any(RPCMessage.class));
135+
136+
subscribeButtonManager.removeButtonListener(ButtonName.VOLUME_DOWN, listener);
137+
assertFalse(subscribeButtonManager.onButtonListeners.containsKey(ButtonName.VOLUME_DOWN));
138+
139+
subscribeButtonManager.addButtonListener(ButtonName.VOLUME_UP, listener);
140+
assertTrue(subscribeButtonManager.onButtonListeners.get(ButtonName.VOLUME_UP).size() == 1);
141+
142+
subscribeButtonManager.removeButtonListener(ButtonName.VOLUME_UP, listener2);
143+
assertTrue(subscribeButtonManager.onButtonListeners.get(ButtonName.VOLUME_UP).size() == 1);
144+
145+
subscribeButtonManager.addButtonListener(ButtonName.VOLUME_UP, listener);
146+
assertTrue(subscribeButtonManager.onButtonListeners.get(ButtonName.VOLUME_UP).size() == 1);
147+
148+
subscribeButtonManager.addButtonListener(ButtonName.VOLUME_UP, listener2);
149+
assertTrue(subscribeButtonManager.onButtonListeners.get(ButtonName.VOLUME_UP).size() == 2);
150+
151+
152+
subscribeButtonManager.removeButtonListener(ButtonName.VOLUME_UP, listener);
153+
assertTrue(subscribeButtonManager.onButtonListeners.get(ButtonName.VOLUME_UP).size() == 1);
154+
155+
subscribeButtonManager.removeButtonListener(ButtonName.VOLUME_UP, listener2);
156+
assertNull(subscribeButtonManager.onButtonListeners.get(ButtonName.VOLUME_UP));
157+
}
158+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ public void run() {
216216
*/
217217
@SuppressLint("NewApi")
218218
@Override
219-
public void dispose() {
219+
public synchronized void dispose() {
220220
if (this.permissionManager != null) {
221221
this.permissionManager.dispose();
222222
}

0 commit comments

Comments
 (0)