diff options
author | kboskin <kboskin> | 2021-02-11 22:17:18 +0200 |
---|---|---|
committer | kboskin <kboskin> | 2021-02-11 22:17:18 +0200 |
commit | 40766fd31dc9805c423eb0184eab130e3a521f9c (patch) | |
tree | 5425d0036f90d0313320fc1f6d857898a8edf121 | |
parent | 55de319324344973dcfad3e767d152e98c2d0245 (diff) | |
parent | 3a84cea88ad75f1fa72152ac513f7198c758ab06 (diff) | |
download | sdl_android-40766fd31dc9805c423eb0184eab130e3a521f9c.tar.gz |
Merge branch 'develop' into feature/0298_keyboard_enchancements
# Conflicts:
# android/sdl_android/src/androidTest/java/com/smartdevicelink/test/TestValues.java
# android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java
49 files changed, 1936 insertions, 45 deletions
diff --git a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java index 0b83e0842..8767b70fa 100755 --- a/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java +++ b/android/hello_sdl_android/src/main/java/com/sdl/hellosdlandroid/SdlService.java @@ -47,6 +47,7 @@ import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.transport.MultiplexTransportConfig; import com.smartdevicelink.transport.TCPTransportConfig; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.SystemInfo; import java.util.ArrayList; import java.util.Arrays; @@ -239,6 +240,12 @@ public class SdlService extends Service { return null; } } + + @Override + public boolean onSystemInfoReceived(SystemInfo systemInfo) { + //Check the SystemInfo object to ensure that the connection to the device should continue + return true; + } }; // Create App Icon, this is set in the SdlManager builder diff --git a/android/sdl_android/src/androidTest/assets/json/GetVehicleData.json b/android/sdl_android/src/androidTest/assets/json/GetVehicleData.json index b31a0e4db..8ce24a63e 100644 --- a/android/sdl_android/src/androidTest/assets/json/GetVehicleData.json +++ b/android/sdl_android/src/androidTest/assets/json/GetVehicleData.json @@ -35,7 +35,9 @@ "gearStatus": true, "oemCustomVehicleDataName": true, "windowStatus": true, - "stabilityControlsStatus": true + "stabilityControlsStatus": true, + "climateData": true, + "seatOccupancy": true } }, "response": { @@ -183,6 +185,17 @@ "transmissionType": "ELECTRIC_VARIABLE", "actualGear": "PARK" }, + "climateData": { + "atmosphericPressure": 100.0, + "externalTemperature": { + "unit": "CELSIUS", + "value": 100.0 + }, + "cabinTemperature": { + "unit": "CELSIUS", + "value": 100.0 + } + }, "windowStatus": [ { "location": { @@ -194,7 +207,31 @@ "deviation": 3 } } - ] + ], + "seatOccupancy": { + "seatsOccupied": [ + { + "seatLocation": { + "grid": { + "row": 2, + "col": 3 + } + }, + "conditionActive": true + } + ], + "seatsBelted": [ + { + "seatLocation": { + "grid": { + "row": 2, + "col": 3 + } + }, + "conditionActive": true + } + ] + } } } }
\ No newline at end of file diff --git a/android/sdl_android/src/androidTest/assets/json/SubscribeVehicleData.json b/android/sdl_android/src/androidTest/assets/json/SubscribeVehicleData.json index 51123213c..57a8aa20b 100644 --- a/android/sdl_android/src/androidTest/assets/json/SubscribeVehicleData.json +++ b/android/sdl_android/src/androidTest/assets/json/SubscribeVehicleData.json @@ -35,7 +35,9 @@ "gearStatus": true, "oemCustomVehicleDataName": true, "windowStatus": true, - "handsOffSteering": true + "handsOffSteering": true, + "climateData": true, + "seatOccupancy": true } }, "response": { @@ -173,6 +175,14 @@ "windowStatus": { "dataType": "VEHICLEDATA_WINDOWSTATUS", "resultCode": "SUCCESS" + }, + "climateData": { + "dataType": "VEHICLEDATA_CLIMATEDATA", + "resultCode": "SUCCESS" + }, + "seatOccupancy": { + "dataType": "VEHICLEDATA_SEATOCCUPANCY", + "resultCode": "SUCCESS" } } } diff --git a/android/sdl_android/src/androidTest/assets/json/UnsubscribeVehicleData.json b/android/sdl_android/src/androidTest/assets/json/UnsubscribeVehicleData.json index 7f57869a5..3dfbf984c 100644 --- a/android/sdl_android/src/androidTest/assets/json/UnsubscribeVehicleData.json +++ b/android/sdl_android/src/androidTest/assets/json/UnsubscribeVehicleData.json @@ -35,7 +35,9 @@ "handsOffSteering": true, "gearStatus": true, "oemCustomVehicleDataName": true, - "windowStatus": true + "windowStatus": true, + "climateData": true, + "seatOccupancy": true } }, "response": { @@ -173,6 +175,14 @@ "windowStatus": { "dataType": "VEHICLEDATA_WINDOWSTATUS", "resultCode": "SUCCESS" + }, + "seatOccupancy": { + "dataType": "VEHICLEDATA_SEATOCCUPANCY", + "resultCode": "SUCCESS" + }, + "climateData": { + "dataType": "VEHICLEDATA_CLIMATEDATA", + "resultCode": "SUCCESS" } } } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/SdlManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/SdlManagerTests.java index c263db59d..ca941fab6 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/SdlManagerTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/SdlManagerTests.java @@ -23,6 +23,7 @@ import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener; import com.smartdevicelink.test.TestValues; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.transport.TCPTransportConfig; +import com.smartdevicelink.util.SystemInfo; import org.junit.Before; import org.junit.Test; @@ -114,6 +115,11 @@ public class SdlManagerTests { public LifecycleConfigurationUpdate managerShouldUpdateLifecycle(Language language, Language hmiLanguage) { return null; } + + @Override + public boolean onSystemInfoReceived(SystemInfo systemInfo) { + return true; + } }; // build manager object - use all setters, will test using getters below 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 928b7bd09..3aba434c5 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 @@ -205,7 +205,7 @@ public class SystemCapabilityManagerTests { @Test public void testNullDisplayCapabilitiesEnablesAllTextAndImageFields() { List<DisplayCapability> displayCapabilityList = createDisplayCapabilityList(null, TestValues.GENERAL_BUTTONCAPABILITIES_LIST, TestValues.GENERAL_SOFTBUTTONCAPABILITIES_LIST); - assertEquals(displayCapabilityList.get(0).getWindowCapabilities().get(0).getTextFields().size(), 32); + assertEquals(displayCapabilityList.get(0).getWindowCapabilities().get(0).getTextFields().size(), 34); assertEquals(displayCapabilityList.get(0).getWindowCapabilities().get(0).getImageFields().size(), 16); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/TestValues.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/TestValues.java index 70504b94b..c82a200ad 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/TestValues.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/TestValues.java @@ -312,6 +312,7 @@ public class TestValues { public static final LightStatus GENERAL_LIGHTSTATUS = LightStatus.OFF; public static final RadioBand GENERAL_RADIOBAND = RadioBand.AM; public static final ClimateControlData GENERAL_CLIMATECONTROLDATA = new ClimateControlData(); + public static final ClimateData GENERAL_CLIMATEDATA = new ClimateData(); public static final SeatControlData GENERAL_SEATCONTROLDATA = new SeatControlData(); public static final RdsData GENERAL_RDSDATA = new RdsData(); public static final StationIDNumber GENERAL_STATIONIDNUMBER = new StationIDNumber(); @@ -335,6 +336,11 @@ public class TestValues { public static final KeyboardCapabilities GENERAL_KEYBOARD_CAPABILITIES = new KeyboardCapabilities(); public static final WindowState GENERAL_WINDOWSTATE = new WindowState(); + public static final SeatOccupancy GENERAL_SEAT_OCCUPANCY = new SeatOccupancy(); + public static final List<SeatStatus> GENERAL_SEATS_OCCUPIED = new ArrayList<SeatStatus>(1); + public static final List<SeatStatus> GENERAL_SEATS_BELTED = new ArrayList<SeatStatus>(1); + public static final SeatStatus GENERAL_SEAT_STATUS = new SeatStatus(); + public static final SeatLocation GENERAL_SEAT_LOCATION = new SeatLocation(); public static final DoorStatusType GENERAL_DOOR_STATUS_TYPE = DoorStatusType.REMOVED; public static final DoorStatus GENERAL_DOOR_STATUS = new DoorStatus(); @@ -363,7 +369,6 @@ public class TestValues { public static final FuelType GENERAL_FUELTYPE = FuelType.GASOLINE; public static final LockScreenConfig GENERAL_LOCKSCREENCONFIG = new LockScreenConfig(); public static final Grid GENERAL_GRID = new Grid(); - public static final SeatLocation GENERAL_SEAT_LOCATION = new SeatLocation(); public static final ModuleInfo GENERAL_MODULE_INFO = new ModuleInfo(); public static final StabilityControlsStatus GENERAL_STABILITY_CONTROL_STATUS = new StabilityControlsStatus(); public static final VehicleDataStatus GENERAL_ESC_SYSTEM = VehicleDataStatus.ON; @@ -520,6 +525,10 @@ public class TestValues { public static final JSONObject JSON_DOOR_STATUS = new JSONObject(); public static final JSONObject JSON_GATE_STATUS = new JSONObject(); public static final JSONObject JSON_SEEK_STREAMING_INDICATOR = new JSONObject(); + public static final JSONArray JSON_GENERAL_SEATS_OCCUPIED = new JSONArray(); + public static final JSONArray JSON_GENERAL_SEATS_BELTED = new JSONArray(); + public static final JSONObject JSON_OBJECT_GENERAL_SEATS_BELTED = new JSONObject(); + public static final JSONObject JSON_OBJECT_GENERAL_SEATS_OCCUPIED = new JSONObject(); static { GENERAL_TOUCHEVENTCAPABILITIES.setDoublePressAvailable(GENERAL_BOOLEAN); @@ -1087,6 +1096,18 @@ public class TestValues { GENERAL_KEYBOARD_CAPABILITIES.setMaskInputCharactersSupported(TestValues.GENERAL_BOOLEAN); GENERAL_KEYBOARD_CAPABILITIES.setSupportedKeyboards(GENERAL_SUPPORTED_KEYBOARDS_LIST); + // SEAT_OCCUPANCY + GENERAL_SEAT_LOCATION.setGrid(GENERAL_LOCATION_GRID); + + GENERAL_SEAT_STATUS.setConditionActive(GENERAL_BOOLEAN); + GENERAL_SEAT_STATUS.setSeatLocation(GENERAL_SEAT_LOCATION); + + GENERAL_SEATS_BELTED.add(GENERAL_SEAT_STATUS); + GENERAL_SEATS_OCCUPIED.add(GENERAL_SEAT_STATUS); + + GENERAL_SEAT_OCCUPANCY.setSeatsBelted(GENERAL_SEATS_BELTED); + GENERAL_SEAT_OCCUPANCY.setSeatsOccupied(GENERAL_SEATS_OCCUPIED); + GENERAL_ROOF_STATUS.setLocation(GENERAL_GRID); GENERAL_ROOF_STATUS.setState(GENERAL_WINDOW_STATE); GENERAL_ROOF_STATUS.setStatus(GENERAL_DOOR_STATUS_TYPE); @@ -1100,6 +1121,11 @@ public class TestValues { GENERAL_DOOR_STATUS.setStatus(GENERAL_DOOR_STATUS_TYPE); GENERAL_DOOR_STATUS_LIST.add(GENERAL_DOOR_STATUS); + // Climate Data + GENERAL_CLIMATEDATA.setAtmosphericPressure(GENERAL_FLOAT); + GENERAL_CLIMATEDATA.setCabinTemperature(GENERAL_TEMPERATURE); + GENERAL_CLIMATEDATA.setExternalTemperature(GENERAL_TEMPERATURE); + try { for (KeyboardLayoutCapability keyboard : GENERAL_SUPPORTED_KEYBOARDS_LIST) { @@ -1109,6 +1135,15 @@ public class TestValues { JSON_KEYBOARD_CAPABILITY.put(KeyboardCapabilities.KEY_MASK_INPUT_CHARACTERS_SUPPORTED, GENERAL_BOOLEAN); JSON_KEYBOARD_CAPABILITY.put(KeyboardCapabilities.KEY_SUPPORTED_KEYBOARDS, JSON_SUPPORTED_KEYBOARDS_LIST); + + JSON_OBJECT_GENERAL_SEATS_OCCUPIED.put(SeatStatus.KEY_SEAT_LOCATION, GENERAL_SEAT_LOCATION.serializeJSON()); + JSON_OBJECT_GENERAL_SEATS_OCCUPIED.put(SeatStatus.KEY_CONDITION_ACTIVE, GENERAL_BOOLEAN); + JSON_GENERAL_SEATS_OCCUPIED.put(JSON_OBJECT_GENERAL_SEATS_OCCUPIED); + + JSON_OBJECT_GENERAL_SEATS_BELTED.put(SeatStatus.KEY_SEAT_LOCATION, GENERAL_SEAT_LOCATION.serializeJSON()); + JSON_OBJECT_GENERAL_SEATS_BELTED.put(SeatStatus.KEY_CONDITION_ACTIVE,GENERAL_BOOLEAN); + JSON_GENERAL_SEATS_BELTED.put(JSON_OBJECT_GENERAL_SEATS_BELTED); + JSON_HMIPERMISSIONS.put(HMIPermissions.KEY_ALLOWED, GENERAL_HMILEVEL_LIST); JSON_HMIPERMISSIONS.put(HMIPermissions.KEY_USER_DISALLOWED, GENERAL_HMILEVEL_LIST); @@ -1339,6 +1374,7 @@ public class TestValues { JSON_TEXTFIELDTYPES.put(MetadataType.MEDIA_ALBUM); JSON_TEXTFIELDTYPES.put(MetadataType.MEDIA_ARTIST); + JSON_GRID.put(SeatLocation.KEY_GRID, GENERAL_LOCATION_GRID.serializeJSON()); JSON_SEAT_LOCATIONS.put(JSON_GRID); JSON_MODULE_INFO.put(ModuleInfo.KEY_MODULE_ID, TestValues.GENERAL_STRING); JSON_MODULE_INFO.put(ModuleInfo.KEY_MODULE_LOCATION, TestValues.JSON_GRID); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java index 594ce2d4e..e8d89c818 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Validator.java @@ -3911,6 +3911,23 @@ public class Validator { return approxPosition1.equals(approxPosition2) && deviation1.equals(deviation2); } + public static boolean validateSeatOccupancies(SeatOccupancy item1, SeatOccupancy item2) { + if (item1 == null) { + return (item2 == null); + } + if (item2 == null) { + return (item1 == null); + } + + List<SeatStatus> seatsBelted1 = item1.getSeatsBelted(); + List<SeatStatus> seatsOccupied1 = item1.getSeatsOccupied(); + + List<SeatStatus> seatsBelted2 = item2.getSeatsBelted(); + List<SeatStatus> seatsOccupied2 = item2.getSeatsOccupied(); + + return validateSeatStatuses(seatsBelted1, seatsBelted2) && validateSeatStatuses(seatsOccupied1, seatsOccupied2); + } + public static boolean validateStabilityControlStatus(StabilityControlsStatus status1, StabilityControlsStatus status2) { if (status1 == null) { return (status2 == null); @@ -3968,6 +3985,48 @@ public class Validator { return keyboardsEqual && keyboardCapabilities1.getMaskInputCharactersSupported().equals(keyboardCapabilities2.getMaskInputCharactersSupported()); } + public static boolean validateSeatStatuses(List<SeatStatus> seatStatusesItem1, List<SeatStatus> seatStatusesItem2) { + if (seatStatusesItem1 == null) { + return (seatStatusesItem2 == null); + } + if (seatStatusesItem2 == null) { + return (seatStatusesItem1 == null); + } + + if (seatStatusesItem1.size() != seatStatusesItem2.size()) { + return false; + } + + Iterator<SeatStatus> iterator1 = seatStatusesItem1.iterator(); + Iterator<SeatStatus> iterator2 = seatStatusesItem2.iterator(); + + while (iterator1.hasNext() && iterator2.hasNext()) { + SeatStatus seatStatus1 = iterator1.next(); + SeatStatus seatStatus2 = iterator2.next(); + + if (!validateSeatStatus(seatStatus1, seatStatus2)) { + return false; + } + } + + return true; + } + + public static boolean validateSeatStatus(SeatStatus item1, SeatStatus item2) { + if (item1 == null) { + return (item2 == null); + } + if (item2 == null) { + return (item1 == null); + } + + if (item1.getConditionActive() != item2.getConditionActive()) { + return false; + } + + return validateSeatLocation(item1.getSeatLocation(), item2.getSeatLocation()); + } + public static boolean validateDoorStatus(DoorStatus status1, DoorStatus status2) { if (status1 == null) { return (status2 == null); @@ -4000,4 +4059,23 @@ public class Validator { boolean gridValidated = validateGrid(status1.getLocation(), status2.getLocation()); return gridValidated && status1.getStatus().equals(status2.getStatus()) && validateWindowStates(status1.getState(), status2.getState()); } + + public static boolean validateClimateData(ClimateData climateData1, ClimateData climateData2) { + if (climateData1 == null) { + return (climateData2 == null); + } + if (climateData2 == null) { + return (climateData1 == null); + } + + if (!validateTemperature(climateData1.getExternalTemperature(), climateData2.getExternalTemperature())) { + return false; + } + + if (!validateTemperature(climateData1.getCabinTemperature(), climateData2.getCabinTemperature())) { + return false; + } + + return climateData1.getAtmosphericPressure().floatValue() == climateData2.getAtmosphericPressure().floatValue(); + } } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/VehicleDataHelper.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/VehicleDataHelper.java index a13486983..a53e6aa69 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/VehicleDataHelper.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/VehicleDataHelper.java @@ -3,6 +3,7 @@ package com.smartdevicelink.test; import com.smartdevicelink.proxy.rpc.AirbagStatus; import com.smartdevicelink.proxy.rpc.BeltStatus; import com.smartdevicelink.proxy.rpc.BodyInformation; +import com.smartdevicelink.proxy.rpc.ClimateData; import com.smartdevicelink.proxy.rpc.ClusterModeStatus; import com.smartdevicelink.proxy.rpc.DeviceStatus; import com.smartdevicelink.proxy.rpc.ECallInfo; @@ -15,8 +16,12 @@ import com.smartdevicelink.proxy.rpc.Grid; import com.smartdevicelink.proxy.rpc.HeadLampStatus; import com.smartdevicelink.proxy.rpc.MyKey; import com.smartdevicelink.proxy.rpc.OnVehicleData; +import com.smartdevicelink.proxy.rpc.SeatLocation; +import com.smartdevicelink.proxy.rpc.SeatOccupancy; +import com.smartdevicelink.proxy.rpc.SeatStatus; import com.smartdevicelink.proxy.rpc.SingleTireStatus; import com.smartdevicelink.proxy.rpc.StabilityControlsStatus; +import com.smartdevicelink.proxy.rpc.Temperature; import com.smartdevicelink.proxy.rpc.TireStatus; import com.smartdevicelink.proxy.rpc.WindowState; import com.smartdevicelink.proxy.rpc.WindowStatus; @@ -38,6 +43,7 @@ import com.smartdevicelink.proxy.rpc.enums.PRNDL; import com.smartdevicelink.proxy.rpc.enums.PowerModeQualificationStatus; import com.smartdevicelink.proxy.rpc.enums.PowerModeStatus; import com.smartdevicelink.proxy.rpc.enums.PrimaryAudioSource; +import com.smartdevicelink.proxy.rpc.enums.TemperatureUnit; import com.smartdevicelink.proxy.rpc.enums.TransmissionType; import com.smartdevicelink.proxy.rpc.enums.TurnSignal; import com.smartdevicelink.proxy.rpc.enums.VehicleDataEventStatus; @@ -90,6 +96,15 @@ public class VehicleDataHelper { public static final String OEM_CUSTOM_VEHICLE_DATA_STATE = "oemCustomVehicleDataState"; public static final Boolean HANDS_OFF_STEERING = Boolean.TRUE; + // Climate Data + public static final ClimateData CLIMATE_DATA = new ClimateData(); + public static final Float CLIMATE_DATA_ATM_PRESSURE = TestValues.GENERAL_FLOAT; + public static final Temperature CLIMATE_DATA_CABIN_TEMP = new Temperature(TemperatureUnit.CELSIUS, TestValues.GENERAL_FLOAT); + public static final Temperature CLIMATE_DATA_EXT_TEMP = new Temperature(TemperatureUnit.CELSIUS, TestValues.GENERAL_FLOAT); + + // Seat Occupancy + public static final SeatOccupancy SEAT_OCCUPANCY = new SeatOccupancy(); + //other variables inside some of the above objects // tire status public static final WarningLightStatus TIRE_PRESSURE_TELL_TALE = WarningLightStatus.ON; @@ -226,6 +241,11 @@ public class VehicleDataHelper { //GetVehicleDataResponse data which stores the same things public static final GetVehicleDataResponse VEHICLE_DATA_RESPONSE = new GetVehicleDataResponse(); + public static final List<SeatStatus> SEATS_OCCUPIED = new ArrayList<SeatStatus>(1); + public static final List<SeatStatus> SEATS_BELTED = new ArrayList<SeatStatus>(1); + public static final SeatStatus SEAT_STATUS = new SeatStatus(); + public static final SeatLocation SEAT_LOCATION = new SeatLocation(); + static { //TIRE_PRESSURE set up TIRE_PRESSURE.setPressureTellTale(TIRE_PRESSURE_TELL_TALE); @@ -335,6 +355,11 @@ public class VehicleDataHelper { EMERGENCY_EVENT.setMaximumChangeVelocity(EMERGENCY_EVENT_MAX_CHANGE_VELOCITY); EMERGENCY_EVENT.setMultipleEvents(EMERGENCY_EVENT_MULTIPLE_EVENTS); + // Climate Data + CLIMATE_DATA.setAtmosphericPressure(CLIMATE_DATA_ATM_PRESSURE); + CLIMATE_DATA.setCabinTemperature(CLIMATE_DATA_CABIN_TEMP); + CLIMATE_DATA.setExternalTemperature(CLIMATE_DATA_EXT_TEMP); + //CLUSTER_MODE_STATUS set up CLUSTER_MODE_STATUS.setPowerModeActive(CLUSTER_MODE_STATUS_POWER_MODE_ACTIVE); CLUSTER_MODE_STATUS.setPowerModeQualificationStatus(CLUSTER_MODE_STATUS_POWER_MODE_QUALIFICATION_STATUS); @@ -373,10 +398,23 @@ public class VehicleDataHelper { GEAR_STATUS.setUserSelectedGear(USER_SELECTED_GEAR); GEAR_STATUS.setActualGear(ACTUAL_GEAR); + // SEAT_OCCUPANCY + SEAT_LOCATION.setGrid(LOCATION_GRID); + + SEAT_STATUS.setConditionActive(true); + SEAT_STATUS.setSeatLocation(SEAT_LOCATION); + + SEATS_BELTED.add(SEAT_STATUS); + SEATS_OCCUPIED.add(SEAT_STATUS); + + SEAT_OCCUPANCY.setSeatsBelted(SEATS_BELTED); + SEAT_OCCUPANCY.setSeatsOccupied(SEATS_OCCUPIED); + //set up the OnVehicleData object VEHICLE_DATA.setSpeed(SPEED); VEHICLE_DATA.setRpm(RPM); VEHICLE_DATA.setExternalTemperature(EXTERNAL_TEMPERATURE); + VEHICLE_DATA.setClimateData(CLIMATE_DATA); VEHICLE_DATA.setFuelLevel(FUEL_LEVEL); VEHICLE_DATA.setVin(VIN); VEHICLE_DATA.setPrndl(PRNDL_FINAL); @@ -408,10 +446,12 @@ public class VehicleDataHelper { VEHICLE_DATA.setStabilityControlsStatus(STABILITY_CONTROLS_STATUS); VEHICLE_DATA.setOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, OEM_CUSTOM_VEHICLE_DATA_STATE); VEHICLE_DATA.setHandsOffSteering(HANDS_OFF_STEERING); + VEHICLE_DATA.setSeatOccupancy(SEAT_OCCUPANCY); //set up the GetVehicleDataResponse object VEHICLE_DATA_RESPONSE.setSpeed(SPEED); VEHICLE_DATA_RESPONSE.setRpm(RPM); VEHICLE_DATA_RESPONSE.setExternalTemperature(EXTERNAL_TEMPERATURE); + VEHICLE_DATA_RESPONSE.setClimateData(CLIMATE_DATA); VEHICLE_DATA_RESPONSE.setFuelLevel(FUEL_LEVEL); VEHICLE_DATA_RESPONSE.setVin(VIN); VEHICLE_DATA_RESPONSE.setPrndl(PRNDL_FINAL); @@ -443,6 +483,7 @@ public class VehicleDataHelper { VEHICLE_DATA_RESPONSE.setStabilityControlsStatus(STABILITY_CONTROLS_STATUS); VEHICLE_DATA_RESPONSE.setOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, OEM_CUSTOM_VEHICLE_DATA_STATE); VEHICLE_DATA_RESPONSE.setHandsOffSteering(HANDS_OFF_STEERING); + VEHICLE_DATA_RESPONSE.setSeatOccupancy(SEAT_OCCUPANCY); } private VehicleDataHelper() { diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/ClimateDataTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/ClimateDataTests.java new file mode 100644 index 000000000..4fb5e9c0f --- /dev/null +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/ClimateDataTests.java @@ -0,0 +1,83 @@ +package com.smartdevicelink.test.rpc.datatypes; + +import com.smartdevicelink.marshal.JsonRPCMarshaller; +import com.smartdevicelink.proxy.rpc.ClimateData; +import com.smartdevicelink.proxy.rpc.Temperature; +import com.smartdevicelink.test.JsonUtils; +import com.smartdevicelink.test.TestValues; +import com.smartdevicelink.test.Validator; + +import junit.framework.TestCase; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Hashtable; +import java.util.Iterator; + +public class ClimateDataTests extends TestCase { + + private ClimateData msg; + + @Override + public void setUp() { + msg = new ClimateData(); + + msg.setExternalTemperature(TestValues.GENERAL_TEMPERATURE); + msg.setCabinTemperature(TestValues.GENERAL_TEMPERATURE); + msg.setAtmosphericPressure(TestValues.GENERAL_FLOAT); + } + + /** + * Tests the expected values of the RPC message. + */ + public void testRpcValues() { + // Test Values + Temperature cabinTemperature = msg.getCabinTemperature(); + Temperature externalTemperature = msg.getExternalTemperature(); + Float atmosphericPressure = msg.getAtmosphericPressure(); + + // Valid Tests + assertEquals(TestValues.MATCH, TestValues.GENERAL_TEMPERATURE, cabinTemperature); + assertEquals(TestValues.MATCH, TestValues.GENERAL_TEMPERATURE, externalTemperature); + assertEquals(TestValues.MATCH, TestValues.GENERAL_FLOAT, atmosphericPressure); + + // Invalid/Null Tests + ClimateData msg = new ClimateData(); + assertNotNull(TestValues.NOT_NULL, msg); + + assertNull(TestValues.NULL, msg.getAtmosphericPressure()); + assertNull(TestValues.NULL, msg.getCabinTemperature()); + assertNull(TestValues.NULL, msg.getExternalTemperature()); + } + + public void testJson() { + JSONObject reference = new JSONObject(); + + try { + reference.put(ClimateData.KEY_EXTERNAL_TEMPERATURE, JsonRPCMarshaller.serializeHashtable(TestValues.GENERAL_TEMPERATURE.getStore())); + reference.put(ClimateData.KEY_CABIN_TEMPERATURE, JsonRPCMarshaller.serializeHashtable(TestValues.GENERAL_TEMPERATURE.getStore())); + reference.put(ClimateData.KEY_ATMOSPHERIC_PRESSURE, TestValues.GENERAL_FLOAT); + + JSONObject underTest = msg.serializeJSON(); + assertEquals(TestValues.MATCH, reference.length(), underTest.length()); + + Iterator<?> iterator = reference.keys(); + while (iterator.hasNext()) { + String key = (String) iterator.next(); + + if (key.equals(ClimateData.KEY_CABIN_TEMPERATURE) || key.equals(ClimateData.KEY_EXTERNAL_TEMPERATURE)) { + JSONObject objectEquals = (JSONObject) JsonUtils.readObjectFromJsonObject(reference, key); + JSONObject testEquals = (JSONObject) JsonUtils.readObjectFromJsonObject(underTest, key); + Hashtable<String, Object> hashReference = JsonRPCMarshaller.deserializeJSONObject(objectEquals); + Hashtable<String, Object> hashTest = JsonRPCMarshaller.deserializeJSONObject(testEquals); + assertTrue(TestValues.TRUE, Validator.validateTemperature(new Temperature(hashReference), new Temperature(hashTest))); + } else { + assertEquals(TestValues.MATCH, JsonUtils.readObjectFromJsonObject(reference, key), JsonUtils.readObjectFromJsonObject(underTest, key)); + } + } + } catch (JSONException e) { + fail(TestValues.JSON_FAIL); + } + } +} diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SeatOccupancyTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SeatOccupancyTests.java new file mode 100644 index 000000000..70da261b0 --- /dev/null +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SeatOccupancyTests.java @@ -0,0 +1,83 @@ +package com.smartdevicelink.test.rpc.datatypes; + + +import com.smartdevicelink.marshal.JsonRPCMarshaller; +import com.smartdevicelink.proxy.rpc.SeatOccupancy; +import com.smartdevicelink.proxy.rpc.SeatStatus; +import com.smartdevicelink.test.JsonUtils; +import com.smartdevicelink.test.TestValues; +import com.smartdevicelink.test.Validator; + +import junit.framework.TestCase; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; + +public class SeatOccupancyTests extends TestCase { + + private SeatOccupancy msg; + + @Override + public void setUp() { + msg = new SeatOccupancy(); + + msg.setSeatsOccupied(TestValues.GENERAL_SEATS_OCCUPIED); + msg.setSeatsBelted(TestValues.GENERAL_SEATS_BELTED); + } + + /** + * Tests the expected values of the RPC message. + */ + public void testRpcValues() { + // Test Values + List<SeatStatus> seatsBelted = msg.getSeatsBelted(); + List<SeatStatus> seatsOccupied = msg.getSeatsOccupied(); + + // Valid Tests + assertEquals(TestValues.MATCH, TestValues.GENERAL_SEATS_BELTED, seatsBelted); + assertEquals(TestValues.MATCH, TestValues.GENERAL_SEATS_OCCUPIED, seatsOccupied); + + // Invalid/Null Tests + SeatOccupancy msg = new SeatOccupancy(); + assertNotNull(TestValues.NOT_NULL, msg); + + assertNull(TestValues.NULL, msg.getSeatsBelted()); + assertNull(TestValues.NULL, msg.getSeatsOccupied()); + } + + public void testJson() { + JSONObject reference = new JSONObject(); + + try { + reference.put(SeatOccupancy.KEY_SEATS_OCCUPIED, TestValues.JSON_GENERAL_SEATS_OCCUPIED); + reference.put(SeatOccupancy.KEY_SEATS_BELTED, TestValues.JSON_GENERAL_SEATS_BELTED); + + JSONObject underTest = msg.serializeJSON(); + assertEquals(TestValues.MATCH, reference.length(), underTest.length()); + + Iterator<?> iterator = reference.keys(); + while (iterator.hasNext()) { + String key = (String) iterator.next(); + if (key.equals(SeatOccupancy.KEY_SEATS_OCCUPIED) || key.equals(SeatOccupancy.KEY_SEATS_BELTED)) { + JSONArray referenceArray = JsonUtils.readJsonArrayFromJsonObject(reference, key); + JSONArray underTestArray = JsonUtils.readJsonArrayFromJsonObject(underTest, key); + assertEquals(TestValues.MATCH, referenceArray.length(), underTestArray.length()); + + for (int i = 0; i < referenceArray.length(); i++) { + Hashtable<String, Object> hashReference = JsonRPCMarshaller.deserializeJSONObject(referenceArray.getJSONObject(i)); + Hashtable<String, Object> hashTest = JsonRPCMarshaller.deserializeJSONObject(underTestArray.getJSONObject(i)); + assertTrue(TestValues.TRUE, Validator.validateSeatStatus(new SeatStatus(hashReference), new SeatStatus(hashTest))); + } + + } + } + } catch (JSONException e) { + fail(TestValues.JSON_FAIL); + } + } +} diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SeatStatusTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SeatStatusTests.java new file mode 100644 index 000000000..dddf3b2c0 --- /dev/null +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/SeatStatusTests.java @@ -0,0 +1,76 @@ +package com.smartdevicelink.test.rpc.datatypes; + +import com.smartdevicelink.marshal.JsonRPCMarshaller; +import com.smartdevicelink.proxy.rpc.SeatLocation; +import com.smartdevicelink.proxy.rpc.SeatStatus; +import com.smartdevicelink.test.JsonUtils; +import com.smartdevicelink.test.TestValues; +import com.smartdevicelink.test.Validator; + +import junit.framework.TestCase; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Hashtable; +import java.util.Iterator; + +public class SeatStatusTests extends TestCase { + + private SeatStatus msg; + + @Override + public void setUp() { + msg = new SeatStatus(); + + msg.setSeatLocation(TestValues.GENERAL_SEAT_LOCATION); + msg.setConditionActive(TestValues.GENERAL_BOOLEAN); + } + + /** + * Tests the expected values of the RPC message. + */ + public void testRpcValues() { + // Test Values + SeatLocation location = msg.getSeatLocation(); + Boolean conditionActive = msg.getConditionActive(); + + // Valid Tests + assertEquals(TestValues.MATCH, TestValues.GENERAL_SEAT_LOCATION, location); + assertEquals(TestValues.GENERAL_BOOLEAN, (boolean) conditionActive); + + // Invalid/Null Tests + SeatStatus msg = new SeatStatus(); + assertNotNull(TestValues.NOT_NULL, msg); + + assertNull(TestValues.NULL, msg.getSeatLocation()); + assertNull(TestValues.NULL, msg.getConditionActive()); + } + + public void testJson() { + JSONObject reference = new JSONObject(); + + try { + reference.put(SeatStatus.KEY_CONDITION_ACTIVE, TestValues.GENERAL_BOOLEAN); + reference.put(SeatStatus.KEY_SEAT_LOCATION, TestValues.GENERAL_SEAT_LOCATION.serializeJSON()); + + JSONObject underTest = msg.serializeJSON(); + assertEquals(TestValues.MATCH, reference.length(), underTest.length()); + + Iterator<?> iterator = reference.keys(); + while (iterator.hasNext()) { + String key = (String) iterator.next(); + if (key.equals(SeatStatus.KEY_SEAT_LOCATION)) { + Hashtable<String, Object> locationOne = JsonRPCMarshaller.deserializeJSONObject(JsonUtils.readJsonObjectFromJsonObject(reference, key)); + Hashtable<String, Object> locationTwo = JsonRPCMarshaller.deserializeJSONObject(JsonUtils.readJsonObjectFromJsonObject(underTest, key)); + assertTrue(TestValues.TRUE, Validator.validateSeatLocation(new SeatLocation(locationOne), new SeatLocation(locationTwo))); + } else { + assertEquals(TestValues.MATCH, JsonUtils.readObjectFromJsonObject(reference, key), JsonUtils.readObjectFromJsonObject(underTest, key)); + + } + } + } catch (JSONException e) { + fail(TestValues.JSON_FAIL); + } + } +} diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/TextFieldNameTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/TextFieldNameTests.java index 0eb05f848..dad5ea3e2 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/TextFieldNameTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/TextFieldNameTests.java @@ -172,6 +172,8 @@ public class TextFieldNameTests extends TestCase { enumTestList.add(TextFieldName.locationDescription); enumTestList.add(TextFieldName.addressLines); enumTestList.add(TextFieldName.phoneNumber); + enumTestList.add(TextFieldName.timeToDestination); + enumTestList.add(TextFieldName.turnText); enumTestList.add(TextFieldName.templateTitle); enumTestList.add(TextFieldName.subtleAlertText1); enumTestList.add(TextFieldName.subtleAlertText2); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/VehicleDataTypeTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/VehicleDataTypeTests.java index 1b270a9dd..94fbe0100 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/VehicleDataTypeTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/enums/VehicleDataTypeTests.java @@ -90,6 +90,10 @@ public class VehicleDataTypeTests extends TestCase { VehicleDataType enumVehicleDataTypeWindowStatus = VehicleDataType.valueForString(example); example = "VEHICLEDATA_STABILITYCONTROLSSTATUS"; VehicleDataType enumVehicleDataStabilityControlsStatus = VehicleDataType.valueForString(example); + example = "VEHICLEDATA_CLIMATEDATA"; + VehicleDataType enumVehicleDataClimateData = VehicleDataType.valueForString(example); + example = "VEHICLEDATA_SEATOCCUPANCY"; + VehicleDataType enumVehicleDataSeatOccupancy = VehicleDataType.valueForString(example); assertNotNull("VEHICLEDATA_GPS returned null", enumVehicleDataGps); assertNotNull("VEHICLEDATA_SPEED returned null", enumVehicleDataSpeed); @@ -127,6 +131,8 @@ public class VehicleDataTypeTests extends TestCase { assertNotNull("VEHICLEDATA_WINDOWSTATUS returned null", enumVehicleDataTypeWindowStatus); assertNotNull("VEHICLEDATA_GEARSTATUS returned null", enumVehicleDataGearStatus); assertNotNull("VEHICLEDATA_STABILITYCONTROLSSTATUS returned null", enumVehicleDataStabilityControlsStatus); + assertNotNull("VEHICLEDATA_CLIMATEDATA returned null", enumVehicleDataClimateData); + assertNotNull("VEHICLEDATA_SEATOCCUPANCY returned null", enumVehicleDataSeatOccupancy); } /** @@ -198,6 +204,8 @@ public class VehicleDataTypeTests extends TestCase { enumTestList.add(VehicleDataType.VEHICLEDATA_WINDOWSTATUS); enumTestList.add(VehicleDataType.VEHICLEDATA_GEARSTATUS); enumTestList.add(VehicleDataType.VEHICLEDATA_STABILITYCONTROLSSTATUS); + enumTestList.add(VehicleDataType.VEHICLEDATA_CLIMATEDATA); + enumTestList.add(VehicleDataType.VEHICLEDATA_SEATOCCUPANCY); assertTrue("Enum value list does not match enum class list", enumValueList.containsAll(enumTestList) && enumTestList.containsAll(enumValueList)); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/notifications/OnVehicleDataTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/notifications/OnVehicleDataTests.java index cb60f7572..0710c79f5 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/notifications/OnVehicleDataTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/notifications/OnVehicleDataTests.java @@ -6,6 +6,7 @@ import com.smartdevicelink.proxy.RPCMessage; import com.smartdevicelink.proxy.rpc.AirbagStatus; import com.smartdevicelink.proxy.rpc.BeltStatus; import com.smartdevicelink.proxy.rpc.BodyInformation; +import com.smartdevicelink.proxy.rpc.ClimateData; import com.smartdevicelink.proxy.rpc.ClusterModeStatus; import com.smartdevicelink.proxy.rpc.DeviceStatus; import com.smartdevicelink.proxy.rpc.ECallInfo; @@ -17,6 +18,7 @@ import com.smartdevicelink.proxy.rpc.GetVehicleDataResponse; import com.smartdevicelink.proxy.rpc.HeadLampStatus; import com.smartdevicelink.proxy.rpc.MyKey; import com.smartdevicelink.proxy.rpc.OnVehicleData; +import com.smartdevicelink.proxy.rpc.SeatOccupancy; import com.smartdevicelink.proxy.rpc.SingleTireStatus; import com.smartdevicelink.proxy.rpc.StabilityControlsStatus; import com.smartdevicelink.proxy.rpc.TireStatus; @@ -107,6 +109,8 @@ public class OnVehicleDataTests extends BaseRpcTests { result.put(OnVehicleData.KEY_GEAR_STATUS, VehicleDataHelper.GEAR_STATUS); result.put(OnVehicleData.KEY_WINDOW_STATUS, VehicleDataHelper.WINDOW_STATUS_LIST); result.put(OnVehicleData.KEY_STABILITY_CONTROLS_STATUS, VehicleDataHelper.STABILITY_CONTROLS_STATUS); + result.put(OnVehicleData.KEY_SEAT_OCCUPANCY, VehicleDataHelper.SEAT_OCCUPANCY); + result.put(OnVehicleData.KEY_CLIMATE_DATA, VehicleDataHelper.CLIMATE_DATA); result.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, VehicleDataHelper.OEM_CUSTOM_VEHICLE_DATA_STATE); } catch (JSONException e) { fail(TestValues.JSON_FAIL); @@ -152,9 +156,11 @@ public class OnVehicleDataTests extends BaseRpcTests { TurnSignal turnSignal = ((OnVehicleData) msg).getTurnSignal(); ElectronicParkBrakeStatus electronicParkBrakeStatus = ((OnVehicleData) msg).getElectronicParkBrakeStatus(); GearStatus gearStatus = ((OnVehicleData) msg).getGearStatus(); + ClimateData climateData = ((OnVehicleData) msg).getClimateData(); StabilityControlsStatus stabilityControlsStatus = ((OnVehicleData) msg).getStabilityControlsStatus(); Object oemCustomVehicleData = ((OnVehicleData) msg).getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME); Boolean handsOffSteering = ((OnVehicleData) msg).getHandsOffSteering(); + SeatOccupancy seatOccupancy = ((OnVehicleData) msg).getSeatOccupancy(); // Valid Tests assertEquals(TestValues.MATCH, VehicleDataHelper.SPEED, speed); assertEquals(TestValues.MATCH, VehicleDataHelper.RPM, rpm); @@ -176,6 +182,7 @@ public class OnVehicleDataTests extends BaseRpcTests { assertEquals(TestValues.MATCH, VehicleDataHelper.WIPER_STATUS, wiper); assertTrue(TestValues.TRUE, Validator.validateHeadLampStatus(VehicleDataHelper.HEAD_LAMP_STATUS, lamp)); assertEquals(TestValues.MATCH, VehicleDataHelper.ACC_PEDAL_POSITION, pedal); + assertEquals(TestValues.MATCH, VehicleDataHelper.CLIMATE_DATA, climateData); assertEquals(TestValues.MATCH, VehicleDataHelper.STEERING_WHEEL_ANGLE, wheel); assertTrue(TestValues.TRUE, Validator.validateECallInfo(VehicleDataHelper.E_CALL_INFO, ecall)); assertTrue(TestValues.TRUE, Validator.validateAirbagStatus(VehicleDataHelper.AIRBAG_STATUS, airbag)); @@ -189,6 +196,7 @@ public class OnVehicleDataTests extends BaseRpcTests { assertEquals(TestValues.MATCH, VehicleDataHelper.GEAR_STATUS, gearStatus); assertEquals(TestValues.MATCH, VehicleDataHelper.STABILITY_CONTROLS_STATUS, stabilityControlsStatus); assertEquals(TestValues.MATCH, VehicleDataHelper.OEM_CUSTOM_VEHICLE_DATA_STATE, oemCustomVehicleData); + assertEquals(TestValues.MATCH, VehicleDataHelper.SEAT_OCCUPANCY, seatOccupancy); assertEquals(TestValues.MATCH, VehicleDataHelper.HANDS_OFF_STEERING, handsOffSteering); // Invalid/Null Tests OnVehicleData msg = new OnVehicleData(); @@ -227,7 +235,9 @@ public class OnVehicleDataTests extends BaseRpcTests { assertNull(TestValues.NULL, msg.getHandsOffSteering()); assertNull(TestValues.NULL, msg.getWindowStatus()); assertNull(TestValues.NULL, msg.getGearStatus()); + assertNull(TestValues.NULL, msg.getClimateData()); assertNull(TestValues.NULL, msg.getStabilityControlsStatus()); + assertNull(TestValues.NULL, msg.getSeatOccupancy()); assertNull(TestValues.NULL, msg.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } @@ -251,6 +261,8 @@ public class OnVehicleDataTests extends BaseRpcTests { JSONObject windowStatusObj = new JSONObject(); JSONObject gearStatusObj = new JSONObject(); JSONObject stabilityControlStatusObj = new JSONObject(); + JSONObject climateDataObj = new JSONObject(); + JSONObject seatOccupancyObj = new JSONObject(); JSONArray fuelRangeArrayObj = new JSONArray(); JSONArray windowStatusArrayObj = new JSONArray(); @@ -397,6 +409,10 @@ public class OnVehicleDataTests extends BaseRpcTests { gearStatusObj.put(GearStatus.KEY_TRANSMISSION_TYPE, VehicleDataHelper.TRANSMISSION_TYPE); gearStatusObj.put(GearStatus.KEY_ACTUAL_GEAR, VehicleDataHelper.ACTUAL_GEAR); + // SEAT OCCUPANCY + seatOccupancyObj.put(SeatOccupancy.KEY_SEATS_OCCUPIED, VehicleDataHelper.SEATS_OCCUPIED); + seatOccupancyObj.put(SeatOccupancy.KEY_SEATS_BELTED, VehicleDataHelper.SEATS_BELTED); + reference.put(OnVehicleData.KEY_SPEED, VehicleDataHelper.SPEED); reference.put(OnVehicleData.KEY_RPM, VehicleDataHelper.RPM); reference.put(OnVehicleData.KEY_EXTERNAL_TEMPERATURE, VehicleDataHelper.EXTERNAL_TEMPERATURE); @@ -431,6 +447,14 @@ public class OnVehicleDataTests extends BaseRpcTests { reference.put(OnVehicleData.KEY_GEAR_STATUS, gearStatusObj); reference.put(OnVehicleData.KEY_STABILITY_CONTROLS_STATUS, stabilityControlStatusObj); reference.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, VehicleDataHelper.OEM_CUSTOM_VEHICLE_DATA_STATE); + reference.put(OnVehicleData.KEY_SEAT_OCCUPANCY, seatOccupancyObj); + + // CLIMATE_DATA + climateDataObj.put(ClimateData.KEY_ATMOSPHERIC_PRESSURE, VehicleDataHelper.CLIMATE_DATA_ATM_PRESSURE); + climateDataObj.put(ClimateData.KEY_CABIN_TEMPERATURE, VehicleDataHelper.CLIMATE_DATA_CABIN_TEMP.serializeJSON()); + climateDataObj.put(ClimateData.KEY_EXTERNAL_TEMPERATURE, VehicleDataHelper.CLIMATE_DATA_EXT_TEMP.serializeJSON()); + + reference.put(OnVehicleData.KEY_CLIMATE_DATA, climateDataObj); JSONObject underTest = msg.serializeJSON(); //go inside underTest and only return the JSONObject inside the parameters key inside the notification key @@ -528,6 +552,14 @@ public class OnVehicleDataTests extends BaseRpcTests { assertTrue(TestValues.TRUE, Validator.validateGearStatuses( new GearStatus(JsonRPCMarshaller.deserializeJSONObject(myKeyObjReference)), new GearStatus(JsonRPCMarshaller.deserializeJSONObject(myKeyObjTest)))); + } + else if (key.equals(OnVehicleData.KEY_SEAT_OCCUPANCY)) { + JSONObject myKeyObjReference = JsonUtils.readJsonObjectFromJsonObject(reference, key); + JSONObject myKeyObjTest = JsonUtils.readJsonObjectFromJsonObject(underTest, key); + + assertTrue(TestValues.TRUE, Validator.validateSeatOccupancies( + new SeatOccupancy(JsonRPCMarshaller.deserializeJSONObject(myKeyObjReference)), + new SeatOccupancy(JsonRPCMarshaller.deserializeJSONObject(myKeyObjTest)))); } else if (key.equals(OnVehicleData.KEY_ENGINE_OIL_LIFE)) { assertEquals(JsonUtils.readDoubleFromJsonObject(reference, key), JsonUtils.readDoubleFromJsonObject(underTest, key)); } else if (key.equals(OnVehicleData.KEY_HANDS_OFF_STEERING)) { @@ -550,7 +582,21 @@ public class OnVehicleDataTests extends BaseRpcTests { assertTrue(TestValues.TRUE, Validator.validateFuelRange( fuelRangeRefereceList, fuelRangeUnderTestList)); - } else if (key.equals(OnVehicleData.KEY_WINDOW_STATUS)) { + } else if (key.equals(GetVehicleDataResponse.KEY_CLIMATE_DATA)) { + JSONObject myKeyObjReference = JsonUtils.readJsonObjectFromJsonObject(reference, key); + JSONObject myKeyObjTest = JsonUtils.readJsonObjectFromJsonObject(underTest, key); + + ClimateData climateData1 = new ClimateData(JsonRPCMarshaller.deserializeJSONObject(myKeyObjReference)); + ClimateData climateData2 = new ClimateData(JsonRPCMarshaller.deserializeJSONObject(myKeyObjTest)); + + assertTrue("JSON value didn't match expected value for key \"" + key + "\".", + Validator.validateClimateData( + climateData1, + climateData2 + ) + ); + } + else if (key.equals(OnVehicleData.KEY_WINDOW_STATUS)) { JSONArray windowStatusArrayObjReference = JsonUtils.readJsonArrayFromJsonObject(reference, key); List<WindowStatus> windowStatusReferenceList = new ArrayList<>(); for (int index = 0; index < windowStatusArrayObjReference.length(); index++) { diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetVehicleDataTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetVehicleDataTests.java index fe726018f..17f66e47c 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetVehicleDataTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/GetVehicleDataTests.java @@ -65,6 +65,8 @@ public class GetVehicleDataTests extends BaseRpcTests { msg.setWindowStatus(TestValues.GENERAL_BOOLEAN); msg.setGearStatus(TestValues.GENERAL_BOOLEAN); msg.setStabilityControlsStatus(TestValues.GENERAL_BOOLEAN); + msg.setSeatOccupancy(TestValues.GENERAL_BOOLEAN); + msg.setClimateData(TestValues.GENERAL_BOOLEAN); msg.setOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_BOOLEAN); return msg; @@ -118,6 +120,8 @@ public class GetVehicleDataTests extends BaseRpcTests { result.put(GetVehicleData.KEY_GEAR_STATUS, TestValues.GENERAL_BOOLEAN); result.put(GetVehicleData.KEY_WINDOW_STATUS, TestValues.GENERAL_BOOLEAN); result.put(GetVehicleData.KEY_STABILITY_CONTROLS_STATUS, TestValues.GENERAL_BOOLEAN); + result.put(GetVehicleData.KEY_CLIMATE_DATA, TestValues.GENERAL_BOOLEAN); + result.put(GetVehicleData.KEY_SEAT_OCCUPANCY, TestValues.GENERAL_BOOLEAN); result.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_BOOLEAN); } catch (JSONException e) { fail(TestValues.JSON_FAIL); @@ -166,6 +170,8 @@ public class GetVehicleDataTests extends BaseRpcTests { assertTrue(TestValues.TRUE, ((GetVehicleData) msg).getWindowStatus()); assertTrue(TestValues.TRUE, ((GetVehicleData) msg).getGearStatus()); assertTrue(TestValues.TRUE, ((GetVehicleData) msg).getStabilityControlsStatus()); + assertTrue(TestValues.TRUE, ((GetVehicleData) msg).getSeatOccupancy()); + assertTrue(TestValues.TRUE, ((GetVehicleData) msg).getClimateData()); assertTrue(TestValues.TRUE, ((GetVehicleData) msg).getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); // Invalid/Null Tests @@ -206,6 +212,8 @@ public class GetVehicleDataTests extends BaseRpcTests { assertNull(TestValues.NULL, msg.getWindowStatus()); assertNull(TestValues.NULL, msg.getGearStatus()); assertNull(TestValues.NULL, msg.getStabilityControlsStatus()); + assertNull(TestValues.NULL, msg.getClimateData()); + assertNull(TestValues.NULL, msg.getSeatOccupancy()); assertNull(TestValues.NULL, msg.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } @@ -261,7 +269,9 @@ public class GetVehicleDataTests extends BaseRpcTests { assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, GetVehicleData.KEY_HANDS_OFF_STEERING), cmd.getHandsOffSteering()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, GetVehicleData.KEY_WINDOW_STATUS), cmd.getWindowStatus()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, GetVehicleData.KEY_GEAR_STATUS), cmd.getGearStatus()); + assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, GetVehicleData.KEY_SEAT_OCCUPANCY), cmd.getSeatOccupancy()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, GetVehicleData.KEY_STABILITY_CONTROLS_STATUS), cmd.getStabilityControlsStatus()); + assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, GetVehicleData.KEY_CLIMATE_DATA), cmd.getClimateData()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME), cmd.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } catch (JSONException e) { fail(TestValues.JSON_FAIL); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/SubscribeVehicleDataTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/SubscribeVehicleDataTests.java index 528eeb128..32750af89 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/SubscribeVehicleDataTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/SubscribeVehicleDataTests.java @@ -63,7 +63,9 @@ public class SubscribeVehicleDataTests extends BaseRpcTests { msg.setHandsOffSteering(TestValues.GENERAL_BOOLEAN); msg.setWindowStatus(TestValues.GENERAL_BOOLEAN); msg.setGearStatus(TestValues.GENERAL_BOOLEAN); + msg.setSeatOccupancy(TestValues.GENERAL_BOOLEAN); msg.setStabilityControlsStatus(TestValues.GENERAL_BOOLEAN); + msg.setClimateData(TestValues.GENERAL_BOOLEAN); msg.setOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_BOOLEAN); return msg; @@ -116,6 +118,8 @@ public class SubscribeVehicleDataTests extends BaseRpcTests { result.put(SubscribeVehicleData.KEY_WINDOW_STATUS, TestValues.GENERAL_BOOLEAN); result.put(SubscribeVehicleData.KEY_GEAR_STATUS, TestValues.GENERAL_BOOLEAN); result.put(SubscribeVehicleData.KEY_STABILITY_CONTROLS_STATUS, TestValues.GENERAL_BOOLEAN); + result.put(SubscribeVehicleData.KEY_CLIMATE_DATA, TestValues.GENERAL_BOOLEAN); + result.put(SubscribeVehicleData.KEY_SEAT_OCCUPANCY, TestValues.GENERAL_BOOLEAN); result.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_BOOLEAN); } catch (JSONException e) { fail(TestValues.JSON_FAIL); @@ -163,6 +167,8 @@ public class SubscribeVehicleDataTests extends BaseRpcTests { assertTrue(TestValues.MATCH, ((SubscribeVehicleData) msg).getWindowStatus()); assertTrue(TestValues.MATCH, ((SubscribeVehicleData) msg).getGearStatus()); assertTrue(TestValues.MATCH, ((SubscribeVehicleData) msg).getStabilityControlsStatus()); + assertTrue(TestValues.MATCH, ((SubscribeVehicleData) msg).getClimateData()); + assertTrue(TestValues.MATCH, ((SubscribeVehicleData) msg).getSeatOccupancy()); assertTrue(TestValues.MATCH, ((SubscribeVehicleData) msg).getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); // Invalid/Null Tests @@ -202,6 +208,8 @@ public class SubscribeVehicleDataTests extends BaseRpcTests { assertNull(TestValues.NULL, msg.getWindowStatus()); assertNull(TestValues.NULL, msg.getGearStatus()); assertNull(TestValues.NULL, msg.getStabilityControlsStatus()); + assertNull(TestValues.NULL, msg.getClimateData()); + assertNull(TestValues.NULL, msg.getSeatOccupancy()); assertNull(TestValues.NULL, msg.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } @@ -256,6 +264,8 @@ public class SubscribeVehicleDataTests extends BaseRpcTests { assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, SubscribeVehicleData.KEY_HANDS_OFF_STEERING), cmd.getHandsOffSteering()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, SubscribeVehicleData.KEY_WINDOW_STATUS), cmd.getWindowStatus()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, SubscribeVehicleData.KEY_STABILITY_CONTROLS_STATUS), cmd.getStabilityControlsStatus()); + assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, SubscribeVehicleData.KEY_CLIMATE_DATA), cmd.getClimateData()); + assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, SubscribeVehicleData.KEY_SEAT_OCCUPANCY), cmd.getSeatOccupancy()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME), cmd.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } catch (JSONException e) { fail(TestValues.JSON_FAIL); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/UnsubscribeVehicleDataTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/UnsubscribeVehicleDataTests.java index cfe2548f3..4aeb5ce66 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/UnsubscribeVehicleDataTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/requests/UnsubscribeVehicleDataTests.java @@ -67,6 +67,8 @@ public class UnsubscribeVehicleDataTests extends BaseRpcTests { msg.setHandsOffSteering(TestValues.GENERAL_BOOLEAN); msg.setWindowStatus(TestValues.GENERAL_BOOLEAN); msg.setStabilityControlsStatus(TestValues.GENERAL_BOOLEAN); + msg.setSeatOccupancy(TestValues.GENERAL_BOOLEAN); + msg.setClimateData(TestValues.GENERAL_BOOLEAN); msg.setOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_BOOLEAN); return msg; @@ -120,6 +122,8 @@ public class UnsubscribeVehicleDataTests extends BaseRpcTests { result.put(UnsubscribeVehicleData.KEY_WINDOW_STATUS, TestValues.GENERAL_BOOLEAN); result.put(UnsubscribeVehicleData.KEY_GEAR_STATUS, TestValues.GENERAL_BOOLEAN); result.put(UnsubscribeVehicleData.KEY_STABILITY_CONTROLS_STATUS, TestValues.GENERAL_BOOLEAN); + result.put(UnsubscribeVehicleData.KEY_SEAT_OCCUPANCY, TestValues.GENERAL_BOOLEAN); + result.put(UnsubscribeVehicleData.KEY_CLIMATE_DATA, TestValues.GENERAL_BOOLEAN); result.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_BOOLEAN); } catch (JSONException e) { fail(TestValues.JSON_FAIL); @@ -167,6 +171,8 @@ public class UnsubscribeVehicleDataTests extends BaseRpcTests { assertTrue(TestValues.TRUE, ((UnsubscribeVehicleData) msg).getWindowStatus()); assertTrue(TestValues.TRUE, ((UnsubscribeVehicleData) msg).getGearStatus()); assertTrue(TestValues.TRUE, ((UnsubscribeVehicleData) msg).getStabilityControlsStatus()); + assertTrue(TestValues.TRUE, ((UnsubscribeVehicleData) msg).getClimateData()); + assertTrue(TestValues.TRUE, ((UnsubscribeVehicleData) msg).getSeatOccupancy()); assertTrue(TestValues.TRUE, ((UnsubscribeVehicleData) msg).getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); // Invalid/Null Tests UnsubscribeVehicleData msg = new UnsubscribeVehicleData(); @@ -206,6 +212,8 @@ public class UnsubscribeVehicleDataTests extends BaseRpcTests { assertNull(TestValues.NULL, msg.getWindowStatus()); assertNull(TestValues.NULL, msg.getGearStatus()); assertNull(TestValues.NULL, msg.getStabilityControlsStatus()); + assertNull(TestValues.NULL, msg.getSeatOccupancy()); + assertNull(TestValues.NULL, msg.getClimateData()); assertNull(TestValues.NULL, msg.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } @@ -262,6 +270,8 @@ public class UnsubscribeVehicleDataTests extends BaseRpcTests { assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, UnsubscribeVehicleData.KEY_WINDOW_STATUS), cmd.getWindowStatus()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, UnsubscribeVehicleData.KEY_GEAR_STATUS), cmd.getGearStatus()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, UnsubscribeVehicleData.KEY_STABILITY_CONTROLS_STATUS), cmd.getStabilityControlsStatus()); + assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, UnsubscribeVehicleData.KEY_CLIMATE_DATA), cmd.getClimateData()); + assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, UnsubscribeVehicleData.KEY_SEAT_OCCUPANCY), cmd.getSeatOccupancy()); assertEquals(TestValues.MATCH, JsonUtils.readBooleanFromJsonObject(parameters, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME), cmd.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } catch (JSONException e) { diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/GetVehicleDataResponseTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/GetVehicleDataResponseTests.java index 606283cc7..8430fd728 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/GetVehicleDataResponseTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/GetVehicleDataResponseTests.java @@ -6,6 +6,7 @@ import com.smartdevicelink.proxy.RPCMessage; import com.smartdevicelink.proxy.rpc.AirbagStatus; import com.smartdevicelink.proxy.rpc.BeltStatus; import com.smartdevicelink.proxy.rpc.BodyInformation; +import com.smartdevicelink.proxy.rpc.ClimateData; import com.smartdevicelink.proxy.rpc.ClusterModeStatus; import com.smartdevicelink.proxy.rpc.DeviceStatus; import com.smartdevicelink.proxy.rpc.ECallInfo; @@ -16,6 +17,7 @@ import com.smartdevicelink.proxy.rpc.GearStatus; import com.smartdevicelink.proxy.rpc.GetVehicleDataResponse; import com.smartdevicelink.proxy.rpc.HeadLampStatus; import com.smartdevicelink.proxy.rpc.MyKey; +import com.smartdevicelink.proxy.rpc.SeatOccupancy; import com.smartdevicelink.proxy.rpc.SingleTireStatus; import com.smartdevicelink.proxy.rpc.StabilityControlsStatus; import com.smartdevicelink.proxy.rpc.TireStatus; @@ -105,6 +107,8 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { result.put(GetVehicleDataResponse.KEY_HANDS_OFF_STEERING, VehicleDataHelper.HANDS_OFF_STEERING); result.put(GetVehicleDataResponse.KEY_GEAR_STATUS, VehicleDataHelper.GEAR_STATUS); result.put(GetVehicleDataResponse.KEY_STABILITY_CONTROLS_STATUS, VehicleDataHelper.STABILITY_CONTROLS_STATUS); + result.put(GetVehicleDataResponse.KEY_CLIMATE_DATA, VehicleDataHelper.CLIMATE_DATA); + result.put(GetVehicleDataResponse.KEY_SEAT_OCCUPANCY, VehicleDataHelper.SEAT_OCCUPANCY); result.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, VehicleDataHelper.OEM_CUSTOM_VEHICLE_DATA_STATE); } catch (JSONException e) { fail(TestValues.JSON_FAIL); @@ -133,6 +137,8 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { JSONObject fuelRangeObj = new JSONObject(); JSONObject windowStatusObj = new JSONObject(); JSONObject gearStatusObj = new JSONObject(); + JSONObject seatOccupancyObj = new JSONObject(); + JSONObject climateDataObj = new JSONObject(); JSONArray fuelRangeArrayObj = new JSONArray(); JSONArray windowStatusArrayObj = new JSONArray(); @@ -278,6 +284,15 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { windowStatusObj.put(WindowStatus.KEY_STATE, VehicleDataHelper.WINDOW_STATE); windowStatusArrayObj.put(windowStatusObj); + // CLIMATE_DATA + climateDataObj.put(ClimateData.KEY_ATMOSPHERIC_PRESSURE, VehicleDataHelper.CLIMATE_DATA_ATM_PRESSURE); + climateDataObj.put(ClimateData.KEY_CABIN_TEMPERATURE, VehicleDataHelper.CLIMATE_DATA_CABIN_TEMP.serializeJSON()); + climateDataObj.put(ClimateData.KEY_EXTERNAL_TEMPERATURE, VehicleDataHelper.CLIMATE_DATA_EXT_TEMP.serializeJSON()); + + // SEAT_OCCUPANCY + seatOccupancyObj.put(SeatOccupancy.KEY_SEATS_BELTED, VehicleDataHelper.SEATS_BELTED); + seatOccupancyObj.put(SeatOccupancy.KEY_SEATS_OCCUPIED, VehicleDataHelper.SEATS_OCCUPIED); + reference.put(GetVehicleDataResponse.KEY_SPEED, VehicleDataHelper.SPEED); reference.put(GetVehicleDataResponse.KEY_RPM, VehicleDataHelper.RPM); reference.put(GetVehicleDataResponse.KEY_EXTERNAL_TEMPERATURE, VehicleDataHelper.EXTERNAL_TEMPERATURE); @@ -307,10 +322,12 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { reference.put(GetVehicleDataResponse.KEY_FUEL_RANGE, fuelRangeArrayObj); reference.put(GetVehicleDataResponse.KEY_TURN_SIGNAL, TurnSignal.OFF); reference.put(GetVehicleDataResponse.KEY_GEAR_STATUS, gearStatusObj); + reference.put(GetVehicleDataResponse.KEY_CLIMATE_DATA, climateDataObj); reference.put(GetVehicleDataResponse.KEY_ELECTRONIC_PARK_BRAKE_STATUS, VehicleDataHelper.ELECTRONIC_PARK_BRAKE_STATUS); reference.put(GetVehicleDataResponse.KEY_WINDOW_STATUS, windowStatusArrayObj); reference.put(GetVehicleDataResponse.KEY_HANDS_OFF_STEERING, VehicleDataHelper.HANDS_OFF_STEERING); reference.put(GetVehicleDataResponse.KEY_STABILITY_CONTROLS_STATUS, stabilityControlsStatusObj); + reference.put(GetVehicleDataResponse.KEY_SEAT_OCCUPANCY, seatOccupancyObj); reference.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, VehicleDataHelper.OEM_CUSTOM_VEHICLE_DATA_STATE); JSONObject underTest = msg.serializeJSON(); @@ -424,6 +441,13 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { assertTrue(TestValues.TRUE, Validator.validateGearStatuses( new GearStatus(JsonRPCMarshaller.deserializeJSONObject(myKeyObjReference)), new GearStatus(JsonRPCMarshaller.deserializeJSONObject(myKeyObjTest)))); + } else if (key.equals(GetVehicleDataResponse.KEY_SEAT_OCCUPANCY)) { + JSONObject myKeyObjReference = JsonUtils.readJsonObjectFromJsonObject(reference, key); + JSONObject myKeyObjTest = JsonUtils.readJsonObjectFromJsonObject(underTest, key); + + assertTrue(TestValues.TRUE, Validator.validateSeatOccupancies( + new SeatOccupancy(JsonRPCMarshaller.deserializeJSONObject(myKeyObjReference)), + new SeatOccupancy(JsonRPCMarshaller.deserializeJSONObject(myKeyObjTest)))); } else if (key.equals(GetVehicleDataResponse.KEY_STABILITY_CONTROLS_STATUS)) { JSONObject myKeyObjReference = JsonUtils.readJsonObjectFromJsonObject(reference, key); JSONObject myKeyObjTest = JsonUtils.readJsonObjectFromJsonObject(underTest, key); @@ -437,6 +461,24 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { status2 ) ); + } else if (key.equals(GetVehicleDataResponse.KEY_CLIMATE_DATA)) { + + + JSONObject myKeyObjReference = JsonUtils.readJsonObjectFromJsonObject(reference, key); + JSONObject myKeyObjTest = JsonUtils.readJsonObjectFromJsonObject(underTest, key); + + Hashtable<String, Object> hashReference = JsonRPCMarshaller.deserializeJSONObject(myKeyObjReference); + Hashtable<String, Object> hashTest = JsonRPCMarshaller.deserializeJSONObject(myKeyObjTest); + + ClimateData climateData1 = new ClimateData(hashReference); + ClimateData climateData2 = new ClimateData(hashTest); + + assertTrue("JSON value didn't match expected value for key \"" + key + "\".", + Validator.validateClimateData( + climateData1, + climateData2 + ) + ); } else if (key.equals(GetVehicleDataResponse.KEY_FUEL_RANGE)) { JSONArray fuelRangeArrayObjReference = JsonUtils.readJsonArrayFromJsonObject(reference, key); List<FuelRange> fuelRangeRefereceList = new ArrayList<FuelRange>(); @@ -525,6 +567,8 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { assertEquals(TestValues.MATCH, VehicleDataHelper.GEAR_STATUS, ((GetVehicleDataResponse) msg).getGearStatus()); assertEquals(TestValues.MATCH, VehicleDataHelper.HANDS_OFF_STEERING, ((GetVehicleDataResponse) msg).getHandsOffSteering()); assertEquals(TestValues.MATCH, VehicleDataHelper.STABILITY_CONTROLS_STATUS, ((GetVehicleDataResponse) msg).getStabilityControlsStatus()); + assertEquals(TestValues.MATCH, VehicleDataHelper.CLIMATE_DATA, ((GetVehicleDataResponse) msg).getClimateData()); + assertEquals(TestValues.MATCH, VehicleDataHelper.SEAT_OCCUPANCY, ((GetVehicleDataResponse) msg).getSeatOccupancy()); assertEquals(TestValues.MATCH, VehicleDataHelper.OEM_CUSTOM_VEHICLE_DATA_STATE, ((GetVehicleDataResponse) msg).getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); // Invalid/Null Tests @@ -563,6 +607,8 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { assertNull(TestValues.NULL, msg.getHandsOffSteering()); assertNull(TestValues.NULL, msg.getStabilityControlsStatus()); assertNull(TestValues.NULL, msg.getWindowStatus()); + assertNull(TestValues.NULL, msg.getClimateData()); + assertNull(TestValues.NULL, msg.getSeatOccupancy()); assertNull(TestValues.NULL, msg.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } @@ -647,11 +693,19 @@ public class GetVehicleDataResponseTests extends BaseRpcTests { ClusterModeStatus clusterModeStatus = new ClusterModeStatus(JsonRPCMarshaller.deserializeJSONObject(clusterModeStatusObj)); assertTrue(TestValues.TRUE, Validator.validateClusterModeStatus(clusterModeStatus, cmd.getClusterModeStatus())); + JSONObject climateDataObj = JsonUtils.readJsonObjectFromJsonObject(parameters, GetVehicleDataResponse.KEY_CLIMATE_DATA); + ClimateData climateData = new ClimateData(JsonRPCMarshaller.deserializeJSONObject(climateDataObj)); + assertTrue(TestValues.TRUE, Validator.validateClimateData(climateData, cmd.getClimateData())); + JSONObject gearStatusObj = JsonUtils.readJsonObjectFromJsonObject(parameters, GetVehicleDataResponse.KEY_GEAR_STATUS); GearStatus gearStatus = new GearStatus(JsonRPCMarshaller.deserializeJSONObject(gearStatusObj)); GearStatus cmdStatus = cmd.getGearStatus(); assertTrue(TestValues.TRUE, Validator.validateGearStatuses(gearStatus, cmdStatus)); + JSONObject seatOccupancyObj = JsonUtils.readJsonObjectFromJsonObject(parameters, GetVehicleDataResponse.KEY_SEAT_OCCUPANCY); + SeatOccupancy seatOccupancy = new SeatOccupancy(JsonRPCMarshaller.deserializeJSONObject(seatOccupancyObj)); + assertTrue(TestValues.TRUE, Validator.validateSeatOccupancies(seatOccupancy, cmd.getSeatOccupancy())); + JSONObject myKeyObj = JsonUtils.readJsonObjectFromJsonObject(parameters, GetVehicleDataResponse.KEY_MY_KEY); MyKey myKey = new MyKey(JsonRPCMarshaller.deserializeJSONObject(myKeyObj)); assertTrue(TestValues.TRUE, Validator.validateMyKey(myKey, cmd.getMyKey())); diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/SubscribeVehicleDataResponseTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/SubscribeVehicleDataResponseTest.java index 6f9c9a45c..278a29b35 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/SubscribeVehicleDataResponseTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/SubscribeVehicleDataResponseTest.java @@ -70,6 +70,8 @@ public class SubscribeVehicleDataResponseTest extends BaseRpcTests { msg.setWindowStatus(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_WINDOWSTATUS.ordinal())); msg.setStabilityControlsStatus(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_STABILITYCONTROLSSTATUS.ordinal())); msg.setOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA); + msg.setSeatOccupancy(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_SEATOCCUPANCY.ordinal())); + msg.setClimateData(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_CLIMATEDATA.ordinal())); return msg; } @@ -128,6 +130,9 @@ public class SubscribeVehicleDataResponseTest extends BaseRpcTests { result.put(SubscribeVehicleDataResponse.KEY_ELECTRONIC_PARK_BRAKE_STATUS, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_ELECTRONICPARKBRAKESTATUS.ordinal()).serializeJSON()); result.put(SubscribeVehicleDataResponse.KEY_HANDS_OFF_STEERING, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_HANDSOFFSTEERING.ordinal()).serializeJSON()); result.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA.serializeJSON()); + result.put(SubscribeVehicleDataResponse.KEY_CLIMATE_DATA, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_CLIMATEDATA.ordinal()).serializeJSON()); + result.put(SubscribeVehicleDataResponse.KEY_SEAT_OCCUPANCY, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_SEATOCCUPANCY.ordinal()).serializeJSON()); + } catch (JSONException e) { fail(TestValues.JSON_FAIL); } @@ -174,7 +179,9 @@ public class SubscribeVehicleDataResponseTest extends BaseRpcTests { VehicleDataResult testWindowStatus = ((SubscribeVehicleDataResponse) msg).getWindowStatus(); VehicleDataResult testGearStatus = ((SubscribeVehicleDataResponse) msg).getGearStatus(); VehicleDataResult testStabilityControlStatus = ((SubscribeVehicleDataResponse) msg).getStabilityControlsStatus(); + VehicleDataResult testClimateData = ((SubscribeVehicleDataResponse) msg).getClimateData(); VehicleDataResult testOEMCustomVehicleData = ((SubscribeVehicleDataResponse) msg).getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME); + VehicleDataResult testSeatOccupancy = ((SubscribeVehicleDataResponse) msg).getSeatOccupancy(); // Valid Tests assertTrue(TestValues.TRUE, testResult.equals(TestValues.GENERAL_RESULT)); @@ -211,6 +218,8 @@ public class SubscribeVehicleDataResponseTest extends BaseRpcTests { assertTrue(TestValues.TRUE, testWindowStatus.getDataType().equals(VehicleDataType.VEHICLEDATA_WINDOWSTATUS)); assertTrue(TestValues.TRUE, testStabilityControlStatus.getDataType().equals(VehicleDataType.VEHICLEDATA_STABILITYCONTROLSSTATUS)); assertTrue(TestValues.TRUE, testOEMCustomVehicleData.getOEMCustomVehicleDataType().equals(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); + assertTrue(TestValues.TRUE, testClimateData.getDataType().equals(VehicleDataType.VEHICLEDATA_CLIMATEDATA)); + assertTrue(TestValues.TRUE, testSeatOccupancy.getDataType().equals(VehicleDataType.VEHICLEDATA_SEATOCCUPANCY)); // Invalid/Null Tests SubscribeVehicleDataResponse msg = new SubscribeVehicleDataResponse(); @@ -250,6 +259,8 @@ public class SubscribeVehicleDataResponseTest extends BaseRpcTests { assertNull(TestValues.NULL, msg.getWindowStatus()); assertNull(TestValues.NULL, msg.getGearStatus()); assertNull(TestValues.NULL, msg.getStabilityControlsStatus()); + assertNull(TestValues.NULL, msg.getClimateData()); + assertNull(TestValues.NULL, msg.getSeatOccupancy()); assertNull(TestValues.NULL, msg.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } @@ -402,9 +413,17 @@ public class SubscribeVehicleDataResponseTest extends BaseRpcTests { VehicleDataResult referenceStabilityControlStatus = new VehicleDataResult(JsonRPCMarshaller.deserializeJSONObject(stabilityControlStatus)); assertTrue(TestValues.TRUE, Validator.validateStabilityControlStatus(referenceStabilityControlStatus, cmd.getStabilityControlsStatus())); + JSONObject climateData = JsonUtils.readJsonObjectFromJsonObject(parameters, SubscribeVehicleDataResponse.KEY_CLIMATE_DATA); + VehicleDataResult referenceClimateData = new VehicleDataResult(JsonRPCMarshaller.deserializeJSONObject(climateData)); + assertTrue(TestValues.TRUE, Validator.validateVehicleDataResult(referenceClimateData, cmd.getClimateData())); + JSONObject oemCustomVehicleDataName = JsonUtils.readJsonObjectFromJsonObject(parameters, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME); VehicleDataResult referenceOemCustomData = new VehicleDataResult(JsonRPCMarshaller.deserializeJSONObject(oemCustomVehicleDataName)); assertTrue(TestValues.TRUE, Validator.validateVehicleDataResult(referenceOemCustomData, cmd.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME))); + + JSONObject seatOccupancy = JsonUtils.readJsonObjectFromJsonObject(parameters, SubscribeVehicleDataResponse.KEY_SEAT_OCCUPANCY); + VehicleDataResult referenceSeatOccupancy = new VehicleDataResult(JsonRPCMarshaller.deserializeJSONObject(seatOccupancy)); + assertTrue(TestValues.TRUE, Validator.validateVehicleDataResult(referenceSeatOccupancy, cmd.getSeatOccupancy())); } catch (JSONException e) { e.printStackTrace(); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/UnsubscribeVehicleDataResponseTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/UnsubscribeVehicleDataResponseTest.java index 1d5504b08..6169de07f 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/UnsubscribeVehicleDataResponseTest.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/responses/UnsubscribeVehicleDataResponseTest.java @@ -70,8 +70,10 @@ public class UnsubscribeVehicleDataResponseTest extends BaseRpcTests { msg.setWindowStatus(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_WINDOWSTATUS.ordinal())); msg.setHandsOffSteering(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_HANDSOFFSTEERING.ordinal())); msg.setGearStatus(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_GEARSTATUS.ordinal())); + msg.setSeatOccupancy(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_SEATOCCUPANCY.ordinal())); msg.setStabilityControlsStatus(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_STABILITYCONTROLSSTATUS.ordinal())); msg.setOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA); + msg.setClimateData(TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_CLIMATEDATA.ordinal())); return msg; } @@ -129,8 +131,11 @@ public class UnsubscribeVehicleDataResponseTest extends BaseRpcTests { result.put(SubscribeVehicleDataResponse.KEY_STABILITY_CONTROLS_STATUS, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_STABILITYCONTROLSSTATUS.ordinal()).serializeJSON()); result.put(SubscribeVehicleDataResponse.KEY_ELECTRONIC_PARK_BRAKE_STATUS, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_ELECTRONICPARKBRAKESTATUS.ordinal()).serializeJSON()); result.put(SubscribeVehicleDataResponse.KEY_HANDS_OFF_STEERING, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_HANDSOFFSTEERING.ordinal()).serializeJSON()); + result.put(SubscribeVehicleDataResponse.KEY_SEAT_OCCUPANCY, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_SEATOCCUPANCY.ordinal()).serializeJSON()); result.put(SubscribeVehicleDataResponse.KEY_WINDOW_STATUS, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_WINDOWSTATUS.ordinal()).serializeJSON()); result.put(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME, TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA.serializeJSON()); + result.put(SubscribeVehicleDataResponse.KEY_CLIMATE_DATA, TestValues.GENERAL_VEHICLEDATARESULT_LIST.get(VehicleDataType.VEHICLEDATA_CLIMATEDATA.ordinal()).serializeJSON()); + } catch (JSONException e) { fail(TestValues.JSON_FAIL); } @@ -177,7 +182,9 @@ public class UnsubscribeVehicleDataResponseTest extends BaseRpcTests { VehicleDataResult testGearStatus = ((UnsubscribeVehicleDataResponse) msg).getGearStatus(); VehicleDataResult testWindowStatus = ((UnsubscribeVehicleDataResponse) msg).getWindowStatus(); VehicleDataResult testStabilityControlStatus = ((UnsubscribeVehicleDataResponse) msg).getStabilityControlsStatus(); + VehicleDataResult testClimateData = ((UnsubscribeVehicleDataResponse) msg).getClimateData(); VehicleDataResult testOemCustomData = ((UnsubscribeVehicleDataResponse) msg).getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME); + VehicleDataResult testSeatOccupancy = ((UnsubscribeVehicleDataResponse) msg).getSeatOccupancy(); // Valid Tests assertTrue(TestValues.TRUE, testResult.equals(TestValues.GENERAL_RESULT)); @@ -213,7 +220,9 @@ public class UnsubscribeVehicleDataResponseTest extends BaseRpcTests { assertTrue(TestValues.TRUE, testWindowStatus.getDataType().equals(VehicleDataType.VEHICLEDATA_WINDOWSTATUS)); assertTrue(TestValues.TRUE, testStabilityControlStatus.getDataType().equals(VehicleDataType.VEHICLEDATA_STABILITYCONTROLSSTATUS)); assertTrue(TestValues.TRUE, testOemCustomData.getOEMCustomVehicleDataType().equals(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); + assertTrue(TestValues.TRUE, testClimateData.getDataType().equals(VehicleDataType.VEHICLEDATA_CLIMATEDATA)); assertTrue(TestValues.TRUE, testGearStatus.getDataType().equals(VehicleDataType.VEHICLEDATA_GEARSTATUS)); + assertTrue(TestValues.TRUE, testSeatOccupancy.getDataType().equals(VehicleDataType.VEHICLEDATA_SEATOCCUPANCY)); // Invalid/Null Tests UnsubscribeVehicleDataResponse msg = new UnsubscribeVehicleDataResponse(); @@ -254,6 +263,8 @@ public class UnsubscribeVehicleDataResponseTest extends BaseRpcTests { assertNull(TestValues.NULL, msg.getWindowStatus()); assertNull(TestValues.NULL, msg.getHandsOffSteering()); assertNull(TestValues.NULL, msg.getStabilityControlsStatus()); + assertNull(TestValues.NULL, msg.getClimateData()); + assertNull(TestValues.NULL, msg.getSeatOccupancy()); assertNull(TestValues.NULL, msg.getOEMCustomVehicleData(TestValues.GENERAL_OEM_CUSTOM_VEHICLE_DATA_NAME)); } @@ -409,6 +420,14 @@ public class UnsubscribeVehicleDataResponseTest extends BaseRpcTests { JSONObject stabilityControlsStatus = JsonUtils.readJsonObjectFromJsonObject(parameters, UnsubscribeVehicleDataResponse.KEY_STABILITY_CONTROLS_STATUS); VehicleDataResult referenceStabilityControlStatus = new VehicleDataResult(JsonRPCMarshaller.deserializeJSONObject(stabilityControlsStatus)); assertTrue(TestValues.TRUE, Validator.validateStabilityControlStatus(referenceStabilityControlStatus, cmd.getStabilityControlsStatus())); + + JSONObject climateData = JsonUtils.readJsonObjectFromJsonObject(parameters, UnsubscribeVehicleDataResponse.KEY_CLIMATE_DATA); + VehicleDataResult referenceClimateData = new VehicleDataResult(JsonRPCMarshaller.deserializeJSONObject(climateData)); + assertTrue(TestValues.TRUE, Validator.validateVehicleDataResult(referenceClimateData, cmd.getClimateData())); + + JSONObject seatOccupancy = JsonUtils.readJsonObjectFromJsonObject(parameters, UnsubscribeVehicleDataResponse.KEY_SEAT_OCCUPANCY); + VehicleDataResult referenceSeatOccupancy = new VehicleDataResult(JsonRPCMarshaller.deserializeJSONObject(seatOccupancy)); + assertTrue(TestValues.TRUE, Validator.validateVehicleDataResult(referenceSeatOccupancy, cmd.getSeatOccupancy())); } catch (JSONException e) { e.printStackTrace(); } diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/streaming/MockInterfaceBroker.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/streaming/MockInterfaceBroker.java index 364e6c976..57d2fa1b2 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/streaming/MockInterfaceBroker.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/streaming/MockInterfaceBroker.java @@ -3,6 +3,7 @@ package com.smartdevicelink.test.streaming; import com.smartdevicelink.proxy.RPCMessage; import com.smartdevicelink.session.ISdlSessionListener; import com.smartdevicelink.transport.BaseTransportConfig; +import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; /** @@ -24,7 +25,7 @@ public class MockInterfaceBroker implements ISdlSessionListener { } @Override - public void onSessionStarted(int sessionID, Version version) { + public void onSessionStarted(int sessionID, Version version, SystemInfo systemInfo) { } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java index 99af62a74..fe06561ee 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java @@ -34,6 +34,7 @@ package com.smartdevicelink.managers; import com.smartdevicelink.managers.lifecycle.LifecycleConfigurationUpdate; import com.smartdevicelink.proxy.rpc.enums.Language; +import com.smartdevicelink.util.SystemInfo; public interface SdlManagerListener extends BaseSdlManagerListener { @@ -68,4 +69,12 @@ public interface SdlManagerListener extends BaseSdlManagerListener { * otherwise null to indicate that the language is not supported. */ LifecycleConfigurationUpdate managerShouldUpdateLifecycle(Language language, Language hmiLanguage); + + /** + * A way to determine if this SDL session should continue to be active while + * connected to the determined system information of the vehicle. + * @param systemInfo systemInfo - the system information of the vehicle that this session is currently active on. + * @return Return true if this session should continue, false if the session should end + */ + boolean onSystemInfoReceived(SystemInfo systemInfo); } diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java b/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java index 480f4cdbb..74701c867 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/session/SdlSession.java @@ -41,12 +41,15 @@ import com.smartdevicelink.protocol.ISdlServiceListener; import com.smartdevicelink.protocol.SdlPacket; import com.smartdevicelink.protocol.SdlProtocol; import com.smartdevicelink.protocol.SdlProtocolBase; +import com.smartdevicelink.protocol.enums.ControlFrameTags; import com.smartdevicelink.protocol.enums.SessionType; +import com.smartdevicelink.proxy.rpc.VehicleType; import com.smartdevicelink.transport.MultiplexTransportConfig; import com.smartdevicelink.transport.TCPTransportConfig; import com.smartdevicelink.transport.enums.TransportType; import com.smartdevicelink.util.DebugTool; import com.smartdevicelink.util.MediaStreamingStatus; +import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; import java.lang.ref.WeakReference; @@ -152,7 +155,11 @@ public class SdlSession extends BaseSdlSession { if (serviceType != null && serviceType.eq(SessionType.RPC) && this.sessionId == -1) { this.sessionId = sessionID; - this.sessionListener.onSessionStarted(sessionID, version); + SystemInfo systemInfo = null; + if (version != null && version.isNewerThan(new Version(5, 4, 0)) >= 0) { + systemInfo = extractSystemInfo(packet); + } + this.sessionListener.onSessionStarted(sessionID, version, systemInfo); } if (isEncrypted) { diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/util/IntegrationValidator.java b/android/sdl_android/src/main/java/com/smartdevicelink/util/IntegrationValidator.java index d88912c62..44e6bca2f 100644 --- a/android/sdl_android/src/main/java/com/smartdevicelink/util/IntegrationValidator.java +++ b/android/sdl_android/src/main/java/com/smartdevicelink/util/IntegrationValidator.java @@ -52,6 +52,9 @@ public class IntegrationValidator { private static final char CHECK_MARK = 0x2713; private static final char FAIL_MARK = 0x2715; + //FIXME When the CI is stable with API 30 use Manifest.permission.QUERY_ALL_PACKAGES instead + private static final String QUERY_ALL_PACKAGES = "android.permission.QUERY_ALL_PACKAGES"; + public static final int FLAG_SKIP_ROUTER_SERVICE_CHECK = 0x01; @@ -62,7 +65,8 @@ public class IntegrationValidator { builder.append("-----------------------------------\n"); List<ValidationResult> results = new ArrayList<>(); - results.add(checkPermissions(context)); + ValidationResult permissionResults = checkPermissions(context); + results.add(permissionResults); if ((flags & FLAG_SKIP_ROUTER_SERVICE_CHECK) == FLAG_SKIP_ROUTER_SERVICE_CHECK) { results.add(new ValidationResult(true, "SdlRouterService checks were not performed yet due to supplied flags")); @@ -75,7 +79,13 @@ public class IntegrationValidator { } } - results.add(checkBroadcastReceiver(context)); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q || permissionResults.successful) { + //This is done so that we don't provide incorrect information regarding Android 11 + //and the required new permission that causes the broadcast receiver check to fail. + results.add(checkBroadcastReceiver(context)); + } else { + results.add(new ValidationResult(false, "SdlBroadcastReceiver checks were not performed yet due to failing permission check")); + } boolean success = true; for (ValidationResult result : results) { @@ -107,6 +117,9 @@ public class IntegrationValidator { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { permissionList.add(Manifest.permission.FOREGROUND_SERVICE); } + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) { + permissionList.add(QUERY_ALL_PACKAGES); + } try { PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getApplicationContext().getPackageName(), PackageManager.GET_PERMISSIONS); String[] permissionInfos = packageInfo.requestedPermissions; diff --git a/base/src/main/java/com/smartdevicelink/managers/BaseSdlManager.java b/base/src/main/java/com/smartdevicelink/managers/BaseSdlManager.java index 261525b29..6730ee3eb 100644 --- a/base/src/main/java/com/smartdevicelink/managers/BaseSdlManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/BaseSdlManager.java @@ -63,6 +63,7 @@ import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener; import com.smartdevicelink.security.SdlSecurityBase; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; import org.json.JSONException; @@ -149,6 +150,15 @@ abstract class BaseSdlManager { public void onError(LifecycleManager lifeCycleManager, String info, Exception e) { } + + @Override + public boolean onSystemInfoReceived(SystemInfo systemInfo) { + if (managerListener != null) { + return managerListener.onSystemInfoReceived(systemInfo); + } else { + return true; + } + } }; // Sub manager listener diff --git a/base/src/main/java/com/smartdevicelink/managers/lifecycle/BaseLifecycleManager.java b/base/src/main/java/com/smartdevicelink/managers/lifecycle/BaseLifecycleManager.java index 619e48081..e3b7a90a2 100644 --- a/base/src/main/java/com/smartdevicelink/managers/lifecycle/BaseLifecycleManager.java +++ b/base/src/main/java/com/smartdevicelink/managers/lifecycle/BaseLifecycleManager.java @@ -87,6 +87,7 @@ import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.util.CorrelationIdGenerator; import com.smartdevicelink.util.DebugTool; import com.smartdevicelink.util.FileUtls; +import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; import java.util.HashMap; @@ -128,6 +129,7 @@ abstract class BaseLifecycleManager { final Version minimumRPCVersion; BaseTransportConfig _transportConfig; private Taskmaster taskmaster; + private boolean didCheckSystemInfo = false; BaseLifecycleManager(AppConfig appConfig, BaseTransportConfig config, LifecycleListener listener) { this.appConfig = appConfig; @@ -382,6 +384,23 @@ abstract class BaseLifecycleManager { clean(); return; } + if (!didCheckSystemInfo && lifecycleListener != null) { + didCheckSystemInfo = true; + VehicleType vehicleType = raiResponse.getVehicleType(); + String systemSoftwareVersion = raiResponse.getSystemSoftwareVersion(); + if (vehicleType != null || systemSoftwareVersion != null) { + SystemInfo systemInfo = new SystemInfo(vehicleType, systemSoftwareVersion, null); + boolean validSystemInfo = lifecycleListener.onSystemInfoReceived(systemInfo); + if (!validSystemInfo) { + DebugTool.logWarning(TAG, "Disconnecting from head unit, the system info was not accepted."); + UnregisterAppInterface msg = new UnregisterAppInterface(); + msg.setCorrelationID(UNREGISTER_APP_INTERFACE_CORRELATION_ID); + sendRPCMessagePrivate(msg, true); + clean(); + return; + } + } + } processRaiResponse(raiResponse); systemCapabilityManager.parseRAIResponse(raiResponse); break; @@ -882,7 +901,7 @@ abstract class BaseLifecycleManager { @Override - public void onSessionStarted(int sessionID, Version version) { + public void onSessionStarted(int sessionID, Version version, SystemInfo systemInfo) { DebugTool.logInfo(TAG, "on protocol session started"); if (minimumProtocolVersion != null && minimumProtocolVersion.isNewerThan(version) == 1) { DebugTool.logWarning(TAG, String.format("Disconnecting from head unit, the configured minimum protocol version %s is greater than the supported protocol version %s", minimumProtocolVersion, getProtocolVersion())); @@ -890,6 +909,18 @@ abstract class BaseLifecycleManager { clean(); return; } + + if (systemInfo != null && lifecycleListener != null) { + didCheckSystemInfo = true; + boolean validSystemInfo = lifecycleListener.onSystemInfoReceived(systemInfo); + if (!validSystemInfo) { + DebugTool.logWarning(TAG, "Disconnecting from head unit, the system info was not accepted."); + session.endService(SessionType.RPC); + clean(); + return; + } + } + if (appConfig != null) { appConfig.prepare(); @@ -1245,6 +1276,8 @@ abstract class BaseLifecycleManager { void onServiceEnded(SessionType sessionType); void onError(LifecycleManager lifeCycleManager, String info, Exception e); + + boolean onSystemInfoReceived(SystemInfo systemInfo); } public static class AppConfig { diff --git a/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java b/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java index 0b42fcc15..d9e437548 100644 --- a/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java +++ b/base/src/main/java/com/smartdevicelink/protocol/SdlProtocolBase.java @@ -85,7 +85,7 @@ public class SdlProtocolBase { public static final int V2_HEADER_SIZE = 12; //If increasing MAX PROTOCOL VERSION major version, make sure to alter it in SdlPsm - private static final Version MAX_PROTOCOL_VERSION = new Version(5, 3, 0); + private static final Version MAX_PROTOCOL_VERSION = new Version(5, 4, 0); public static final int V1_V2_MTU_SIZE = 1500; public static final int V3_V4_MTU_SIZE = 131072; diff --git a/base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java b/base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java index 992dccfb3..a6656fa09 100644 --- a/base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java +++ b/base/src/main/java/com/smartdevicelink/protocol/enums/ControlFrameTags.java @@ -85,6 +85,19 @@ public class ControlFrameTags { * Auth token to be used for log in into services **/ public static final String AUTH_TOKEN = "authToken"; + /** + * Vehicle info to describe connected device + */ + public static final String MAKE = "make"; + public static final String MODEL = "model"; + public static final String MODEL_YEAR = "modelYear"; + public static final String TRIM = "trim"; + + /** + * System specifics for hardware and software versions of connected device + */ + public static final String SYSTEM_SOFTWARE_VERSION = "systemSoftwareVersion"; + public static final String SYSTEM_HARDWARE_VERSION = "systemHardwareVersion"; } diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateData.java new file mode 100644 index 000000000..e44635163 --- /dev/null +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/ClimateData.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2017 - 2020, 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.proxy.rpc; + +import com.smartdevicelink.proxy.RPCStruct; +import com.smartdevicelink.util.SdlDataTypeConverter; + +import java.util.Hashtable; + +/** + * + * <p><b>Parameter List</b></p> + * + * <table border="1" rules="all"> + * <tr> + * <th>Param Name</th> + * <th>Type</th> + * <th>Description</th> + * <th>Required</th> + * <th>Notes</th> + * <th>Version Available</th> + * </tr> + * <tr> + * <td>externalTemperature</td> + * <td>Temperature</td> + * <td>The external temperature in degrees celsius</td> + * <td>N</td> + * <td></td> + * <td></td> + * </tr> + * <tr> + * <td>cabinTemperature</td> + * <td>Temperature</td> + * <td>Internal ambient cabin temperature in degrees celsius</td> + * <td>N</td> + * <td></td> + * <td></td> + * </tr> + * <tr> + * <td>atmosphericPressure</td> + * <td>Float</td> + * <td>Current atmospheric pressure in mBar</td> + * <td>N</td> + * <td>{"num_min_value": 0.0, "num_max_value": 2000.0}</td> + * <td></td> + * </tr> + * </table> + * @since SmartDeviceLink 7.1.0 + */ +public class ClimateData extends RPCStruct { + public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature"; + public static final String KEY_CABIN_TEMPERATURE = "cabinTemperature"; + public static final String KEY_ATMOSPHERIC_PRESSURE = "atmosphericPressure"; + + /** + * Constructs a new ClimateData object + */ + public ClimateData() { } + + /** + * Constructs a new ClimateData object indicated by the Hashtable parameter + * + * @param hash The Hashtable to use + */ + public ClimateData(Hashtable<String, Object> hash) { + super(hash); + } + + /** + * Sets the externalTemperature. + * + * @param externalTemperature The external temperature in degrees celsius + */ + public ClimateData setExternalTemperature(Temperature externalTemperature) { + setValue(KEY_EXTERNAL_TEMPERATURE, externalTemperature); + return this; + } + + /** + * Gets the externalTemperature. + * + * @return Temperature The external temperature in degrees celsius + */ + public Temperature getExternalTemperature() { + return (Temperature) getObject(Temperature.class, KEY_EXTERNAL_TEMPERATURE); + } + + /** + * Sets the cabinTemperature. + * + * @param cabinTemperature Internal ambient cabin temperature in degrees celsius + */ + public ClimateData setCabinTemperature(Temperature cabinTemperature) { + setValue(KEY_CABIN_TEMPERATURE, cabinTemperature); + return this; + } + + /** + * Gets the cabinTemperature. + * + * @return Temperature Internal ambient cabin temperature in degrees celsius + */ + public Temperature getCabinTemperature() { + return (Temperature) getObject(Temperature.class, KEY_CABIN_TEMPERATURE); + } + + /** + * Sets the atmosphericPressure. + * + * @param atmosphericPressure Current atmospheric pressure in mBar + * {"num_min_value": 0.0, "num_max_value": 2000.0} + */ + public ClimateData setAtmosphericPressure(Float atmosphericPressure) { + setValue(KEY_ATMOSPHERIC_PRESSURE, atmosphericPressure); + return this; + } + + /** + * Gets the atmosphericPressure. + * + * @return Float Current atmospheric pressure in mBar + * {"num_min_value": 0.0, "num_max_value": 2000.0} + */ + public Float getAtmosphericPressure() { + Object object = getValue(KEY_ATMOSPHERIC_PRESSURE); + return SdlDataTypeConverter.objectToFloat(object); + } +} diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java index 37545d140..b7744a3e3 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleData.java @@ -108,10 +108,13 @@ import java.util.Hashtable; * <tr>
* <td>externalTemperature</td>
* <td>Boolean</td>
- * <td>The external temperature in degrees celsius</td>
+ * <td>The external temperature in degrees celsius. This parameter is deprecated starting RPCSpec 7.1.0, please see climateData.</td>
* <td>N</td>
* <td>Subscribable</td>
- * <td>SmartDeviceLink 2.0</td>
+ * <td>
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ * </td>
* </tr>
* <tr>
* <td>vin</td>
@@ -269,6 +272,26 @@ import java.util.Hashtable; * <td>N</td>
* <td>SmartDeviceLink 7.0.0</td>
* </tr>
+ * <tr>
+ * <td>climateData</td>
+ * <td>Boolean</td>
+ * <td>See ClimateData</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>seatOccupancy</td>
+ * <td>Boolean</td>
+ * <td>See SeatOccupancy</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
+ * </tr>
* </table>
*
*
@@ -293,6 +316,11 @@ import java.util.Hashtable; public class GetVehicleData extends RPCRequest {
public static final String KEY_SPEED = "speed";
public static final String KEY_RPM = "rpm";
+ /**
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
public static final String KEY_VIN = "vin";
public static final String KEY_PRNDL = "prndl";
@@ -334,8 +362,16 @@ public class GetVehicleData extends RPCRequest { @Deprecated
public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
public static final String KEY_STABILITY_CONTROLS_STATUS = "stabilityControlsStatus";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_CLIMATE_DATA = "climateData";
/**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_SEAT_OCCUPANCY = "seatOccupancy";
+ /**
* Constructs a new GetVehicleData object
*/
@@ -435,11 +471,29 @@ public class GetVehicleData extends RPCRequest { return getBoolean(KEY_FUEL_RANGE);
}
+ /**
+ * Sets the externalTemperature.
+ *
+ * @param externalTemperature The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public GetVehicleData setExternalTemperature(Boolean externalTemperature) {
setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
return this;
}
+ /**
+ * Gets the externalTemperature.
+ *
+ * @return Boolean The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public Boolean getExternalTemperature() {
return getBoolean(KEY_EXTERNAL_TEMPERATURE);
}
@@ -790,4 +844,46 @@ public class GetVehicleData extends RPCRequest { public Boolean getStabilityControlsStatus() {
return getBoolean(KEY_STABILITY_CONTROLS_STATUS);
}
+
+ /**
+ * Sets the climateData.
+ *
+ * @param climateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public GetVehicleData setClimateData(Boolean climateData) {
+ setParameters(KEY_CLIMATE_DATA, climateData);
+ return this;
+ }
+
+ /**
+ * Gets the climateData.
+ *
+ * @return Boolean See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public Boolean getClimateData() {
+ return getBoolean(KEY_CLIMATE_DATA);
+ }
+
+ /**
+ * Sets the seatOccupancy.
+ *
+ * @param seatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public GetVehicleData setSeatOccupancy(Boolean seatOccupancy) {
+ setParameters(KEY_SEAT_OCCUPANCY, seatOccupancy);
+ return this;
+ }
+
+ /**
+ * Gets the seatOccupancy.
+ *
+ * @return Boolean See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public Boolean getSeatOccupancy() {
+ return getBoolean(KEY_SEAT_OCCUPANCY);
+ }
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java index 1ce840819..33ebf324f 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/GetVehicleDataResponse.java @@ -69,6 +69,11 @@ public class GetVehicleDataResponse extends RPCResponse { public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
public static final String KEY_INSTANT_FUEL_CONSUMPTION = "instantFuelConsumption";
public static final String KEY_FUEL_RANGE = "fuelRange";
+ /**
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
public static final String KEY_TURN_SIGNAL = "turnSignal";
public static final String KEY_VIN = "vin";
@@ -96,8 +101,16 @@ public class GetVehicleDataResponse extends RPCResponse { public static final String KEY_GEAR_STATUS = "gearStatus";
public static final String KEY_HANDS_OFF_STEERING = "handsOffSteering";
public static final String KEY_STABILITY_CONTROLS_STATUS = "stabilityControlsStatus";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_CLIMATE_DATA = "climateData";
/**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_SEAT_OCCUPANCY = "seatOccupancy";
+ /**
* Constructs a new GetVehicleDataResponse object
*/
@@ -206,11 +219,31 @@ public class GetVehicleDataResponse extends RPCResponse { return SdlDataTypeConverter.objectToDouble(object);
}
+ /**
+ * Sets the externalTemperature.
+ *
+ * @param externalTemperature The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * {"num_min_value": -40.0, "num_max_value": 100.0}
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public GetVehicleDataResponse setExternalTemperature(Double externalTemperature) {
setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
return this;
}
+ /**
+ * Gets the externalTemperature.
+ *
+ * @return Double The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * {"num_min_value": -40.0, "num_max_value": 100.0}
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public Double getExternalTemperature() {
Object object = getParameters(KEY_EXTERNAL_TEMPERATURE);
return SdlDataTypeConverter.objectToDouble(object);
@@ -594,4 +627,45 @@ public class GetVehicleDataResponse extends RPCResponse { setParameters(KEY_STABILITY_CONTROLS_STATUS, stabilityControlsStatus);
return this;
}
+
+ /**
+ * Sets the climateData.
+ *
+ * @param climateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public GetVehicleDataResponse setClimateData(ClimateData climateData) {
+ setParameters(KEY_CLIMATE_DATA, climateData);
+ return this;
+ }
+
+ /**
+ * Gets the climateData.
+ *
+ * @return ClimateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public ClimateData getClimateData() {
+ return (ClimateData) getObject(ClimateData.class, KEY_CLIMATE_DATA);
+ }
+ /**
+ * Sets the seatOccupancy.
+ *
+ * @param seatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public GetVehicleDataResponse setSeatOccupancy(SeatOccupancy seatOccupancy) {
+ setParameters(KEY_SEAT_OCCUPANCY, seatOccupancy);
+ return this;
+ }
+
+ /**
+ * Gets the seatOccupancy.
+ *
+ * @return SeatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public SeatOccupancy getSeatOccupancy() {
+ return (SeatOccupancy) getObject(SeatOccupancy.class, KEY_SEAT_OCCUPANCY);
+ }
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java index e8f5b57ca..8d87f6d30 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/OnVehicleData.java @@ -320,12 +320,31 @@ import java.util.List; * <td>SmartDeviceLink 7.0.0</td>
* </tr>
* <tr>
+ * <td>climateData</td>
+ * <td>ClimateData</td>
+ * <td>See ClimateData</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
+ * </tr>
+ * <tr>
* <td>stabilityControlsStatus</td>
* <td>StabilityControlsStatus</td>
* <td>See StabilityControlsStatus</td>
* <td>N</td>
* <td>SmartDeviceLink 7.0.0</td>
* </tr>
+ * <tr>
+ * <td>seatOccupancy</td>
+ * <td>SeatOccupancy</td>
+ * <td>See SeatOccupancy</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
* </table>
*
* @see SubscribeVehicleData
@@ -335,6 +354,11 @@ import java.util.List; public class OnVehicleData extends RPCNotification {
public static final String KEY_SPEED = "speed";
public static final String KEY_RPM = "rpm";
+ /**
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
public static final String KEY_VIN = "vin";
public static final String KEY_PRNDL = "prndl";
@@ -365,6 +389,10 @@ public class OnVehicleData extends RPCNotification { public static final String KEY_WINDOW_STATUS = "windowStatus";
public static final String KEY_GEAR_STATUS = "gearStatus";
/**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_CLIMATE_DATA = "climateData";
+ /**
* @deprecated
*/
@Deprecated
@@ -377,6 +405,10 @@ public class OnVehicleData extends RPCNotification { public static final String KEY_STABILITY_CONTROLS_STATUS = "stabilityControlsStatus";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_SEAT_OCCUPANCY = "seatOccupancy";
public OnVehicleData() {
super(FunctionID.ON_VEHICLE_DATA.toString());
}
@@ -458,11 +490,31 @@ public class OnVehicleData extends RPCNotification { return SdlDataTypeConverter.objectToDouble(object);
}
+ /**
+ * Sets the externalTemperature.
+ *
+ * @param externalTemperature The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * {"num_min_value": -40.0, "num_max_value": 100.0}
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public OnVehicleData setExternalTemperature(Double externalTemperature) {
setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
return this;
}
+ /**
+ * Gets the externalTemperature.
+ *
+ * @return Double The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * {"num_min_value": -40.0, "num_max_value": 100.0}
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public Double getExternalTemperature() {
Object object = getParameters(KEY_EXTERNAL_TEMPERATURE);
return SdlDataTypeConverter.objectToDouble(object);
@@ -849,4 +901,46 @@ public class OnVehicleData extends RPCNotification { public GearStatus getGearStatus() {
return (GearStatus) getObject(GearStatus.class, KEY_GEAR_STATUS);
}
+
+
+ /**
+ * Sets the climateData.
+ *
+ * @param climateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public OnVehicleData setClimateData(ClimateData climateData) {
+ setParameters(KEY_CLIMATE_DATA, climateData);
+ return this;
+ }
+
+ /**
+ * Gets the climateData.
+ *
+ * @return ClimateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public ClimateData getClimateData() {
+ return (ClimateData) getObject(ClimateData.class, KEY_CLIMATE_DATA);
+ }
+ /**
+ * Sets the seatOccupancy.
+ *
+ * @param seatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public OnVehicleData setSeatOccupancy(SeatOccupancy seatOccupancy) {
+ setParameters(KEY_SEAT_OCCUPANCY, seatOccupancy);
+ return this;
+ }
+
+ /**
+ * Gets the seatOccupancy.
+ *
+ * @return SeatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public SeatOccupancy getSeatOccupancy() {
+ return (SeatOccupancy) getObject(SeatOccupancy.class, KEY_SEAT_OCCUPANCY);
+ }
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java index c18cbd38b..d4ae5a706 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/RegisterAppInterfaceResponse.java @@ -53,6 +53,7 @@ import java.util.List; * @since SmartDeviceLink 1.0
*/
public class RegisterAppInterfaceResponse extends RPCResponse {
+ @Deprecated
public static final String KEY_VEHICLE_TYPE = "vehicleType";
public static final String KEY_SPEECH_CAPABILITIES = "speechCapabilities";
public static final String KEY_VR_CAPABILITIES = "vrCapabilities";
@@ -73,6 +74,7 @@ public class RegisterAppInterfaceResponse extends RPCResponse { public static final String KEY_PRESET_BANK_CAPABILITIES = "presetBankCapabilities";
public static final String KEY_HMI_CAPABILITIES = "hmiCapabilities"; //As of v4.0
public static final String KEY_SDL_VERSION = "sdlVersion"; //As of v4.0
+ @Deprecated
public static final String KEY_SYSTEM_SOFTWARE_VERSION = "systemSoftwareVersion"; //As of v4.0
public static final String KEY_ICON_RESUMED = "iconResumed";
public static final String KEY_PCM_STREAM_CAPABILITIES = "pcmStreamCapabilities";
@@ -382,18 +384,20 @@ public class RegisterAppInterfaceResponse extends RPCResponse { /**
* Gets getVehicleType set when application interface is registered.
- *
+ * @deprecated in SmartDeviceLink 7.1.0
* @return vehicleType
*/
+ @Deprecated
public VehicleType getVehicleType() {
return (VehicleType) getObject(VehicleType.class, KEY_VEHICLE_TYPE);
}
/**
* Sets vehicleType
- *
+ * @deprecated in SmartDeviceLink 7.1.0
* @param vehicleType
*/
+ @Deprecated
public RegisterAppInterfaceResponse setVehicleType(VehicleType vehicleType) {
setParameters(KEY_VEHICLE_TYPE, vehicleType);
return this;
@@ -466,11 +470,24 @@ public class RegisterAppInterfaceResponse extends RPCResponse { return getString(KEY_SDL_VERSION);
}
+ /**
+ * The software version of the connected device.
+ * @param systemSoftwareVersion the version of software on the connected device
+ * @return RegisterAppInterface
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public RegisterAppInterfaceResponse setSystemSoftwareVersion(String systemSoftwareVersion) {
setParameters(KEY_SYSTEM_SOFTWARE_VERSION, systemSoftwareVersion);
return this;
}
+ /**
+ * The software version of the connected device.
+ * @return String the version of software on the connected device
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public String getSystemSoftwareVersion() {
return getString(KEY_SYSTEM_SOFTWARE_VERSION);
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatOccupancy.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatOccupancy.java new file mode 100644 index 000000000..c54ae0ef0 --- /dev/null +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatOccupancy.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2017 - 2020, 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.proxy.rpc; + +import com.smartdevicelink.proxy.RPCStruct; + +import java.util.Hashtable; +import java.util.List; + +/** + * + * <p><b>Parameter List</b></p> + * + * <table border="1" rules="all"> + * <tr> + * <th>Param Name</th> + * <th>Type</th> + * <th>Description</th> + * <th>Required</th> + * <th>Notes</th> + * <th>Version Available</th> + * </tr> + * <tr> + * <td>seatsOccupied</td> + * <td>List<SeatStatus></td> + * <td>Seat status array containing location and whether the seats are occupied.</td> + * <td>N</td> + * <td>{"array_min_size": 0, "array_max_size": 100}</td> + * <td></td> + * </tr> + * <tr> + * <td>seatsBelted</td> + * <td>List<SeatStatus></td> + * <td>Seat status array containing location and whether the seats are belted.</td> + * <td>N</td> + * <td>{"array_min_size": 0, "array_max_size": 100}</td> + * <td></td> + * </tr> + * </table> + * @since SmartDeviceLink 7.1.0 + */ +public class SeatOccupancy extends RPCStruct { + public static final String KEY_SEATS_OCCUPIED = "seatsOccupied"; + public static final String KEY_SEATS_BELTED = "seatsBelted"; + + /** + * Constructs a new SeatOccupancy object + */ + public SeatOccupancy() { } + + /** + * Constructs a new SeatOccupancy object indicated by the Hashtable parameter + * + * @param hash The Hashtable to use + */ + public SeatOccupancy(Hashtable<String, Object> hash) { + super(hash); + } + + /** + * Sets the seatsOccupied. + * + * @param seatsOccupied Seat status array containing location and whether the seats are occupied. + * {"array_min_size": 0, "array_max_size": 100} + */ + public SeatOccupancy setSeatsOccupied(List<SeatStatus> seatsOccupied) { + setValue(KEY_SEATS_OCCUPIED, seatsOccupied); + return this; + } + + /** + * Gets the seatsOccupied. + * + * @return List<SeatStatus> Seat status array containing location and whether the seats are occupied. + * {"array_min_size": 0, "array_max_size": 100} + */ + @SuppressWarnings("unchecked") + public List<SeatStatus> getSeatsOccupied() { + return (List<SeatStatus>) getObject(SeatStatus.class, KEY_SEATS_OCCUPIED); + } + + /** + * Sets the seatsBelted. + * + * @param seatsBelted Seat status array containing location and whether the seats are belted. + * {"array_min_size": 0, "array_max_size": 100} + */ + public SeatOccupancy setSeatsBelted(List<SeatStatus> seatsBelted) { + setValue(KEY_SEATS_BELTED, seatsBelted); + return this; + } + + /** + * Gets the seatsBelted. + * + * @return List<SeatStatus> Seat status array containing location and whether the seats are belted. + * {"array_min_size": 0, "array_max_size": 100} + */ + @SuppressWarnings("unchecked") + public List<SeatStatus> getSeatsBelted() { + return (List<SeatStatus>) getObject(SeatStatus.class, KEY_SEATS_BELTED); + } +} diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatStatus.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatStatus.java new file mode 100644 index 000000000..65f60c8ff --- /dev/null +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SeatStatus.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2017 - 2020, 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.proxy.rpc; + +import androidx.annotation.NonNull; + +import com.smartdevicelink.proxy.RPCStruct; + +import java.util.Hashtable; + +/** + * Describes the status of a parameter of seat. + * + * <p><b>Parameter List</b></p> + * + * <table border="1" rules="all"> + * <tr> + * <th>Param Name</th> + * <th>Type</th> + * <th>Description</th> + * <th>Required</th> + * <th>Notes</th> + * <th>Version Available</th> + * </tr> + * <tr> + * <td>seatLocation</td> + * <td>SeatLocation</td> + * <td></td> + * <td>Y</td> + * <td></td> + * <td></td> + * </tr> + * <tr> + * <td>conditionActive</td> + * <td>Boolean</td> + * <td></td> + * <td>Y</td> + * <td></td> + * <td></td> + * </tr> + * </table> + * + * @since SmartDeviceLink 7.1.0 + */ +public class SeatStatus extends RPCStruct { + public static final String KEY_SEAT_LOCATION = "seatLocation"; + public static final String KEY_CONDITION_ACTIVE = "conditionActive"; + + /** + * Constructs a new SeatStatus object + */ + public SeatStatus() { } + + /** + * Constructs a new SeatStatus object indicated by the Hashtable parameter + * + * @param hash The Hashtable to use + */ + public SeatStatus(Hashtable<String, Object> hash) { + super(hash); + } + + /** + * Constructs a new SeatStatus object + * + * @param seatLocation + * @param conditionActive + */ + public SeatStatus(@NonNull SeatLocation seatLocation, @NonNull Boolean conditionActive) { + this(); + setSeatLocation(seatLocation); + setConditionActive(conditionActive); + } + + /** + * Sets the seatLocation. + * + * @param seatLocation + */ + public SeatStatus setSeatLocation(@NonNull SeatLocation seatLocation) { + setValue(KEY_SEAT_LOCATION, seatLocation); + return this; + } + + /** + * Gets the seatLocation. + * + * @return SeatLocation + */ + public SeatLocation getSeatLocation() { + return (SeatLocation) getObject(SeatLocation.class, KEY_SEAT_LOCATION); + } + + /** + * Sets the conditionActive. + * + * @param conditionActive + */ + public SeatStatus setConditionActive(@NonNull Boolean conditionActive) { + setValue(KEY_CONDITION_ACTIVE, conditionActive); + return this; + } + + /** + * Gets the conditionActive. + * + * @return Boolean + */ + public Boolean getConditionActive() { + return getBoolean(KEY_CONDITION_ACTIVE); + } +} diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java index 99e881202..7ea19c858 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleData.java @@ -116,10 +116,13 @@ import java.util.Hashtable; * <tr>
* <td>externalTemperature</td>
* <td>Boolean</td>
- * <td>The external temperature in degrees celsius</td>
+ * <td>The external temperature in degrees celsius. This parameter is deprecated starting RPCSpec 7.1.0, please see climateData.</td>
* <td>N</td>
* <td>Subscribable</td>
- * <td>SmartDeviceLink 2.0 </td>
+ * <td>
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ * </td>
* </tr>
* <tr>
* <td>gearStatus</td>
@@ -308,6 +311,26 @@ import java.util.Hashtable; * <td>N</td>
* <td>SmartDeviceLink 7.0.0</td>
* </tr>
+ * <tr>
+ * <td>climateData</td>
+ * <td>Boolean</td>
+ * <td>See ClimateData</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>seatOccupancy</td>
+ * <td>Boolean</td>
+ * <td>See SeatOccupancy</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
+ * </tr>
* </table>
*
* <p> <b>Response</b></p>
@@ -329,6 +352,11 @@ import java.util.Hashtable; */
public class SubscribeVehicleData extends RPCRequest {
public static final String KEY_RPM = "rpm";
+ /**
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
public static final String KEY_PRNDL = "prndl";
public static final String KEY_TIRE_PRESSURE = "tirePressure";
@@ -369,6 +397,14 @@ public class SubscribeVehicleData extends RPCRequest { @Deprecated
public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
public static final String KEY_STABILITY_CONTROLS_STATUS = "stabilityControlsStatus";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_CLIMATE_DATA = "climateData";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_SEAT_OCCUPANCY = "seatOccupancy";
/**
* Constructs a new SubscribeVehicleData object
@@ -515,22 +551,28 @@ public class SubscribeVehicleData extends RPCRequest { }
/**
- * Sets a boolean value. If true, subscribes externalTemperature data
+ * Sets the externalTemperature.
*
- * @param externalTemperature a boolean value
+ * @param externalTemperature The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public SubscribeVehicleData setExternalTemperature(Boolean externalTemperature) {
setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
return this;
}
/**
- * Gets a boolean value. If true, means the externalTemperature data has been
- * subscribed.
+ * Gets the externalTemperature.
*
- * @return Boolean -a Boolean value. If true, means the externalTemperature data
- * has been subscribed.
+ * @return Boolean The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public Boolean getExternalTemperature() {
return getBoolean(KEY_EXTERNAL_TEMPERATURE);
}
@@ -1026,4 +1068,46 @@ public class SubscribeVehicleData extends RPCRequest { setParameters(KEY_STABILITY_CONTROLS_STATUS, stabilityControlsStatus);
return this;
}
+
+ /**
+ * Sets the climateData.
+ *
+ * @param climateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public SubscribeVehicleData setClimateData(Boolean climateData) {
+ setParameters(KEY_CLIMATE_DATA, climateData);
+ return this;
+ }
+
+ /**
+ * Gets the climateData.
+ *
+ * @return Boolean See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public Boolean getClimateData() {
+ return getBoolean(KEY_CLIMATE_DATA);
+ }
+
+ /**
+ * Sets the seatOccupancy.
+ *
+ * @param seatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public SubscribeVehicleData setSeatOccupancy(Boolean seatOccupancy) {
+ setParameters(KEY_SEAT_OCCUPANCY, seatOccupancy);
+ return this;
+ }
+
+ /**
+ * Gets the seatOccupancy.
+ *
+ * @return Boolean See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public Boolean getSeatOccupancy() {
+ return getBoolean(KEY_SEAT_OCCUPANCY);
+ }
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java index 9d82940d5..7a268f0f3 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/SubscribeVehicleDataResponse.java @@ -47,6 +47,11 @@ import java.util.Hashtable; public class SubscribeVehicleDataResponse extends RPCResponse {
public static final String KEY_SPEED = "speed";
public static final String KEY_RPM = "rpm";
+ /**
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
public static final String KEY_PRNDL = "prndl";
public static final String KEY_TIRE_PRESSURE = "tirePressure";
@@ -88,8 +93,16 @@ public class SubscribeVehicleDataResponse extends RPCResponse { @Deprecated
public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
public static final String KEY_STABILITY_CONTROLS_STATUS = "stabilityControlsStatus";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_CLIMATE_DATA = "climateData";
/**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_SEAT_OCCUPANCY = "seatOccupancy";
+ /**
* Constructs a new SubscribeVehicleDataResponse object
*/
public SubscribeVehicleDataResponse() {
@@ -239,20 +252,28 @@ public class SubscribeVehicleDataResponse extends RPCResponse { }
/**
- * Sets External Temperature
+ * Sets the externalTemperature.
*
- * @param externalTemperature a VehicleDataResult related to external temperature
+ * @param externalTemperature The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public SubscribeVehicleDataResponse setExternalTemperature(VehicleDataResult externalTemperature) {
setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
return this;
}
/**
- * Gets External Temperature
+ * Gets the externalTemperature.
*
- * @return a VehicleDataResult related to external temperature
+ * @return VehicleDataResult The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public VehicleDataResult getExternalTemperature() {
return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_EXTERNAL_TEMPERATURE);
}
@@ -752,4 +773,46 @@ public class SubscribeVehicleDataResponse extends RPCResponse { setParameters(KEY_STABILITY_CONTROLS_STATUS, stabilityControlsStatus);
return this;
}
+
+ /**
+ * Sets the climateData.
+ *
+ * @param climateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public SubscribeVehicleDataResponse setClimateData(VehicleDataResult climateData) {
+ setParameters(KEY_CLIMATE_DATA, climateData);
+ return this;
+ }
+
+ /**
+ * Gets the climateData.
+ *
+ * @return VehicleDataResult See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public VehicleDataResult getClimateData() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_CLIMATE_DATA);
+ }
+
+ /**
+ * Sets the seatOccupancy.
+ *
+ * @param seatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public SubscribeVehicleDataResponse setSeatOccupancy(VehicleDataResult seatOccupancy) {
+ setParameters(KEY_SEAT_OCCUPANCY, seatOccupancy);
+ return this;
+ }
+
+ /**
+ * Gets the seatOccupancy.
+ *
+ * @return VehicleDataResult See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public VehicleDataResult getSeatOccupancy() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_SEAT_OCCUPANCY);
+ }
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java index 226499364..e607711d0 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleData.java @@ -111,10 +111,13 @@ import java.util.Hashtable; * <tr>
* <td>externalTemperature</td>
* <td>Boolean</td>
- * <td>The external temperature in degrees celsius</td>
+ * <td>The external temperature in degrees celsius. This parameter is deprecated starting RPCSpec 7.1.0, please see climateData.</td>
* <td>N</td>
* <td>Subscribable</td>
- * <td>SmartDeviceLink 2.0 </td>
+ * <td>
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ * </td>
* </tr>
* <tr>
* <td>gearStatus</td>
@@ -295,6 +298,26 @@ import java.util.Hashtable; * <td>N</td>
* <td>SmartDeviceLink 7.0.0</td>
* </tr>
+ * <tr>
+ * <td>climateData</td>
+ * <td>Boolean</td>
+ * <td>See ClimateData</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
+ * </tr>
+ * <tr>
+ * <td>seatOccupancy</td>
+ * <td>Boolean</td>
+ * <td>See SeatOccupancy</td>
+ * <td>N</td>
+ * <td></td>
+ * <td>
+ * @since SmartDeviceLink 7.1.0
+ * </td>
+ * </tr>
*
*
* </table>
@@ -317,6 +340,11 @@ import java.util.Hashtable; public class UnsubscribeVehicleData extends RPCRequest {
public static final String KEY_SPEED = "speed";
public static final String KEY_RPM = "rpm";
+ /**
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
public static final String KEY_PRNDL = "prndl";
public static final String KEY_TIRE_PRESSURE = "tirePressure";
@@ -356,6 +384,14 @@ public class UnsubscribeVehicleData extends RPCRequest { @Deprecated
public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
public static final String KEY_STABILITY_CONTROLS_STATUS = "stabilityControlsStatus";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_SEAT_OCCUPANCY = "seatOccupancy";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_CLIMATE_DATA = "climateData";
/**
* Constructs a new UnsubscribeVehicleData object
@@ -505,22 +541,28 @@ public class UnsubscribeVehicleData extends RPCRequest { }
/**
- * Sets a boolean value. If true, unsubscribes from externalTemperature data
+ * Sets the externalTemperature.
*
- * @param externalTemperature a boolean value
+ * @param externalTemperature The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public UnsubscribeVehicleData setExternalTemperature(Boolean externalTemperature) {
setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
return this;
}
/**
- * Gets a boolean value. If true, means the externalTemperature data has been
- * unsubscribed.
+ * Gets the externalTemperature.
*
- * @return Boolean -a Boolean value. If true, means the externalTemperature data
- * has been unsubscribed.
+ * @return Boolean The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public Boolean getExternalTemperature() {
return getBoolean(KEY_EXTERNAL_TEMPERATURE);
}
@@ -1015,4 +1057,46 @@ public class UnsubscribeVehicleData extends RPCRequest { public Boolean getStabilityControlsStatus() {
return getBoolean(KEY_STABILITY_CONTROLS_STATUS);
}
+
+ /**
+ * Sets the climateData.
+ *
+ * @param climateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public UnsubscribeVehicleData setClimateData(Boolean climateData) {
+ setParameters(KEY_CLIMATE_DATA, climateData);
+ return this;
+ }
+
+ /**
+ * Gets the climateData.
+ *
+ * @return Boolean See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public Boolean getClimateData() {
+ return getBoolean(KEY_CLIMATE_DATA);
+ }
+
+ /**
+ * Sets the seatOccupancy.
+ *
+ * @param seatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public UnsubscribeVehicleData setSeatOccupancy(Boolean seatOccupancy) {
+ setParameters(KEY_SEAT_OCCUPANCY, seatOccupancy);
+ return this;
+ }
+
+ /**
+ * Gets the seatOccupancy.
+ *
+ * @return Boolean See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public Boolean getSeatOccupancy() {
+ return getBoolean(KEY_SEAT_OCCUPANCY);
+ }
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java index a9b59ce9b..114a1971a 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/UnsubscribeVehicleDataResponse.java @@ -47,6 +47,11 @@ import java.util.Hashtable; public class UnsubscribeVehicleDataResponse extends RPCResponse {
public static final String KEY_SPEED = "speed";
public static final String KEY_RPM = "rpm";
+ /**
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
+ */
+ @Deprecated
public static final String KEY_EXTERNAL_TEMPERATURE = "externalTemperature";
public static final String KEY_PRNDL = "prndl";
public static final String KEY_TIRE_PRESSURE = "tirePressure";
@@ -88,8 +93,16 @@ public class UnsubscribeVehicleDataResponse extends RPCResponse { @Deprecated
public static final String KEY_FUEL_LEVEL_STATE = "fuelLevel_State";
public static final String KEY_STABILITY_CONTROLS_STATUS = "stabilityControlsStatus";
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_CLIMATE_DATA = "climateData";
/**
+ * @since SmartDeviceLink 7.1.0
+ */
+ public static final String KEY_SEAT_OCCUPANCY = "seatOccupancy";
+ /**
* Constructs a new UnsubscribeVehicleDataResponse object
*/
public UnsubscribeVehicleDataResponse() {
@@ -240,20 +253,28 @@ public class UnsubscribeVehicleDataResponse extends RPCResponse { }
/**
- * Sets External Temperature
+ * Sets the externalTemperature.
*
- * @param externalTemperature a VehicleDataResult related to external temperature
+ * @param externalTemperature The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public UnsubscribeVehicleDataResponse setExternalTemperature(VehicleDataResult externalTemperature) {
setParameters(KEY_EXTERNAL_TEMPERATURE, externalTemperature);
return this;
}
/**
- * Gets External Temperature
+ * Gets the externalTemperature.
*
- * @return a VehicleDataResult related to external temperature
+ * @return VehicleDataResult The external temperature in degrees celsius. This parameter is deprecated starting RPC
+ * Spec 7.1.0, please see climateData.
+ * @since SmartDeviceLink 2.0.0
+ * @deprecated in SmartDeviceLink 7.1.0
*/
+ @Deprecated
public VehicleDataResult getExternalTemperature() {
return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_EXTERNAL_TEMPERATURE);
}
@@ -753,4 +774,46 @@ public class UnsubscribeVehicleDataResponse extends RPCResponse { setParameters(KEY_STABILITY_CONTROLS_STATUS, stabilityControlsStatus);
return this;
}
+
+ /**
+ * Sets the climateData.
+ *
+ * @param climateData See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public UnsubscribeVehicleDataResponse setClimateData(VehicleDataResult climateData) {
+ setParameters(KEY_CLIMATE_DATA, climateData);
+ return this;
+ }
+
+ /**
+ * Gets the climateData.
+ *
+ * @return VehicleDataResult See ClimateData
+ * @since SmartDeviceLink 7.1.0
+ */
+ public VehicleDataResult getClimateData() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_CLIMATE_DATA);
+ }
+
+ /**
+ * Sets the seatOccupancy.
+ *
+ * @param seatOccupancy See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public UnsubscribeVehicleDataResponse setSeatOccupancy(VehicleDataResult seatOccupancy) {
+ setParameters(KEY_SEAT_OCCUPANCY, seatOccupancy);
+ return this;
+ }
+
+ /**
+ * Gets the seatOccupancy.
+ *
+ * @return VehicleDataResult See SeatOccupancy
+ * @since SmartDeviceLink 7.1.0
+ */
+ public VehicleDataResult getSeatOccupancy() {
+ return (VehicleDataResult) getObject(VehicleDataResult.class, KEY_SEAT_OCCUPANCY);
+ }
}
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java index 1c749cc7f..6b07a2f9b 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/TextFieldName.java @@ -185,6 +185,18 @@ public enum TextFieldName { */
phoneNumber,
/**
+ * Optional time to destination field for ShowConstantTBT
+ *
+ * @since SmartDeviceLink 7.1.0
+ */
+ timeToDestination,
+ /**
+ * Turn text for turnList parameter of UpdateTurnList
+ *
+ * @since SmartDeviceLink 7.1.0
+ */
+ turnText,
+ /**
* Optional title of the template that will be displayed
*
* @since SmartDeviceLink 6.0
diff --git a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java index 7d7219453..ad619e46a 100644 --- a/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java +++ b/base/src/main/java/com/smartdevicelink/proxy/rpc/enums/VehicleDataType.java @@ -62,7 +62,12 @@ public enum VehicleDataType { */
VEHICLEDATA_FUELCONSUMPTION,
/**
+ * @since SmartDeviceLink 7.1.0
+ */
+ VEHICLEDATA_CLIMATEDATA,
+ /**
* Notifies EXTERNTEMPData may be subscribed
+ * @deprecated since SmartDeviceLink 7.1.0
*/
VEHICLEDATA_EXTERNTEMP,
/**
@@ -185,7 +190,11 @@ public enum VehicleDataType { /**
* @since SmartDeviceLink 7.0.0
*/
- VEHICLEDATA_GEARSTATUS;
+ VEHICLEDATA_GEARSTATUS,
+ /**
+ * @since SmartDeviceLink 7.1.0
+ */
+ VEHICLEDATA_SEATOCCUPANCY;
/**
* Convert String to VehicleDataType
diff --git a/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java b/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java index ed4957b78..8b35541b4 100644 --- a/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java +++ b/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java @@ -41,8 +41,10 @@ import com.smartdevicelink.protocol.ISdlServiceListener; import com.smartdevicelink.protocol.ProtocolMessage; import com.smartdevicelink.protocol.SdlPacket; import com.smartdevicelink.protocol.SdlProtocolBase; +import com.smartdevicelink.protocol.enums.ControlFrameTags; import com.smartdevicelink.protocol.enums.SessionType; import com.smartdevicelink.proxy.RPCMessage; +import com.smartdevicelink.proxy.rpc.VehicleType; import com.smartdevicelink.proxy.rpc.VideoStreamingFormat; import com.smartdevicelink.proxy.rpc.enums.VideoStreamingProtocol; import com.smartdevicelink.security.ISecurityInitializedListener; @@ -51,6 +53,7 @@ import com.smartdevicelink.streaming.video.VideoStreamingParameters; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.transport.enums.TransportType; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; import java.util.HashMap; @@ -209,6 +212,38 @@ public abstract class BaseSdlSession implements ISdlProtocol, ISecurityInitializ sendMessage(protocolMessage); } + /** + * Extracts the SystemInfo out of a packet + * @param packet should be a StartServiceACK for the RPC service + * @return an instance of SystemInfo if the information is available, null otherwise + */ + protected SystemInfo extractSystemInfo(SdlPacket packet) { + SystemInfo systemInfo = null; + if (packet != null && packet.getFrameInfo() == SdlPacket.FRAME_INFO_START_SERVICE_ACK) { + VehicleType vehicleType = null; + + String make = (String) packet.getTag(ControlFrameTags.RPC.StartServiceACK.MAKE); + String model = (String) packet.getTag(ControlFrameTags.RPC.StartServiceACK.MODEL); + String modelYear = (String) packet.getTag(ControlFrameTags.RPC.StartServiceACK.MODEL_YEAR); + String trim = (String) packet.getTag(ControlFrameTags.RPC.StartServiceACK.TRIM); + String softwareVersion = (String) packet.getTag(ControlFrameTags.RPC.StartServiceACK.SYSTEM_SOFTWARE_VERSION); + String hardwareVersion = (String) packet.getTag(ControlFrameTags.RPC.StartServiceACK.SYSTEM_HARDWARE_VERSION); + + if (make != null || model != null || modelYear != null || trim != null) { + vehicleType = new VehicleType() + .setMake(make) + .setModel(model) + .setModelYear(modelYear) + .setTrim(trim); + } + + if (vehicleType != null || softwareVersion != null || hardwareVersion != null) { + systemInfo = new SystemInfo(vehicleType, softwareVersion, hardwareVersion); + } + } + + return systemInfo; + } public boolean isServiceProtected(SessionType sType) { return encryptedServices.contains(sType); diff --git a/base/src/main/java/com/smartdevicelink/session/ISdlSessionListener.java b/base/src/main/java/com/smartdevicelink/session/ISdlSessionListener.java index 180452997..2f754a30e 100644 --- a/base/src/main/java/com/smartdevicelink/session/ISdlSessionListener.java +++ b/base/src/main/java/com/smartdevicelink/session/ISdlSessionListener.java @@ -35,6 +35,7 @@ import androidx.annotation.RestrictTo; import com.smartdevicelink.proxy.RPCMessage; import com.smartdevicelink.transport.BaseTransportConfig; +import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; @RestrictTo(RestrictTo.Scope.LIBRARY) @@ -63,8 +64,9 @@ public interface ISdlSessionListener { * * @param sessionID session ID associated with the session that was established * @param version the protocol version that has been negotiated for this session + * @param systemInfo info about the device that this service is started */ - void onSessionStarted(int sessionID, Version version); + void onSessionStarted(int sessionID, Version version, SystemInfo systemInfo); /** * Called to indicate that the session that was previously established has now ended. This means diff --git a/base/src/main/java/com/smartdevicelink/util/SystemInfo.java b/base/src/main/java/com/smartdevicelink/util/SystemInfo.java new file mode 100644 index 000000000..e622be04d --- /dev/null +++ b/base/src/main/java/com/smartdevicelink/util/SystemInfo.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Livio, 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 Livio 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.util; + +import androidx.annotation.Nullable; + +import com.smartdevicelink.proxy.rpc.VehicleType; + +public class SystemInfo { + + @Nullable + private VehicleType vehicleType; + @Nullable + private String systemSoftwareVersion; + @Nullable + private String systemHardwareVersion; + + public SystemInfo(@Nullable VehicleType vehicleType, @Nullable String systemSoftwareVersion, @Nullable String systemHardwareVersion) { + this.vehicleType = vehicleType; + this.systemSoftwareVersion = systemSoftwareVersion; + this.systemHardwareVersion = systemHardwareVersion; + } + + @Nullable + public VehicleType getVehicleType() { + return vehicleType; + } + + @Nullable + public String getSystemSoftwareVersion() { + return systemSoftwareVersion; + } + + @Nullable + public String getSystemHardwareVersion() { + return systemHardwareVersion; + } +} diff --git a/javaEE/hello_sdl_java_ee/src/main/java/com/smartdevicelink/SdlService.java b/javaEE/hello_sdl_java_ee/src/main/java/com/smartdevicelink/SdlService.java index 87bbf4c67..3e1b5ba0a 100644 --- a/javaEE/hello_sdl_java_ee/src/main/java/com/smartdevicelink/SdlService.java +++ b/javaEE/hello_sdl_java_ee/src/main/java/com/smartdevicelink/SdlService.java @@ -55,6 +55,8 @@ import com.smartdevicelink.proxy.rpc.enums.*; import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.SystemInfo; + import java.util.*; @@ -154,6 +156,12 @@ public class SdlService { return new LifecycleConfigurationUpdate(appName, null, TTSChunkFactory.createSimpleTTSChunks(appName), null); } + + @Override + public boolean onSystemInfoReceived(SystemInfo systemInfo) { + //Check the SystemInfo object to ensure that the connection to the device should continue + return true; + } }; diff --git a/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java b/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java index 176d6010e..d4eef253b 100644 --- a/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java +++ b/javaSE/hello_sdl_java/src/main/java/com/smartdevicelink/java/SdlService.java @@ -52,6 +52,7 @@ import com.smartdevicelink.proxy.rpc.enums.*; import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.SystemInfo; import java.util.*; @@ -170,6 +171,12 @@ public class SdlService { return null; } } + + @Override + public boolean onSystemInfoReceived(SystemInfo systemInfo) { + //Check the SystemInfo object to ensure that the connection to the device should continue + return true; + } }; diff --git a/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java b/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java index cf3e7d04c..fbe236f08 100644 --- a/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java +++ b/javaSE/javaSE/src/main/java/com/smartdevicelink/managers/SdlManagerListener.java @@ -33,6 +33,7 @@ package com.smartdevicelink.managers; import com.smartdevicelink.managers.lifecycle.LifecycleConfigurationUpdate; import com.smartdevicelink.proxy.rpc.enums.Language; +import com.smartdevicelink.util.SystemInfo; public interface SdlManagerListener extends BaseSdlManagerListener { @@ -67,4 +68,12 @@ public interface SdlManagerListener extends BaseSdlManagerListener { * otherwise null to indicate that the language is not supported. */ LifecycleConfigurationUpdate managerShouldUpdateLifecycle(Language language, Language hmiLanguage); + + /** + * A way to determine if this SDL session should continue to be active while + * connected to the determined system information of the vehicle. + * @param systemInfo systemInfo - the system information of the vehicle that this session is currently active on. + * @return Return true if this session should continue, false if the session should end + */ + boolean onSystemInfoReceived(SystemInfo systemInfo); } diff --git a/javaSE/javaSE/src/main/java/com/smartdevicelink/session/SdlSession.java b/javaSE/javaSE/src/main/java/com/smartdevicelink/session/SdlSession.java index 3fa84ed27..91df403f9 100644 --- a/javaSE/javaSE/src/main/java/com/smartdevicelink/session/SdlSession.java +++ b/javaSE/javaSE/src/main/java/com/smartdevicelink/session/SdlSession.java @@ -42,6 +42,7 @@ import com.smartdevicelink.protocol.SdlProtocolBase; import com.smartdevicelink.protocol.enums.SessionType; import com.smartdevicelink.transport.BaseTransportConfig; import com.smartdevicelink.util.DebugTool; +import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; import java.util.concurrent.CopyOnWriteArrayList; @@ -67,7 +68,11 @@ public class SdlSession extends BaseSdlSession { if (serviceType != null && serviceType.eq(SessionType.RPC) && this.sessionId == -1) { this.sessionId = sessionID; - this.sessionListener.onSessionStarted(sessionID, version); + SystemInfo systemInfo = null; + if (version != null && version.isNewerThan(new Version(5, 4, 0)) >= 0) { + systemInfo = extractSystemInfo(packet); + } + this.sessionListener.onSessionStarted(sessionID, version, systemInfo); } if (isEncrypted) { @@ -109,4 +114,4 @@ public class SdlSession extends BaseSdlSession { } } -}
\ No newline at end of file +} |