From 09b9ad15c3650426990795f4b41f150665f3ff13 Mon Sep 17 00:00:00 2001 From: pasniak Date: Sun, 2 Oct 2016 22:29:33 -0400 Subject: [PATCH 1/4] allow naming planned waypoints and renaming existing waypoints; follows the name@lat&lon convention; the WebApMapInterface returns with action`newName string (before: only action is returned) --- app/src/main/assets/map.html | 22 ++++++++-- .../java/com/ds/avare/LocationActivity.java | 44 +++++++++++++++---- .../ds/avare/webinfc/WebAppMapInterface.java | 2 + 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/app/src/main/assets/map.html b/app/src/main/assets/map.html index bf2f29575..af10e8563 100644 --- a/app/src/main/assets/map.html +++ b/app/src/main/assets/map.html @@ -42,8 +42,15 @@ toastr.options.timeOut = 2000; // set data - function setData(airport, info, metar, taf, airep, tfr, sua, mets, performance, winds, layer) { + function setData(airport, nameEdit, isStatic, info, metar, taf, airep, tfr, sua, mets, performance, winds, layer) { $("#airportName").text(airport); + $("#nameEdit").val(nameEdit); + if (isStatic) { + $("#nameEditDiv").hide(); + } else { + $("#nameEditDiv").show(); + $("#nameEdit").focus(); + } $("#airportInfo").html(info); $("#airportMetar").html(metar); $("#airportTaf").html(taf); @@ -62,6 +69,11 @@ AndroidMap.doAction(action); } + function doRenameAction(action) { + AndroidMap.doAction(action + "`" + $("#nameEdit").val()); + } + + @@ -70,14 +82,18 @@
-

+
+ + Name +

+

