Skip to content

Commit

Permalink
Use josm scheme instead of localhost for alert intents
Browse files Browse the repository at this point in the history
Using htto://127.0.0.1/ for JOSM RC causes issues on Android 12. To fix
we use josm: instead that we already supported on input.
  • Loading branch information
simonpoole committed Mar 17, 2022
1 parent 2717ed8 commit 9e810d3
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 29 deletions.
56 changes: 37 additions & 19 deletions src/main/java/de/blau/android/RemoteControlUrlActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import android.net.Uri;
import android.util.Log;
import androidx.annotation.Nullable;
import de.blau.android.contract.Schemes;
import de.blau.android.layer.LayerType;
import de.blau.android.osm.BoundingBox;
import de.blau.android.resources.TileLayerDatabase;
Expand All @@ -25,6 +26,23 @@ public class RemoteControlUrlActivity extends UrlActivity {
private static final String DEBUG_TAG = "RemoteControlUrlAct...";
public static final String RCDATA = "de.blau.android.RemoteControlActivity";

private static final String IMAGERY_COMMAND = "imagery";
public static final String LOAD_AND_ZOOM_COMMAND = "load_and_zoom";
private static final String ZOOM_COMMAND = "zoom";
private static final String TILE_SIZE_PARAMETER = "tileSize";
private static final String MAX_ZOOM_PARAMETER = "max_zoom";
private static final String MIN_ZOOM_PARAMETER = "min_zoom";
private static final String TYPE_PARAMETER = "type";
private static final String TITLE_PARAMETER = "title";
private static final String URL_PARAMETER = "url";
public static final String SELECT_PARAMETER = "select";
private static final String CHANGESET_SOURCE_PARAMETER = "changeset_source";
private static final String CHANGESET_COMMENT_PARAMETER = "changeset_comment";
public static final String TOP_PARAMETER = "top";
public static final String BOTTOM_PARAMETER = "bottom";
public static final String RIGHT_PARAMETER = "right";
public static final String LEFT_PARAMETER = "left";

public static class RemoteControlUrlData implements Serializable {
private static final long serialVersionUID = 2L;
private boolean load = false;
Expand Down Expand Up @@ -120,7 +138,7 @@ boolean setIntentExtras(Intent intent, Uri data) {
try {
// extract command
String command = data.getPath();
if ("josm".equals(data.getScheme())) { // extract command from scheme specific part
if (Schemes.JOSM.equals(data.getScheme())) { // extract command from scheme specific part
command = data.getSchemeSpecificPart();
if (command != null) {
int q = command.indexOf('?');
Expand All @@ -140,14 +158,14 @@ boolean setIntentExtras(Intent intent, Uri data) {
Log.d(DEBUG_TAG, "Command: " + command);
Log.d(DEBUG_TAG, "Query: " + data.getQuery());
switch (command) {
case "zoom":
case "load_and_zoom":
case ZOOM_COMMAND:
case LOAD_AND_ZOOM_COMMAND:
RemoteControlUrlData rcData = new RemoteControlUrlData();
rcData.setLoad("load_and_zoom".equals(command));
String leftParam = data.getQueryParameter("left");
String rightParam = data.getQueryParameter("right");
String bottomParam = data.getQueryParameter("bottom");
String topParam = data.getQueryParameter("top");
rcData.setLoad(LOAD_AND_ZOOM_COMMAND.equals(command));
String leftParam = data.getQueryParameter(LEFT_PARAMETER);
String rightParam = data.getQueryParameter(RIGHT_PARAMETER);
String bottomParam = data.getQueryParameter(BOTTOM_PARAMETER);
String topParam = data.getQueryParameter(TOP_PARAMETER);

if (leftParam != null && rightParam != null && bottomParam != null && topParam != null) {
try {
Expand All @@ -163,19 +181,19 @@ boolean setIntentExtras(Intent intent, Uri data) {
}
}

rcData.setChangesetComment(data.getQueryParameter("changeset_comment"));
rcData.setChangesetSource(data.getQueryParameter("changeset_source"));
rcData.setChangesetComment(data.getQueryParameter(CHANGESET_COMMENT_PARAMETER));
rcData.setChangesetSource(data.getQueryParameter(CHANGESET_SOURCE_PARAMETER));

String select = data.getQueryParameter("select");
String select = data.getQueryParameter(SELECT_PARAMETER);
if (rcData.load() && select != null) {
rcData.setSelect(select);
}
intent.putExtra(RCDATA, rcData);
return true;
case "imagery":
String url = data.getQueryParameter("url");
case IMAGERY_COMMAND:
String url = data.getQueryParameter(URL_PARAMETER);
if (url != null) {
String title = data.getQueryParameter("title");
String title = data.getQueryParameter(TITLE_PARAMETER);
if (title == null) {
try {
title = new URL(url).getHost() + " " + DateFormatter.getFormattedString("YYYY-MM-DD HH:mm");
Expand All @@ -190,27 +208,27 @@ boolean setIntentExtras(Intent intent, Uri data) {
if (ids.contains(id)) {
existing = TileLayerSource.get(this, id, false);
}
String type = data.getQueryParameter("type");
String type = data.getQueryParameter(TYPE_PARAMETER);
if (!TileLayerSource.TYPE_TMS.equals(type) && !TileLayerSource.TYPE_WMS.equals(type)) {
Log.e(DEBUG_TAG, "Unsupported type " + type);
return false;
}
// unused and undocumented String cookies = data.getQueryParameter("cookies");
// unused and undocumented String cookies = data.getQueryParameter("cookies"); NOSONAR
int minZoom = TileLayerSource.DEFAULT_MIN_ZOOM;
try { // NOSONAR
minZoom = Integer.parseInt(data.getQueryParameter("min_zoom"));
minZoom = Integer.parseInt(data.getQueryParameter(MIN_ZOOM_PARAMETER));
} catch (Exception e) {
// ignore
}
int maxZoom = TileLayerSource.DEFAULT_MAX_ZOOM;
try { // NOSONAR
maxZoom = Integer.parseInt(data.getQueryParameter("max_zoom"));
maxZoom = Integer.parseInt(data.getQueryParameter(MAX_ZOOM_PARAMETER));
} catch (Exception e) {
// ignore
}
int tileSize = TileLayerSource.DEFAULT_TILE_SIZE;
try { // NOSONAR
tileSize = Integer.parseInt(data.getQueryParameter("tileSize"));
tileSize = Integer.parseInt(data.getQueryParameter(TILE_SIZE_PARAMETER));
} catch (Exception e) {
// ignore
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/de/blau/android/contract/Schemes.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
public final class Schemes {
public static final String FILE = "file";
public static final String CONTENT = "content";
public static final String JOSM = "josm";
public static final String GEO = "geo";

/**
* Private default constructor
Expand Down
25 changes: 15 additions & 10 deletions src/main/java/de/blau/android/util/IssueAlert.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import de.blau.android.App;
import de.blau.android.Main;
import de.blau.android.R;
import de.blau.android.RemoteControlUrlActivity;
import de.blau.android.contract.Schemes;
import de.blau.android.exception.OsmException;
import de.blau.android.osm.BoundingBox;
import de.blau.android.osm.Node;
Expand All @@ -40,10 +42,9 @@
*
*/
public final class IssueAlert {
private static final String QA_CHANNEL = "qa";

static final String DEBUG_TAG = "IssueAlert";
private static final String DEBUG_TAG = "IssueAlert";

private static final String QA_CHANNEL = "qa";
private static final String PAACKGE_NAME = "de.blau.android";
private static final String GROUP_DATA = PAACKGE_NAME + ".Data";
private static final int GROUP_DATA_ID = GROUP_DATA.hashCode();
Expand Down Expand Up @@ -77,7 +78,7 @@ public static void alert(@NonNull Context context, @NonNull OsmElement e) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location location = null;
try {
location = locationManager.getLastKnownLocation("gps");
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (SecurityException sex) {
// can be safely ignored
}
Expand Down Expand Up @@ -167,10 +168,14 @@ public static void alert(@NonNull Context context, @NonNull OsmElement e) {
Intent resultIntent = new Intent(Intent.ACTION_VIEW);
try {
BoundingBox box = GeoMath.createBoundingBoxForCoordinates(eLat, eLon, prefs.getDownloadRadius(), true);

Uri rc = Uri.parse("http://127.0.0.1:8111/load_and_zoom?left=" + box.getLeft() / 1E7D + "&right=" + box.getRight() / 1E7D + "&top="
+ box.getTop() / 1E7D + "&bottom=" + box.getBottom() / 1E7D + "&select=" + e.getName() + e.getOsmId()); // NOSONAR
// JOSM RC assumes localhost
Uri.Builder builder = new Uri.Builder();
builder.scheme(Schemes.JOSM).appendPath(RemoteControlUrlActivity.LOAD_AND_ZOOM_COMMAND)
.appendQueryParameter(RemoteControlUrlActivity.LEFT_PARAMETER, Double.toString(box.getLeft() / 1E7D))
.appendQueryParameter(RemoteControlUrlActivity.RIGHT_PARAMETER, Double.toString(box.getRight() / 1E7D))
.appendQueryParameter(RemoteControlUrlActivity.TOP_PARAMETER, Double.toString(box.getLeft() / 1E7D))
.appendQueryParameter(RemoteControlUrlActivity.BOTTOM_PARAMETER, Double.toString(box.getTop() / 1E7D))
.appendQueryParameter(RemoteControlUrlActivity.SELECT_PARAMETER, e.getName() + e.getOsmId());
Uri rc = builder.build();
Log.d(DEBUG_TAG, rc.toString());
resultIntent.setData(rc);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
Expand Down Expand Up @@ -217,7 +222,7 @@ public static void alert(@NonNull Context context, @NonNull Preferences prefs, @
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location location = null;
try {
location = locationManager.getLastKnownLocation("gps");
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (SecurityException sex) {
// can be safely ignored
}
Expand Down Expand Up @@ -263,7 +268,7 @@ public static void alert(@NonNull Context context, @NonNull Preferences prefs, @
return;
}
Intent resultIntent = new Intent(Intent.ACTION_VIEW);
Uri geo = Uri.fromParts("geo", eLat + "," + eLon, null);
Uri geo = Uri.fromParts(Schemes.GEO, eLat + "," + eLon, null);
resultIntent.setData(geo);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent (but not the Intent itself)
Expand Down

0 comments on commit 9e810d3

Please sign in to comment.