From 97ad6bc2f8de4e2ba4ba41f3aba2a3c74cf1d115 Mon Sep 17 00:00:00 2001 From: Peter Storch Date: Fri, 17 Jul 2020 23:08:34 +0200 Subject: [PATCH] expose waypoints to dashboard Necessary for https://github.com/OpenTracksApp/OSMDashboard/issues/48 --- src/main/AndroidManifest.xml | 7 ++++++- .../opentracks/content/data/WaypointsColumns.java | 1 + .../content/provider/CustomContentProvider.java | 9 ++++++++- .../dennisguse/opentracks/util/IntentDashboardUtils.java | 4 ++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 9fd864a05..3218e36d5 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -113,7 +113,12 @@ limitations under the License. - + + + + + + diff --git a/src/main/java/de/dennisguse/opentracks/content/data/WaypointsColumns.java b/src/main/java/de/dennisguse/opentracks/content/data/WaypointsColumns.java index 60f3da412..b10eaf33d 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/WaypointsColumns.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/WaypointsColumns.java @@ -30,6 +30,7 @@ public interface WaypointsColumns extends BaseColumns { String TABLE_NAME = "waypoints"; Uri CONTENT_URI = Uri.parse(ContentProviderUtils.CONTENT_BASE_URI + "/" + TABLE_NAME); + Uri CONTENT_URI_BY_TRACKID = Uri.parse(ContentProviderUtils.CONTENT_BASE_URI + "/" + TABLE_NAME + "/trackid"); String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.de.dennisguse.waypoint"; String CONTENT_ITEMTYPE = "vnd.android.cursor.item/vnd.de.dennisguse.waypoint"; String DEFAULT_SORT_ORDER = "_id"; diff --git a/src/main/java/de/dennisguse/opentracks/content/provider/CustomContentProvider.java b/src/main/java/de/dennisguse/opentracks/content/provider/CustomContentProvider.java index 43f746ce6..f0e548bbf 100644 --- a/src/main/java/de/dennisguse/opentracks/content/provider/CustomContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/content/provider/CustomContentProvider.java @@ -63,6 +63,7 @@ public abstract class CustomContentProvider extends ContentProvider { uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, WaypointsColumns.CONTENT_URI.getPath(), UrlType.WAYPOINTS.ordinal()); uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, WaypointsColumns.CONTENT_URI.getPath() + "/#", UrlType.WAYPOINTS_BY_ID.ordinal()); + uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, WaypointsColumns.CONTENT_URI_BY_TRACKID.getPath() + "/*", UrlType.WAYPOINTS_BY_TRACKID.ordinal()); } @Override @@ -140,6 +141,7 @@ public abstract class CustomContentProvider extends ContentProvider { case WAYPOINTS: return WaypointsColumns.CONTENT_TYPE; case WAYPOINTS_BY_ID: + case WAYPOINTS_BY_TRACKID: return WaypointsColumns.CONTENT_ITEMTYPE; default: throw new IllegalArgumentException("Unknown URL " + url); @@ -219,6 +221,10 @@ public abstract class CustomContentProvider extends ContentProvider { queryBuilder.setTables(WaypointsColumns.TABLE_NAME); queryBuilder.appendWhere(WaypointsColumns._ID + "=" + ContentUris.parseId(url)); break; + case WAYPOINTS_BY_TRACKID: + queryBuilder.setTables(WaypointsColumns.TABLE_NAME); + queryBuilder.appendWhere(WaypointsColumns.TRACKID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")"); + break; default: throw new IllegalArgumentException("Unknown url " + url); } @@ -382,6 +388,7 @@ public abstract class CustomContentProvider extends ContentProvider { TRACKS, TRACKS_BY_ID, WAYPOINTS, - WAYPOINTS_BY_ID + WAYPOINTS_BY_ID, + WAYPOINTS_BY_TRACKID } } diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java index 42bcdf383..e63b212ac 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentDashboardUtils.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import de.dennisguse.opentracks.content.data.TrackPointsColumns; import de.dennisguse.opentracks.content.data.TracksColumns; +import de.dennisguse.opentracks.content.data.WaypointsColumns; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; /** @@ -28,6 +29,7 @@ public class IntentDashboardUtils { private static int TRACK_URI_INDEX = 0; private static int TRACKPOINTS_URI_INDEX = 1; + private static int WAYPOINTS_URI_INDEX = 2; private IntentDashboardUtils() { } @@ -48,6 +50,7 @@ public class IntentDashboardUtils { ArrayList uris = new ArrayList<>(); uris.add(TRACK_URI_INDEX, Uri.withAppendedPath(TracksColumns.CONTENT_URI, trackIdList)); uris.add(TRACKPOINTS_URI_INDEX, Uri.withAppendedPath(TrackPointsColumns.CONTENT_URI_BY_TRACKID, trackIdList)); + uris.add(WAYPOINTS_URI_INDEX, Uri.withAppendedPath(WaypointsColumns.CONTENT_URI_BY_TRACKID, trackIdList)); Intent intent = new Intent(ACTION_DASHBOARD); intent.putParcelableArrayListExtra(ACTION_DASHBOARD_PAYLOAD, uris); @@ -59,6 +62,7 @@ public class IntentDashboardUtils { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); ClipData clipData = ClipData.newRawUri(null, uris.get(TRACK_URI_INDEX)); clipData.addItem(new ClipData.Item(uris.get(TRACKPOINTS_URI_INDEX))); + clipData.addItem(new ClipData.Item(uris.get(WAYPOINTS_URI_INDEX))); intent.setClipData(clipData); context.startActivity(intent);