diff --git a/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java index ab6653736..4e78db30f 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java @@ -227,13 +227,13 @@ public class CustomContentProviderUtilsTest { private void assertCount(int trackCount, int trackPointCount, int markerCount) { ContentResolver contentResolver = context.getContentResolver(); - try (Cursor tracksCursor = contentResolver.query(TracksColumns.CONTENT_URI, null, null, null, TracksColumns._ID)) { + try (Cursor tracksCursor = contentResolver.query(CustomContentProvider.UrlType.TRACKS.getUri(), null, null, null, TracksColumns._ID)) { assertEquals(trackCount, tracksCursor.getCount()); } - try (Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID)) { + try (Cursor tracksPointsCursor = contentResolver.query(CustomContentProvider.UrlType.TRACKPOINTS_BY_ID.getUri(), null, null, null, TrackPointsColumns._ID)) { assertEquals(trackPointCount, tracksPointsCursor.getCount()); } - try (Cursor markerCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID)) { + try (Cursor markerCursor = contentResolver.query(CustomContentProvider.UrlType.MARKERS.getUri(), null, null, null, MarkerColumns._ID)) { assertEquals(markerCount, markerCursor.getCount()); } } diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index 2546fce51..0fc5cc415 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -22,6 +22,7 @@ import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; +import android.provider.BaseColumns; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -131,7 +132,7 @@ public class ContentProviderUtils { @VisibleForTesting public void deleteAllTracks(Context context) { // Delete tracks last since it triggers a database vacuum call - contentResolver.delete(TracksColumns.CONTENT_URI, null, null); + contentResolver.delete(CustomContentProvider.UrlType.TRACKS.getUri(), null, null); File dir = FileUtils.getPhotoDir(context); FileUtils.deleteDirectoryRecurse(dir); @@ -144,13 +145,13 @@ public class ContentProviderUtils { } String whereClause = String.format(TracksColumns._ID + " IN (%s)", TextUtils.join(",", Collections.nCopies(trackIds.size(), "?"))); - contentResolver.delete(TracksColumns.CONTENT_URI, whereClause, trackIds.stream().map(trackId -> Long.toString(trackId.id())).toArray(String[]::new)); + contentResolver.delete(CustomContentProvider.UrlType.TRACKS.getUri(), whereClause, trackIds.stream().map(trackId -> Long.toString(trackId.id())).toArray(String[]::new)); } public void deleteTrack(Context context, @NonNull Track.Id trackId) { // Delete track folder resources. FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId)); - contentResolver.delete(TracksColumns.CONTENT_URI, TracksColumns._ID + "=?", new String[]{Long.toString(trackId.id())}); + contentResolver.delete(CustomContentProvider.UrlType.TRACKS.getUri(), TracksColumns._ID + "=?", new String[]{Long.toString(trackId.id())}); } //TODO Only use for tests; also move to tests. @@ -194,7 +195,7 @@ public class ContentProviderUtils { selectionArgs = new String[]{"%" + searchQuery + "%", "%" + searchQuery + "%", "%" + searchQuery + "%"}; } - return new TrackListIterator(contentResolver.query(TracksColumns.CONTENT_URI, PROJECTION, selection, selectionArgs, sortOrder)); + return new TrackListIterator(contentResolver.query(CustomContentProvider.UrlType.TRACKS.getUri(), PROJECTION, selection, selectionArgs, sortOrder)); } public Track getTrack(@NonNull Track.Id trackId) { @@ -225,7 +226,7 @@ public class ContentProviderUtils { * @param sortOrder the sort order. Can be null */ Cursor getTrackCursor(String selection, String[] selectionArgs, String sortOrder) { - return contentResolver.query(TracksColumns.CONTENT_URI, null, selection, selectionArgs, sortOrder); + return contentResolver.query(CustomContentProvider.UrlType.TRACKS.getUri(), null, selection, selectionArgs, sortOrder); } /** @@ -237,7 +238,7 @@ public class ContentProviderUtils { */ public Track.Id insertTrack(Track track) { //TODO Unset trackId - Uri uri = contentResolver.insert(TracksColumns.CONTENT_URI, createContentValues(track)); + Uri uri = contentResolver.insert(CustomContentProvider.UrlType.TRACKS.getUri(), createContentValues(track)); return new Track.Id(ContentUris.parseId(uri)); } @@ -248,7 +249,7 @@ public class ContentProviderUtils { * @param track the track */ public void updateTrack(Track track) { - contentResolver.update(TracksColumns.CONTENT_URI, createContentValues(track), TracksColumns._ID + "=?", new String[]{Long.toString(track.id().id())}); + contentResolver.update(CustomContentProvider.UrlType.TRACKS.getUri(), createContentValues(track), TracksColumns._ID + "=?", new String[]{Long.toString(track.id().id())}); } private ContentValues createContentValues(Track track) { @@ -270,7 +271,7 @@ public class ContentProviderUtils { } public void updateTrackStatistics(@NonNull Track.Id trackId, @NonNull Statistics trackStatistics) { - contentResolver.update(TracksColumns.CONTENT_URI, createContentValues(trackStatistics), TracksColumns._ID + "=?", new String[]{Long.toString(trackId.id())}); + contentResolver.update(CustomContentProvider.UrlType.TRACKS.getUri(), createContentValues(trackStatistics), TracksColumns._ID + "=?", new String[]{Long.toString(trackId.id())}); } private ContentValues createContentValues(Statistics trackStatistics) { @@ -362,7 +363,7 @@ public class ContentProviderUtils { public void deleteMarker(Context context, Marker.Id markerId) { final Marker marker = getMarker(markerId); deleteMarkerPhoto(context, marker); - contentResolver.delete(MarkerColumns.CONTENT_URI, MarkerColumns._ID + "=?", new String[]{Long.toString(markerId.id())}); + contentResolver.delete(CustomContentProvider.UrlType.MARKERS.getUri(), MarkerColumns._ID + "=?", new String[]{Long.toString(markerId.id())}); } /** @@ -422,7 +423,7 @@ public class ContentProviderUtils { if (updateMarker.photoUrl() == null) { deleteMarkerPhoto(context, savedMarker); } - int rows = contentResolver.update(MarkerColumns.CONTENT_URI, createContentValues(updateMarker, updateMarker.trackId()), MarkerColumns._ID + "=?", new String[]{Long.toString(updateMarker.id().id())}); + int rows = contentResolver.update(CustomContentProvider.UrlType.MARKERS.getUri(), createContentValues(updateMarker, updateMarker.trackId()), MarkerColumns._ID + "=?", new String[]{Long.toString(updateMarker.id().id())}); return rows == 1; } @@ -430,7 +431,7 @@ public class ContentProviderUtils { assert marker.id() == null; assert marker.trackId() != null; - Uri uri = contentResolver.insert(MarkerColumns.CONTENT_URI, createContentValues(marker, marker.trackId())); + Uri uri = contentResolver.insert(CustomContentProvider.UrlType.MARKERS.getUri(), createContentValues(marker, marker.trackId())); return new Marker.Id(ContentUris.parseId(uri)); } @@ -491,7 +492,7 @@ public class ContentProviderUtils { if (maxCount >= 0) { sortOrder += " LIMIT " + maxCount; } - return contentResolver.query(MarkerColumns.CONTENT_URI, projection, selection, selectionArgs, sortOrder); + return contentResolver.query(CustomContentProvider.UrlType.MARKERS.getUri(), projection, selection, selectionArgs, sortOrder); } public MarkerIterator searchMarkers(Track.Id trackId, String query) { @@ -509,7 +510,7 @@ public class ContentProviderUtils { MarkerColumns.DESCRIPTION + " LIKE ? OR " + MarkerColumns.TYPE_LOCALIZED + " LIKE ?"; selectionArgs = new String[]{"%" + query + "%", "%" + query + "%", "%" + query + "%"}; - sortOrder = MarkerColumns.DEFAULT_SORT_ORDER + " DESC"; + sortOrder = BaseColumns._ID + " DESC"; } return new MarkerIterator(this, getMarkerCursor(null, selection, selectionArgs, sortOrder, -1)); @@ -567,7 +568,7 @@ public class ContentProviderUtils { for (int i = 0; i < trackPoints.size(); i++) { values[i] = createContentValues(trackPoints.get(i), trackId); } - return contentResolver.bulkInsert(TrackPointsColumns.CONTENT_URI_BY_ID, values); + return contentResolver.bulkInsert(CustomContentProvider.UrlType.TRACKPOINTS_BY_ID.getUri(), values); } //TODO Set trackId in this method. @@ -576,7 +577,7 @@ public class ContentProviderUtils { for (int i = 0; i < markers.size(); i++) { values[i] = createContentValues(markers.get(i), trackId); } - return contentResolver.bulkInsert(MarkerColumns.CONTENT_URI, values); + return contentResolver.bulkInsert(CustomContentProvider.UrlType.MARKERS.getUri(), values); } /** @@ -597,7 +598,7 @@ public class ContentProviderUtils { selectionArgs = new String[]{Long.toString(trackId.id())}; } - return getTrackPointCursor(null, selection, selectionArgs, TrackPointsColumns.DEFAULT_SORT_ORDER); + return getTrackPointCursor(null, selection, selectionArgs, BaseColumns._ID); } /** @@ -608,7 +609,7 @@ public class ContentProviderUtils { * @return the content provider URI of the inserted trackPoint */ public Uri insertTrackPoint(TrackPoint trackPoint, Track.Id trackId) { - return contentResolver.insert(TrackPointsColumns.CONTENT_URI_BY_ID, createContentValues(trackPoint, trackId)); + return contentResolver.insert(CustomContentProvider.UrlType.TRACKPOINTS_BY_ID.getUri(), createContentValues(trackPoint, trackId)); } /** @@ -683,7 +684,7 @@ public class ContentProviderUtils { * @param sortOrder the sort order */ private Cursor getTrackPointCursor(String[] projection, String selection, String[] selectionArgs, String sortOrder) { - return contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, projection, selection, selectionArgs, sortOrder); + return contentResolver.query(CustomContentProvider.UrlType.TRACKPOINTS_BY_ID.getUri(), projection, selection, selectionArgs, sortOrder); } public static String formatIdListForUri(Track.Id... trackIds) { @@ -718,7 +719,7 @@ public class ContentProviderUtils { public SensorStatistics getSensorStats(@NonNull Track.Id trackId) { SensorStatistics sensorStatistics = null; - try (Cursor cursor = contentResolver.query(ContentUris.withAppendedId(TracksColumns.CONTENT_URI_SENSOR_STATS, trackId.id()), null, null, null, null)) { + try (Cursor cursor = contentResolver.query(ContentUris.withAppendedId(CustomContentProvider.UrlType.TRACKS_SENSOR_STATS.getUri(), trackId.id()), null, null, null, null)) { if (cursor != null && cursor.moveToFirst()) { final int MAX_HR_INDEX = cursor.getColumnIndexOrThrow(TrackPointsColumns.ALIAS_MAX_HR); final int AVG_HR_INDEX = cursor.getColumnIndexOrThrow(TrackPointsColumns.ALIAS_AVG_HR); diff --git a/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java b/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java index 10af32060..c1e8ffbdd 100644 --- a/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java @@ -27,6 +27,7 @@ import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.os.Build; +import android.provider.BaseColumns; import android.text.TextUtils; import android.util.Log; @@ -223,7 +224,7 @@ public class CustomContentProvider extends ContentProvider { switch (getUrlType(url)) { case TRACKPOINTS -> { queryBuilder.setTables(TrackPointsColumns.TABLE_NAME); - sortOrder = sort != null ? sort : TrackPointsColumns.DEFAULT_SORT_ORDER; + sortOrder = sort != null ? sort : BaseColumns._ID; } case TRACKPOINTS_BY_ID -> { queryBuilder.setTables(TrackPointsColumns.TABLE_NAME); @@ -244,7 +245,7 @@ public class CustomContentProvider extends ContentProvider { } else { queryBuilder.setTables(TracksColumns.TABLE_NAME); } - sortOrder = sort != null ? sort : TracksColumns.DEFAULT_SORT_ORDER; + sortOrder = sort != null ? sort : BaseColumns._ID; } case TRACKS_BY_ID -> { queryBuilder.setTables(TracksColumns.TABLE_NAME); @@ -275,7 +276,7 @@ public class CustomContentProvider extends ContentProvider { } case MARKERS -> { queryBuilder.setTables(MarkerColumns.TABLE_NAME); - sortOrder = sort != null ? sort : MarkerColumns.DEFAULT_SORT_ORDER; + sortOrder = sort != null ? sort : BaseColumns._ID; } case MARKERS_BY_ID -> { queryBuilder.setTables(MarkerColumns.TABLE_NAME); @@ -386,7 +387,7 @@ public class CustomContentProvider extends ContentProvider { } long rowId = db.insert(TrackPointsColumns.TABLE_NAME, TrackPointsColumns._ID, values); if (rowId >= 0) { - return ContentUris.appendId(TrackPointsColumns.CONTENT_URI_BY_ID.buildUpon(), rowId).build(); + return ContentUris.appendId(UrlType.TRACKPOINTS_BY_ID.getUri().buildUpon(), rowId).build(); } throw new SQLiteException("Failed to insert a track point " + url); } @@ -394,7 +395,7 @@ public class CustomContentProvider extends ContentProvider { private Uri insertTrack(Uri url, ContentValues contentValues) { long rowId = db.insert(TracksColumns.TABLE_NAME, TracksColumns._ID, contentValues); if (rowId >= 0) { - return ContentUris.appendId(TracksColumns.CONTENT_URI.buildUpon(), rowId).build(); + return ContentUris.appendId(UrlType.TRACKS.getUri().buildUpon(), rowId).build(); } throw new SQLException("Failed to insert a track " + url); } @@ -402,7 +403,7 @@ public class CustomContentProvider extends ContentProvider { private Uri insertMarker(Uri url, ContentValues contentValues) { long rowId = db.insert(MarkerColumns.TABLE_NAME, MarkerColumns._ID, contentValues); if (rowId >= 0) { - return ContentUris.appendId(MarkerColumns.CONTENT_URI.buildUpon(), rowId).build(); + return ContentUris.appendId(UrlType.MARKERS.getUri().buildUpon(), rowId).build(); } throw new SQLException("Failed to insert a marker " + url); } diff --git a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java index e23dd604a..b57929086 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java @@ -88,7 +88,7 @@ public class ShareContentProvider extends CustomContentProvider { } trackIdBuilder.deleteCharAt(trackIdBuilder.lastIndexOf(TRACKID_DELIMITER)); - Uri uri = Uri.parse(TracksColumns.CONTENT_URI + "/" + trackFileFormat.getPreferenceId() + "/" + trackIdBuilder + "/" + Uri.encode(filename)); + Uri uri = Uri.parse(UrlType.TRACKS.getUri() + "/" + trackFileFormat.getPreferenceId() + "/" + trackIdBuilder + "/" + Uri.encode(filename)); Log.d(TAG, "Created uri " + uri + " with MIME " + trackFileFormat.getMimeType()); @@ -192,7 +192,7 @@ public class ShareContentProvider extends CustomContentProvider { String[] trackIdsString = trackIds.stream().map(id -> String.valueOf(id.id())).toArray(String[]::new); String whereClause = String.format(TracksColumns._ID + " IN (%s)", TextUtils.join(",", Collections.nCopies(trackIds.size(), "?"))); - try (Cursor cursor = super.query(TracksColumns.CONTENT_URI, null, whereClause, trackIdsString, TracksColumns._ID)) { + try (Cursor cursor = super.query(UrlType.TRACKS.getUri(), null, whereClause, trackIdsString, TracksColumns._ID)) { while (cursor.moveToNext()) { tracks.add(ContentProviderUtils.createTrack(cursor)); } diff --git a/src/main/java/de/dennisguse/opentracks/data/TrackDataHub.java b/src/main/java/de/dennisguse/opentracks/data/TrackDataHub.java index 93e86ed49..b1cfad831 100644 --- a/src/main/java/de/dennisguse/opentracks/data/TrackDataHub.java +++ b/src/main/java/de/dennisguse/opentracks/data/TrackDataHub.java @@ -34,8 +34,6 @@ import de.dennisguse.opentracks.data.models.Statistics; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.data.statistics.TrackStatisticsUpdater; -import de.dennisguse.opentracks.data.tables.TrackPointsColumns; -import de.dennisguse.opentracks.data.tables.TracksColumns; import de.dennisguse.opentracks.services.RecordingStatus; import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.services.handlers.AltitudeCorrectionManager; @@ -120,7 +118,7 @@ public class TrackDataHub { notifyTracksTableUpdate(listeners); } }; - contentResolver.registerContentObserver(TracksColumns.CONTENT_URI, false, tracksTableObserver); + contentResolver.registerContentObserver(CustomContentProvider.UrlType.TRACKS.getUri(), false, tracksTableObserver); trackPointsTableObserver = new ContentObserver(handler) { @Override @@ -128,7 +126,7 @@ public class TrackDataHub { notifyTrackPointsTableUpdate(true, listeners); } }; - contentResolver.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_ID, false, trackPointsTableObserver); + contentResolver.registerContentObserver(CustomContentProvider.UrlType.TRACKPOINTS_BY_ID.getUri(), false, trackPointsTableObserver); } public void stop() { diff --git a/src/main/java/de/dennisguse/opentracks/data/tables/MarkerColumns.java b/src/main/java/de/dennisguse/opentracks/data/tables/MarkerColumns.java index cadc996a3..3f8b2f0cb 100644 --- a/src/main/java/de/dennisguse/opentracks/data/tables/MarkerColumns.java +++ b/src/main/java/de/dennisguse/opentracks/data/tables/MarkerColumns.java @@ -17,12 +17,10 @@ package de.dennisguse.opentracks.data.tables; import android.content.Context; -import android.net.Uri; import android.provider.BaseColumns; import android.widget.ArrayAdapter; import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.data.CustomContentProvider; /** * Constants for markers table. @@ -32,9 +30,6 @@ import de.dennisguse.opentracks.data.CustomContentProvider; public interface MarkerColumns extends BaseColumns { String TABLE_NAME = "markers"; - @Deprecated - Uri CONTENT_URI = Uri.parse(CustomContentProvider.CONTENT_BASE_URI + "/" + TABLE_NAME); - String DEFAULT_SORT_ORDER = _ID; // Columns String NAME = "name"; diff --git a/src/main/java/de/dennisguse/opentracks/data/tables/TrackPointsColumns.java b/src/main/java/de/dennisguse/opentracks/data/tables/TrackPointsColumns.java index 6c3f78138..f8faba1a6 100644 --- a/src/main/java/de/dennisguse/opentracks/data/tables/TrackPointsColumns.java +++ b/src/main/java/de/dennisguse/opentracks/data/tables/TrackPointsColumns.java @@ -16,11 +16,8 @@ package de.dennisguse.opentracks.data.tables; -import android.net.Uri; import android.provider.BaseColumns; -import de.dennisguse.opentracks.data.CustomContentProvider; - /** * Constants for the track points table. * @@ -29,11 +26,6 @@ import de.dennisguse.opentracks.data.CustomContentProvider; public interface TrackPointsColumns extends BaseColumns { String TABLE_NAME = "trackpoints"; - @Deprecated - Uri CONTENT_URI_BY_ID = Uri.parse(CustomContentProvider.CONTENT_BASE_URI + "/" + TABLE_NAME); - @Deprecated - Uri CONTENT_URI_BY_TRACKID = Uri.parse(CustomContentProvider.CONTENT_BASE_URI + "/" + TABLE_NAME + "/trackid"); - String DEFAULT_SORT_ORDER = _ID; // Columns String TRACKID = "trackid"; diff --git a/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java b/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java index 47a7a53cf..0a97e31b0 100644 --- a/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java +++ b/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java @@ -16,11 +16,8 @@ package de.dennisguse.opentracks.data.tables; -import android.net.Uri; import android.provider.BaseColumns; -import de.dennisguse.opentracks.data.CustomContentProvider; - /** * Constants for the tracks table. * @@ -29,11 +26,6 @@ import de.dennisguse.opentracks.data.CustomContentProvider; public interface TracksColumns extends BaseColumns { String TABLE_NAME = "tracks"; - @Deprecated - Uri CONTENT_URI = Uri.parse(CustomContentProvider.CONTENT_BASE_URI + "/" + TABLE_NAME); - @Deprecated - Uri CONTENT_URI_SENSOR_STATS = Uri.parse(CustomContentProvider.CONTENT_BASE_URI + "/" + TABLE_NAME + "/sensorstats"); - String DEFAULT_SORT_ORDER = _ID; // Columns String UUID = "uuid"; // identifier to make tracks globally unique (prevent re-import) diff --git a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsModel.java b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsModel.java index c043f61ee..c3b729c75 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsModel.java +++ b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsModel.java @@ -17,12 +17,12 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.CustomContentProvider; import de.dennisguse.opentracks.data.TrackPointIterator; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Statistics; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.TrackPoint; -import de.dennisguse.opentracks.data.tables.TrackPointsColumns; import de.dennisguse.opentracks.settings.UnitSystem; /** @@ -85,7 +85,7 @@ public class IntervalStatisticsModel extends AndroidViewModel { loadIntervalStatistics(trackId); } }; - contentResolver.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_TRACKID, false, trackPointsTableObserver); + contentResolver.registerContentObserver(CustomContentProvider.UrlType.TRACKPOINTS_BY_TRACKID.getUri(), false, trackPointsTableObserver); return intervalsLiveData; }