diff options
author | Joey Grover <joeygrover@gmail.com> | 2016-11-01 16:53:20 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-01 16:53:20 -0400 |
commit | d74df176d73daabec1558e9b88a0e285680a04b8 (patch) | |
tree | 35936ff7f59d665571992960c28edc125c3b96ca | |
parent | c10983e203dd470460c3af18fb9e323a4b49f51b (diff) | |
parent | 7951e1c6cdfca1b4af084e33bbff97b965177e75 (diff) | |
download | sdl_android-d74df176d73daabec1558e9b88a0e285680a04b8.tar.gz |
Merge pull request #346 from smartdevicelink/feature/last_mile_navigation
API's associated with Last Mile Navigation evolution task
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; + } } |