summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2016-11-01 16:53:20 -0400
committerGitHub <noreply@github.com>2016-11-01 16:53:20 -0400
commitd74df176d73daabec1558e9b88a0e285680a04b8 (patch)
tree35936ff7f59d665571992960c28edc125c3b96ca
parentc10983e203dd470460c3af18fb9e323a4b49f51b (diff)
parent7951e1c6cdfca1b4af084e33bbff97b965177e75 (diff)
downloadsdl_android-d74df176d73daabec1558e9b88a0e285680a04b8.tar.gz
Merge pull request #346 from smartdevicelink/feature/last_mile_navigation
API's associated with Last Mile Navigation evolution task
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/protocol/enums/FunctionID.java4
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java64
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/interfaces/IProxyListenerBase.java10
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/Coordinate.java44
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPoints.java37
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java46
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/LocationDetails.java150
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OasisAddress.java132
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OnWayPointChange.java48
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java15
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java16
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java15
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java16
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/WayPointType.java15
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/util/SdlDataTypeConverter.java53
15 files changed, 653 insertions, 12 deletions
diff --git a/sdl_android_lib/src/com/smartdevicelink/protocol/enums/FunctionID.java b/sdl_android_lib/src/com/smartdevicelink/protocol/enums/FunctionID.java
index 04517d329..e427141cf 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/enums/FunctionID.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/enums/FunctionID.java
@@ -53,6 +53,9 @@ public enum FunctionID{
SYSTEM_REQUEST(38, "SystemRequest"),
SEND_LOCATION(39, "SendLocation"),
DIAL_NUMBER(40, "DialNumber"),
+ GET_WAY_POINTS(45, "GetWayPoints"),
+ SUBSCRIBE_WAY_POINTS(46, "SubscribeWayPoints"),
+ UNSUBSCRIBE_WAY_POINTS(47, "UnsubscribeWayPoints"),
// NOTIFICATIONS
ON_HMI_STATUS(32768, "OnHMIStatus"),
@@ -70,6 +73,7 @@ public enum FunctionID{
ON_TOUCH_EVENT(32780, "OnTouchEvent"),
ON_SYSTEM_REQUEST(32781, "OnSystemRequest"),
ON_HASH_CHANGE(32782, "OnHashChange"),
+ ON_WAY_POINT_CHANGE(32784, "OnWayPointChange"),
// MOCKED FUNCTIONS (NOT SENT FROM HEAD-UNIT)
ON_LOCK_SCREEN_STATUS(-1, "OnLockScreenStatus"),
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java b/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
index 85bc6312b..e6e179471 100644
--- a/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
@@ -2638,6 +2638,54 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
} else {
_proxyListener.onGetVehicleDataResponse((GetVehicleDataResponse)msg);
onRPCResponseReceived(msg);
+ }
+ } else if (functionName.equals(FunctionID.SUBSCRIBE_WAY_POINTS.toString())) {
+ // SubscribeWayPoints
+ final SubscribeWayPointsResponse msg = new SubscribeWayPointsResponse(hash);
+ if (_callbackToUIThread) {
+ // Run in UI thread
+ _mainUIHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ _proxyListener.onSubscribeWayPointsResponse((SubscribeWayPointsResponse)msg);
+ onRPCResponseReceived(msg);
+ }
+ });
+ } else {
+ _proxyListener.onSubscribeWayPointsResponse((SubscribeWayPointsResponse)msg);
+ onRPCResponseReceived(msg);
+ }
+ } else if (functionName.equals(FunctionID.UNSUBSCRIBE_WAY_POINTS.toString())) {
+ // UnsubscribeWayPoints
+ final UnsubscribeWayPointsResponse msg = new UnsubscribeWayPointsResponse(hash);
+ if (_callbackToUIThread) {
+ // Run in UI thread
+ _mainUIHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ _proxyListener.onUnsubscribeWayPointsResponse((UnsubscribeWayPointsResponse)msg);
+ onRPCResponseReceived(msg);
+ }
+ });
+ } else {
+ _proxyListener.onUnsubscribeWayPointsResponse((UnsubscribeWayPointsResponse)msg);
+ onRPCResponseReceived(msg);
+ }
+ } else if (functionName.equals(FunctionID.GET_WAY_POINTS.toString())) {
+ // GetWayPoints
+ final GetWayPointsResponse msg = new GetWayPointsResponse(hash);
+ if (_callbackToUIThread) {
+ // Run in UI thread
+ _mainUIHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ _proxyListener.onGetWayPointsResponse((GetWayPointsResponse)msg);
+ onRPCResponseReceived(msg);
+ }
+ });
+ } else {
+ _proxyListener.onGetWayPointsResponse((GetWayPointsResponse)msg);
+ onRPCResponseReceived(msg);
}
} else if (functionName.equals(FunctionID.READ_DID.toString())) {
final ReadDIDResponse msg = new ReadDIDResponse(hash);
@@ -3162,6 +3210,22 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
onRPCNotificationReceived(msg);
}
}
+ else if (functionName.equals(FunctionID.ON_WAY_POINT_CHANGE.toString())) {
+ final OnWayPointChange msg = new OnWayPointChange(hash);
+ if (_callbackToUIThread) {
+ // Run in UI thread
+ _mainUIHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ _proxyListener.onOnWayPointChange((OnWayPointChange)msg);
+ onRPCNotificationReceived(msg);
+ }
+ });
+ } else {
+ _proxyListener.onOnWayPointChange((OnWayPointChange)msg);
+ onRPCNotificationReceived(msg);
+ }
+ }
else {
if (_sdlMsgVersion != null) {
DebugTool.logInfo("Unrecognized notification Message: " + functionName.toString() +
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/interfaces/IProxyListenerBase.java b/sdl_android_lib/src/com/smartdevicelink/proxy/interfaces/IProxyListenerBase.java
index 1861b266b..8b437e05e 100644
--- a/sdl_android_lib/src/com/smartdevicelink/proxy/interfaces/IProxyListenerBase.java
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/interfaces/IProxyListenerBase.java
@@ -18,6 +18,7 @@ import com.smartdevicelink.proxy.rpc.EndAudioPassThruResponse;
import com.smartdevicelink.proxy.rpc.GenericResponse;
import com.smartdevicelink.proxy.rpc.GetDTCsResponse;
import com.smartdevicelink.proxy.rpc.GetVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.GetWayPointsResponse;
import com.smartdevicelink.proxy.rpc.ListFilesResponse;
import com.smartdevicelink.proxy.rpc.OnAudioPassThru;
import com.smartdevicelink.proxy.rpc.OnButtonEvent;
@@ -35,6 +36,7 @@ import com.smartdevicelink.proxy.rpc.OnTBTClientState;
import com.smartdevicelink.proxy.rpc.OnStreamRPC;
import com.smartdevicelink.proxy.rpc.OnTouchEvent;
import com.smartdevicelink.proxy.rpc.OnVehicleData;
+import com.smartdevicelink.proxy.rpc.OnWayPointChange;
import com.smartdevicelink.proxy.rpc.PerformAudioPassThruResponse;
import com.smartdevicelink.proxy.rpc.PerformInteractionResponse;
import com.smartdevicelink.proxy.rpc.PutFileResponse;
@@ -53,9 +55,11 @@ import com.smartdevicelink.proxy.rpc.SpeakResponse;
import com.smartdevicelink.proxy.rpc.StreamRPCResponse;
import com.smartdevicelink.proxy.rpc.SubscribeButtonResponse;
import com.smartdevicelink.proxy.rpc.SubscribeVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.SubscribeWayPointsResponse;
import com.smartdevicelink.proxy.rpc.SystemRequestResponse;
import com.smartdevicelink.proxy.rpc.UnsubscribeButtonResponse;
import com.smartdevicelink.proxy.rpc.UnsubscribeVehicleDataResponse;
+import com.smartdevicelink.proxy.rpc.UnsubscribeWayPointsResponse;
import com.smartdevicelink.proxy.rpc.UpdateTurnListResponse;
import com.smartdevicelink.proxy.rpc.enums.SdlDisconnectedReason;
@@ -325,4 +329,10 @@ public interface IProxyListenerBase {
public void onUpdateTurnListResponse(UpdateTurnListResponse response);
public void onServiceDataACK(int dataSize);
+ public void onGetWayPointsResponse(GetWayPointsResponse response);
+
+ public void onSubscribeWayPointsResponse(SubscribeWayPointsResponse response);
+
+ public void onUnsubscribeWayPointsResponse(UnsubscribeWayPointsResponse response);
+ public void onOnWayPointChange(OnWayPointChange notification);
}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/Coordinate.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/Coordinate.java
new file mode 100644
index 000000000..7e899168c
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/Coordinate.java
@@ -0,0 +1,44 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.util.SdlDataTypeConverter;
+
+import java.util.Hashtable;
+
+public class Coordinate extends RPCStruct{
+ public static final String KEY_LATITUDE_DEGREES = "latitudeDegrees";
+ public static final String KEY_LONGITUDE_DEGREES = "longitudeDegrees";
+
+ public Coordinate() {
+ }
+
+ public Coordinate(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public Float getLatitudeDegrees() {
+ Object value = store.get(KEY_LATITUDE_DEGREES);
+ return SdlDataTypeConverter.objectToFloat(value);
+ }
+
+ public void setLatitudeDegrees(Float latitudeDegrees) {
+ if (latitudeDegrees != null) {
+ store.put(KEY_LATITUDE_DEGREES, latitudeDegrees);
+ } else {
+ store.remove(KEY_LATITUDE_DEGREES);
+ }
+ }
+
+ public Float getLongitudeDegrees() {
+ Object value = store.get(KEY_LONGITUDE_DEGREES);
+ return SdlDataTypeConverter.objectToFloat(value);
+ }
+
+ public void setLongitudeDegrees(Float longitudeDegrees) {
+ if (longitudeDegrees != null) {
+ store.put(KEY_LONGITUDE_DEGREES, longitudeDegrees);
+ } else {
+ store.remove(KEY_LONGITUDE_DEGREES);
+ }
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPoints.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPoints.java
new file mode 100644
index 000000000..f9832da0e
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPoints.java
@@ -0,0 +1,37 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+import com.smartdevicelink.proxy.rpc.enums.WayPointType;
+
+import java.util.Hashtable;
+
+public class GetWayPoints extends RPCRequest {
+ public static final String KEY_WAY_POINT_TYPE = "wayPointType";
+
+ public GetWayPoints() {
+ super(FunctionID.GET_WAY_POINTS.toString());
+ }
+
+ public GetWayPoints(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public WayPointType getWayPointType() {
+ Object obj = parameters.get(KEY_WAY_POINT_TYPE);
+ if (obj instanceof WayPointType) {
+ return (WayPointType) obj;
+ } else if (obj instanceof String) {
+ return WayPointType.valueForString((String) obj);
+ }
+ return null;
+ }
+
+ public void setWayPointType(WayPointType wayPointType) {
+ if (wayPointType != null) {
+ parameters.put(KEY_WAY_POINT_TYPE, wayPointType);
+ } else {
+ parameters.remove(KEY_WAY_POINT_TYPE);
+ }
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java
new file mode 100644
index 000000000..24048c826
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/GetWayPointsResponse.java
@@ -0,0 +1,46 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+public class GetWayPointsResponse extends RPCResponse {
+ public static final String KEY_WAY_POINTS = "wayPoints";
+
+ public GetWayPointsResponse() {
+ super(FunctionID.GET_WAY_POINTS.toString());
+ }
+ public GetWayPointsResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public void setWayPoints(List<LocationDetails> wayPoints) {
+ if (wayPoints != null) {
+ parameters.put(KEY_WAY_POINTS, wayPoints);
+ } else {
+ parameters.remove(KEY_WAY_POINTS);
+ }
+ }
+ @SuppressWarnings("unchecked")
+ public List<LocationDetails> getWayPoints() {
+ if (parameters.get(KEY_WAY_POINTS) instanceof List<?>) {
+ List<?> list = (List<?>)parameters.get(KEY_WAY_POINTS);
+ if (list != null && list.size() > 0) {
+ Object obj = list.get(0);
+ if (obj instanceof LocationDetails) {
+ return (List<LocationDetails>) list;
+ } else if (obj instanceof Hashtable) {
+ List<LocationDetails> newList = new ArrayList<LocationDetails>();
+ for (Object hashObj : list) {
+ newList.add(new LocationDetails((Hashtable<String, Object>)hashObj));
+ }
+ return newList;
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/LocationDetails.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/LocationDetails.java
new file mode 100644
index 000000000..50dcaf49b
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/LocationDetails.java
@@ -0,0 +1,150 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+import com.smartdevicelink.util.DebugTool;
+
+import java.util.Hashtable;
+import java.util.List;
+
+public class LocationDetails extends RPCStruct{
+ public static final String KEY_COORDINATE = "coordinate";
+ public static final String KEY_LOCATION_NAME = "locationName";
+ public static final String KEY_ADDRESS_LINES = "addressLines";
+ public static final String KEY_LOCATION_DESCRIPTION = "locationDescription";
+ public static final String KEY_PHONE_NUMBER = "phoneNumber";
+ public static final String KEY_LOCATION_IMAGE = "locationImage";
+ public static final String KEY_SEARCH_ADDRESS = "searchAddress";
+
+ public LocationDetails() {
+ }
+
+ public LocationDetails(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Coordinate getCoordinate() {
+ Object obj = store.get(KEY_COORDINATE);
+ if (obj instanceof Coordinate) {
+ return (Coordinate) obj;
+ } else if (obj instanceof Hashtable) {
+ try {
+ return new Coordinate((Hashtable<String, Object>) obj);
+ } catch (Exception e) {
+ DebugTool.logError("Failed to parse " + getClass().getSimpleName() + "." + KEY_COORDINATE, e);
+ }
+ }
+ return null;
+ }
+ public void setCoordinate(Coordinate coordinate) {
+ if (coordinate != null) {
+ store.put(KEY_COORDINATE, coordinate);
+ } else {
+ store.remove(KEY_COORDINATE);
+ }
+ }
+
+ public String getLocationName() {
+ return (String) store.get(KEY_LOCATION_NAME);
+ }
+
+ public void setLocationName(String locationName) {
+ if (locationName != null) {
+ store.put(KEY_LOCATION_NAME, locationName);
+ } else {
+ store.remove(KEY_LOCATION_NAME);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<String> getAddressLines() {
+ final Object listObj = store.get(KEY_ADDRESS_LINES);
+ if (listObj instanceof List<?>) {
+ List<?> list = (List<?>) listObj;
+ if (list.size() > 0) {
+ Object obj = list.get(0);
+ if (obj instanceof String) {
+ return (List<String>) list;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void setAddressLines(List<String> addressLines) {
+ if (addressLines != null) {
+ store.put(KEY_ADDRESS_LINES, addressLines);
+ } else {
+ store.remove(KEY_ADDRESS_LINES);
+ }
+ }
+
+ public String getLocationDescription() {
+ return (String) store.get(KEY_LOCATION_DESCRIPTION);
+ }
+
+ public void setLocationDescription(String locationDescription) {
+ if (locationDescription != null) {
+ store.put(KEY_LOCATION_DESCRIPTION, locationDescription);
+ } else {
+ store.remove(KEY_LOCATION_DESCRIPTION);
+ }
+ }
+
+ public String getPhoneNumber() {
+ return (String) store.get(KEY_PHONE_NUMBER);
+ }
+
+ public void setPhoneNumber(String phoneNumber) {
+ if (phoneNumber != null) {
+ store.put(KEY_PHONE_NUMBER, phoneNumber);
+ } else {
+ store.remove(KEY_PHONE_NUMBER);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Image getLocationImage() {
+ Object obj = store.get(KEY_LOCATION_IMAGE);
+ if (obj instanceof Image) {
+ return (Image) obj;
+ } else if (obj instanceof Hashtable) {
+ try {
+ return new Image((Hashtable<String, Object>) obj);
+ } catch (Exception e) {
+ DebugTool.logError("Failed to parse " + getClass().getSimpleName() + "." + KEY_LOCATION_IMAGE, e);
+ }
+ }
+ return null;
+ }
+
+ public void setLocationImage(Image locationImage) {
+ if (locationImage != null) {
+ store.put(KEY_LOCATION_IMAGE, locationImage);
+ } else {
+ store.remove(KEY_LOCATION_IMAGE);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public OasisAddress getSearchAddress() {
+ Object obj = store.get(KEY_SEARCH_ADDRESS);
+ if (obj instanceof OasisAddress) {
+ return (OasisAddress) obj;
+ } else if (obj instanceof Hashtable) {
+ try {
+ return new OasisAddress((Hashtable<String, Object>) obj);
+ } catch (Exception e) {
+ DebugTool.logError("Failed to parse " + getClass().getSimpleName() + "." + KEY_SEARCH_ADDRESS, e);
+ }
+ }
+ return null;
+ }
+ public void setSearchAddress(OasisAddress searchAddress) {
+ if (searchAddress != null) {
+ store.put(KEY_SEARCH_ADDRESS, searchAddress);
+ } else {
+ store.remove(KEY_SEARCH_ADDRESS);
+ }
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OasisAddress.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OasisAddress.java
new file mode 100644
index 000000000..a20086c35
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OasisAddress.java
@@ -0,0 +1,132 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.proxy.RPCStruct;
+
+import java.util.Hashtable;
+
+public class OasisAddress extends RPCStruct{
+ public static final String KEY_COUNTRY_NAME = "countryName";
+ public static final String KEY_COUNTRY_CODE = "countryCode";
+ public static final String KEY_POSTAL_CODE = "postalCode";
+ public static final String KEY_ADMINISTRATIVE_AREA = "administrativeArea";
+ public static final String KEY_SUB_ADMINISTRATIVE_AREA = "subAdministrativeArea";
+ public static final String KEY_LOCALITY = "locality";
+ public static final String KEY_SUB_LOCALITY = "subLocality";
+ public static final String KEY_THOROUGH_FARE = "thoroughfare";
+ public static final String KEY_SUB_THOROUGH_FARE = "subThoroughfare";
+
+ public OasisAddress() {
+ }
+
+ public OasisAddress(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ public String getCountryName() {
+ return (String) store.get(KEY_COUNTRY_NAME);
+ }
+
+ public void setCountryName(String countryName) {
+ if (countryName != null) {
+ store.put(KEY_COUNTRY_NAME, countryName);
+ } else {
+ store.remove(KEY_COUNTRY_NAME);
+ }
+ }
+
+ public String getCountryCode() {
+ return (String) store.get(KEY_COUNTRY_CODE);
+ }
+
+ public void setCountryCode(String countryCode) {
+ if (countryCode != null) {
+ store.put(KEY_COUNTRY_CODE, countryCode);
+ } else {
+ store.remove(KEY_COUNTRY_CODE);
+ }
+ }
+
+ public String getPostalCode() {
+ return (String) store.get(KEY_POSTAL_CODE);
+ }
+
+ public void setPostalCode(String postalCode) {
+ if (postalCode != null) {
+ store.put(KEY_POSTAL_CODE, postalCode);
+ } else {
+ store.remove(KEY_POSTAL_CODE);
+ }
+ }
+
+ public String getAdministrativeArea() {
+ return (String) store.get(KEY_ADMINISTRATIVE_AREA);
+ }
+
+ public void setAdministrativeArea(String administrativeArea) {
+ if (administrativeArea != null) {
+ store.put(KEY_ADMINISTRATIVE_AREA, administrativeArea);
+ } else {
+ store.remove(KEY_ADMINISTRATIVE_AREA);
+ }
+ }
+
+ public String getSubAdministrativeArea() {
+ return (String) store.get(KEY_SUB_ADMINISTRATIVE_AREA);
+ }
+
+ public void setSubAdministrativeArea(String subAdministrativeArea) {
+ if (subAdministrativeArea != null) {
+ store.put(KEY_SUB_ADMINISTRATIVE_AREA, subAdministrativeArea);
+ } else {
+ store.remove(KEY_SUB_ADMINISTRATIVE_AREA);
+ }
+ }
+
+ public String getLocality() {
+ return (String) store.get(KEY_LOCALITY);
+ }
+
+ public void setLocality(String locality) {
+ if (locality != null) {
+ store.put(KEY_LOCALITY, locality);
+ } else {
+ store.remove(KEY_LOCALITY);
+ }
+ }
+
+ public String getSubLocality() {
+ return (String) store.get(KEY_SUB_LOCALITY);
+ }
+
+ public void setSubLocality(String subLocality) {
+ if (subLocality != null) {
+ store.put(KEY_SUB_LOCALITY, subLocality);
+ } else {
+ store.remove(KEY_SUB_LOCALITY);
+ }
+ }
+
+ public String getThoroughfare() {
+ return (String) store.get(KEY_THOROUGH_FARE);
+ }
+
+ public void setThoroughfare(String thoroughFare) {
+ if (thoroughFare != null) {
+ store.put(KEY_THOROUGH_FARE, thoroughFare);
+ } else {
+ store.remove(KEY_THOROUGH_FARE);
+ }
+ }
+
+ public String getSubThoroughfare() {
+ return (String) store.get(KEY_SUB_THOROUGH_FARE);
+ }
+
+ public void setSubThoroughfare(String subThoroughfare) {
+ if (subThoroughfare != null) {
+ store.put(KEY_SUB_THOROUGH_FARE, subThoroughfare);
+ } else {
+ store.remove(KEY_SUB_THOROUGH_FARE);
+ }
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OnWayPointChange.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OnWayPointChange.java
new file mode 100644
index 000000000..4e197b3eb
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/OnWayPointChange.java
@@ -0,0 +1,48 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCNotification;
+
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+public class OnWayPointChange extends RPCNotification {
+ public static final String KEY_WAY_POINTS = "wayPoints";
+
+ public OnWayPointChange() {
+ super(FunctionID.ON_WAY_POINT_CHANGE.toString());
+ }
+
+ public OnWayPointChange(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<LocationDetails> getWayPoints() {
+ if (parameters.get(KEY_WAY_POINTS) instanceof List<?>) {
+ List<?> list = (List<?>)parameters.get(KEY_WAY_POINTS);
+ if (list != null && list.size()>0) {
+ Object obj = list.get(0);
+ if(obj instanceof LocationDetails){
+ return (List<LocationDetails>) list;
+ } else if(obj instanceof Hashtable) {
+ List<LocationDetails> newList = new ArrayList<LocationDetails>();
+ for (Object hash:list) {
+ newList.add(new LocationDetails((Hashtable<String, Object>)hash));
+ }
+ return newList;
+ }
+ }
+ }
+ return null;
+ }
+
+ public void setWayPoints(List<LocationDetails> wayPoints) {
+ if (wayPoints != null) {
+ parameters.put(KEY_WAY_POINTS, wayPoints);
+ } else {
+ parameters.remove(KEY_WAY_POINTS);
+ }
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java
new file mode 100644
index 000000000..e0d3627e2
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPoints.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+public class SubscribeWayPoints extends RPCRequest {
+ public SubscribeWayPoints() {
+ super(FunctionID.SUBSCRIBE_WAY_POINTS.toString());
+ }
+ public SubscribeWayPoints(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java
new file mode 100644
index 000000000..880a97229
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/SubscribeWayPointsResponse.java
@@ -0,0 +1,16 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+
+import java.util.Hashtable;
+
+public class SubscribeWayPointsResponse extends RPCResponse {
+
+ public SubscribeWayPointsResponse() {
+ super(FunctionID.SUBSCRIBE_WAY_POINTS.toString());
+ }
+ public SubscribeWayPointsResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+} \ No newline at end of file
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java
new file mode 100644
index 000000000..b748ef673
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPoints.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCRequest;
+
+import java.util.Hashtable;
+
+public class UnsubscribeWayPoints extends RPCRequest {
+ public UnsubscribeWayPoints() {
+ super(FunctionID.UNSUBSCRIBE_WAY_POINTS.toString());
+ }
+ public UnsubscribeWayPoints(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java
new file mode 100644
index 000000000..8804892aa
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/UnsubscribeWayPointsResponse.java
@@ -0,0 +1,16 @@
+package com.smartdevicelink.proxy.rpc;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.RPCResponse;
+
+import java.util.Hashtable;
+
+public class UnsubscribeWayPointsResponse extends RPCResponse {
+
+ public UnsubscribeWayPointsResponse() {
+ super(FunctionID.UNSUBSCRIBE_WAY_POINTS.toString());
+ }
+ public UnsubscribeWayPointsResponse(Hashtable<String, Object> hash) {
+ super(hash);
+ }
+} \ No newline at end of file
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/WayPointType.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/WayPointType.java
new file mode 100644
index 000000000..120facaef
--- /dev/null
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/WayPointType.java
@@ -0,0 +1,15 @@
+package com.smartdevicelink.proxy.rpc.enums;
+
+public enum WayPointType {
+ ALL,
+ DESTINATION,
+ ;
+
+ public static WayPointType valueForString(String value) {
+ try{
+ return valueOf(value);
+ }catch(Exception e){
+ return null;
+ }
+ }
+}
diff --git a/sdl_android_lib/src/com/smartdevicelink/util/SdlDataTypeConverter.java b/sdl_android_lib/src/com/smartdevicelink/util/SdlDataTypeConverter.java
index fa958596e..0b47a59cd 100644
--- a/sdl_android_lib/src/com/smartdevicelink/util/SdlDataTypeConverter.java
+++ b/sdl_android_lib/src/com/smartdevicelink/util/SdlDataTypeConverter.java
@@ -14,21 +14,50 @@ public class SdlDataTypeConverter {
* the Object, or null if the value could not be converted.
*/
public static Double objectToDouble(Object originalValue) {
-
- if (originalValue == null) {
- return null;
- }
-
+
+ if (originalValue == null) {
+ return null;
+ }
+
Double result = null;
-
+
// Uses reflection to determine if the object is a valid type.
- if (originalValue instanceof Integer) {
- result = ((Integer) originalValue).doubleValue();
- } else if (originalValue instanceof Double){
+ if (originalValue instanceof Integer) {
+ result = ((Integer) originalValue).doubleValue();
+ } else if (originalValue instanceof Float){
+ result = ((Float) originalValue).doubleValue();
+ } else if (originalValue instanceof Double){
result = (Double) originalValue;
}
-
- return result;
- }
+ return result;
+ }
+
+ /**
+ * Converts values that are retrieved from an RPC parameters Hashtable as an
+ * Object into the standard number value of the mobile API, Float.
+ *
+ * @param originalValue The value retrieved from an RPC parameters Hashtable.
+ * @return The Float representation of an integer or float value stored in
+ * the Object, or null if the value could not be converted.
+ */
+ public static Float objectToFloat(Object originalValue) {
+
+ if (originalValue == null) {
+ return null;
+ }
+
+ Float result = null;
+
+ // Uses reflection to determine if the object is a valid type.
+ if (originalValue instanceof Integer) {
+ result = ((Integer) originalValue).floatValue();
+ } else if (originalValue instanceof Double){
+ result = ((Double) originalValue).floatValue();
+ } else if (originalValue instanceof Float){
+ result = (Float) originalValue;
+ }
+
+ return result;
+ }
}