Skip to content

Commit 23d39c0

Browse files
authored
Merge pull request #1538 from smartdevicelink/hotfix/4.12.1
Hotfix/4.12.1
2 parents 7f12aef + 837cf71 commit 23d39c0

File tree

8 files changed

+309
-77
lines changed

8 files changed

+309
-77
lines changed

CHANGELOG.md

Lines changed: 6 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# 4.12.0 Release Notes
1+
2+
# 4.12.1 Release Notes
23

34
### Summary:
45
||Version|
@@ -7,52 +8,7 @@
78
| **RPC** | 6.0.0
89
| **Tested Targeting** | Android 29
910

10-
## Features
11-
- [[SDL 0230] SPP resource management for Android](https://github.com/smartdevicelink/sdl_java_suite/issues/1132)
12-
13-
- [[SDL 0279] Screen Manager Subscribe Buttons](https://github.com/smartdevicelink/sdl_java_suite/issues/1280)
14-
15-
- [[SDL 0289] Support for Set Language Separately](https://github.com/smartdevicelink/sdl_java_suite/issues/1313)
16-
17-
- [Add a way to set the resumption hash in the managers layer](https://github.com/smartdevicelink/sdl_java_suite/issues/1400)
18-
19-
- [Change lock screen logo and ensure correct contrast](https://github.com/smartdevicelink/sdl_java_suite/issues/1342)
20-
21-
22-
## Enhancements
23-
- [[SDL 0306] Use Taskmaster To Handle Queuing Operations in Managers](https://github.com/smartdevicelink/sdl_java_suite/issues/1368)
24-
25-
- [[SDL 0301] SDL Device Listener](https://github.com/smartdevicelink/sdl_java_suite/issues/1348)
26-
27-
- [Sdl Android should use the new LifecycleManager](https://github.com/smartdevicelink/sdl_java_suite/issues/1365)
28-
29-
- [Deprecate onError for OnRPCResponseListener](https://github.com/smartdevicelink/sdl_java_suite/pull/1404)
30-
31-
- [Add ForegroundServiceType Parameter to HelloSdl Project](https://github.com/smartdevicelink/sdl_java_suite/issues/1374)
32-
33-
- [Update javadocs for PermissionManager.addListener](https://github.com/smartdevicelink/sdl_java_suite/pull/1364)
34-
35-
- [PermissionManager Should send callback when subscribing to listener](https://github.com/smartdevicelink/sdl_java_suite/issues/1353)
36-
37-
- [Move textFields / imageFields == null checking from ScreenManager to SystemCapabilityManager](https://github.com/smartdevicelink/sdl_java_suite/issues/1335)
38-
39-
- [Change Http to Https](https://github.com/smartdevicelink/sdl_java_suite/issues/1333)
40-
41-
- [Move src/java/main/android folder](https://github.com/smartdevicelink/sdl_java_suite/issues/1377)
42-
43-
- [Classes that need to be removed in next major release should be deprecated ](https://github.com/smartdevicelink/sdl_java_suite/issues/1362)
44-
45-
- [OnSdlChoiceChosen contains duplicate class definitions](https://github.com/smartdevicelink/sdl_java_suite/issues/14)
46-
47-
- [The name of setter and getter in OnButtonPress are ambiguous](https://github.com/smartdevicelink/sdl_java_suite/issues/547)
48-
49-
50-
## Bug Fixes
51-
52-
- [presentChoiceSet failed with "INVALID_ID, null"](https://github.com/smartdevicelink/sdl_java_suite/issues/1336)
53-
54-
- [ Android app will not receive the notification of HU when the language is switched on the HU side.](https://github.com/smartdevicelink/sdl_java_suite/issues/1372)
55-
56-
- [If an empty array is set for voice commands on the SDLMenuCell the AddCommand is rejected](https://github.com/smartdevicelink/sdl_java_suite/issues/1341)
57-
58-
- [Disconnecting a cloud app doesn't free the port](https://github.com/smartdevicelink/sdl_java_suite/issues/1339)
11+
## Hotfix
12+
- [Fix Issue 1465 - NPE in ManagerUtility](https://github.com/smartdevicelink/sdl_java_suite/pull/1478)
13+
- [Add check to prevent NPE in ManagerUtility class](https://github.com/smartdevicelink/sdl_java_suite/pull/1498)
14+
- [Fix Issue 1473 - Null items as head or empty lists](https://github.com/smartdevicelink/sdl_java_suite/pull/1474)

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.12.0
1+
4.12.1
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
package com.smartdevicelink.managers;
2+
3+
import android.support.test.runner.AndroidJUnit4;
4+
5+
import com.smartdevicelink.proxy.rpc.ImageField;
6+
import com.smartdevicelink.proxy.rpc.TextField;
7+
import com.smartdevicelink.proxy.rpc.WindowCapability;
8+
import com.smartdevicelink.proxy.rpc.enums.CharacterSet;
9+
import com.smartdevicelink.proxy.rpc.enums.FileType;
10+
import com.smartdevicelink.proxy.rpc.enums.ImageFieldName;
11+
import com.smartdevicelink.proxy.rpc.enums.TextFieldName;
12+
13+
14+
import org.junit.Before;
15+
import org.junit.Test;
16+
import org.junit.runner.RunWith;
17+
18+
19+
import java.util.ArrayList;
20+
import java.util.Arrays;
21+
import java.util.List;
22+
23+
import static junit.framework.TestCase.assertEquals;
24+
import static junit.framework.TestCase.assertNotNull;
25+
import static junit.framework.TestCase.assertTrue;
26+
import static junit.framework.TestCase.assertFalse;
27+
28+
/**
29+
* This is a unit test class for the SmartDeviceLink library manager class :
30+
* {@link ManagerUtility}
31+
*/
32+
@RunWith(AndroidJUnit4.class)
33+
public class ManagerUtilityTests {
34+
35+
36+
@Before
37+
public void setUp() throws Exception{
38+
39+
}
40+
41+
// TESTS
42+
43+
@Test
44+
public void testGetAllImageFields(){
45+
46+
List<ImageField> fields = ManagerUtility.WindowCapabilityUtility.getAllImageFields();
47+
assertNotNull(fields);
48+
int size = fields.size();
49+
assertEquals(ImageFieldName.values().length, size);
50+
51+
ImageFieldName[] names = ImageFieldName.values();
52+
53+
boolean found;
54+
for (ImageFieldName name : names) {
55+
found = false;
56+
for(ImageField field : fields) {
57+
if(field != null
58+
&& field.getName() != null
59+
&& field.getName().equals(name)) {
60+
found = true;
61+
break;
62+
}
63+
}
64+
assertTrue(found);
65+
}
66+
67+
}
68+
69+
@Test
70+
public void testGetAllTextFields(){
71+
72+
List<TextField> fields = ManagerUtility.WindowCapabilityUtility.getAllTextFields();
73+
assertNotNull(fields);
74+
int size = fields.size();
75+
assertEquals(TextFieldName.values().length, size);
76+
77+
TextFieldName[] names = TextFieldName.values();
78+
79+
boolean found;
80+
for (TextFieldName name : names) {
81+
found = false;
82+
for(TextField field : fields) {
83+
if(field != null
84+
&& field.getName() != null
85+
&& field.getName().equals(name)) {
86+
found = true;
87+
break;
88+
}
89+
}
90+
assertTrue(found);
91+
}
92+
93+
}
94+
95+
@Test
96+
public void testHasTextFieldOfName() {
97+
WindowCapability capability = new WindowCapability();
98+
List<TextField> textFieldList = new ArrayList<>();
99+
textFieldList.add(new TextField(TextFieldName.mainField1, CharacterSet.CID2SET, 500, 8));
100+
capability.setTextFields(textFieldList);
101+
102+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
103+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
104+
105+
textFieldList.add(new TextField(TextFieldName.alertText3, CharacterSet.CID2SET, 500, 8));
106+
capability.setTextFields(textFieldList);
107+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
108+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
109+
110+
textFieldList.clear();
111+
textFieldList.add(null);
112+
capability.setTextFields(textFieldList);
113+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
114+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
115+
116+
textFieldList.add(new TextField(TextFieldName.alertText3, CharacterSet.CID2SET, 500, 8));
117+
capability.setTextFields(textFieldList);
118+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.mainField1));
119+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasTextFieldOfName(capability, TextFieldName.alertText3));
120+
121+
}
122+
123+
@Test
124+
public void testHasImageFieldOfName() {
125+
126+
WindowCapability capability = new WindowCapability();
127+
List<FileType> allImageFileTypes = Arrays.asList(FileType.GRAPHIC_BMP, FileType.GRAPHIC_JPEG, FileType.GRAPHIC_PNG);
128+
129+
List<ImageField> imageFieldList = new ArrayList<>();
130+
imageFieldList.add(new ImageField(ImageFieldName.graphic, allImageFileTypes));
131+
capability.setImageFields(imageFieldList);
132+
133+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
134+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));
135+
136+
imageFieldList.add(new ImageField(ImageFieldName.alertIcon, allImageFileTypes));
137+
capability.setImageFields(imageFieldList);
138+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
139+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));;
140+
141+
imageFieldList.clear();
142+
imageFieldList.add(null);
143+
capability.setImageFields(imageFieldList);
144+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
145+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));
146+
147+
imageFieldList.add(new ImageField(ImageFieldName.alertIcon, allImageFileTypes));
148+
capability.setImageFields(imageFieldList);
149+
assertFalse(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.graphic));
150+
assertTrue(ManagerUtility.WindowCapabilityUtility.hasImageFieldOfName(capability, ImageFieldName.alertIcon));
151+
152+
}
153+
154+
155+
@Test
156+
public void testGetMaxNumberOfMainFieldLines() {
157+
158+
WindowCapability capability = new WindowCapability();
159+
capability.setTextFields(ManagerUtility.WindowCapabilityUtility.getAllTextFields());
160+
161+
int maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
162+
163+
assertEquals(4, maxNumerOfLines);
164+
165+
//Single line
166+
List<TextField> singleLineList = new ArrayList<>();
167+
singleLineList.add(new TextField(TextFieldName.mainField1, CharacterSet.CID2SET, 500, 8));
168+
capability.setTextFields(singleLineList);
169+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
170+
assertEquals(1, maxNumerOfLines);
171+
172+
singleLineList.add(new TextField(TextFieldName.mainField2, CharacterSet.CID2SET, 500, 8));
173+
capability.setTextFields(singleLineList);
174+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
175+
assertEquals(2, maxNumerOfLines);
176+
177+
singleLineList.add(new TextField(TextFieldName.mainField3, CharacterSet.CID2SET, 500, 8));
178+
capability.setTextFields(singleLineList);
179+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
180+
assertEquals(3, maxNumerOfLines);
181+
182+
singleLineList.add(new TextField(TextFieldName.mainField4, CharacterSet.CID2SET, 500, 8));
183+
capability.setTextFields(singleLineList);
184+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
185+
assertEquals(4, maxNumerOfLines);
186+
187+
List<TextField> nullList = new ArrayList<>();
188+
nullList.add(null);
189+
assertNotNull(nullList);
190+
capability.setTextFields(nullList);
191+
assertNotNull(capability);
192+
assertNotNull(capability.getTextFields());
193+
194+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
195+
assertEquals(0, maxNumerOfLines);
196+
197+
nullList.add(new TextField(TextFieldName.mainField4, CharacterSet.CID2SET, 500, 8));
198+
assertNotNull(nullList);
199+
capability.setTextFields(nullList);
200+
assertNotNull(capability);
201+
assertNotNull(capability.getTextFields());
202+
maxNumerOfLines = ManagerUtility.WindowCapabilityUtility.getMaxNumberOfMainFieldLines(capability);
203+
assertEquals(4, maxNumerOfLines);
204+
205+
}
206+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ public void testBuildRegisterAppInterface () {
642642
assertNull(TestValues.NULL, testRAI.getAppName());
643643
assertNull(TestValues.NULL, testRAI.getTtsName());
644644
assertNull(TestValues.NULL, testRAI.getNgnMediaScreenAppName());
645-
assertNull(TestValues.NULL, testRAI.getVrSynonyms());
645+
assertNull(TestValues.NULL, testRAI.getVrSynonyms().get(0));
646646
assertNull(TestValues.NULL, testRAI.getIsMediaApplication());
647647
assertNotNull(TestValues.NOT_NULL, testRAI.getLanguageDesired());
648648
assertNotNull(TestValues.NOT_NULL, testRAI.getHmiDisplayLanguageDesired());
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.smartdevicelink.test.rpc;
2+
3+
import android.support.test.runner.AndroidJUnit4;
4+
5+
import com.smartdevicelink.proxy.RPCStruct;
6+
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
import static junit.framework.TestCase.assertNotNull;
14+
15+
@RunWith(AndroidJUnit4.class)
16+
public class RPCStructTests {
17+
18+
@Test
19+
public void testFormatObject() {
20+
final String KEY = "LIST";
21+
RPCStruct struct = new RPCStruct();
22+
List<RPCStruct> structs = new ArrayList<>();
23+
struct.setValue(KEY, structs);
24+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
25+
26+
structs.add(new RPCStruct());
27+
struct.setValue(KEY, structs);
28+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
29+
30+
structs.clear();
31+
structs.add(null);
32+
struct.setValue(KEY, structs);
33+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
34+
35+
structs.clear();
36+
structs.add(null);
37+
structs.add(new RPCStruct());
38+
struct.setValue(KEY, structs);
39+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
40+
41+
structs.clear();
42+
structs.add(new RPCStruct());
43+
structs.add(null);
44+
structs.add(new RPCStruct());
45+
struct.setValue(KEY, structs);
46+
assertNotNull(struct.getObject(RPCStruct.class, KEY));
47+
}
48+
}

0 commit comments

Comments
 (0)