diff --git a/app/src/main/java/com/ds/avare/LocationActivity.java b/app/src/main/java/com/ds/avare/LocationActivity.java index a908a1d1e..26d717119 100644 --- a/app/src/main/java/com/ds/avare/LocationActivity.java +++ b/app/src/main/java/com/ds/avare/LocationActivity.java @@ -416,7 +416,8 @@ public void onCreate(Bundle savedInstanceState) { public Object callback(Object o, Object o1) { String param = (String) o; - String airport = (String) o; + String[] parts = param.split("`"); + String action = parts[0], newName = parts.length>1 ? parts[1] : ""; mAlertDialogDestination.dismiss(); @@ -427,7 +428,7 @@ public Object callback(Object o, Object o1) { return null; } - if (param.equals("A/FD")) { + if (action.equals("A/FD")) { /* * A/FD */ @@ -436,7 +437,7 @@ public Object callback(Object o, Object o1) { ((MainActivity) LocationActivity.this.getParent()).showAfdTab(); } mAirportPressed = null; - } else if (param.equals("Plate")) { + } else if (action.equals("Plate")) { /* * Plate */ @@ -446,14 +447,19 @@ public Object callback(Object o, Object o1) { ((MainActivity) LocationActivity.this.getParent()).showPlatesTab(); } mAirportPressed = null; - } else if (param.equals("+Plan")) { - String type = Destination.BASE; + } else if (action.equals("+Plan")) { + /* + * +Plan + */ if (mAirportPressed.contains("&")) { - type = Destination.GPS; + String decoratedName = (newName.isEmpty() && newName != mAirportPressed) + ? mAirportPressed : newName + "@" + mAirportPressed; + planTo(decoratedName, Destination.GPS); + } else { + planTo(mAirportPressed, Destination.BASE); } - planTo(mAirportPressed, type); mAirportPressed = null; - } else if (param.equals("->D")) { + } else if (action.equals("->D")) { /* * On click, find destination that was pressed on in view @@ -466,6 +472,8 @@ public Object callback(Object o, Object o1) { type = Destination.GPS; } goTo(dest, type); + } else if (action.equals("Rename")) { + rename(newName); } return null; } @@ -982,6 +990,26 @@ public void onClick(View v) { } } + /** finds the pressed destination in the plan and renames it to the @newName */ + public void rename(String newName) { + if (!newName.isEmpty() + && mAirportPressed!=null + && !newName.equals(mAirportPressed) + && mAirportPressed.contains("&")) + { + String[] latLon = mAirportPressed.split("&"); + double lat = Double.parseDouble(latLon[0]), + lon = Double.parseDouble(latLon[1]); + Plan plan = mService.getPlan(); + if (plan != null) { + Destination destToRename = plan.findDestinationByLocation(lon, lat); + if (destToRename != null) { + destToRename.setID(newName+"@"+mAirportPressed); + } + } + } + } + private void setTrackState(boolean bState) { URI fileURI = mService.setTracks(bState); diff --git a/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java b/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java index adb8004cc..1b1e5f517 100644 --- a/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java +++ b/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java @@ -167,6 +167,8 @@ public void handleMessage(Message msg) { mWebView.loadUrl("javascript:plan_clear()"); String func = "javascript:setData('" + Helper.formatJsArgs(data.airport) + "','" + + Helper.formatJsArgs(data.airport) + "'," + // nameEdit + Helper.formatJsArgs(data.airport.contains("&") ? "false" : "true") + ",'" + // isStatic "Position " + "" + Helper.formatJsArgs(data.info) + "','" + Helper.formatJsArgs(metar) + "','" + Helper.formatJsArgs(taf) + "','" + From 7f9ee6199fe9d88fc218fc493a90c6f3d58fc798 Mon Sep 17 00:00:00 2001 From: pasniak Date: Tue, 4 Oct 2016 05:56:53 -0400 Subject: [PATCH 2/4] allow naming planned waypoints and renaming existing waypoints; follows the name@lat&lon convention --- app/src/main/assets/map.html | 2 +- .../java/com/ds/avare/LocationActivity.java | 5 +++++ .../java/com/ds/avare/place/Destination.java | 7 +++++++ app/src/main/java/com/ds/avare/place/Plan.java | 17 +++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/app/src/main/assets/map.html b/app/src/main/assets/map.html index af10e8563..150ffc235 100644 --- a/app/src/main/assets/map.html +++ b/app/src/main/assets/map.html @@ -81,7 +81,7 @@
- ->D + ->D +Plan Plate A/FD diff --git a/app/src/main/java/com/ds/avare/LocationActivity.java b/app/src/main/java/com/ds/avare/LocationActivity.java index 26d717119..3635ccde6 100644 --- a/app/src/main/java/com/ds/avare/LocationActivity.java +++ b/app/src/main/java/com/ds/avare/LocationActivity.java @@ -470,6 +470,8 @@ public Object callback(Object o, Object o1) { String type = Destination.BASE; if (dest.contains("&")) { type = Destination.GPS; + dest = (newName.isEmpty() && newName != mAirportPressed) + ? dest : newName + "@" + dest; } goTo(dest, type); } else if (action.equals("Rename")) { @@ -1005,6 +1007,9 @@ public void rename(String newName) { Destination destToRename = plan.findDestinationByLocation(lon, lat); if (destToRename != null) { destToRename.setID(newName+"@"+mAirportPressed); + mToast.setText(getString(R.string.LabelChanged)+" "+newName); + mToast.show(); + } } } diff --git a/app/src/main/java/com/ds/avare/place/Destination.java b/app/src/main/java/com/ds/avare/place/Destination.java index 8984e5954..fe74d3b0f 100644 --- a/app/src/main/java/com/ds/avare/place/Destination.java +++ b/app/src/main/java/com/ds/avare/place/Destination.java @@ -773,6 +773,13 @@ public String getID() { return(mName); } + /** + * @return + */ + public void setID(String name) { + mName = name.toUpperCase(Locale.getDefault());; + } + /** * @return */ diff --git a/app/src/main/java/com/ds/avare/place/Plan.java b/app/src/main/java/com/ds/avare/place/Plan.java index d9648662a..f0090fbc6 100644 --- a/app/src/main/java/com/ds/avare/place/Plan.java +++ b/app/src/main/java/com/ds/avare/place/Plan.java @@ -271,6 +271,23 @@ public int findNextNotPassed() { return 0; } + /* + * Find a destination using lat/lon coordinates + */ + public Destination findDestinationByLocation(double lonToFind, double latToFind) { + /* + * + */ + for (int id = 0; id < getDestinationNumber(); id++) { + Location loc = mDestination[id].getLocation(); + double lon = loc.getLongitude(); + double lat = loc.getLatitude(); + if (Helper.isSameGPSLocation(lon, lat, lonToFind, latToFind)) + return mDestination[id]; + } + return null; + } + /* * If passed */ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3793932e3..201a36b3e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,6 +120,7 @@ Redistribution and use in source and binary forms, with or without modification, "Select to reduce white light during night operation (requires restart)" "Delete" "Label" + "Label changed to" "Create" "Plan" "+Plan" From 23da29228d71cf614424b2a7b9a831957ba322ff Mon Sep 17 00:00:00 2001 From: pasniak Date: Sun, 2 Oct 2016 22:29:33 -0400 Subject: [PATCH 3/4] allow naming planned waypoints and renaming existing waypoints; follows the name@lat&lon convention; the WebApMapInterface returns with action`newName string (before: only action is returned) --- app/src/main/assets/map.html | 24 ++++++++-- .../java/com/ds/avare/LocationActivity.java | 44 +++++++++++++++---- .../ds/avare/webinfc/WebAppMapInterface.java | 2 + 3 files changed, 58 insertions(+), 12 deletions(-) diff --git a/app/src/main/assets/map.html b/app/src/main/assets/map.html index 99bf1f682..ec32cb1c9 100644 --- a/app/src/main/assets/map.html +++ b/app/src/main/assets/map.html @@ -42,8 +42,15 @@ toastr.options.timeOut = 2000; // set data - function setData(airport, info, metar, taf, airep, tfr, sua, mets, performance, winds, layer) { + function setData(airport, nameEdit, isStatic, info, metar, taf, airep, tfr, sua, mets, performance, winds, layer) { $("#airportName").text(airport); + $("#nameEdit").val(nameEdit); + if (isStatic) { + $("#nameEditDiv").hide(); + } else { + $("#nameEditDiv").show(); + $("#nameEdit").focus(); + } $("#airportInfo").html(info); $("#airportMetar").html(metar); $("#airportTaf").html(taf); @@ -62,6 +69,11 @@ AndroidMap.doAction(action); } + function doRenameAction(action) { + AndroidMap.doAction(action + "`" + $("#nameEdit").val()); + } + + @@ -69,15 +81,19 @@
-

+
+ + Name +

+

diff --git a/app/src/main/java/com/ds/avare/LocationActivity.java b/app/src/main/java/com/ds/avare/LocationActivity.java index 7fa98c993..d73058f3e 100644 --- a/app/src/main/java/com/ds/avare/LocationActivity.java +++ b/app/src/main/java/com/ds/avare/LocationActivity.java @@ -416,7 +416,8 @@ public void onCreate(Bundle savedInstanceState) { public Object callback(Object o, Object o1) { String param = (String) o; - String airport = (String) o; + String[] parts = param.split("`"); + String action = parts[0], newName = parts.length>1 ? parts[1] : ""; mAlertDialogDestination.dismiss(); @@ -427,7 +428,7 @@ public Object callback(Object o, Object o1) { return null; } - if (param.equals("A/FD")) { + if (action.equals("A/FD")) { /* * A/FD */ @@ -436,7 +437,7 @@ public Object callback(Object o, Object o1) { ((MainActivity) LocationActivity.this.getParent()).showAfdTab(); } mAirportPressed = null; - } else if (param.equals("Plate")) { + } else if (action.equals("Plate")) { /* * Plate */ @@ -446,14 +447,19 @@ public Object callback(Object o, Object o1) { ((MainActivity) LocationActivity.this.getParent()).showPlatesTab(); } mAirportPressed = null; - } else if (param.equals("+Plan")) { - String type = Destination.BASE; + } else if (action.equals("+Plan")) { + /* + * +Plan + */ if (mAirportPressed.contains("&")) { - type = Destination.GPS; + String decoratedName = (newName.isEmpty() && newName != mAirportPressed) + ? mAirportPressed : newName + "@" + mAirportPressed; + planTo(decoratedName, Destination.GPS); + } else { + planTo(mAirportPressed, Destination.BASE); } - planTo(mAirportPressed, type); mAirportPressed = null; - } else if (param.equals("->D")) { + } else if (action.equals("->D")) { /* * On click, find destination that was pressed on in view @@ -466,6 +472,8 @@ public Object callback(Object o, Object o1) { type = Destination.GPS; } goTo(dest, type); + } else if (action.equals("Rename")) { + rename(newName); } return null; } @@ -982,6 +990,26 @@ public void onClick(View v) { } } + /** finds the pressed destination in the plan and renames it to the @newName */ + public void rename(String newName) { + if (!newName.isEmpty() + && mAirportPressed!=null + && !newName.equals(mAirportPressed) + && mAirportPressed.contains("&")) + { + String[] latLon = mAirportPressed.split("&"); + double lat = Double.parseDouble(latLon[0]), + lon = Double.parseDouble(latLon[1]); + Plan plan = mService.getPlan(); + if (plan != null) { + Destination destToRename = plan.findDestinationByLocation(lon, lat); + if (destToRename != null) { + destToRename.setID(newName+"@"+mAirportPressed); + } + } + } + } + private void setTrackState(boolean bState) { URI fileURI = mService.setTracks(bState); diff --git a/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java b/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java index adb8004cc..1b1e5f517 100644 --- a/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java +++ b/app/src/main/java/com/ds/avare/webinfc/WebAppMapInterface.java @@ -167,6 +167,8 @@ public void handleMessage(Message msg) { mWebView.loadUrl("javascript:plan_clear()"); String func = "javascript:setData('" + Helper.formatJsArgs(data.airport) + "','" + + Helper.formatJsArgs(data.airport) + "'," + // nameEdit + Helper.formatJsArgs(data.airport.contains("&") ? "false" : "true") + ",'" + // isStatic "Position " + "" + Helper.formatJsArgs(data.info) + "','" + Helper.formatJsArgs(metar) + "','" + Helper.formatJsArgs(taf) + "','" + From 04b10e4999fade3015bab4fb8b9db69ed0a12531 Mon Sep 17 00:00:00 2001 From: pasniak Date: Tue, 4 Oct 2016 05:56:53 -0400 Subject: [PATCH 4/4] allow naming planned waypoints and renaming existing waypoints; follows the name@lat&lon convention --- .../java/com/ds/avare/LocationActivity.java | 5 +++++ .../java/com/ds/avare/place/Destination.java | 7 +++++++ app/src/main/java/com/ds/avare/place/Plan.java | 17 +++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 30 insertions(+) diff --git a/app/src/main/java/com/ds/avare/LocationActivity.java b/app/src/main/java/com/ds/avare/LocationActivity.java index d73058f3e..527fe1448 100644 --- a/app/src/main/java/com/ds/avare/LocationActivity.java +++ b/app/src/main/java/com/ds/avare/LocationActivity.java @@ -470,6 +470,8 @@ public Object callback(Object o, Object o1) { String type = Destination.BASE; if (dest.contains("&")) { type = Destination.GPS; + dest = (newName.isEmpty() && newName != mAirportPressed) + ? dest : newName + "@" + dest; } goTo(dest, type); } else if (action.equals("Rename")) { @@ -1005,6 +1007,9 @@ public void rename(String newName) { Destination destToRename = plan.findDestinationByLocation(lon, lat); if (destToRename != null) { destToRename.setID(newName+"@"+mAirportPressed); + mToast.setText(getString(R.string.LabelChanged)+" "+newName); + mToast.show(); + } } } diff --git a/app/src/main/java/com/ds/avare/place/Destination.java b/app/src/main/java/com/ds/avare/place/Destination.java index 8984e5954..fe74d3b0f 100644 --- a/app/src/main/java/com/ds/avare/place/Destination.java +++ b/app/src/main/java/com/ds/avare/place/Destination.java @@ -773,6 +773,13 @@ public String getID() { return(mName); } + /** + * @return + */ + public void setID(String name) { + mName = name.toUpperCase(Locale.getDefault());; + } + /** * @return */ diff --git a/app/src/main/java/com/ds/avare/place/Plan.java b/app/src/main/java/com/ds/avare/place/Plan.java index d9648662a..f0090fbc6 100644 --- a/app/src/main/java/com/ds/avare/place/Plan.java +++ b/app/src/main/java/com/ds/avare/place/Plan.java @@ -271,6 +271,23 @@ public int findNextNotPassed() { return 0; } + /* + * Find a destination using lat/lon coordinates + */ + public Destination findDestinationByLocation(double lonToFind, double latToFind) { + /* + * + */ + for (int id = 0; id < getDestinationNumber(); id++) { + Location loc = mDestination[id].getLocation(); + double lon = loc.getLongitude(); + double lat = loc.getLatitude(); + if (Helper.isSameGPSLocation(lon, lat, lonToFind, latToFind)) + return mDestination[id]; + } + return null; + } + /* * If passed */ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a1a7a21fc..c1e7b5040 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,6 +120,7 @@ Redistribution and use in source and binary forms, with or without modification, "Select to reduce white light during night operation (requires restart)" "Delete" "Label" + "Label changed to" "Create" "Plan" "+Plan"