diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java index 2e6006807..04f01122e 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java @@ -384,12 +384,29 @@ public class CustomContentProviderUtilsTest { * Tests the method {@link ContentProviderUtils#getTrack(long)} */ @Test - public void testGetTrack() { + public void testGetTrack_by_id() { + // given long trackId = System.currentTimeMillis(); contentProviderUtils.insertTrack(TestDataUtil.createTrack(trackId)); + + // when / then Assert.assertNotNull(contentProviderUtils.getTrack(trackId)); } + /** + * Tests the method {@link ContentProviderUtils#getTrack(long)} + */ + @Test + public void testGetTrack_by_uuid() { + // given + long trackId = System.currentTimeMillis(); + Track track = TestDataUtil.createTrack(trackId); + contentProviderUtils.insertTrack(track); + + // when / then + Assert.assertNotNull(contentProviderUtils.getTrack(track.getUuid())); + } + /** * Tests the method {@link ContentProviderUtils#updateTrack(Track)} */ diff --git a/src/main/java/de/dennisguse/opentracks/content/data/TrackPointsColumns.java b/src/main/java/de/dennisguse/opentracks/content/data/TrackPointsColumns.java index 0b633a123..d8d434853 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/TrackPointsColumns.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/TrackPointsColumns.java @@ -33,7 +33,7 @@ public interface TrackPointsColumns extends BaseColumns { Uri CONTENT_URI_BY_TRACKID = Uri.parse(ContentProviderUtils.CONTENT_BASE_URI + "/" + TABLE_NAME + "/trackid"); String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.de.dennisguse.trackpoint"; String CONTENT_ITEMTYPE = "vnd.android.cursor.item/vnd.de.dennisguse.trackpoint"; - String DEFAULT_SORT_ORDER = "_id"; + String DEFAULT_SORT_ORDER = _ID; // Columns String TRACKID = "trackid"; diff --git a/src/main/java/de/dennisguse/opentracks/content/data/TracksColumns.java b/src/main/java/de/dennisguse/opentracks/content/data/TracksColumns.java index aacb20641..d7e67fdd2 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/TracksColumns.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/TracksColumns.java @@ -32,7 +32,7 @@ public interface TracksColumns extends BaseColumns { Uri CONTENT_URI = Uri.parse(ContentProviderUtils.CONTENT_BASE_URI + "/" + TABLE_NAME); String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.de.dennisguse.track"; String CONTENT_ITEMTYPE = "vnd.android.cursor.item/vnd.de.dennisguse.track"; - String DEFAULT_SORT_ORDER = "_id"; + String DEFAULT_SORT_ORDER = _ID; // Columns String UUID = "uuid"; 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 b10eaf33d..d8cbdb9ee 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/WaypointsColumns.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/WaypointsColumns.java @@ -33,7 +33,7 @@ public interface WaypointsColumns extends BaseColumns { 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"; + String DEFAULT_SORT_ORDER = _ID; // Columns String NAME = "name"; // waypoint name diff --git a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java index a15392b25..aad5c73cd 100644 --- a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java @@ -24,12 +24,14 @@ import android.location.Location; import android.net.Uri; import android.text.TextUtils; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.UUID; import de.dennisguse.opentracks.BuildConfig; import de.dennisguse.opentracks.android.ContentResolverWrapper; @@ -236,7 +238,20 @@ public class ContentProviderUtils { if (trackId < 0) { return null; } - try (Cursor cursor = getTrackCursor(TracksColumns._ID + "=?", new String[]{Long.toString(trackId)}, TracksColumns._ID)) { + try (Cursor cursor = getTrackCursor(TracksColumns._ID + "=?", new String[]{Long.toString(trackId)}, null)) { + if (cursor != null && cursor.moveToNext()) { + return createTrack(cursor); + } + } + return null; + } + + /** + * @param trackUUID the track uuid. + */ + public Track getTrack(@NonNull UUID trackUUID) { + String trackUUIDsearch = UUIDUtils.toHex(trackUUID); + try (Cursor cursor = getTrackCursor("hex(" + TracksColumns.UUID + ")=?", new String[]{trackUUIDsearch}, null)) { if (cursor != null && cursor.moveToNext()) { return createTrack(cursor); } diff --git a/src/main/java/de/dennisguse/opentracks/util/UUIDUtils.java b/src/main/java/de/dennisguse/opentracks/util/UUIDUtils.java index 0a5ce7621..44a826f40 100644 --- a/src/main/java/de/dennisguse/opentracks/util/UUIDUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/UUIDUtils.java @@ -20,4 +20,19 @@ public class UUIDUtils { byteBuffer.putLong(uuid.getLeastSignificantBits()); return byteBuffer.array(); } + + private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); + + public static String toHex(@NonNull UUID uuid) { + byte[] bytes = toBytes(uuid); + + char[] hexChars = new char[bytes.length * 2]; + for (int i = 0; i < bytes.length; i++) { + int v = bytes[i] & 0xFF; + + hexChars[i * 2] = HEX_ARRAY[v >>> 4]; + hexChars[i * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars); + } }