mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-18 16:53:08 +02:00
@@ -34,8 +34,8 @@ import java.util.List;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.content.SearchEngine.ScoredResult;
|
import de.dennisguse.opentracks.content.SearchEngine.ScoredResult;
|
||||||
import de.dennisguse.opentracks.content.SearchEngine.SearchQuery;
|
import de.dennisguse.opentracks.content.SearchEngine.SearchQuery;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.CustomContentProvider;
|
import de.dennisguse.opentracks.content.provider.CustomContentProvider;
|
||||||
import de.dennisguse.opentracks.content.provider.CustomSQLiteOpenHelper;
|
import de.dennisguse.opentracks.content.provider.CustomSQLiteOpenHelper;
|
||||||
@@ -102,36 +102,36 @@ public class SearchEngineTest {
|
|||||||
return insertTrack(title, "", "", hoursAgo);
|
return insertTrack(title, "", "", hoursAgo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Waypoint.Id insertWaypoint(String title, String description, String category, double distance, long hoursAgo, Track.Id trackId) {
|
private Marker.Id insertWaypoint(String title, String description, String category, double distance, long hoursAgo, Track.Id trackId) {
|
||||||
Location location = new Location(HERE);
|
Location location = new Location(HERE);
|
||||||
location.setLatitude(location.getLatitude() + distance);
|
location.setLatitude(location.getLatitude() + distance);
|
||||||
location.setLongitude(location.getLongitude() + distance);
|
location.setLongitude(location.getLongitude() + distance);
|
||||||
if (hoursAgo >= 0) {
|
if (hoursAgo >= 0) {
|
||||||
location.setTime(NOW - hoursAgo * 1000L * 60L * 60L);
|
location.setTime(NOW - hoursAgo * 1000L * 60L * 60L);
|
||||||
}
|
}
|
||||||
Waypoint waypoint = new Waypoint(location);
|
Marker waypoint = new Marker(location);
|
||||||
waypoint.setName(title);
|
waypoint.setName(title);
|
||||||
waypoint.setDescription(description);
|
waypoint.setDescription(description);
|
||||||
waypoint.setCategory(category);
|
waypoint.setCategory(category);
|
||||||
waypoint.setTrackId(trackId);
|
waypoint.setTrackId(trackId);
|
||||||
|
|
||||||
Uri uri = providerUtils.insertWaypoint(waypoint);
|
Uri uri = providerUtils.insertMarker(waypoint);
|
||||||
return new Waypoint.Id(ContentUris.parseId(uri));
|
return new Marker.Id(ContentUris.parseId(uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Waypoint.Id insertWaypoint(String title, String description, String category) {
|
private Marker.Id insertWaypoint(String title, String description, String category) {
|
||||||
return insertWaypoint(title, description, category, 0.0, -1, null);
|
return insertWaypoint(title, description, category, 0.0, -1, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Waypoint.Id insertWaypoint(String title, double distance) {
|
private Marker.Id insertWaypoint(String title, double distance) {
|
||||||
return insertWaypoint(title, "", "", distance, -1, null);
|
return insertWaypoint(title, "", "", distance, -1, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Waypoint.Id insertWaypoint(String title, long hoursAgo) {
|
private Marker.Id insertWaypoint(String title, long hoursAgo) {
|
||||||
return insertWaypoint(title, "", "", 0.0, hoursAgo, null);
|
return insertWaypoint(title, "", "", 0.0, hoursAgo, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Waypoint.Id insertWaypoint(String title, long hoursAgo, Track.Id trackId) {
|
private Marker.Id insertWaypoint(String title, long hoursAgo, Track.Id trackId) {
|
||||||
return insertWaypoint(title, "", "", 0.0, hoursAgo, trackId);
|
return insertWaypoint(title, "", "", 0.0, hoursAgo, trackId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,12 +171,12 @@ public class SearchEngineTest {
|
|||||||
// - one which will match in title and description
|
// - one which will match in title and description
|
||||||
// - one which will match in all fields
|
// - one which will match in all fields
|
||||||
insertWaypoint("bb", "cc", "dd");
|
insertWaypoint("bb", "cc", "dd");
|
||||||
Waypoint.Id descriptionMatchId = insertWaypoint("bb", "aa", "cc");
|
Marker.Id descriptionMatchId = insertWaypoint("bb", "aa", "cc");
|
||||||
Waypoint.Id categoryMatchId = insertWaypoint("bb", "cc", "aa");
|
Marker.Id categoryMatchId = insertWaypoint("bb", "cc", "aa");
|
||||||
Waypoint.Id titleMatchId = insertWaypoint("aa", "bb", "cc");
|
Marker.Id titleMatchId = insertWaypoint("aa", "bb", "cc");
|
||||||
Waypoint.Id titleCategoryMatchId = insertWaypoint("aa", "bb", "ca");
|
Marker.Id titleCategoryMatchId = insertWaypoint("aa", "bb", "ca");
|
||||||
Waypoint.Id titleDescriptionMatchId = insertWaypoint("aa", "ba", "cc");
|
Marker.Id titleDescriptionMatchId = insertWaypoint("aa", "ba", "cc");
|
||||||
Waypoint.Id allMatchId = insertWaypoint("aa", "ba", "ca");
|
Marker.Id allMatchId = insertWaypoint("aa", "ba", "ca");
|
||||||
|
|
||||||
SearchQuery query = new SearchQuery("a", null, null, NOW);
|
SearchQuery query = new SearchQuery("a", null, null, NOW);
|
||||||
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
||||||
@@ -193,9 +193,9 @@ public class SearchEngineTest {
|
|||||||
// - one waypoint which will match by title
|
// - one waypoint which will match by title
|
||||||
// - one track which won't match
|
// - one track which won't match
|
||||||
// - one track which will match by title
|
// - one track which will match by title
|
||||||
Waypoint.Id descriptionWaypointId = insertWaypoint("bb", "aa", "cc");
|
Marker.Id descriptionWaypointId = insertWaypoint("bb", "aa", "cc");
|
||||||
insertWaypoint("bb", "cc", "dd");
|
insertWaypoint("bb", "cc", "dd");
|
||||||
Waypoint.Id titleWaypointId = insertWaypoint("aa", "bb", "cc");
|
Marker.Id titleWaypointId = insertWaypoint("aa", "bb", "cc");
|
||||||
insertTrack("bb", "cc", "dd");
|
insertTrack("bb", "cc", "dd");
|
||||||
Track.Id trackId = insertTrack("aa", "bb", "cc");
|
Track.Id trackId = insertTrack("aa", "bb", "cc");
|
||||||
|
|
||||||
@@ -212,9 +212,9 @@ public class SearchEngineTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSearchWaypointDistance() {
|
public void testSearchWaypointDistance() {
|
||||||
// All results match text, but they're at difference distances from the user.
|
// All results match text, but they're at difference distances from the user.
|
||||||
Waypoint.Id farFarAwayId = insertWaypoint("aa", 0.3);
|
Marker.Id farFarAwayId = insertWaypoint("aa", 0.3);
|
||||||
Waypoint.Id nearId = insertWaypoint("ab", 0.1);
|
Marker.Id nearId = insertWaypoint("ab", 0.1);
|
||||||
Waypoint.Id farId = insertWaypoint("ac", 0.2);
|
Marker.Id farId = insertWaypoint("ac", 0.2);
|
||||||
|
|
||||||
SearchQuery query = new SearchQuery("a", HERE, null, NOW);
|
SearchQuery query = new SearchQuery("a", HERE, null, NOW);
|
||||||
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
||||||
@@ -239,9 +239,9 @@ public class SearchEngineTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSearchWaypointRecent() {
|
public void testSearchWaypointRecent() {
|
||||||
// All results match text, but they're were recorded at different times.
|
// All results match text, but they're were recorded at different times.
|
||||||
Waypoint.Id oldestId = insertWaypoint("aa", 2);
|
Marker.Id oldestId = insertWaypoint("aa", 2);
|
||||||
Waypoint.Id recentId = insertWaypoint("ab", 0);
|
Marker.Id recentId = insertWaypoint("ab", 0);
|
||||||
Waypoint.Id oldId = insertWaypoint("ac", 1);
|
Marker.Id oldId = insertWaypoint("ac", 1);
|
||||||
|
|
||||||
SearchQuery query = new SearchQuery("a", null, null, NOW);
|
SearchQuery query = new SearchQuery("a", null, null, NOW);
|
||||||
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
||||||
@@ -266,8 +266,8 @@ public class SearchEngineTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSearchCurrentTrackWaypoint() {
|
public void testSearchCurrentTrackWaypoint() {
|
||||||
// All results match text, but one of them is in the current track.
|
// All results match text, but one of them is in the current track.
|
||||||
Waypoint.Id otherId = insertWaypoint("aa", 1, new Track.Id(456));
|
Marker.Id otherId = insertWaypoint("aa", 1, new Track.Id(456));
|
||||||
Waypoint.Id currentId = insertWaypoint("ab", 1, new Track.Id(123));
|
Marker.Id currentId = insertWaypoint("ab", 1, new Track.Id(123));
|
||||||
|
|
||||||
SearchQuery query = new SearchQuery("a", null, new Track.Id(123), NOW);
|
SearchQuery query = new SearchQuery("a", null, new Track.Id(123), NOW);
|
||||||
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
ArrayList<ScoredResult> results = new ArrayList<>(engine.search(query));
|
||||||
@@ -298,13 +298,13 @@ public class SearchEngineTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertWaypointResult(Waypoint.Id waypointId, ScoredResult result) {
|
private void assertWaypointResult(Marker.Id waypointId, ScoredResult result) {
|
||||||
assertNotNull("Not a waypoint", result.waypoint);
|
assertNotNull("Not a waypoint", result.waypoint);
|
||||||
assertNull("Ambiguous result", result.track);
|
assertNull("Ambiguous result", result.track);
|
||||||
assertEquals(waypointId, result.waypoint.getId());
|
assertEquals(waypointId, result.waypoint.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertWaypointResults(List<ScoredResult> results, Waypoint.Id... waypointIds) {
|
private void assertWaypointResults(List<ScoredResult> results, Marker.Id... waypointIds) {
|
||||||
long[] longWaypointIds = new long[waypointIds.length];
|
long[] longWaypointIds = new long[waypointIds.length];
|
||||||
for (int i = 0; i < waypointIds.length; i++) {
|
for (int i = 0; i < waypointIds.length; i++) {
|
||||||
longWaypointIds[i] = waypointIds[i].getId();
|
longWaypointIds[i] = waypointIds[i].getId();
|
||||||
|
|||||||
@@ -93,12 +93,12 @@ public class TestDataUtil {
|
|||||||
* @param location The location.
|
* @param location The location.
|
||||||
* @return the Waypoint created.
|
* @return the Waypoint created.
|
||||||
*/
|
*/
|
||||||
public static Waypoint createWaypointWithPhoto(Context context, Track.Id trackId, Location location) throws IOException {
|
public static Marker createWaypointWithPhoto(Context context, Track.Id trackId, Location location) throws IOException {
|
||||||
File dstFile = new File(FileUtils.getImageUrl(context, trackId));
|
File dstFile = new File(FileUtils.getImageUrl(context, trackId));
|
||||||
dstFile.createNewFile();
|
dstFile.createNewFile();
|
||||||
Uri photoUri = FileUtils.getUriForFile(context, dstFile);
|
Uri photoUri = FileUtils.getUriForFile(context, dstFile);
|
||||||
String photoUrl = photoUri.toString();
|
String photoUrl = photoUri.toString();
|
||||||
|
|
||||||
return new Waypoint("Waypoint name", "Waypoint description", "Waypoint category", "", trackId, 0.0, 0, location, photoUrl);
|
return new Marker("Waypoint name", "Waypoint description", "Waypoint category", "", trackId, 0.0, 0, location, photoUrl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -25,9 +25,9 @@ import androidx.test.core.app.ApplicationProvider;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@@ -67,7 +67,7 @@ public class CustomContentProviderTest {
|
|||||||
assertEquals(TrackPointsColumns.CONTENT_TYPE, customContentProvider.getType(TrackPointsColumns.CONTENT_URI_BY_ID));
|
assertEquals(TrackPointsColumns.CONTENT_TYPE, customContentProvider.getType(TrackPointsColumns.CONTENT_URI_BY_ID));
|
||||||
assertEquals(TrackPointsColumns.CONTENT_ITEMTYPE, customContentProvider.getType(ContentUris.appendId(TrackPointsColumns.CONTENT_URI_BY_TRACKID.buildUpon(), 1).build()));
|
assertEquals(TrackPointsColumns.CONTENT_ITEMTYPE, customContentProvider.getType(ContentUris.appendId(TrackPointsColumns.CONTENT_URI_BY_TRACKID.buildUpon(), 1).build()));
|
||||||
|
|
||||||
assertEquals(WaypointsColumns.CONTENT_TYPE, customContentProvider.getType(WaypointsColumns.CONTENT_URI));
|
assertEquals(MarkerColumns.CONTENT_TYPE, customContentProvider.getType(MarkerColumns.CONTENT_URI));
|
||||||
assertEquals(WaypointsColumns.CONTENT_ITEMTYPE, customContentProvider.getType(ContentUris.appendId(WaypointsColumns.CONTENT_URI.buildUpon(), 1).build()));
|
assertEquals(MarkerColumns.CONTENT_ITEMTYPE, customContentProvider.getType(ContentUris.appendId(MarkerColumns.CONTENT_URI.buildUpon(), 1).build()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+98
-98
@@ -38,13 +38,13 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TestDataUtil;
|
import de.dennisguse.opentracks.content.data.TestDataUtil;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.util.FileUtils;
|
import de.dennisguse.opentracks.util.FileUtils;
|
||||||
import de.dennisguse.opentracks.util.UUIDUtils;
|
import de.dennisguse.opentracks.util.UUIDUtils;
|
||||||
@@ -212,15 +212,15 @@ public class CustomContentProviderUtilsTest {
|
|||||||
Track.Id trackId = new Track.Id(System.currentTimeMillis());
|
Track.Id trackId = new Track.Id(System.currentTimeMillis());
|
||||||
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
||||||
|
|
||||||
Waypoint waypoint = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
contentProviderUtils.insertWaypoint(waypoint);
|
contentProviderUtils.insertMarker(waypoint);
|
||||||
|
|
||||||
ContentResolver contentResolver = context.getContentResolver();
|
ContentResolver contentResolver = context.getContentResolver();
|
||||||
Cursor tracksCursor = contentResolver.query(TracksColumns.CONTENT_URI, null, null, null, TracksColumns._ID);
|
Cursor tracksCursor = contentResolver.query(TracksColumns.CONTENT_URI, null, null, null, TracksColumns._ID);
|
||||||
assertEquals(1, tracksCursor.getCount());
|
assertEquals(1, tracksCursor.getCount());
|
||||||
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(10, tracksPointsCursor.getCount());
|
assertEquals(10, tracksPointsCursor.getCount());
|
||||||
Cursor waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
Cursor waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(1, waypointCursor.getCount());
|
assertEquals(1, waypointCursor.getCount());
|
||||||
// Delete all.
|
// Delete all.
|
||||||
contentProviderUtils.deleteAllTracks(context);
|
contentProviderUtils.deleteAllTracks(context);
|
||||||
@@ -229,7 +229,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(0, tracksCursor.getCount());
|
assertEquals(0, tracksCursor.getCount());
|
||||||
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(0, tracksPointsCursor.getCount());
|
assertEquals(0, tracksPointsCursor.getCount());
|
||||||
waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(0, waypointCursor.getCount());
|
assertEquals(0, waypointCursor.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,15 +243,15 @@ public class CustomContentProviderUtilsTest {
|
|||||||
Track track = TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
Track track = TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
||||||
|
|
||||||
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
||||||
Waypoint waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
Marker waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
||||||
contentProviderUtils.insertWaypoint(waypoint);
|
contentProviderUtils.insertMarker(waypoint);
|
||||||
|
|
||||||
ContentResolver contentResolver = context.getContentResolver();
|
ContentResolver contentResolver = context.getContentResolver();
|
||||||
Cursor tracksCursor = contentResolver.query(TracksColumns.CONTENT_URI, null, null, null, TracksColumns._ID);
|
Cursor tracksCursor = contentResolver.query(TracksColumns.CONTENT_URI, null, null, null, TracksColumns._ID);
|
||||||
assertEquals(1, tracksCursor.getCount());
|
assertEquals(1, tracksCursor.getCount());
|
||||||
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(10, tracksPointsCursor.getCount());
|
assertEquals(10, tracksPointsCursor.getCount());
|
||||||
Cursor waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
Cursor waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(1, waypointCursor.getCount());
|
assertEquals(1, waypointCursor.getCount());
|
||||||
// Check waypoint has photo and it's in the external storage.
|
// Check waypoint has photo and it's in the external storage.
|
||||||
assertTrue(waypoint.hasPhoto());
|
assertTrue(waypoint.hasPhoto());
|
||||||
@@ -266,7 +266,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(0, tracksCursor.getCount());
|
assertEquals(0, tracksCursor.getCount());
|
||||||
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(0, tracksPointsCursor.getCount());
|
assertEquals(0, tracksPointsCursor.getCount());
|
||||||
waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(0, waypointCursor.getCount());
|
assertEquals(0, waypointCursor.getCount());
|
||||||
assertFalse(dir.exists());
|
assertFalse(dir.exists());
|
||||||
}
|
}
|
||||||
@@ -287,16 +287,16 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId2, 10);
|
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId2, 10);
|
||||||
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId3, 10);
|
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId3, 10);
|
||||||
|
|
||||||
Waypoint waypoint = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId2));
|
Marker waypoint = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId2));
|
||||||
waypoint.setTrackId(trackId1);
|
waypoint.setTrackId(trackId1);
|
||||||
contentProviderUtils.insertWaypoint(waypoint);
|
contentProviderUtils.insertMarker(waypoint);
|
||||||
|
|
||||||
ContentResolver contentResolver = context.getContentResolver();
|
ContentResolver contentResolver = context.getContentResolver();
|
||||||
Cursor tracksCursor = contentResolver.query(TracksColumns.CONTENT_URI, null, null, null, TracksColumns._ID);
|
Cursor tracksCursor = contentResolver.query(TracksColumns.CONTENT_URI, null, null, null, TracksColumns._ID);
|
||||||
assertEquals(3, tracksCursor.getCount());
|
assertEquals(3, tracksCursor.getCount());
|
||||||
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(20, tracksPointsCursor.getCount());
|
assertEquals(20, tracksPointsCursor.getCount());
|
||||||
Cursor waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
Cursor waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(1, waypointCursor.getCount());
|
assertEquals(1, waypointCursor.getCount());
|
||||||
// Delete one track.
|
// Delete one track.
|
||||||
contentProviderUtils.deleteTrack(context, trackId1);
|
contentProviderUtils.deleteTrack(context, trackId1);
|
||||||
@@ -305,7 +305,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(2, tracksCursor.getCount());
|
assertEquals(2, tracksCursor.getCount());
|
||||||
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(20, tracksPointsCursor.getCount());
|
assertEquals(20, tracksPointsCursor.getCount());
|
||||||
waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(0, waypointCursor.getCount());
|
assertEquals(0, waypointCursor.getCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,13 +326,13 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
// Insert a waypoint in tracks trackId and trackId + 1.
|
// Insert a waypoint in tracks trackId and trackId + 1.
|
||||||
TrackPoint trackPoint1 = contentProviderUtils.getLastValidTrackPoint(trackId1);
|
TrackPoint trackPoint1 = contentProviderUtils.getLastValidTrackPoint(trackId1);
|
||||||
Waypoint waypoint1 = TestDataUtil.createWaypointWithPhoto(context, trackId1, trackPoint1.getLocation());
|
Marker waypoint1 = TestDataUtil.createWaypointWithPhoto(context, trackId1, trackPoint1.getLocation());
|
||||||
contentProviderUtils.insertWaypoint(waypoint1);
|
contentProviderUtils.insertMarker(waypoint1);
|
||||||
File dir1 = FileUtils.getPhotoDir(context, trackId1);
|
File dir1 = FileUtils.getPhotoDir(context, trackId1);
|
||||||
|
|
||||||
TrackPoint trackPoint2 = contentProviderUtils.getLastValidTrackPoint(trackId2);
|
TrackPoint trackPoint2 = contentProviderUtils.getLastValidTrackPoint(trackId2);
|
||||||
Waypoint waypoint2 = TestDataUtil.createWaypointWithPhoto(context, trackId2, trackPoint2.getLocation());
|
Marker waypoint2 = TestDataUtil.createWaypointWithPhoto(context, trackId2, trackPoint2.getLocation());
|
||||||
contentProviderUtils.insertWaypoint(waypoint2);
|
contentProviderUtils.insertMarker(waypoint2);
|
||||||
File dir2 = FileUtils.getPhotoDir(context, trackId2);
|
File dir2 = FileUtils.getPhotoDir(context, trackId2);
|
||||||
|
|
||||||
// Check.
|
// Check.
|
||||||
@@ -341,7 +341,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(3, tracksCursor.getCount());
|
assertEquals(3, tracksCursor.getCount());
|
||||||
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
Cursor tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(30, tracksPointsCursor.getCount());
|
assertEquals(30, tracksPointsCursor.getCount());
|
||||||
Cursor waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
Cursor waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(2, waypointCursor.getCount());
|
assertEquals(2, waypointCursor.getCount());
|
||||||
assertTrue(waypoint1.hasPhoto());
|
assertTrue(waypoint1.hasPhoto());
|
||||||
assertTrue(dir1.isDirectory());
|
assertTrue(dir1.isDirectory());
|
||||||
@@ -357,7 +357,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(2, tracksCursor.getCount());
|
assertEquals(2, tracksCursor.getCount());
|
||||||
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
tracksPointsCursor = contentResolver.query(TrackPointsColumns.CONTENT_URI_BY_ID, null, null, null, TrackPointsColumns._ID);
|
||||||
assertEquals(20, tracksPointsCursor.getCount());
|
assertEquals(20, tracksPointsCursor.getCount());
|
||||||
waypointCursor = contentResolver.query(WaypointsColumns.CONTENT_URI, null, null, null, WaypointsColumns._ID);
|
waypointCursor = contentResolver.query(MarkerColumns.CONTENT_URI, null, null, null, MarkerColumns._ID);
|
||||||
assertEquals(1, waypointCursor.getCount());
|
assertEquals(1, waypointCursor.getCount());
|
||||||
assertFalse(dir1.exists());
|
assertFalse(dir1.exists());
|
||||||
assertTrue(dir2.exists());
|
assertTrue(dir2.exists());
|
||||||
@@ -439,7 +439,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#createContentValues(Waypoint)}.
|
* Tests the method {@link ContentProviderUtils#createContentValues(Marker)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testCreateContentValues_waypoint() {
|
public void testCreateContentValues_waypoint() {
|
||||||
@@ -463,30 +463,30 @@ public class CustomContentProviderUtilsTest {
|
|||||||
track.first.setTrackStatistics(statistics);
|
track.first.setTrackStatistics(statistics);
|
||||||
contentProviderUtils.insertTrack(track.first);
|
contentProviderUtils.insertTrack(track.first);
|
||||||
|
|
||||||
Waypoint waypoint = new Waypoint(track.second[0]);
|
Marker waypoint = new Marker(track.second[0]);
|
||||||
waypoint.setDescription(TEST_DESC);
|
waypoint.setDescription(TEST_DESC);
|
||||||
contentProviderUtils.insertWaypoint(waypoint);
|
contentProviderUtils.insertMarker(waypoint);
|
||||||
|
|
||||||
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(contentResolverMock);
|
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(contentResolverMock);
|
||||||
|
|
||||||
Waypoint.Id waypointId = new Waypoint.Id(System.currentTimeMillis());
|
Marker.Id waypointId = new Marker.Id(System.currentTimeMillis());
|
||||||
waypoint.setId(waypointId);
|
waypoint.setId(waypointId);
|
||||||
ContentValues contentValues = contentProviderUtils.createContentValues(waypoint);
|
ContentValues contentValues = contentProviderUtils.createContentValues(waypoint);
|
||||||
assertEquals(waypointId.getId(), contentValues.get(WaypointsColumns._ID));
|
assertEquals(waypointId.getId(), contentValues.get(MarkerColumns._ID));
|
||||||
assertEquals((int) (TestDataUtil.INITIAL_LONGITUDE * 1000000), contentValues.get(WaypointsColumns.LONGITUDE));
|
assertEquals((int) (TestDataUtil.INITIAL_LONGITUDE * 1000000), contentValues.get(MarkerColumns.LONGITUDE));
|
||||||
assertEquals(TEST_DESC, contentValues.get(WaypointsColumns.DESCRIPTION));
|
assertEquals(TEST_DESC, contentValues.get(MarkerColumns.DESCRIPTION));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#createWaypoint(Cursor)}.
|
* Tests the method {@link ContentProviderUtils#createMarker(Cursor)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testCreateWaypoint() {
|
public void testCreateWaypoint() {
|
||||||
int startColumnIndex = 1;
|
int startColumnIndex = 1;
|
||||||
int columnIndex = startColumnIndex;
|
int columnIndex = startColumnIndex;
|
||||||
when(cursorMock.getColumnIndexOrThrow(WaypointsColumns._ID)).thenReturn(columnIndex++);
|
when(cursorMock.getColumnIndexOrThrow(MarkerColumns._ID)).thenReturn(columnIndex++);
|
||||||
when(cursorMock.getColumnIndexOrThrow(WaypointsColumns.NAME)).thenReturn(columnIndex++);
|
when(cursorMock.getColumnIndexOrThrow(MarkerColumns.NAME)).thenReturn(columnIndex++);
|
||||||
when(cursorMock.getColumnIndexOrThrow(WaypointsColumns.TRACKID)).thenReturn(columnIndex++);
|
when(cursorMock.getColumnIndexOrThrow(MarkerColumns.TRACKID)).thenReturn(columnIndex++);
|
||||||
columnIndex = startColumnIndex;
|
columnIndex = startColumnIndex;
|
||||||
// Id
|
// Id
|
||||||
when(cursorMock.isNull(columnIndex++)).thenReturn(false);
|
when(cursorMock.isNull(columnIndex++)).thenReturn(false);
|
||||||
@@ -505,7 +505,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
long trackId = 11L;
|
long trackId = 11L;
|
||||||
when(cursorMock.getLong(columnIndex++)).thenReturn(trackId);
|
when(cursorMock.getLong(columnIndex++)).thenReturn(trackId);
|
||||||
|
|
||||||
Waypoint waypoint = contentProviderUtils.createWaypoint(cursorMock);
|
Marker waypoint = contentProviderUtils.createMarker(cursorMock);
|
||||||
assertEquals(id, waypoint.getId().getId());
|
assertEquals(id, waypoint.getId().getId());
|
||||||
assertEquals(name, waypoint.getName());
|
assertEquals(name, waypoint.getName());
|
||||||
assertEquals(trackId, waypoint.getTrackId().getId());
|
assertEquals(trackId, waypoint.getTrackId().getId());
|
||||||
@@ -513,7 +513,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method
|
* Tests the method
|
||||||
* {@link ContentProviderUtils#deleteWaypoint(Context, Waypoint.Id)}
|
* {@link ContentProviderUtils#deleteMarker(Context, Marker.Id)}
|
||||||
* when there is only one waypoint in the track.
|
* when there is only one waypoint in the track.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
@@ -522,26 +522,26 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
||||||
|
|
||||||
// Insert at first.
|
// Insert at first.
|
||||||
Waypoint waypoint1 = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint1 = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint1.setDescription(TEST_DESC);
|
waypoint1.setDescription(TEST_DESC);
|
||||||
waypoint1.setTrackId(trackId);
|
waypoint1.setTrackId(trackId);
|
||||||
contentProviderUtils.insertWaypoint(waypoint1);
|
contentProviderUtils.insertMarker(waypoint1);
|
||||||
|
|
||||||
// Check insert was done.
|
// Check insert was done.
|
||||||
assertEquals(contentProviderUtils.getWaypointCount(trackId), 1);
|
assertEquals(contentProviderUtils.getMarkerCount(trackId), 1);
|
||||||
|
|
||||||
// Get waypoint id that needs to delete.
|
// Get waypoint id that needs to delete.
|
||||||
Waypoint.Id waypoint1Id = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint1)));
|
Marker.Id waypoint1Id = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint1)));
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
contentProviderUtils.deleteWaypoint(context, waypoint1Id);
|
contentProviderUtils.deleteMarker(context, waypoint1Id);
|
||||||
|
|
||||||
assertNull(contentProviderUtils.getWaypoint(waypoint1Id));
|
assertNull(contentProviderUtils.getMarker(waypoint1Id));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method
|
* Tests the method
|
||||||
* {@link ContentProviderUtils#deleteWaypoint(Context, Waypoint.Id)}
|
* {@link ContentProviderUtils#deleteMarker(Context, Marker.Id)}
|
||||||
* when there is only one waypoint in the track.
|
* when there is only one waypoint in the track.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
@@ -551,14 +551,14 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
// Insert at first.
|
// Insert at first.
|
||||||
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
||||||
Waypoint waypoint1 = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
Marker waypoint1 = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
||||||
contentProviderUtils.insertWaypoint(waypoint1);
|
contentProviderUtils.insertMarker(waypoint1);
|
||||||
|
|
||||||
// Check insert was done.
|
// Check insert was done.
|
||||||
assertEquals(contentProviderUtils.getWaypointCount(trackId), 1);
|
assertEquals(contentProviderUtils.getMarkerCount(trackId), 1);
|
||||||
|
|
||||||
// Get waypoint id that needs to delete.
|
// Get waypoint id that needs to delete.
|
||||||
Waypoint.Id waypoint1Id = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint1)));
|
Marker.Id waypoint1Id = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint1)));
|
||||||
|
|
||||||
// Check waypoint has photo and it's in the external storage.
|
// Check waypoint has photo and it's in the external storage.
|
||||||
assertTrue(waypoint1.hasPhoto());
|
assertTrue(waypoint1.hasPhoto());
|
||||||
@@ -568,15 +568,15 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertTrue(dir.exists());
|
assertTrue(dir.exists());
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
contentProviderUtils.deleteWaypoint(context, waypoint1Id);
|
contentProviderUtils.deleteMarker(context, waypoint1Id);
|
||||||
|
|
||||||
// Check waypoint doesn't exists and photo folder was deleted.
|
// Check waypoint doesn't exists and photo folder was deleted.
|
||||||
assertNull(contentProviderUtils.getWaypoint(waypoint1Id));
|
assertNull(contentProviderUtils.getMarker(waypoint1Id));
|
||||||
assertFalse(dir.exists());
|
assertFalse(dir.exists());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#deleteWaypoint(Context, Waypoint.Id)} when there is more than one waypoint in the track.
|
* Tests the method {@link ContentProviderUtils#deleteMarker(Context, Marker.Id)} when there is more than one waypoint in the track.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteWaypoint_hasNextWayPoint() {
|
public void testDeleteWaypoint_hasNextWayPoint() {
|
||||||
@@ -600,67 +600,67 @@ public class CustomContentProviderUtilsTest {
|
|||||||
// TestDataUtil.insertTrackWithLocations(contentProviderUtils, track);
|
// TestDataUtil.insertTrackWithLocations(contentProviderUtils, track);
|
||||||
|
|
||||||
// Insert at first.
|
// Insert at first.
|
||||||
Waypoint waypoint1 = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint1 = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint1.setDescription(MOCK_DESC);
|
waypoint1.setDescription(MOCK_DESC);
|
||||||
waypoint1.setTrackId(trackId);
|
waypoint1.setTrackId(trackId);
|
||||||
Waypoint.Id waypoint1Id = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint1)));
|
Marker.Id waypoint1Id = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint1)));
|
||||||
|
|
||||||
Waypoint waypoint2 = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint2 = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint2.setDescription(MOCK_DESC);
|
waypoint2.setDescription(MOCK_DESC);
|
||||||
waypoint2.setTrackId(trackId);
|
waypoint2.setTrackId(trackId);
|
||||||
Waypoint.Id waypoint2Id = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint2)));
|
Marker.Id waypoint2Id = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint2)));
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
assertNotNull(contentProviderUtils.getWaypoint(waypoint1Id));
|
assertNotNull(contentProviderUtils.getMarker(waypoint1Id));
|
||||||
contentProviderUtils.deleteWaypoint(context, waypoint1Id);
|
contentProviderUtils.deleteMarker(context, waypoint1Id);
|
||||||
assertNull(contentProviderUtils.getWaypoint(waypoint1Id));
|
assertNull(contentProviderUtils.getMarker(waypoint1Id));
|
||||||
|
|
||||||
assertEquals(MOCK_DESC, contentProviderUtils.getWaypoint(waypoint2Id).getDescription());
|
assertEquals(MOCK_DESC, contentProviderUtils.getMarker(waypoint2Id).getDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#getNextWaypointNumber(Track.Id)}.
|
* Tests the method {@link ContentProviderUtils#getNextMarkerNumber(Track.Id)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testGetNextWaypointNumber() {
|
public void testGetNextWaypointNumber() {
|
||||||
Track.Id trackId = new Track.Id(System.currentTimeMillis());
|
Track.Id trackId = new Track.Id(System.currentTimeMillis());
|
||||||
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
||||||
|
|
||||||
Waypoint waypoint1 = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint1 = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint1.setTrackId(trackId);
|
waypoint1.setTrackId(trackId);
|
||||||
Waypoint waypoint2 = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint2 = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint2.setTrackId(trackId);
|
waypoint2.setTrackId(trackId);
|
||||||
Waypoint waypoint3 = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint3 = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint3.setTrackId(trackId);
|
waypoint3.setTrackId(trackId);
|
||||||
Waypoint waypoint4 = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint4 = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint4.setTrackId(trackId);
|
waypoint4.setTrackId(trackId);
|
||||||
contentProviderUtils.insertWaypoint(waypoint1);
|
contentProviderUtils.insertMarker(waypoint1);
|
||||||
contentProviderUtils.insertWaypoint(waypoint2);
|
contentProviderUtils.insertMarker(waypoint2);
|
||||||
contentProviderUtils.insertWaypoint(waypoint3);
|
contentProviderUtils.insertMarker(waypoint3);
|
||||||
contentProviderUtils.insertWaypoint(waypoint4);
|
contentProviderUtils.insertMarker(waypoint4);
|
||||||
|
|
||||||
assertEquals(4, contentProviderUtils.getNextWaypointNumber(trackId));
|
assertEquals(4, contentProviderUtils.getNextMarkerNumber(trackId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#insertWaypoint(Waypoint)} and
|
* Tests the method {@link ContentProviderUtils#insertMarker(Marker)} and
|
||||||
* {@link ContentProviderUtils#getWaypoint(Waypoint.Id)}.
|
* {@link ContentProviderUtils#getMarker(Marker.Id)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testInsertAndGetWaypoint() {
|
public void testInsertAndGetWaypoint() {
|
||||||
Track.Id trackId = new Track.Id(System.currentTimeMillis());
|
Track.Id trackId = new Track.Id(System.currentTimeMillis());
|
||||||
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
||||||
|
|
||||||
Waypoint waypoint = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint.setDescription(TEST_DESC);
|
waypoint.setDescription(TEST_DESC);
|
||||||
waypoint.setTrackId(trackId);
|
waypoint.setTrackId(trackId);
|
||||||
Waypoint.Id waypointId = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint)));
|
Marker.Id waypointId = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint)));
|
||||||
|
|
||||||
assertEquals(TEST_DESC, contentProviderUtils.getWaypoint(waypointId).getDescription());
|
assertEquals(TEST_DESC, contentProviderUtils.getMarker(waypointId).getDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#updateWaypoint(Context, Waypoint)}.
|
* Tests the method {@link ContentProviderUtils#updateMarker(Context, Marker)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateWaypoint() {
|
public void testUpdateWaypoint() {
|
||||||
@@ -668,21 +668,21 @@ public class CustomContentProviderUtilsTest {
|
|||||||
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10);
|
||||||
|
|
||||||
// Insert at first.
|
// Insert at first.
|
||||||
Waypoint waypoint = new Waypoint(contentProviderUtils.getLastValidTrackPoint(trackId));
|
Marker waypoint = new Marker(contentProviderUtils.getLastValidTrackPoint(trackId));
|
||||||
waypoint.setDescription(TEST_DESC);
|
waypoint.setDescription(TEST_DESC);
|
||||||
waypoint.setTrackId(trackId);
|
waypoint.setTrackId(trackId);
|
||||||
Waypoint.Id waypointId = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint)));
|
Marker.Id waypointId = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint)));
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
waypoint = contentProviderUtils.getWaypoint(waypointId);
|
waypoint = contentProviderUtils.getMarker(waypointId);
|
||||||
waypoint.setDescription(TEST_DESC_NEW);
|
waypoint.setDescription(TEST_DESC_NEW);
|
||||||
contentProviderUtils.updateWaypoint(context, waypoint);
|
contentProviderUtils.updateMarker(context, waypoint);
|
||||||
|
|
||||||
assertEquals(TEST_DESC_NEW, contentProviderUtils.getWaypoint(waypointId).getDescription());
|
assertEquals(TEST_DESC_NEW, contentProviderUtils.getMarker(waypointId).getDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#updateWaypoint(Context, Waypoint)}.
|
* Tests the method {@link ContentProviderUtils#updateMarker(Context, Marker)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateWaypoint_withPhoto() throws IOException {
|
public void testUpdateWaypoint_withPhoto() throws IOException {
|
||||||
@@ -693,10 +693,10 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
// Insert at first.
|
// Insert at first.
|
||||||
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
||||||
Waypoint waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
Marker waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
||||||
waypoint.setDescription(TEST_DESC);
|
waypoint.setDescription(TEST_DESC);
|
||||||
waypoint.setTrackId(trackId);
|
waypoint.setTrackId(trackId);
|
||||||
Waypoint.Id waypointId = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint)));
|
Marker.Id waypointId = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint)));
|
||||||
|
|
||||||
File dir = new File(FileUtils.getPhotoDir(context), "" + trackId.getId());
|
File dir = new File(FileUtils.getPhotoDir(context), "" + trackId.getId());
|
||||||
assertTrue(dir.exists());
|
assertTrue(dir.exists());
|
||||||
@@ -704,13 +704,13 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(1, dir.list().length);
|
assertEquals(1, dir.list().length);
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
waypoint = contentProviderUtils.getWaypoint(waypointId);
|
waypoint = contentProviderUtils.getMarker(waypointId);
|
||||||
waypoint.setName(TEST_NAME_NEW);
|
waypoint.setName(TEST_NAME_NEW);
|
||||||
waypoint.setDescription(TEST_DESC_NEW);
|
waypoint.setDescription(TEST_DESC_NEW);
|
||||||
contentProviderUtils.updateWaypoint(context, waypoint);
|
contentProviderUtils.updateMarker(context, waypoint);
|
||||||
|
|
||||||
assertEquals(TEST_NAME_NEW, contentProviderUtils.getWaypoint(waypointId).getName());
|
assertEquals(TEST_NAME_NEW, contentProviderUtils.getMarker(waypointId).getName());
|
||||||
assertEquals(TEST_DESC_NEW, contentProviderUtils.getWaypoint(waypointId).getDescription());
|
assertEquals(TEST_DESC_NEW, contentProviderUtils.getMarker(waypointId).getDescription());
|
||||||
assertTrue(waypoint.hasPhoto());
|
assertTrue(waypoint.hasPhoto());
|
||||||
assertTrue(dir.exists());
|
assertTrue(dir.exists());
|
||||||
assertTrue(dir.isDirectory());
|
assertTrue(dir.isDirectory());
|
||||||
@@ -718,7 +718,7 @@ public class CustomContentProviderUtilsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#updateWaypoint(Context, Waypoint)}.
|
* Tests the method {@link ContentProviderUtils#updateMarker(Context, Marker)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateWaypoint_delPhotoAndDir() throws IOException {
|
public void testUpdateWaypoint_delPhotoAndDir() throws IOException {
|
||||||
@@ -729,10 +729,10 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
// Insert at first.
|
// Insert at first.
|
||||||
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
||||||
Waypoint waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
Marker waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
||||||
waypoint.setDescription(TEST_DESC);
|
waypoint.setDescription(TEST_DESC);
|
||||||
waypoint.setTrackId(trackId);
|
waypoint.setTrackId(trackId);
|
||||||
Waypoint.Id waypointId = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint)));
|
Marker.Id waypointId = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint)));
|
||||||
|
|
||||||
File dir = new File(FileUtils.getPhotoDir(context), "" + trackId.getId());
|
File dir = new File(FileUtils.getPhotoDir(context), "" + trackId.getId());
|
||||||
assertTrue(dir.exists());
|
assertTrue(dir.exists());
|
||||||
@@ -740,20 +740,20 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(1, dir.list().length);
|
assertEquals(1, dir.list().length);
|
||||||
|
|
||||||
// Update
|
// Update
|
||||||
waypoint = contentProviderUtils.getWaypoint(waypointId);
|
waypoint = contentProviderUtils.getMarker(waypointId);
|
||||||
waypoint.setName(TEST_NAME_NEW);
|
waypoint.setName(TEST_NAME_NEW);
|
||||||
waypoint.setDescription(TEST_DESC_NEW);
|
waypoint.setDescription(TEST_DESC_NEW);
|
||||||
waypoint.setPhotoUrl(null);
|
waypoint.setPhotoUrl(null);
|
||||||
contentProviderUtils.updateWaypoint(context, waypoint);
|
contentProviderUtils.updateMarker(context, waypoint);
|
||||||
|
|
||||||
assertEquals(TEST_NAME_NEW, contentProviderUtils.getWaypoint(waypointId).getName());
|
assertEquals(TEST_NAME_NEW, contentProviderUtils.getMarker(waypointId).getName());
|
||||||
assertEquals(TEST_DESC_NEW, contentProviderUtils.getWaypoint(waypointId).getDescription());
|
assertEquals(TEST_DESC_NEW, contentProviderUtils.getMarker(waypointId).getDescription());
|
||||||
assertFalse(waypoint.hasPhoto());
|
assertFalse(waypoint.hasPhoto());
|
||||||
assertFalse(dir.exists());
|
assertFalse(dir.exists());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the method {@link ContentProviderUtils#updateWaypoint(Context, Waypoint)}.
|
* Tests the method {@link ContentProviderUtils#updateMarker(Context, Marker)}.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateWaypoint_delPhotoNotDir() throws IOException {
|
public void testUpdateWaypoint_delPhotoNotDir() throws IOException {
|
||||||
@@ -764,14 +764,14 @@ public class CustomContentProviderUtilsTest {
|
|||||||
|
|
||||||
// Insert two waypoints with photos.
|
// Insert two waypoints with photos.
|
||||||
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
TrackPoint trackPoint = contentProviderUtils.getLastValidTrackPoint(trackId);
|
||||||
Waypoint waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
Marker waypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
||||||
waypoint.setDescription(TEST_DESC);
|
waypoint.setDescription(TEST_DESC);
|
||||||
waypoint.setTrackId(trackId);
|
waypoint.setTrackId(trackId);
|
||||||
Waypoint otherWaypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
Marker otherWaypoint = TestDataUtil.createWaypointWithPhoto(context, trackId, trackPoint.getLocation());
|
||||||
otherWaypoint.setDescription(TEST_DESC);
|
otherWaypoint.setDescription(TEST_DESC);
|
||||||
otherWaypoint.setTrackId(trackId);
|
otherWaypoint.setTrackId(trackId);
|
||||||
Waypoint.Id waypointId = new Waypoint.Id(ContentUris.parseId(contentProviderUtils.insertWaypoint(waypoint)));
|
Marker.Id waypointId = new Marker.Id(ContentUris.parseId(contentProviderUtils.insertMarker(waypoint)));
|
||||||
contentProviderUtils.insertWaypoint(otherWaypoint);
|
contentProviderUtils.insertMarker(otherWaypoint);
|
||||||
|
|
||||||
File dir = new File(FileUtils.getPhotoDir(context), "" + trackId.getId());
|
File dir = new File(FileUtils.getPhotoDir(context), "" + trackId.getId());
|
||||||
assertTrue(dir.exists());
|
assertTrue(dir.exists());
|
||||||
@@ -779,11 +779,11 @@ public class CustomContentProviderUtilsTest {
|
|||||||
assertEquals(2, dir.list().length);
|
assertEquals(2, dir.list().length);
|
||||||
|
|
||||||
// Update one waypoint deleting photo.
|
// Update one waypoint deleting photo.
|
||||||
waypoint = contentProviderUtils.getWaypoint(waypointId);
|
waypoint = contentProviderUtils.getMarker(waypointId);
|
||||||
waypoint.setPhotoUrl(null);
|
waypoint.setPhotoUrl(null);
|
||||||
contentProviderUtils.updateWaypoint(context, waypoint);
|
contentProviderUtils.updateMarker(context, waypoint);
|
||||||
|
|
||||||
assertEquals(TEST_DESC, contentProviderUtils.getWaypoint(waypointId).getDescription());
|
assertEquals(TEST_DESC, contentProviderUtils.getMarker(waypointId).getDescription());
|
||||||
assertFalse(waypoint.hasPhoto());
|
assertFalse(waypoint.hasPhoto());
|
||||||
assertTrue(dir.exists());
|
assertTrue(dir.exists());
|
||||||
assertTrue(dir.isDirectory());
|
assertTrue(dir.isDirectory());
|
||||||
|
|||||||
+6
-6
@@ -18,9 +18,9 @@ import org.junit.runner.RunWith;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@@ -45,7 +45,7 @@ public class CustomSQLiteOpenHelperTest {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static Map<String, String> getTableSQL(SQLiteDatabase db) {
|
public static Map<String, String> getTableSQL(SQLiteDatabase db) {
|
||||||
HashMap<String, String> tableSQL = new HashMap<>();
|
HashMap<String, String> tableSQL = new HashMap<>();
|
||||||
try (Cursor cursor = db.query("sqlite_master", new String[]{"name", "SQL"}, "name IN ('" + TracksColumns.TABLE_NAME + "', '" + TrackPointsColumns.TABLE_NAME + "', '" + WaypointsColumns.TABLE_NAME + "')", null, null, null, "name")) {
|
try (Cursor cursor = db.query("sqlite_master", new String[]{"name", "SQL"}, "name IN ('" + TracksColumns.TABLE_NAME + "', '" + TrackPointsColumns.TABLE_NAME + "', '" + MarkerColumns.TABLE_NAME + "')", null, null, null, "name")) {
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
tableSQL.put(cursor.getString(0), cursor.getString(1));
|
tableSQL.put(cursor.getString(0), cursor.getString(1));
|
||||||
@@ -106,8 +106,8 @@ public class CustomSQLiteOpenHelperTest {
|
|||||||
assertTrue(hasSqlCreate(db, TrackPointsColumns.CREATE_TABLE));
|
assertTrue(hasSqlCreate(db, TrackPointsColumns.CREATE_TABLE));
|
||||||
assertTrue(hasSqlCreate(db, TrackPointsColumns.CREATE_TABLE_INDEX));
|
assertTrue(hasSqlCreate(db, TrackPointsColumns.CREATE_TABLE_INDEX));
|
||||||
|
|
||||||
assertTrue(hasSqlCreate(db, WaypointsColumns.CREATE_TABLE));
|
assertTrue(hasSqlCreate(db, MarkerColumns.CREATE_TABLE));
|
||||||
assertTrue(hasSqlCreate(db, WaypointsColumns.CREATE_TABLE_INDEX));
|
assertTrue(hasSqlCreate(db, MarkerColumns.CREATE_TABLE_INDEX));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
@@ -140,13 +140,13 @@ public class CustomSQLiteOpenHelperTest {
|
|||||||
|
|
||||||
assertEquals(tablesByCreate.get(TracksColumns.TABLE_NAME), tableByUpgrade.get(TracksColumns.TABLE_NAME));
|
assertEquals(tablesByCreate.get(TracksColumns.TABLE_NAME), tableByUpgrade.get(TracksColumns.TABLE_NAME));
|
||||||
assertEquals(tablesByCreate.get(TrackPointsColumns.TABLE_NAME), tableByUpgrade.get(TrackPointsColumns.TABLE_NAME));
|
assertEquals(tablesByCreate.get(TrackPointsColumns.TABLE_NAME), tableByUpgrade.get(TrackPointsColumns.TABLE_NAME));
|
||||||
assertEquals(tablesByCreate.get(WaypointsColumns.TABLE_NAME), tableByUpgrade.get(WaypointsColumns.TABLE_NAME));
|
assertEquals(tablesByCreate.get(MarkerColumns.TABLE_NAME), tableByUpgrade.get(MarkerColumns.TABLE_NAME));
|
||||||
|
|
||||||
// then - verify custom indices
|
// then - verify custom indices
|
||||||
assertEquals(3, indicesByCreate.size());
|
assertEquals(3, indicesByCreate.size());
|
||||||
assertEquals(indicesByUpgrade.get(TracksColumns.TABLE_NAME), indicesByCreate.get(TracksColumns.TABLE_NAME));
|
assertEquals(indicesByUpgrade.get(TracksColumns.TABLE_NAME), indicesByCreate.get(TracksColumns.TABLE_NAME));
|
||||||
assertEquals(indicesByUpgrade.get(TrackPointsColumns.TABLE_NAME), indicesByCreate.get(TrackPointsColumns.TABLE_NAME));
|
assertEquals(indicesByUpgrade.get(TrackPointsColumns.TABLE_NAME), indicesByCreate.get(TrackPointsColumns.TABLE_NAME));
|
||||||
assertEquals(indicesByUpgrade.get(WaypointsColumns.TABLE_NAME), indicesByCreate.get(WaypointsColumns.TABLE_NAME));
|
assertEquals(indicesByUpgrade.get(MarkerColumns.TABLE_NAME), indicesByCreate.get(MarkerColumns.TABLE_NAME));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
+3
-3
@@ -33,9 +33,9 @@ import java.util.Locale;
|
|||||||
import java.util.SimpleTimeZone;
|
import java.util.SimpleTimeZone;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
@@ -70,7 +70,7 @@ public abstract class AbstractTestFileTrackImporter {
|
|||||||
static final long TRACK_POINT_ID_3 = 4;
|
static final long TRACK_POINT_ID_3 = 4;
|
||||||
|
|
||||||
private static final long WAYPOINT_ID_0 = 1;
|
private static final long WAYPOINT_ID_0 = 1;
|
||||||
private static final Uri WAYPOINT_ID_O_URI = ContentUris.appendId(WaypointsColumns.CONTENT_URI.buildUpon(), WAYPOINT_ID_0).build();
|
private static final Uri WAYPOINT_ID_O_URI = ContentUris.appendId(MarkerColumns.CONTENT_URI.buildUpon(), WAYPOINT_ID_0).build();
|
||||||
|
|
||||||
protected final Context context = ApplicationProvider.getApplicationContext();
|
protected final Context context = ApplicationProvider.getApplicationContext();
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ public abstract class AbstractTestFileTrackImporter {
|
|||||||
protected void expectTrackUpdate(ArgumentCaptor<Track> trackCaptor, boolean lastTrack, Track.Id trackId) {
|
protected void expectTrackUpdate(ArgumentCaptor<Track> trackCaptor, boolean lastTrack, Track.Id trackId) {
|
||||||
contentProviderUtils.updateTrack(trackCaptor.capture());
|
contentProviderUtils.updateTrack(trackCaptor.capture());
|
||||||
|
|
||||||
when(contentProviderUtils.insertWaypoint(any())).thenReturn(WAYPOINT_ID_O_URI);
|
when(contentProviderUtils.insertMarker(any())).thenReturn(WAYPOINT_ID_O_URI);
|
||||||
if (lastTrack) {
|
if (lastTrack) {
|
||||||
// Return null to not add waypoints
|
// Return null to not add waypoints
|
||||||
when(contentProviderUtils.getTrack(trackId)).thenReturn(null);
|
when(contentProviderUtils.getTrack(trackId)).thenReturn(null);
|
||||||
|
|||||||
+9
-9
@@ -21,10 +21,10 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.TestDataUtil;
|
import de.dennisguse.opentracks.content.data.TestDataUtil;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.io.file.TrackFileFormat;
|
import de.dennisguse.opentracks.io.file.TrackFileFormat;
|
||||||
import de.dennisguse.opentracks.io.file.exporter.TrackExporter;
|
import de.dennisguse.opentracks.io.file.exporter.TrackExporter;
|
||||||
@@ -53,7 +53,7 @@ public class ExportImportTest {
|
|||||||
private static final String TRACK_CATEGORY = "the category";
|
private static final String TRACK_CATEGORY = "the category";
|
||||||
private static final String TRACK_DESCRIPTION = "the description";
|
private static final String TRACK_DESCRIPTION = "the description";
|
||||||
|
|
||||||
private final List<Waypoint> waypoints = new ArrayList<>();
|
private final List<Marker> waypoints = new ArrayList<>();
|
||||||
private final List<TrackPoint> trackPoints = new ArrayList<>();
|
private final List<TrackPoint> trackPoints = new ArrayList<>();
|
||||||
|
|
||||||
private Track.Id importTrackId;
|
private Track.Id importTrackId;
|
||||||
@@ -72,19 +72,19 @@ public class ExportImportTest {
|
|||||||
trackPoints.addAll(Arrays.asList(track.second));
|
trackPoints.addAll(Arrays.asList(track.second));
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
Waypoint waypoint = new Waypoint(track.second[i].getLocation());
|
Marker waypoint = new Marker(track.second[i].getLocation());
|
||||||
waypoint.setName("the waypoint " + i);
|
waypoint.setName("the waypoint " + i);
|
||||||
waypoint.setDescription("the waypoint description " + i);
|
waypoint.setDescription("the waypoint description " + i);
|
||||||
waypoint.setCategory("the waypoint category" + i);
|
waypoint.setCategory("the waypoint category" + i);
|
||||||
waypoint.setIcon("the waypoing icon" + i);
|
waypoint.setIcon("the waypoing icon" + i);
|
||||||
waypoint.setPhotoUrl("the photo url" + i);
|
waypoint.setPhotoUrl("the photo url" + i);
|
||||||
waypoint.setTrackId(trackId);
|
waypoint.setTrackId(trackId);
|
||||||
contentProviderUtils.insertWaypoint(waypoint);
|
contentProviderUtils.insertMarker(waypoint);
|
||||||
|
|
||||||
waypoints.add(waypoint);
|
waypoints.add(waypoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals(waypoints.size(), contentProviderUtils.getWaypointCount(trackId));
|
assertEquals(waypoints.size(), contentProviderUtils.getMarkerCount(trackId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
@@ -286,12 +286,12 @@ public class ExportImportTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void assertWaypoints() {
|
private void assertWaypoints() {
|
||||||
assertEquals(waypoints.size(), contentProviderUtils.getWaypointCount(importTrackId));
|
assertEquals(waypoints.size(), contentProviderUtils.getMarkerCount(importTrackId));
|
||||||
|
|
||||||
List<Waypoint> importedWaypoints = contentProviderUtils.getWaypoints(importTrackId);
|
List<Marker> importedWaypoints = contentProviderUtils.getMarkers(importTrackId);
|
||||||
for (int i = 0; i < waypoints.size(); i++) {
|
for (int i = 0; i < waypoints.size(); i++) {
|
||||||
Waypoint waypoint = waypoints.get(i);
|
Marker waypoint = waypoints.get(i);
|
||||||
Waypoint importedWaypoint = importedWaypoints.get(i);
|
Marker importedWaypoint = importedWaypoints.get(i);
|
||||||
assertEquals(waypoint.getCategory(), importedWaypoint.getCategory());
|
assertEquals(waypoint.getCategory(), importedWaypoint.getCategory());
|
||||||
assertEquals(waypoint.getDescription(), importedWaypoint.getDescription());
|
assertEquals(waypoint.getDescription(), importedWaypoint.getDescription());
|
||||||
// assertEquals(waypoint.getIcon(), importedWaypoint.getIcon()); // TODO for KML
|
// assertEquals(waypoint.getIcon(), importedWaypoint.getIcon()); // TODO for KML
|
||||||
|
|||||||
+4
-4
@@ -44,10 +44,10 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.CustomContentProvider;
|
import de.dennisguse.opentracks.content.provider.CustomContentProvider;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
@@ -296,7 +296,7 @@ public class TrackRecordingServiceTest {
|
|||||||
assertFalse(service.isRecording());
|
assertFalse(service.isRecording());
|
||||||
|
|
||||||
// when
|
// when
|
||||||
Waypoint.Id waypointId = service.insertWaypoint(null, null, null, null);
|
Marker.Id waypointId = service.insertWaypoint(null, null, null, null);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertNull(waypointId);
|
assertNull(waypointId);
|
||||||
@@ -313,11 +313,11 @@ public class TrackRecordingServiceTest {
|
|||||||
Track.Id trackId = service.getRecordingTrackId();
|
Track.Id trackId = service.getRecordingTrackId();
|
||||||
|
|
||||||
// when
|
// when
|
||||||
Waypoint.Id waypointId = service.insertWaypoint(null, null, null, null);
|
Marker.Id waypointId = service.insertWaypoint(null, null, null, null);
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertNotEquals(-1L, waypointId);
|
assertNotEquals(-1L, waypointId);
|
||||||
Waypoint wpt = contentProviderUtils.getWaypoint(waypointId);
|
Marker wpt = contentProviderUtils.getMarker(waypointId);
|
||||||
assertEquals(context.getString(R.string.marker_waypoint_icon_url), wpt.getIcon());
|
assertEquals(context.getString(R.string.marker_waypoint_icon_url), wpt.getIcon());
|
||||||
assertEquals(context.getString(R.string.marker_name_format, 1), wpt.getName());
|
assertEquals(context.getString(R.string.marker_name_format, 1), wpt.getName());
|
||||||
assertEquals(trackId, wpt.getTrackId());
|
assertEquals(trackId, wpt.getTrackId());
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import androidx.viewpager.widget.ViewPager;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
|
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
|
||||||
import de.dennisguse.opentracks.fragments.MarkerDetailFragment;
|
import de.dennisguse.opentracks.fragments.MarkerDetailFragment;
|
||||||
@@ -48,13 +48,13 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark
|
|||||||
|
|
||||||
private static final String TAG = MarkerDetailActivity.class.getSimpleName();
|
private static final String TAG = MarkerDetailActivity.class.getSimpleName();
|
||||||
|
|
||||||
private List<Waypoint.Id> waypointIds;
|
private List<Marker.Id> waypointIds;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle bundle) {
|
protected void onCreate(Bundle bundle) {
|
||||||
super.onCreate(bundle);
|
super.onCreate(bundle);
|
||||||
|
|
||||||
Waypoint.Id waypointId = getIntent().getParcelableExtra(EXTRA_MARKER_ID);
|
Marker.Id waypointId = getIntent().getParcelableExtra(EXTRA_MARKER_ID);
|
||||||
if (waypointId == null) {
|
if (waypointId == null) {
|
||||||
Log.d(TAG, "invalid marker id");
|
Log.d(TAG, "invalid marker id");
|
||||||
finish();
|
finish();
|
||||||
@@ -62,16 +62,16 @@ public class MarkerDetailActivity extends AbstractActivity implements DeleteMark
|
|||||||
}
|
}
|
||||||
|
|
||||||
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(this);
|
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(this);
|
||||||
Waypoint waypoint = contentProviderUtils.getWaypoint(waypointId);
|
Marker waypoint = contentProviderUtils.getMarker(waypointId);
|
||||||
|
|
||||||
waypointIds = new ArrayList<>();
|
waypointIds = new ArrayList<>();
|
||||||
int markerIndex = -1;
|
int markerIndex = -1;
|
||||||
|
|
||||||
//TODO Load only waypointIds, not the whole waypoint
|
//TODO Load only waypointIds, not the whole waypoint
|
||||||
try (Cursor cursor = contentProviderUtils.getWaypointCursor(waypoint.getTrackId(), null, -1)) {
|
try (Cursor cursor = contentProviderUtils.getMarkerCursor(waypoint.getTrackId(), null, -1)) {
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
for (int i = 0; i < cursor.getCount(); i++) {
|
for (int i = 0; i < cursor.getCount(); i++) {
|
||||||
Waypoint currentMarker = contentProviderUtils.createWaypoint(cursor);
|
Marker currentMarker = contentProviderUtils.createMarker(cursor);
|
||||||
waypointIds.add(currentMarker.getId());
|
waypointIds.add(currentMarker.getId());
|
||||||
if (waypointId.equals(currentMarker.getId())) {
|
if (waypointId.equals(currentMarker.getId())) {
|
||||||
markerIndex = waypointIds.size() - 1;
|
markerIndex = waypointIds.size() - 1;
|
||||||
|
|||||||
@@ -42,8 +42,8 @@ import java.io.File;
|
|||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
|
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
|
||||||
import de.dennisguse.opentracks.util.FileUtils;
|
import de.dennisguse.opentracks.util.FileUtils;
|
||||||
@@ -67,7 +67,7 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
private static final String TAG = MarkerEditActivity.class.getSimpleName();
|
private static final String TAG = MarkerEditActivity.class.getSimpleName();
|
||||||
private Track.Id trackId;
|
private Track.Id trackId;
|
||||||
private TrackRecordingServiceConnection trackRecordingServiceConnection = new TrackRecordingServiceConnection();
|
private TrackRecordingServiceConnection trackRecordingServiceConnection = new TrackRecordingServiceConnection();
|
||||||
private Waypoint waypoint;
|
private Marker waypoint;
|
||||||
|
|
||||||
private MenuItem insertPhotoMenuItem;
|
private MenuItem insertPhotoMenuItem;
|
||||||
private MenuItem insertGalleryImgMenuItem;
|
private MenuItem insertGalleryImgMenuItem;
|
||||||
@@ -87,7 +87,7 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
trackId = getIntent().getParcelableExtra(EXTRA_TRACK_ID);
|
trackId = getIntent().getParcelableExtra(EXTRA_TRACK_ID);
|
||||||
Waypoint.Id waypointId = getIntent().getParcelableExtra(EXTRA_MARKER_ID);
|
Marker.Id waypointId = getIntent().getParcelableExtra(EXTRA_MARKER_ID);
|
||||||
|
|
||||||
hasCamera = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
|
hasCamera = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (isNewMarker) {
|
if (isNewMarker) {
|
||||||
int nextWaypointNumber = trackId == null ? -1 : new ContentProviderUtils(this).getNextWaypointNumber(trackId);
|
int nextWaypointNumber = trackId == null ? -1 : new ContentProviderUtils(this).getNextMarkerNumber(trackId);
|
||||||
if (nextWaypointNumber == -1) {
|
if (nextWaypointNumber == -1) {
|
||||||
nextWaypointNumber = 0;
|
nextWaypointNumber = 0;
|
||||||
}
|
}
|
||||||
@@ -136,7 +136,7 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
waypointMarkerType.setText("");
|
waypointMarkerType.setText("");
|
||||||
waypointDescription.setText("");
|
waypointDescription.setText("");
|
||||||
} else {
|
} else {
|
||||||
waypoint = new ContentProviderUtils(this).getWaypoint(waypointId);
|
waypoint = new ContentProviderUtils(this).getMarker(waypointId);
|
||||||
if (waypoint == null) {
|
if (waypoint == null) {
|
||||||
Log.d(TAG, "waypoint is null");
|
Log.d(TAG, "waypoint is null");
|
||||||
finish();
|
finish();
|
||||||
@@ -307,6 +307,6 @@ public class MarkerEditActivity extends AbstractActivity {
|
|||||||
waypoint.setDescription(waypointDescription.getText().toString());
|
waypoint.setDescription(waypointDescription.getText().toString());
|
||||||
waypoint.setPhotoUrl(photoUri != null ? photoUri.toString() : null);
|
waypoint.setPhotoUrl(photoUri != null ? photoUri.toString() : null);
|
||||||
|
|
||||||
new ContentProviderUtils(this).updateWaypoint(this, waypoint);
|
new ContentProviderUtils(this).updateMarker(this, waypoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ import androidx.loader.app.LoaderManager;
|
|||||||
import androidx.loader.app.LoaderManager.LoaderCallbacks;
|
import androidx.loader.app.LoaderManager.LoaderCallbacks;
|
||||||
import androidx.loader.content.Loader;
|
import androidx.loader.content.Loader;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment;
|
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment;
|
||||||
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
|
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
|
||||||
@@ -124,19 +124,19 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
listView.setEmptyView(findViewById(R.id.marker_list_empty));
|
listView.setEmptyView(findViewById(R.id.marker_list_empty));
|
||||||
listView.setOnItemClickListener((parent, view, position, id) -> {
|
listView.setOnItemClickListener((parent, view, position, id) -> {
|
||||||
Intent intent = IntentUtils.newIntent(MarkerListActivity.this, MarkerDetailActivity.class)
|
Intent intent = IntentUtils.newIntent(MarkerListActivity.this, MarkerDetailActivity.class)
|
||||||
.putExtra(MarkerDetailActivity.EXTRA_MARKER_ID, new Waypoint.Id(id));
|
.putExtra(MarkerDetailActivity.EXTRA_MARKER_ID, new Marker.Id(id));
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) {
|
resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) {
|
||||||
@Override
|
@Override
|
||||||
public void bindView(View view, Context context, Cursor cursor) {
|
public void bindView(View view, Context context, Cursor cursor) {
|
||||||
int nameIndex = cursor.getColumnIndex(WaypointsColumns.NAME);
|
int nameIndex = cursor.getColumnIndex(MarkerColumns.NAME);
|
||||||
int timeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.TIME);
|
int timeIndex = cursor.getColumnIndexOrThrow(MarkerColumns.TIME);
|
||||||
int categoryIndex = cursor.getColumnIndex(WaypointsColumns.CATEGORY);
|
int categoryIndex = cursor.getColumnIndex(MarkerColumns.CATEGORY);
|
||||||
int descriptionIndex = cursor.getColumnIndex(WaypointsColumns.DESCRIPTION);
|
int descriptionIndex = cursor.getColumnIndex(MarkerColumns.DESCRIPTION);
|
||||||
int photoUrlIndex = cursor.getColumnIndex(WaypointsColumns.PHOTOURL);
|
int photoUrlIndex = cursor.getColumnIndex(MarkerColumns.PHOTOURL);
|
||||||
int latitudeIndex = cursor.getColumnIndex(WaypointsColumns.LATITUDE);
|
int latitudeIndex = cursor.getColumnIndex(MarkerColumns.LATITUDE);
|
||||||
int longitudeIndex = cursor.getColumnIndex(WaypointsColumns.LONGITUDE);
|
int longitudeIndex = cursor.getColumnIndex(MarkerColumns.LONGITUDE);
|
||||||
|
|
||||||
int iconId = MarkerUtils.ICON_ID;
|
int iconId = MarkerUtils.ICON_ID;
|
||||||
String name = cursor.getString(nameIndex);
|
String name = cursor.getString(nameIndex);
|
||||||
@@ -158,7 +158,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
|
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
|
||||||
return ContentProviderUtils.getWaypointsLoader(MarkerListActivity.this, track != null ? track.getId() : null);
|
return ContentProviderUtils.getMarkersLoader(MarkerListActivity.this, track != null ? track.getId() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -234,16 +234,16 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker
|
|||||||
* @return true if handled.
|
* @return true if handled.
|
||||||
*/
|
*/
|
||||||
private boolean handleContextItem(int itemId, long... longWaypointIds) {
|
private boolean handleContextItem(int itemId, long... longWaypointIds) {
|
||||||
Waypoint.Id[] waypointIds = new Waypoint.Id[longWaypointIds.length];
|
Marker.Id[] waypointIds = new Marker.Id[longWaypointIds.length];
|
||||||
for (int i = 0; i < longWaypointIds.length; i++) {
|
for (int i = 0; i < longWaypointIds.length; i++) {
|
||||||
waypointIds[i] = new Waypoint.Id(longWaypointIds[i]);
|
waypointIds[i] = new Marker.Id(longWaypointIds[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Intent intent;
|
Intent intent;
|
||||||
switch (itemId) {
|
switch (itemId) {
|
||||||
case R.id.list_context_menu_show_on_map:
|
case R.id.list_context_menu_show_on_map:
|
||||||
if (waypointIds.length == 1) {
|
if (waypointIds.length == 1) {
|
||||||
IntentUtils.showCoordinateOnMap(this, contentProviderUtils.getWaypoint(waypointIds[0]));
|
IntentUtils.showCoordinateOnMap(this, contentProviderUtils.getMarker(waypointIds[0]));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case R.id.list_context_menu_edit:
|
case R.id.list_context_menu_edit:
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ import java.util.SortedSet;
|
|||||||
import de.dennisguse.opentracks.content.SearchEngine;
|
import de.dennisguse.opentracks.content.SearchEngine;
|
||||||
import de.dennisguse.opentracks.content.SearchEngine.ScoredResult;
|
import de.dennisguse.opentracks.content.SearchEngine.ScoredResult;
|
||||||
import de.dennisguse.opentracks.content.SearchEngine.SearchQuery;
|
import de.dennisguse.opentracks.content.SearchEngine.SearchQuery;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment;
|
import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment;
|
||||||
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment;
|
import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment;
|
||||||
@@ -271,7 +271,7 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa
|
|||||||
}
|
}
|
||||||
Map<String, Object> item = arrayAdapter.getItem(positions[0]);
|
Map<String, Object> item = arrayAdapter.getItem(positions[0]);
|
||||||
Track.Id trackId = (Track.Id) item.get(TRACK_ID_FIELD);
|
Track.Id trackId = (Track.Id) item.get(TRACK_ID_FIELD);
|
||||||
Waypoint.Id waypointId = (Waypoint.Id) item.get(MARKER_ID_FIELD);
|
Marker.Id waypointId = (Marker.Id) item.get(MARKER_ID_FIELD);
|
||||||
Intent intent;
|
Intent intent;
|
||||||
switch (itemId) {
|
switch (itemId) {
|
||||||
case R.id.list_context_menu_show_on_map:
|
case R.id.list_context_menu_show_on_map:
|
||||||
@@ -367,7 +367,7 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa
|
|||||||
* @param waypoint the marker
|
* @param waypoint the marker
|
||||||
* @return the result map
|
* @return the result map
|
||||||
*/
|
*/
|
||||||
private Map<String, Object> prepareMarkerForDisplay(Waypoint waypoint) {
|
private Map<String, Object> prepareMarkerForDisplay(Marker waypoint) {
|
||||||
Map<String, Object> resultMap = new HashMap<>();
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
|
|
||||||
//TODO: It may be more appropriate to obtain the track name as a join in the retrieval phase of the searchable.
|
//TODO: It may be more appropriate to obtain the track name as a join in the retrieval phase of the searchable.
|
||||||
@@ -422,7 +422,7 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa
|
|||||||
resultMap.put(NAME_FIELD, track.getName());
|
resultMap.put(NAME_FIELD, track.getName());
|
||||||
resultMap.put(TOTAL_TIME_FIELD, StringUtils.formatElapsedTime(trackStatistics.getTotalTime()));
|
resultMap.put(TOTAL_TIME_FIELD, StringUtils.formatElapsedTime(trackStatistics.getTotalTime()));
|
||||||
resultMap.put(TOTAL_DISTANCE_FIELD, StringUtils.formatDistance(this, trackStatistics.getTotalDistance(), metricUnits));
|
resultMap.put(TOTAL_DISTANCE_FIELD, StringUtils.formatDistance(this, trackStatistics.getTotalDistance(), metricUnits));
|
||||||
resultMap.put(MARKER_COUNT_FIELD, contentProviderUtils.getWaypointCount(track.getId()));
|
resultMap.put(MARKER_COUNT_FIELD, contentProviderUtils.getMarkerCount(track.getId()));
|
||||||
resultMap.put(START_TIME_FIELD, trackStatistics.getStartTime_ms());
|
resultMap.put(START_TIME_FIELD, trackStatistics.getStartTime_ms());
|
||||||
resultMap.put(CATEGORY_FIELD, category);
|
resultMap.put(CATEGORY_FIELD, category);
|
||||||
resultMap.put(DESCRIPTION_FIELD, track.getDescription());
|
resultMap.put(DESCRIPTION_FIELD, track.getDescription());
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
|
|||||||
String name = cursor.getString(nameIndex);
|
String name = cursor.getString(nameIndex);
|
||||||
String totalTime = StringUtils.formatElapsedTime(cursor.getLong(totalTimeIndex));
|
String totalTime = StringUtils.formatElapsedTime(cursor.getLong(totalTimeIndex));
|
||||||
String totalDistance = StringUtils.formatDistance(TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits);
|
String totalDistance = StringUtils.formatDistance(TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits);
|
||||||
int markerCount = contentProviderUtils.getWaypointCount(trackId);
|
int markerCount = contentProviderUtils.getMarkerCount(trackId);
|
||||||
long startTime = cursor.getLong(startTimeIndex);
|
long startTime = cursor.getLong(startTimeIndex);
|
||||||
String category = icon != null && !icon.equals("") ? null : cursor.getString(categoryIndex);
|
String category = icon != null && !icon.equals("") ? null : cursor.getString(categoryIndex);
|
||||||
String description = cursor.getString(descriptionIndex);
|
String description = cursor.getString(descriptionIndex);
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ import androidx.viewpager.widget.ViewPager;
|
|||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.content.TrackDataHub;
|
import de.dennisguse.opentracks.content.TrackDataHub;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.fragments.ChartFragment;
|
import de.dennisguse.opentracks.fragments.ChartFragment;
|
||||||
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
|
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
|
||||||
@@ -206,10 +206,10 @@ public class TrackRecordedActivity extends AbstractListActivity implements Choos
|
|||||||
private void handleIntent(Intent intent) {
|
private void handleIntent(Intent intent) {
|
||||||
Track.Id trackId = intent.getParcelableExtra(EXTRA_TRACK_ID);
|
Track.Id trackId = intent.getParcelableExtra(EXTRA_TRACK_ID);
|
||||||
|
|
||||||
Waypoint.Id waypointId = intent.getParcelableExtra(EXTRA_MARKER_ID);
|
Marker.Id waypointId = intent.getParcelableExtra(EXTRA_MARKER_ID);
|
||||||
if (waypointId != null) {
|
if (waypointId != null) {
|
||||||
// Use the trackId from the marker
|
// Use the trackId from the marker
|
||||||
Waypoint waypoint = contentProviderUtils.getWaypoint(waypointId);
|
Marker waypoint = contentProviderUtils.getMarker(waypointId);
|
||||||
if (waypoint == null) {
|
if (waypoint == null) {
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.MarkerDetailActivity;
|
import de.dennisguse.opentracks.MarkerDetailActivity;
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.stats.ExtremityMonitor;
|
import de.dennisguse.opentracks.stats.ExtremityMonitor;
|
||||||
import de.dennisguse.opentracks.util.IntentUtils;
|
import de.dennisguse.opentracks.util.IntentUtils;
|
||||||
import de.dennisguse.opentracks.util.MarkerUtils;
|
import de.dennisguse.opentracks.util.MarkerUtils;
|
||||||
@@ -87,7 +87,7 @@ public class ChartView extends View {
|
|||||||
private final ChartValueSeries paceSeries;
|
private final ChartValueSeries paceSeries;
|
||||||
|
|
||||||
private final List<ChartPoint> chartPoints = new ArrayList<>();
|
private final List<ChartPoint> chartPoints = new ArrayList<>();
|
||||||
private final List<Waypoint> waypoints = new ArrayList<>();
|
private final List<Marker> waypoints = new ArrayList<>();
|
||||||
private final ExtremityMonitor xExtremityMonitor = new ExtremityMonitor();
|
private final ExtremityMonitor xExtremityMonitor = new ExtremityMonitor();
|
||||||
private final Paint axisPaint;
|
private final Paint axisPaint;
|
||||||
private final Paint xAxisMarkerPaint;
|
private final Paint xAxisMarkerPaint;
|
||||||
@@ -150,9 +150,9 @@ public class ChartView extends View {
|
|||||||
// Check if the y event is within markerHeight of the marker center
|
// Check if the y event is within markerHeight of the marker center
|
||||||
if (Math.abs(event.getY() - topBorder - spacer - markerHeight / 2f) < markerHeight) {
|
if (Math.abs(event.getY() - topBorder - spacer - markerHeight / 2f) < markerHeight) {
|
||||||
int minDistance = Integer.MAX_VALUE;
|
int minDistance = Integer.MAX_VALUE;
|
||||||
Waypoint nearestWaypoint = null;
|
Marker nearestWaypoint = null;
|
||||||
synchronized (waypoints) {
|
synchronized (waypoints) {
|
||||||
for (Waypoint waypoint : waypoints) {
|
for (Marker waypoint : waypoints) {
|
||||||
int distance = Math.abs(getX(getWaypointXValue(waypoint)) - (int) event.getX() - getScrollX());
|
int distance = Math.abs(getX(getWaypointXValue(waypoint)) - (int) event.getX() - getScrollX());
|
||||||
if (distance < minDistance) {
|
if (distance < minDistance) {
|
||||||
minDistance = distance;
|
minDistance = distance;
|
||||||
@@ -434,7 +434,7 @@ public class ChartView extends View {
|
|||||||
scrollTo(0, 0);
|
scrollTo(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addWaypoint(Waypoint waypoint) {
|
public void addWaypoint(Marker waypoint) {
|
||||||
synchronized (waypoints) {
|
synchronized (waypoints) {
|
||||||
waypoints.add(waypoint);
|
waypoints.add(waypoint);
|
||||||
}
|
}
|
||||||
@@ -594,7 +594,7 @@ public class ChartView extends View {
|
|||||||
*/
|
*/
|
||||||
private void drawWaypoints(Canvas canvas) {
|
private void drawWaypoints(Canvas canvas) {
|
||||||
synchronized (waypoints) {
|
synchronized (waypoints) {
|
||||||
for (Waypoint waypoint : waypoints) {
|
for (Marker waypoint : waypoints) {
|
||||||
double xValue = getWaypointXValue(waypoint);
|
double xValue = getWaypointXValue(waypoint);
|
||||||
if (xValue > maxX) {
|
if (xValue > maxX) {
|
||||||
continue;
|
continue;
|
||||||
@@ -980,7 +980,7 @@ public class ChartView extends View {
|
|||||||
*
|
*
|
||||||
* @param waypoint the waypoint
|
* @param waypoint the waypoint
|
||||||
*/
|
*/
|
||||||
private double getWaypointXValue(Waypoint waypoint) {
|
private double getWaypointXValue(Marker waypoint) {
|
||||||
if (chartByDistance) {
|
if (chartByDistance) {
|
||||||
double lenghtInKm = waypoint.getLength() * UnitConversions.M_TO_KM;
|
double lenghtInKm = waypoint.getLength() * UnitConversions.M_TO_KM;
|
||||||
return metricUnits ? lenghtInKm : lenghtInKm * UnitConversions.KM_TO_MI;
|
return metricUnits ? lenghtInKm : lenghtInKm * UnitConversions.KM_TO_MI;
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ import java.util.Locale;
|
|||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.util.LocationUtils;
|
import de.dennisguse.opentracks.util.LocationUtils;
|
||||||
@@ -56,9 +56,9 @@ public class SearchEngine {
|
|||||||
* WHERE query to get waypoints by name.
|
* WHERE query to get waypoints by name.
|
||||||
*/
|
*/
|
||||||
private static final String WAYPOINT_SELECTION_QUERY =
|
private static final String WAYPOINT_SELECTION_QUERY =
|
||||||
WaypointsColumns.NAME + " LIKE ? OR " +
|
MarkerColumns.NAME + " LIKE ? OR " +
|
||||||
WaypointsColumns.DESCRIPTION + " LIKE ? OR " +
|
MarkerColumns.DESCRIPTION + " LIKE ? OR " +
|
||||||
WaypointsColumns.CATEGORY + " LIKE ?";
|
MarkerColumns.CATEGORY + " LIKE ?";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Order of track results.
|
* Order of track results.
|
||||||
@@ -68,7 +68,7 @@ public class SearchEngine {
|
|||||||
/**
|
/**
|
||||||
* Order of waypoint results.
|
* Order of waypoint results.
|
||||||
*/
|
*/
|
||||||
private static final String WAYPOINT_SELECTION_ORDER = WaypointsColumns._ID + " DESC";
|
private static final String WAYPOINT_SELECTION_ORDER = MarkerColumns._ID + " DESC";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How much we promote a match in the track category.
|
* How much we promote a match in the track category.
|
||||||
@@ -190,8 +190,8 @@ public class SearchEngine {
|
|||||||
*
|
*
|
||||||
* @param query the query to retrieve for
|
* @param query the query to retrieve for
|
||||||
*/
|
*/
|
||||||
private List<Waypoint> retrieveWaypoints(SearchQuery query) {
|
private List<Marker> retrieveWaypoints(SearchQuery query) {
|
||||||
ArrayList<Waypoint> waypoints = new ArrayList<>();
|
ArrayList<Marker> waypoints = new ArrayList<>();
|
||||||
|
|
||||||
String queryLikeSelection2 = "%" + query.textQuery + "%";
|
String queryLikeSelection2 = "%" + query.textQuery + "%";
|
||||||
String[] waypointSelectionArgs = new String[]{
|
String[] waypointSelectionArgs = new String[]{
|
||||||
@@ -200,11 +200,11 @@ public class SearchEngine {
|
|||||||
queryLikeSelection2
|
queryLikeSelection2
|
||||||
};
|
};
|
||||||
|
|
||||||
try (Cursor cursor = providerUtils.getWaypointCursor(WAYPOINT_SELECTION_QUERY, waypointSelectionArgs, WAYPOINT_SELECTION_ORDER, MAX_SCORED_WAYPOINTS)) {
|
try (Cursor cursor = providerUtils.getMarkerCursor(WAYPOINT_SELECTION_QUERY, waypointSelectionArgs, WAYPOINT_SELECTION_ORDER, MAX_SCORED_WAYPOINTS)) {
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
waypoints.ensureCapacity(cursor.getCount());
|
waypoints.ensureCapacity(cursor.getCount());
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
Waypoint waypoint = providerUtils.createWaypoint(cursor);
|
Marker waypoint = providerUtils.createMarker(cursor);
|
||||||
if (LocationUtils.isValidLocation(waypoint.getLocation())) {
|
if (LocationUtils.isValidLocation(waypoint.getLocation())) {
|
||||||
waypoints.add(waypoint);
|
waypoints.add(waypoint);
|
||||||
}
|
}
|
||||||
@@ -264,8 +264,8 @@ public class SearchEngine {
|
|||||||
* @param query the query to score for
|
* @param query the query to score for
|
||||||
* @param output the collection to fill with scored results
|
* @param output the collection to fill with scored results
|
||||||
*/
|
*/
|
||||||
private void scoreWaypointResults(Collection<Waypoint> waypoints, SearchQuery query, Collection<ScoredResult> output) {
|
private void scoreWaypointResults(Collection<Marker> waypoints, SearchQuery query, Collection<ScoredResult> output) {
|
||||||
for (Waypoint waypoint : waypoints) {
|
for (Marker waypoint : waypoints) {
|
||||||
// Calculate the score.
|
// Calculate the score.
|
||||||
double score = scoreWaypointResult(query, waypoint);
|
double score = scoreWaypointResult(query, waypoint);
|
||||||
|
|
||||||
@@ -281,7 +281,7 @@ public class SearchEngine {
|
|||||||
* @param waypoint the results to score
|
* @param waypoint the results to score
|
||||||
* @return the score for the waypoint
|
* @return the score for the waypoint
|
||||||
*/
|
*/
|
||||||
private double scoreWaypointResult(SearchQuery query, Waypoint waypoint) {
|
private double scoreWaypointResult(SearchQuery query, Marker waypoint) {
|
||||||
double score = 1.0;
|
double score = 1.0;
|
||||||
|
|
||||||
Location location = waypoint.getLocation();
|
Location location = waypoint.getLocation();
|
||||||
@@ -398,7 +398,7 @@ public class SearchEngine {
|
|||||||
*/
|
*/
|
||||||
public static class ScoredResult {
|
public static class ScoredResult {
|
||||||
public final Track track;
|
public final Track track;
|
||||||
public final Waypoint waypoint;
|
public final Marker waypoint;
|
||||||
final double score;
|
final double score;
|
||||||
|
|
||||||
ScoredResult(Track track, double score) {
|
ScoredResult(Track track, double score) {
|
||||||
@@ -407,7 +407,7 @@ public class SearchEngine {
|
|||||||
this.score = score;
|
this.score = score;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScoredResult(Waypoint waypoint, double score) {
|
ScoredResult(Marker waypoint, double score) {
|
||||||
this.track = null;
|
this.track = null;
|
||||||
this.waypoint = waypoint;
|
this.waypoint = waypoint;
|
||||||
this.score = score;
|
this.score = score;
|
||||||
|
|||||||
@@ -32,12 +32,12 @@ import java.util.Collections;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
||||||
import de.dennisguse.opentracks.util.LocationUtils;
|
import de.dennisguse.opentracks.util.LocationUtils;
|
||||||
@@ -132,7 +132,7 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
notifyWaypointsTableUpdate(trackDataManager.getListenerWaypoints());
|
notifyWaypointsTableUpdate(trackDataManager.getListenerWaypoints());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
contentResolver.registerContentObserver(WaypointsColumns.CONTENT_URI, false, waypointsTableObserver);
|
contentResolver.registerContentObserver(MarkerColumns.CONTENT_URI, false, waypointsTableObserver);
|
||||||
|
|
||||||
trackPointsTableObserver = new ContentObserver(handler) {
|
trackPointsTableObserver = new ContentObserver(handler) {
|
||||||
@Override
|
@Override
|
||||||
@@ -312,10 +312,10 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
trackDataListener.clearWaypoints();
|
trackDataListener.clearWaypoints();
|
||||||
}
|
}
|
||||||
|
|
||||||
try (Cursor cursor = contentProviderUtils.getWaypointCursor(selectedTrackId, null, MAX_DISPLAYED_WAYPOINTS)) {
|
try (Cursor cursor = contentProviderUtils.getMarkerCursor(selectedTrackId, null, MAX_DISPLAYED_WAYPOINTS)) {
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
Waypoint waypoint = contentProviderUtils.createWaypoint(cursor);
|
Marker waypoint = contentProviderUtils.createMarker(cursor);
|
||||||
if (!LocationUtils.isValidLocation(waypoint.getLocation())) {
|
if (!LocationUtils.isValidLocation(waypoint.getLocation())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks.content;
|
package de.dennisguse.opentracks.content;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listener for track data changes.
|
* Listener for track data changes.
|
||||||
@@ -69,11 +69,11 @@ public interface TrackDataListener {
|
|||||||
*
|
*
|
||||||
* @param waypoint the waypoint
|
* @param waypoint the waypoint
|
||||||
*/
|
*/
|
||||||
void onNewWaypoint(Waypoint waypoint);
|
void onNewWaypoint(Marker waypoint);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when finish sending new waypoints.
|
* Called when finish sending new waypoints.
|
||||||
* This gets called after every batch of calls to {@link #clearWaypoints()} and {@link #onNewWaypoint(Waypoint)}.
|
* This gets called after every batch of calls to {@link #clearWaypoints()} and {@link #onNewWaypoint(Marker)}.
|
||||||
*/
|
*/
|
||||||
void onNewWaypointsDone();
|
void onNewWaypointsDone();
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -35,7 +35,7 @@ import de.dennisguse.opentracks.util.PreferencesUtils;
|
|||||||
* @author Leif Hendrik Wilden
|
* @author Leif Hendrik Wilden
|
||||||
* @author Rodrigo Damazio
|
* @author Rodrigo Damazio
|
||||||
*/
|
*/
|
||||||
public final class Waypoint {
|
public final class Marker {
|
||||||
|
|
||||||
private Id id;
|
private Id id;
|
||||||
private String name = "";
|
private String name = "";
|
||||||
@@ -50,15 +50,15 @@ public final class Waypoint {
|
|||||||
private String photoUrl = "";
|
private String photoUrl = "";
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public Waypoint(@NonNull TrackPoint trackPoint) {
|
public Marker(@NonNull TrackPoint trackPoint) {
|
||||||
this.location = trackPoint.getLocation();
|
this.location = trackPoint.getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Waypoint(@NonNull Location location) {
|
public Marker(@NonNull Location location) {
|
||||||
this.location = location;
|
this.location = location;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Waypoint(String name, String description, String category, String icon, @NonNull Track.Id trackId, double length, long duration, @NonNull Location location, String photoUrl) {
|
public Marker(String name, String description, String category, String icon, @NonNull Track.Id trackId, double length, long duration, @NonNull Location location, String photoUrl) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.category = category;
|
this.category = category;
|
||||||
+1
-1
@@ -26,7 +26,7 @@ import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
|||||||
*
|
*
|
||||||
* @author Leif Hendrik Wilden
|
* @author Leif Hendrik Wilden
|
||||||
*/
|
*/
|
||||||
public interface WaypointsColumns extends BaseColumns {
|
public interface MarkerColumns extends BaseColumns {
|
||||||
|
|
||||||
String TABLE_NAME = "waypoints";
|
String TABLE_NAME = "waypoints";
|
||||||
Uri CONTENT_URI = Uri.parse(ContentProviderUtils.CONTENT_BASE_URI + "/" + TABLE_NAME);
|
Uri CONTENT_URI = Uri.parse(ContentProviderUtils.CONTENT_BASE_URI + "/" + TABLE_NAME);
|
||||||
+122
-154
@@ -40,12 +40,12 @@ import java.util.UUID;
|
|||||||
import de.dennisguse.opentracks.BuildConfig;
|
import de.dennisguse.opentracks.BuildConfig;
|
||||||
import de.dennisguse.opentracks.android.ContentResolverWrapper;
|
import de.dennisguse.opentracks.android.ContentResolverWrapper;
|
||||||
import de.dennisguse.opentracks.android.IContentResolver;
|
import de.dennisguse.opentracks.android.IContentResolver;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.util.FileUtils;
|
import de.dennisguse.opentracks.util.FileUtils;
|
||||||
import de.dennisguse.opentracks.util.TrackUtils;
|
import de.dennisguse.opentracks.util.TrackUtils;
|
||||||
@@ -69,8 +69,8 @@ public class ContentProviderUtils {
|
|||||||
// The base URI for the app's content provider.
|
// The base URI for the app's content provider.
|
||||||
public static final String CONTENT_BASE_URI = "content://" + AUTHORITY_PACKAGE;
|
public static final String CONTENT_BASE_URI = "content://" + AUTHORITY_PACKAGE;
|
||||||
|
|
||||||
// Maximum number of waypoints that will be loaded at one time.
|
// Maximum number of markers that will be loaded at one time.
|
||||||
public static final int MAX_LOADED_WAYPOINTS_POINTS = 10000;
|
public static final int MAX_LOADED_MARKERS = 10000;
|
||||||
private static final String ID_SEPARATOR = ",";
|
private static final String ID_SEPARATOR = ",";
|
||||||
|
|
||||||
private final IContentResolver contentResolver;
|
private final IContentResolver contentResolver;
|
||||||
@@ -89,13 +89,13 @@ public class ContentProviderUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears a track: removes waypoints and trackPoints.
|
* Clears a track: removes markers and trackPoints.
|
||||||
* Only keeps the track id.
|
* Only keeps the track id.
|
||||||
*
|
*
|
||||||
* @param trackId the track id
|
* @param trackId the track id
|
||||||
*/
|
*/
|
||||||
public void clearTrack(Track.Id trackId) {
|
public void clearTrack(Track.Id trackId) {
|
||||||
deleteTrackPointsAndWaypoints(trackId);
|
deleteTrackPointsAndMarkers(trackId);
|
||||||
Track track = new Track();
|
Track track = new Track();
|
||||||
track.setId(trackId);
|
track.setId(trackId);
|
||||||
updateTrack(track);
|
updateTrack(track);
|
||||||
@@ -176,7 +176,7 @@ public class ContentProviderUtils {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void deleteAllTracks(Context context) {
|
public void deleteAllTracks(Context context) {
|
||||||
contentResolver.delete(TrackPointsColumns.CONTENT_URI_BY_ID, null, null);
|
contentResolver.delete(TrackPointsColumns.CONTENT_URI_BY_ID, null, null);
|
||||||
contentResolver.delete(WaypointsColumns.CONTENT_URI, null, null);
|
contentResolver.delete(MarkerColumns.CONTENT_URI, null, null);
|
||||||
// Delete tracks last since it triggers a database vaccum call
|
// Delete tracks last since it triggers a database vaccum call
|
||||||
contentResolver.delete(TracksColumns.CONTENT_URI, null, null);
|
contentResolver.delete(TracksColumns.CONTENT_URI, null, null);
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ public class ContentProviderUtils {
|
|||||||
if (trackId == null) {
|
if (trackId == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
deleteTrackPointsAndWaypoints(trackId);
|
deleteTrackPointsAndMarkers(trackId);
|
||||||
|
|
||||||
// Delete track folder resources.
|
// Delete track folder resources.
|
||||||
FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
|
FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
|
||||||
@@ -202,16 +202,11 @@ public class ContentProviderUtils {
|
|||||||
contentResolver.delete(TracksColumns.CONTENT_URI, TracksColumns._ID + "=?", new String[]{Long.toString(trackId.getId())});
|
contentResolver.delete(TracksColumns.CONTENT_URI, TracksColumns._ID + "=?", new String[]{Long.toString(trackId.getId())});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private void deleteTrackPointsAndMarkers(@NonNull Track.Id trackId) {
|
||||||
* Deletes trackPoints and waypoints of a track.
|
|
||||||
*
|
|
||||||
* @param trackId the track id
|
|
||||||
*/
|
|
||||||
private void deleteTrackPointsAndWaypoints(@NonNull Track.Id trackId) {
|
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
|
|
||||||
contentResolver.delete(TrackPointsColumns.CONTENT_URI_BY_ID, TrackPointsColumns.TRACKID + "=?", selectionArgs);
|
contentResolver.delete(TrackPointsColumns.CONTENT_URI_BY_ID, TrackPointsColumns.TRACKID + "=?", selectionArgs);
|
||||||
contentResolver.delete(WaypointsColumns.CONTENT_URI, WaypointsColumns.TRACKID + "=?", selectionArgs);
|
contentResolver.delete(MarkerColumns.CONTENT_URI, MarkerColumns.TRACKID + "=?", selectionArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -338,28 +333,22 @@ public class ContentProviderUtils {
|
|||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Marker createMarker(Cursor cursor) {
|
||||||
/**
|
int idIndex = cursor.getColumnIndexOrThrow(MarkerColumns._ID);
|
||||||
* Creates a waypoint from a cursor.
|
int nameIndex = cursor.getColumnIndexOrThrow(MarkerColumns.NAME);
|
||||||
*
|
int descriptionIndex = cursor.getColumnIndexOrThrow(MarkerColumns.DESCRIPTION);
|
||||||
* @param cursor the cursor pointing to the waypoint
|
int categoryIndex = cursor.getColumnIndexOrThrow(MarkerColumns.CATEGORY);
|
||||||
*/
|
int iconIndex = cursor.getColumnIndexOrThrow(MarkerColumns.ICON);
|
||||||
public Waypoint createWaypoint(Cursor cursor) {
|
int trackIdIndex = cursor.getColumnIndexOrThrow(MarkerColumns.TRACKID);
|
||||||
int idIndex = cursor.getColumnIndexOrThrow(WaypointsColumns._ID);
|
int lengthIndex = cursor.getColumnIndexOrThrow(MarkerColumns.LENGTH);
|
||||||
int nameIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.NAME);
|
int durationIndex = cursor.getColumnIndexOrThrow(MarkerColumns.DURATION);
|
||||||
int descriptionIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.DESCRIPTION);
|
int longitudeIndex = cursor.getColumnIndexOrThrow(MarkerColumns.LONGITUDE);
|
||||||
int categoryIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.CATEGORY);
|
int latitudeIndex = cursor.getColumnIndexOrThrow(MarkerColumns.LATITUDE);
|
||||||
int iconIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.ICON);
|
int timeIndex = cursor.getColumnIndexOrThrow(MarkerColumns.TIME);
|
||||||
int trackIdIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.TRACKID);
|
int altitudeIndex = cursor.getColumnIndexOrThrow(MarkerColumns.ALTITUDE);
|
||||||
int lengthIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.LENGTH);
|
int accuracyIndex = cursor.getColumnIndexOrThrow(MarkerColumns.ACCURACY);
|
||||||
int durationIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.DURATION);
|
int bearingIndex = cursor.getColumnIndexOrThrow(MarkerColumns.BEARING);
|
||||||
int longitudeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.LONGITUDE);
|
int photoUrlIndex = cursor.getColumnIndexOrThrow(MarkerColumns.PHOTOURL);
|
||||||
int latitudeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.LATITUDE);
|
|
||||||
int timeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.TIME);
|
|
||||||
int altitudeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.ALTITUDE);
|
|
||||||
int accuracyIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.ACCURACY);
|
|
||||||
int bearingIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.BEARING);
|
|
||||||
int photoUrlIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.PHOTOURL);
|
|
||||||
|
|
||||||
Location location = new Location("");
|
Location location = new Location("");
|
||||||
if (!cursor.isNull(longitudeIndex) && !cursor.isNull(latitudeIndex)) {
|
if (!cursor.isNull(longitudeIndex) && !cursor.isNull(latitudeIndex)) {
|
||||||
@@ -379,59 +368,56 @@ public class ContentProviderUtils {
|
|||||||
location.setBearing(cursor.getFloat(bearingIndex));
|
location.setBearing(cursor.getFloat(bearingIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
Waypoint waypoint = new Waypoint(location);
|
Marker marker = new Marker(location);
|
||||||
|
|
||||||
if (!cursor.isNull(idIndex)) {
|
if (!cursor.isNull(idIndex)) {
|
||||||
waypoint.setId(new Waypoint.Id(cursor.getLong(idIndex)));
|
marker.setId(new Marker.Id(cursor.getLong(idIndex)));
|
||||||
}
|
}
|
||||||
if (!cursor.isNull(nameIndex)) {
|
if (!cursor.isNull(nameIndex)) {
|
||||||
waypoint.setName(cursor.getString(nameIndex));
|
marker.setName(cursor.getString(nameIndex));
|
||||||
}
|
}
|
||||||
if (!cursor.isNull(descriptionIndex)) {
|
if (!cursor.isNull(descriptionIndex)) {
|
||||||
waypoint.setDescription(cursor.getString(descriptionIndex));
|
marker.setDescription(cursor.getString(descriptionIndex));
|
||||||
}
|
}
|
||||||
if (!cursor.isNull(categoryIndex)) {
|
if (!cursor.isNull(categoryIndex)) {
|
||||||
waypoint.setCategory(cursor.getString(categoryIndex));
|
marker.setCategory(cursor.getString(categoryIndex));
|
||||||
}
|
}
|
||||||
if (!cursor.isNull(iconIndex)) {
|
if (!cursor.isNull(iconIndex)) {
|
||||||
waypoint.setIcon(cursor.getString(iconIndex));
|
marker.setIcon(cursor.getString(iconIndex));
|
||||||
}
|
}
|
||||||
if (!cursor.isNull(trackIdIndex)) {
|
if (!cursor.isNull(trackIdIndex)) {
|
||||||
waypoint.setTrackId(new Track.Id(cursor.getLong(trackIdIndex)));
|
marker.setTrackId(new Track.Id(cursor.getLong(trackIdIndex)));
|
||||||
}
|
}
|
||||||
if (!cursor.isNull(lengthIndex)) {
|
if (!cursor.isNull(lengthIndex)) {
|
||||||
waypoint.setLength(cursor.getFloat(lengthIndex));
|
marker.setLength(cursor.getFloat(lengthIndex));
|
||||||
}
|
}
|
||||||
if (!cursor.isNull(durationIndex)) {
|
if (!cursor.isNull(durationIndex)) {
|
||||||
waypoint.setDuration(cursor.getLong(durationIndex));
|
marker.setDuration(cursor.getLong(durationIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cursor.isNull(photoUrlIndex)) {
|
if (!cursor.isNull(photoUrlIndex)) {
|
||||||
waypoint.setPhotoUrl(cursor.getString(photoUrlIndex));
|
marker.setPhotoUrl(cursor.getString(photoUrlIndex));
|
||||||
}
|
}
|
||||||
return waypoint;
|
return marker;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteWaypoint(Context context, Waypoint.Id waypointId) {
|
public void deleteMarker(Context context, Marker.Id markerId) {
|
||||||
final Waypoint waypoint = getWaypoint(waypointId);
|
final Marker marker = getMarker(markerId);
|
||||||
deleteWaypointPhoto(context, waypoint);
|
deleteMarkerPhoto(context, marker);
|
||||||
contentResolver.delete(WaypointsColumns.CONTENT_URI, WaypointsColumns._ID + "=?", new String[]{Long.toString(waypointId.getId())});
|
contentResolver.delete(MarkerColumns.CONTENT_URI, MarkerColumns._ID + "=?", new String[]{Long.toString(markerId.getId())});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the next waypoint number.
|
* @return -1 if not able to get the next marker number.
|
||||||
*
|
|
||||||
* @param trackId the track id
|
|
||||||
* @return -1 if not able to get the next waypoint number.
|
|
||||||
*/
|
*/
|
||||||
public int getNextWaypointNumber(Track.Id trackId) {
|
public int getNextMarkerNumber(Track.Id trackId) {
|
||||||
if (!trackId.isValid()) {
|
if (!trackId.isValid()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
String[] projection = {WaypointsColumns._ID};
|
String[] projection = {MarkerColumns._ID};
|
||||||
String selection = WaypointsColumns.TRACKID + "=?";
|
String selection = MarkerColumns.TRACKID + "=?";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
try (Cursor cursor = getWaypointCursor(projection, selection, selectionArgs, WaypointsColumns._ID, -1)) {
|
try (Cursor cursor = getMarkerCursor(projection, selection, selectionArgs, MarkerColumns._ID, -1)) {
|
||||||
if (cursor != null) {
|
if (cursor != null) {
|
||||||
return cursor.getCount();
|
return cursor.getCount();
|
||||||
}
|
}
|
||||||
@@ -439,99 +425,94 @@ public class ContentProviderUtils {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Waypoint getWaypoint(Waypoint.Id waypointId) {
|
public Marker getMarker(Marker.Id markerId) {
|
||||||
if (!waypointId.isValid()) {
|
if (!markerId.isValid()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try (Cursor cursor = getWaypointCursor(null, WaypointsColumns._ID + "=?",
|
try (Cursor cursor = getMarkerCursor(null, MarkerColumns._ID + "=?",
|
||||||
new String[]{Long.toString(waypointId.getId())}, WaypointsColumns._ID, 1)) {
|
new String[]{Long.toString(markerId.getId())}, MarkerColumns._ID, 1)) {
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
return createWaypoint(cursor);
|
return createMarker(cursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a waypoint cursor.
|
* The caller owns the returned cursor and is responsible for closing it.
|
||||||
* he caller owns the returned cursor and is responsible for closing it.
|
|
||||||
*
|
*
|
||||||
* @param selection the selection. Can be null
|
* @param selection the selection. Can be null
|
||||||
* @param selectionArgs the selection arguments. Can be null
|
* @param selectionArgs the selection arguments. Can be null
|
||||||
* @param sortOrder the sort order. Can be null
|
* @param sortOrder the sort order. Can be null
|
||||||
* @param maxWaypoints the maximum number of waypoints to return. -1 for no limit
|
* @param maxCount the maximum number of markers to return. -1 for no limit
|
||||||
*/
|
*/
|
||||||
public Cursor getWaypointCursor(String selection, String[] selectionArgs, String sortOrder, int maxWaypoints) {
|
public Cursor getMarkerCursor(String selection, String[] selectionArgs, String sortOrder, int maxCount) {
|
||||||
return getWaypointCursor(null, selection, selectionArgs, sortOrder, maxWaypoints);
|
return getMarkerCursor(null, selection, selectionArgs, sortOrder, maxCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a waypoint cursor for a track.
|
|
||||||
* The caller owns the returned cursor and is responsible for closing it.
|
* The caller owns the returned cursor and is responsible for closing it.
|
||||||
*
|
*
|
||||||
* @param trackId the track id
|
* @param trackId the track id
|
||||||
* @param minWaypointId the minimum waypoint id. null to ignore
|
* @param minMarkerId the minimum marker id. null to ignore
|
||||||
* @param maxWaypoints the maximum number of waypoints to return. -1 for no limit
|
* @param maxCount the maximum number of markers to return. -1 for no limit
|
||||||
*/
|
*/
|
||||||
public Cursor getWaypointCursor(Track.Id trackId, @Nullable Waypoint.Id minWaypointId, int maxWaypoints) {
|
public Cursor getMarkerCursor(Track.Id trackId, @Nullable Marker.Id minMarkerId, int maxCount) {
|
||||||
if (!trackId.isValid()) {
|
if (!trackId.isValid()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String selection;
|
String selection;
|
||||||
String[] selectionArgs;
|
String[] selectionArgs;
|
||||||
if (minWaypointId != null && minWaypointId.isValid()) {
|
if (minMarkerId != null && minMarkerId.isValid()) {
|
||||||
selection = WaypointsColumns.TRACKID + "=? AND " + WaypointsColumns._ID + ">=?";
|
selection = MarkerColumns.TRACKID + "=? AND " + MarkerColumns._ID + ">=?";
|
||||||
selectionArgs = new String[]{Long.toString(trackId.getId()), Long.toString(minWaypointId.getId())};
|
selectionArgs = new String[]{Long.toString(trackId.getId()), Long.toString(minMarkerId.getId())};
|
||||||
} else {
|
} else {
|
||||||
selection = WaypointsColumns.TRACKID + "=?";
|
selection = MarkerColumns.TRACKID + "=?";
|
||||||
selectionArgs = new String[]{Long.toString(trackId.getId())};
|
selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
}
|
}
|
||||||
return getWaypointCursor(null, selection, selectionArgs, WaypointsColumns._ID, maxWaypoints);
|
return getMarkerCursor(null, selection, selectionArgs, MarkerColumns._ID, maxCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated //TODO Move to test package
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public List<Waypoint> getWaypoints(Track.Id trackId) {
|
public List<Marker> getMarkers(Track.Id trackId) {
|
||||||
ArrayList<Waypoint> waypoints = new ArrayList<>();
|
ArrayList<Marker> markers = new ArrayList<>();
|
||||||
try (Cursor cursor = getWaypointCursor(trackId, null, -1)) {
|
try (Cursor cursor = getMarkerCursor(trackId, null, -1)) {
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
waypoints.add(createWaypoint(cursor));
|
markers.add(createMarker(cursor));
|
||||||
} while (cursor.moveToNext());
|
} while (cursor.moveToNext());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return waypoints;
|
return markers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Loader<Cursor> getWaypointsLoader(Context context, @Nullable Track.Id trackId) {
|
public static Loader<Cursor> getMarkersLoader(Context context, @Nullable Track.Id trackId) {
|
||||||
final String[] PROJECTION = new String[]{WaypointsColumns._ID,
|
final String[] PROJECTION = new String[]{MarkerColumns._ID,
|
||||||
WaypointsColumns.NAME, WaypointsColumns.DESCRIPTION, WaypointsColumns.CATEGORY,
|
MarkerColumns.NAME, MarkerColumns.DESCRIPTION, MarkerColumns.CATEGORY,
|
||||||
WaypointsColumns.TIME, WaypointsColumns.PHOTOURL,
|
MarkerColumns.TIME, MarkerColumns.PHOTOURL,
|
||||||
WaypointsColumns.LATITUDE, WaypointsColumns.LONGITUDE};
|
MarkerColumns.LATITUDE, MarkerColumns.LONGITUDE};
|
||||||
|
|
||||||
if (trackId != null) {
|
if (trackId != null) {
|
||||||
return new CursorLoader(context, WaypointsColumns.CONTENT_URI, PROJECTION,
|
return new CursorLoader(context, MarkerColumns.CONTENT_URI, PROJECTION,
|
||||||
WaypointsColumns.TRACKID + "=?",
|
MarkerColumns.TRACKID + "=?",
|
||||||
new String[]{String.valueOf(trackId.getId())}, null);
|
new String[]{String.valueOf(trackId.getId())}, null);
|
||||||
} else {
|
} else {
|
||||||
return new CursorLoader(context, WaypointsColumns.CONTENT_URI, PROJECTION, null, null, null);
|
return new CursorLoader(context, MarkerColumns.CONTENT_URI, PROJECTION, null, null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Deprecated //TODO Expose information via Cursor
|
||||||
* Gets the number of waypoints for a track.
|
public int getMarkerCount(Track.Id trackId) {
|
||||||
*
|
|
||||||
* @param trackId the track id
|
|
||||||
*/
|
|
||||||
public int getWaypointCount(Track.Id trackId) {
|
|
||||||
if (!trackId.isValid()) {
|
if (!trackId.isValid()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] projection = new String[]{"count(*) AS count"};
|
String[] projection = new String[]{"count(*) AS count"};
|
||||||
String selection = WaypointsColumns.TRACKID + "=?";
|
String selection = MarkerColumns.TRACKID + "=?";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
try (Cursor cursor = contentResolver.query(WaypointsColumns.CONTENT_URI, projection, selection, selectionArgs, WaypointsColumns._ID)) {
|
try (Cursor cursor = contentResolver.query(MarkerColumns.CONTENT_URI, projection, selection, selectionArgs, MarkerColumns._ID)) {
|
||||||
if (cursor == null) {
|
if (cursor == null) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -541,26 +522,17 @@ public class ContentProviderUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserts a waypoint.
|
* @return the content provider URI of the inserted marker.
|
||||||
*
|
|
||||||
* @param waypoint the waypoint
|
|
||||||
* @return the content provider URI of the inserted waypoint.
|
|
||||||
*/
|
*/
|
||||||
public Uri insertWaypoint(@NonNull Waypoint waypoint) {
|
public Uri insertMarker(@NonNull Marker marker) {
|
||||||
waypoint.setId(null);
|
marker.setId(null);
|
||||||
return contentResolver.insert(WaypointsColumns.CONTENT_URI, createContentValues(waypoint));
|
return contentResolver.insert(MarkerColumns.CONTENT_URI, createContentValues(marker));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private void deleteMarkerPhoto(Context context, Marker marker) {
|
||||||
* Delete waypoint's photo if any.
|
if (marker != null && marker.hasPhoto()) {
|
||||||
*
|
Uri uri = marker.getPhotoURI();
|
||||||
* @param context the context object.
|
File file = FileUtils.getPhotoFileIfExists(context, marker.getTrackId(), uri);
|
||||||
* @param waypoint the waypoint object.
|
|
||||||
*/
|
|
||||||
private void deleteWaypointPhoto(Context context, Waypoint waypoint) {
|
|
||||||
if (waypoint != null && waypoint.hasPhoto()) {
|
|
||||||
Uri uri = waypoint.getPhotoURI();
|
|
||||||
File file = FileUtils.getPhotoFileIfExists(context, waypoint.getTrackId(), uri);
|
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
File parent = file.getParentFile();
|
File parent = file.getParentFile();
|
||||||
file.delete();
|
file.delete();
|
||||||
@@ -572,71 +544,67 @@ public class ContentProviderUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates a waypoint.
|
* @param updateMarker the marker with updated data.
|
||||||
* Returns true if successful.
|
* @return true if successful.
|
||||||
*
|
|
||||||
* @param updatedWaypoint the waypoint with updated data.
|
|
||||||
*/
|
*/
|
||||||
public boolean updateWaypoint(Context context, Waypoint updatedWaypoint) {
|
public boolean updateMarker(Context context, Marker updateMarker) {
|
||||||
Waypoint savedWaypoint = getWaypoint(updatedWaypoint.getId());
|
Marker savedMarker = getMarker(updateMarker.getId());
|
||||||
if (!updatedWaypoint.hasPhoto()) {
|
if (!updateMarker.hasPhoto()) {
|
||||||
deleteWaypointPhoto(context, savedWaypoint);
|
deleteMarkerPhoto(context, savedMarker);
|
||||||
}
|
}
|
||||||
int rows = contentResolver.update(WaypointsColumns.CONTENT_URI, createContentValues(updatedWaypoint), WaypointsColumns._ID + "=?", new String[]{Long.toString(updatedWaypoint.getId().getId())});
|
int rows = contentResolver.update(MarkerColumns.CONTENT_URI, createContentValues(updateMarker), MarkerColumns._ID + "=?", new String[]{Long.toString(updateMarker.getId().getId())});
|
||||||
return rows == 1;
|
return rows == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentValues createContentValues(@NonNull Waypoint waypoint) {
|
ContentValues createContentValues(@NonNull Marker marker) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
if (waypoint.getId() != null && waypoint.getId().isValid()) {
|
if (marker.getId() != null && marker.getId().isValid()) {
|
||||||
values.put(WaypointsColumns._ID, waypoint.getId().getId());
|
values.put(MarkerColumns._ID, marker.getId().getId());
|
||||||
}
|
}
|
||||||
values.put(WaypointsColumns.NAME, waypoint.getName());
|
values.put(MarkerColumns.NAME, marker.getName());
|
||||||
values.put(WaypointsColumns.DESCRIPTION, waypoint.getDescription());
|
values.put(MarkerColumns.DESCRIPTION, marker.getDescription());
|
||||||
values.put(WaypointsColumns.CATEGORY, waypoint.getCategory());
|
values.put(MarkerColumns.CATEGORY, marker.getCategory());
|
||||||
values.put(WaypointsColumns.ICON, waypoint.getIcon());
|
values.put(MarkerColumns.ICON, marker.getIcon());
|
||||||
if (waypoint.getTrackId() != null) {
|
if (marker.getTrackId() != null) {
|
||||||
values.put(WaypointsColumns.TRACKID, waypoint.getTrackId().getId());
|
values.put(MarkerColumns.TRACKID, marker.getTrackId().getId());
|
||||||
}
|
}
|
||||||
values.put(WaypointsColumns.LENGTH, waypoint.getLength());
|
values.put(MarkerColumns.LENGTH, marker.getLength());
|
||||||
values.put(WaypointsColumns.DURATION, waypoint.getDuration());
|
values.put(MarkerColumns.DURATION, marker.getDuration());
|
||||||
|
|
||||||
Location location = waypoint.getLocation();
|
Location location = marker.getLocation();
|
||||||
values.put(WaypointsColumns.LONGITUDE, (int) (location.getLongitude() * 1E6));
|
values.put(MarkerColumns.LONGITUDE, (int) (location.getLongitude() * 1E6));
|
||||||
values.put(WaypointsColumns.LATITUDE, (int) (location.getLatitude() * 1E6));
|
values.put(MarkerColumns.LATITUDE, (int) (location.getLatitude() * 1E6));
|
||||||
values.put(WaypointsColumns.TIME, location.getTime());
|
values.put(MarkerColumns.TIME, location.getTime());
|
||||||
if (location.hasAltitude()) {
|
if (location.hasAltitude()) {
|
||||||
values.put(WaypointsColumns.ALTITUDE, location.getAltitude());
|
values.put(MarkerColumns.ALTITUDE, location.getAltitude());
|
||||||
}
|
}
|
||||||
if (location.hasAccuracy()) {
|
if (location.hasAccuracy()) {
|
||||||
values.put(WaypointsColumns.ACCURACY, location.getAccuracy());
|
values.put(MarkerColumns.ACCURACY, location.getAccuracy());
|
||||||
}
|
}
|
||||||
if (location.hasBearing()) {
|
if (location.hasBearing()) {
|
||||||
values.put(WaypointsColumns.BEARING, location.getBearing());
|
values.put(MarkerColumns.BEARING, location.getBearing());
|
||||||
}
|
}
|
||||||
|
|
||||||
values.put(WaypointsColumns.PHOTOURL, waypoint.getPhotoUrl());
|
values.put(MarkerColumns.PHOTOURL, marker.getPhotoUrl());
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a waypoint cursor.
|
|
||||||
*
|
|
||||||
* @param projection the projection
|
* @param projection the projection
|
||||||
* @param selection the selection
|
* @param selection the selection
|
||||||
* @param selectionArgs the selection args
|
* @param selectionArgs the selection args
|
||||||
* @param sortOrder the sort order
|
* @param sortOrder the sort order
|
||||||
* @param maxWaypoints the maximum number of waypoints
|
* @param maxCount the maximum number of markers
|
||||||
*/
|
*/
|
||||||
private Cursor getWaypointCursor(String[] projection, String selection, String[] selectionArgs, String sortOrder, int maxWaypoints) {
|
private Cursor getMarkerCursor(String[] projection, String selection, String[] selectionArgs, String sortOrder, int maxCount) {
|
||||||
if (sortOrder == null) {
|
if (sortOrder == null) {
|
||||||
sortOrder = WaypointsColumns._ID;
|
sortOrder = MarkerColumns._ID;
|
||||||
}
|
}
|
||||||
if (maxWaypoints >= 0) {
|
if (maxCount >= 0) {
|
||||||
sortOrder += " LIMIT " + maxWaypoints;
|
sortOrder += " LIMIT " + maxCount;
|
||||||
}
|
}
|
||||||
return contentResolver.query(WaypointsColumns.CONTENT_URI, projection, selection, selectionArgs, sortOrder);
|
return contentResolver.query(MarkerColumns.CONTENT_URI, projection, selection, selectionArgs, sortOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+18
-18
@@ -33,9 +33,9 @@ import android.util.Log;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link ContentProvider} that handles access to track points, tracks, and waypoints tables.
|
* A {@link ContentProvider} that handles access to track points, tracks, and waypoints tables.
|
||||||
@@ -61,9 +61,9 @@ public class CustomContentProvider extends ContentProvider {
|
|||||||
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, TracksColumns.CONTENT_URI.getPath(), UrlType.TRACKS.ordinal());
|
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, TracksColumns.CONTENT_URI.getPath(), UrlType.TRACKS.ordinal());
|
||||||
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, TracksColumns.CONTENT_URI.getPath() + "/*", UrlType.TRACKS_BY_ID.ordinal());
|
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, TracksColumns.CONTENT_URI.getPath() + "/*", UrlType.TRACKS_BY_ID.ordinal());
|
||||||
|
|
||||||
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, WaypointsColumns.CONTENT_URI.getPath(), UrlType.WAYPOINTS.ordinal());
|
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, MarkerColumns.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, MarkerColumns.CONTENT_URI.getPath() + "/#", UrlType.WAYPOINTS_BY_ID.ordinal());
|
||||||
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, WaypointsColumns.CONTENT_URI_BY_TRACKID.getPath() + "/*", UrlType.WAYPOINTS_BY_TRACKID.ordinal());
|
uriMatcher.addURI(ContentProviderUtils.AUTHORITY_PACKAGE, MarkerColumns.CONTENT_URI_BY_TRACKID.getPath() + "/*", UrlType.WAYPOINTS_BY_TRACKID.ordinal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -101,7 +101,7 @@ public class CustomContentProvider extends ContentProvider {
|
|||||||
shouldVacuum = true;
|
shouldVacuum = true;
|
||||||
break;
|
break;
|
||||||
case WAYPOINTS:
|
case WAYPOINTS:
|
||||||
table = WaypointsColumns.TABLE_NAME;
|
table = MarkerColumns.TABLE_NAME;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unknown URL " + url);
|
throw new IllegalArgumentException("Unknown URL " + url);
|
||||||
@@ -139,10 +139,10 @@ public class CustomContentProvider extends ContentProvider {
|
|||||||
case TRACKS_BY_ID:
|
case TRACKS_BY_ID:
|
||||||
return TracksColumns.CONTENT_ITEMTYPE;
|
return TracksColumns.CONTENT_ITEMTYPE;
|
||||||
case WAYPOINTS:
|
case WAYPOINTS:
|
||||||
return WaypointsColumns.CONTENT_TYPE;
|
return MarkerColumns.CONTENT_TYPE;
|
||||||
case WAYPOINTS_BY_ID:
|
case WAYPOINTS_BY_ID:
|
||||||
case WAYPOINTS_BY_TRACKID:
|
case WAYPOINTS_BY_TRACKID:
|
||||||
return WaypointsColumns.CONTENT_ITEMTYPE;
|
return MarkerColumns.CONTENT_ITEMTYPE;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unknown URL " + url);
|
throw new IllegalArgumentException("Unknown URL " + url);
|
||||||
}
|
}
|
||||||
@@ -214,16 +214,16 @@ public class CustomContentProvider extends ContentProvider {
|
|||||||
queryBuilder.appendWhere(TracksColumns._ID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")");
|
queryBuilder.appendWhere(TracksColumns._ID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")");
|
||||||
break;
|
break;
|
||||||
case WAYPOINTS:
|
case WAYPOINTS:
|
||||||
queryBuilder.setTables(WaypointsColumns.TABLE_NAME);
|
queryBuilder.setTables(MarkerColumns.TABLE_NAME);
|
||||||
sortOrder = sort != null ? sort : WaypointsColumns.DEFAULT_SORT_ORDER;
|
sortOrder = sort != null ? sort : MarkerColumns.DEFAULT_SORT_ORDER;
|
||||||
break;
|
break;
|
||||||
case WAYPOINTS_BY_ID:
|
case WAYPOINTS_BY_ID:
|
||||||
queryBuilder.setTables(WaypointsColumns.TABLE_NAME);
|
queryBuilder.setTables(MarkerColumns.TABLE_NAME);
|
||||||
queryBuilder.appendWhere(WaypointsColumns._ID + "=" + ContentUris.parseId(url));
|
queryBuilder.appendWhere(MarkerColumns._ID + "=" + ContentUris.parseId(url));
|
||||||
break;
|
break;
|
||||||
case WAYPOINTS_BY_TRACKID:
|
case WAYPOINTS_BY_TRACKID:
|
||||||
queryBuilder.setTables(WaypointsColumns.TABLE_NAME);
|
queryBuilder.setTables(MarkerColumns.TABLE_NAME);
|
||||||
queryBuilder.appendWhere(WaypointsColumns.TRACKID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")");
|
queryBuilder.appendWhere(MarkerColumns.TRACKID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Unknown url " + url);
|
throw new IllegalArgumentException("Unknown url " + url);
|
||||||
@@ -262,12 +262,12 @@ public class CustomContentProvider extends ContentProvider {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WAYPOINTS:
|
case WAYPOINTS:
|
||||||
table = WaypointsColumns.TABLE_NAME;
|
table = MarkerColumns.TABLE_NAME;
|
||||||
whereClause = where;
|
whereClause = where;
|
||||||
break;
|
break;
|
||||||
case WAYPOINTS_BY_ID:
|
case WAYPOINTS_BY_ID:
|
||||||
table = WaypointsColumns.TABLE_NAME;
|
table = MarkerColumns.TABLE_NAME;
|
||||||
whereClause = WaypointsColumns._ID + "=" + ContentUris.parseId(url);
|
whereClause = MarkerColumns._ID + "=" + ContentUris.parseId(url);
|
||||||
if (!TextUtils.isEmpty(where)) {
|
if (!TextUtils.isEmpty(where)) {
|
||||||
whereClause += " AND (" + where + ")";
|
whereClause += " AND (" + where + ")";
|
||||||
}
|
}
|
||||||
@@ -368,9 +368,9 @@ public class CustomContentProvider extends ContentProvider {
|
|||||||
* @param contentValues the content values
|
* @param contentValues the content values
|
||||||
*/
|
*/
|
||||||
private Uri insertWaypoint(Uri url, ContentValues contentValues) {
|
private Uri insertWaypoint(Uri url, ContentValues contentValues) {
|
||||||
long rowId = db.insert(WaypointsColumns.TABLE_NAME, WaypointsColumns._ID, contentValues);
|
long rowId = db.insert(MarkerColumns.TABLE_NAME, MarkerColumns._ID, contentValues);
|
||||||
if (rowId >= 0) {
|
if (rowId >= 0) {
|
||||||
return ContentUris.appendId(WaypointsColumns.CONTENT_URI.buildUpon(), rowId).build();
|
return ContentUris.appendId(MarkerColumns.CONTENT_URI.buildUpon(), rowId).build();
|
||||||
}
|
}
|
||||||
throw new SQLException("Failed to insert a waypoint " + url);
|
throw new SQLException("Failed to insert a waypoint " + url);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.util.UUIDUtils;
|
import de.dennisguse.opentracks.util.UUIDUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,8 +52,8 @@ public class CustomSQLiteOpenHelper extends SQLiteOpenHelper {
|
|||||||
db.execSQL(TracksColumns.CREATE_TABLE);
|
db.execSQL(TracksColumns.CREATE_TABLE);
|
||||||
db.execSQL(TracksColumns.CREATE_TABLE_INDEX);
|
db.execSQL(TracksColumns.CREATE_TABLE_INDEX);
|
||||||
|
|
||||||
db.execSQL(WaypointsColumns.CREATE_TABLE);
|
db.execSQL(MarkerColumns.CREATE_TABLE);
|
||||||
db.execSQL(WaypointsColumns.CREATE_TABLE_INDEX);
|
db.execSQL(MarkerColumns.CREATE_TABLE_INDEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ import de.dennisguse.opentracks.chart.ChartPoint;
|
|||||||
import de.dennisguse.opentracks.chart.ChartView;
|
import de.dennisguse.opentracks.chart.ChartView;
|
||||||
import de.dennisguse.opentracks.content.TrackDataHub;
|
import de.dennisguse.opentracks.content.TrackDataHub;
|
||||||
import de.dennisguse.opentracks.content.TrackDataListener;
|
import de.dennisguse.opentracks.content.TrackDataListener;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
||||||
import de.dennisguse.opentracks.util.LocationUtils;
|
import de.dennisguse.opentracks.util.LocationUtils;
|
||||||
@@ -249,7 +249,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNewWaypoint(Waypoint waypoint) {
|
public void onNewWaypoint(Marker waypoint) {
|
||||||
if (isResumed() && waypoint != null && LocationUtils.isValidLocation(waypoint.getLocation())) {
|
if (isResumed() && waypoint != null && LocationUtils.isValidLocation(waypoint.getLocation())) {
|
||||||
chartView.addWaypoint(waypoint);
|
chartView.addWaypoint(waypoint);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import androidx.fragment.app.FragmentActivity;
|
|||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.util.DialogUtils;
|
import de.dennisguse.opentracks.util.DialogUtils;
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ public class DeleteMarkerDialogFragment extends DialogFragment {
|
|||||||
|
|
||||||
private DeleteMarkerCaller caller;
|
private DeleteMarkerCaller caller;
|
||||||
|
|
||||||
public static void showDialog(FragmentManager fragmentManager, Waypoint.Id... waypointIds) {
|
public static void showDialog(FragmentManager fragmentManager, Marker.Id... waypointIds) {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putParcelableArray(KEY_MARKER_IDS, waypointIds);
|
bundle.putParcelableArray(KEY_MARKER_IDS, waypointIds);
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ public class DeleteMarkerDialogFragment extends DialogFragment {
|
|||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
final Waypoint.Id[] waypointIds = (Waypoint.Id[]) getArguments().getParcelableArray(KEY_MARKER_IDS);
|
final Marker.Id[] waypointIds = (Marker.Id[]) getArguments().getParcelableArray(KEY_MARKER_IDS);
|
||||||
|
|
||||||
final FragmentActivity fragmentActivity = getActivity();
|
final FragmentActivity fragmentActivity = getActivity();
|
||||||
int titleId;
|
int titleId;
|
||||||
@@ -79,8 +79,8 @@ public class DeleteMarkerDialogFragment extends DialogFragment {
|
|||||||
return DialogUtils.createConfirmationDialog(
|
return DialogUtils.createConfirmationDialog(
|
||||||
fragmentActivity, titleId, getString(messageId), (dialog, which) -> new Thread(() -> {
|
fragmentActivity, titleId, getString(messageId), (dialog, which) -> new Thread(() -> {
|
||||||
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(fragmentActivity);
|
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(fragmentActivity);
|
||||||
for (Waypoint.Id waypointId : waypointIds) {
|
for (Marker.Id waypointId : waypointIds) {
|
||||||
contentProviderUtils.deleteWaypoint(getContext(), waypointId);
|
contentProviderUtils.deleteMarker(getContext(), waypointId);
|
||||||
}
|
}
|
||||||
caller.onDeleteMarkerDone();
|
caller.onDeleteMarkerDone();
|
||||||
}).start());
|
}).start());
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ import androidx.fragment.app.FragmentActivity;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.MarkerEditActivity;
|
import de.dennisguse.opentracks.MarkerEditActivity;
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.util.IntentUtils;
|
import de.dennisguse.opentracks.util.IntentUtils;
|
||||||
import de.dennisguse.opentracks.util.ListItemUtils;
|
import de.dennisguse.opentracks.util.ListItemUtils;
|
||||||
@@ -67,7 +67,7 @@ public class MarkerDetailFragment extends Fragment {
|
|||||||
private ImageView photoView;
|
private ImageView photoView;
|
||||||
private ImageView textGradient;
|
private ImageView textGradient;
|
||||||
private LinearLayout waypointInfo;
|
private LinearLayout waypointInfo;
|
||||||
private Waypoint waypoint;
|
private Marker waypoint;
|
||||||
private final Runnable hideText = new Runnable() {
|
private final Runnable hideText = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -93,7 +93,7 @@ public class MarkerDetailFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static MarkerDetailFragment newInstance(Waypoint.Id waypointId) {
|
public static MarkerDetailFragment newInstance(Marker.Id waypointId) {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putParcelable(KEY_MARKER_ID, waypointId);
|
bundle.putParcelable(KEY_MARKER_ID, waypointId);
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ public class MarkerDetailFragment extends Fragment {
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
Waypoint.Id waypointId = getArguments().getParcelable(KEY_MARKER_ID);
|
Marker.Id waypointId = getArguments().getParcelable(KEY_MARKER_ID);
|
||||||
if (waypointId == null) {
|
if (waypointId == null) {
|
||||||
Log.d(TAG, "invalid marker id");
|
Log.d(TAG, "invalid marker id");
|
||||||
getParentFragmentManager().popBackStack();
|
getParentFragmentManager().popBackStack();
|
||||||
@@ -182,7 +182,7 @@ public class MarkerDetailFragment extends Fragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
Waypoint.Id waypointId = getArguments().getParcelable(KEY_MARKER_ID); //TODO Should only happen in onCreate?
|
Marker.Id waypointId = getArguments().getParcelable(KEY_MARKER_ID); //TODO Should only happen in onCreate?
|
||||||
FragmentActivity fragmentActivity = getActivity();
|
FragmentActivity fragmentActivity = getActivity();
|
||||||
Intent intent;
|
Intent intent;
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
@@ -216,7 +216,7 @@ public class MarkerDetailFragment extends Fragment {
|
|||||||
*/
|
*/
|
||||||
private void updateWaypoint(boolean refresh) {
|
private void updateWaypoint(boolean refresh) {
|
||||||
if (refresh || waypoint == null) {
|
if (refresh || waypoint == null) {
|
||||||
waypoint = contentProviderUtils.getWaypoint(getArguments().getParcelable(KEY_MARKER_ID)); //TODO Should only happen in onCreate?
|
waypoint = contentProviderUtils.getMarker(getArguments().getParcelable(KEY_MARKER_ID)); //TODO Should only happen in onCreate?
|
||||||
if (waypoint == null) {
|
if (waypoint == null) {
|
||||||
Log.d(TAG, "waypoint is null");
|
Log.d(TAG, "waypoint is null");
|
||||||
getParentFragmentManager().popBackStack();
|
getParentFragmentManager().popBackStack();
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ import de.dennisguse.opentracks.R;
|
|||||||
import de.dennisguse.opentracks.TrackRecordingActivity;
|
import de.dennisguse.opentracks.TrackRecordingActivity;
|
||||||
import de.dennisguse.opentracks.content.TrackDataHub;
|
import de.dennisguse.opentracks.content.TrackDataHub;
|
||||||
import de.dennisguse.opentracks.content.TrackDataListener;
|
import de.dennisguse.opentracks.content.TrackDataListener;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.sensor.SensorDataCycling;
|
import de.dennisguse.opentracks.content.sensor.SensorDataCycling;
|
||||||
import de.dennisguse.opentracks.content.sensor.SensorDataHeartRate;
|
import de.dennisguse.opentracks.content.sensor.SensorDataHeartRate;
|
||||||
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
||||||
@@ -355,7 +355,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNewWaypoint(Waypoint wpt) {
|
public void onNewWaypoint(Marker wpt) {
|
||||||
// We don't care.
|
// We don't care.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ import androidx.annotation.NonNull;
|
|||||||
|
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
||||||
import de.dennisguse.opentracks.util.LocationUtils;
|
import de.dennisguse.opentracks.util.LocationUtils;
|
||||||
@@ -98,7 +98,7 @@ public class FileTrackExporter implements TrackExporter {
|
|||||||
* I am leaving the number of waypoints very high which should not be a problem, because we don't try to load them into objects all at the same time.
|
* I am leaving the number of waypoints very high which should not be a problem, because we don't try to load them into objects all at the same time.
|
||||||
*/
|
*/
|
||||||
boolean hasWaypoints = false;
|
boolean hasWaypoints = false;
|
||||||
try (Cursor cursor = contentProviderUtils.getWaypointCursor(track.getId(), null, ContentProviderUtils.MAX_LOADED_WAYPOINTS_POINTS)) {
|
try (Cursor cursor = contentProviderUtils.getMarkerCursor(track.getId(), null, ContentProviderUtils.MAX_LOADED_MARKERS)) {
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
for (int i = 0; i < cursor.getCount(); i++) {
|
for (int i = 0; i < cursor.getCount(); i++) {
|
||||||
if (Thread.interrupted()) {
|
if (Thread.interrupted()) {
|
||||||
@@ -108,7 +108,7 @@ public class FileTrackExporter implements TrackExporter {
|
|||||||
trackWriter.writeBeginWaypoints(track);
|
trackWriter.writeBeginWaypoints(track);
|
||||||
hasWaypoints = true;
|
hasWaypoints = true;
|
||||||
}
|
}
|
||||||
Waypoint waypoint = contentProviderUtils.createWaypoint(cursor);
|
Marker waypoint = contentProviderUtils.createMarker(cursor);
|
||||||
trackWriter.writeWaypoint(waypoint);
|
trackWriter.writeWaypoint(waypoint);
|
||||||
|
|
||||||
cursor.moveToNext();
|
cursor.moveToNext();
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ import java.io.PrintWriter;
|
|||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.util.StringUtils;
|
import de.dennisguse.opentracks.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -130,7 +130,7 @@ public class GpxTrackWriter implements TrackWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeWaypoint(Waypoint waypoint) {
|
public void writeWaypoint(Marker waypoint) {
|
||||||
if (printWriter != null) {
|
if (printWriter != null) {
|
||||||
Location location = waypoint.getLocation();
|
Location location = waypoint.getLocation();
|
||||||
printWriter.println("<wpt " + formatLocation(location) + ">");
|
printWriter.println("<wpt " + formatLocation(location) + ">");
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ import java.util.List;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.content.DescriptionGenerator;
|
import de.dennisguse.opentracks.content.DescriptionGenerator;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.util.FileUtils;
|
import de.dennisguse.opentracks.util.FileUtils;
|
||||||
import de.dennisguse.opentracks.util.StringUtils;
|
import de.dennisguse.opentracks.util.StringUtils;
|
||||||
@@ -163,7 +163,7 @@ public class KmlTrackWriter implements TrackWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeWaypoint(Waypoint waypoint) {
|
public void writeWaypoint(Marker waypoint) {
|
||||||
if (printWriter != null && exportTrackDetail) {
|
if (printWriter != null && exportTrackDetail) {
|
||||||
boolean existsPhoto = FileUtils.getPhotoFileIfExists(context, waypoint.getTrackId(), waypoint.getPhotoURI()) != null;
|
boolean existsPhoto = FileUtils.getPhotoFileIfExists(context, waypoint.getTrackId(), waypoint.getPhotoURI()) != null;
|
||||||
if (waypoint.hasPhoto() && exportPhotos && existsPhoto) {
|
if (waypoint.hasPhoto() && exportPhotos && existsPhoto) {
|
||||||
@@ -335,7 +335,7 @@ public class KmlTrackWriter implements TrackWriter {
|
|||||||
* @param waypoint Waypoint object.
|
* @param waypoint Waypoint object.
|
||||||
* @param heading the heading.
|
* @param heading the heading.
|
||||||
*/
|
*/
|
||||||
private void writePhotoOverlay(Waypoint waypoint, float heading) {
|
private void writePhotoOverlay(Marker waypoint, float heading) {
|
||||||
if (exportTrackDetail) {
|
if (exportTrackDetail) {
|
||||||
printWriter.println("<PhotoOverlay>");
|
printWriter.println("<PhotoOverlay>");
|
||||||
printWriter.println("<name>" + StringUtils.formatCData(waypoint.getName()) + "</name>");
|
printWriter.println("<name>" + StringUtils.formatCData(waypoint.getName()) + "</name>");
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ import java.io.OutputStream;
|
|||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.util.FileUtils;
|
import de.dennisguse.opentracks.util.FileUtils;
|
||||||
|
|
||||||
@@ -99,13 +99,13 @@ public class KmzTrackExporter implements TrackExporter {
|
|||||||
|
|
||||||
private void addImages(Context context, Track[] tracks, ZipOutputStream zipOutputStream) throws InterruptedException, IOException {
|
private void addImages(Context context, Track[] tracks, ZipOutputStream zipOutputStream) throws InterruptedException, IOException {
|
||||||
for (Track track : tracks) {
|
for (Track track : tracks) {
|
||||||
try (Cursor cursor = contentProviderUtils.getWaypointCursor(track.getId(), null, -1)) {
|
try (Cursor cursor = contentProviderUtils.getMarkerCursor(track.getId(), null, -1)) {
|
||||||
if (cursor != null && cursor.moveToFirst()) {
|
if (cursor != null && cursor.moveToFirst()) {
|
||||||
for (int i = 0; i < cursor.getCount(); i++) {
|
for (int i = 0; i < cursor.getCount(); i++) {
|
||||||
if (Thread.interrupted()) {
|
if (Thread.interrupted()) {
|
||||||
throw new InterruptedException();
|
throw new InterruptedException();
|
||||||
}
|
}
|
||||||
Waypoint waypoint = contentProviderUtils.createWaypoint(cursor);
|
Marker waypoint = contentProviderUtils.createMarker(cursor);
|
||||||
if (waypoint.hasPhoto()) {
|
if (waypoint.hasPhoto()) {
|
||||||
Uri uriPhoto = waypoint.getPhotoURI();
|
Uri uriPhoto = waypoint.getPhotoURI();
|
||||||
boolean existsPhoto = FileUtils.getPhotoFileIfExists(context, track.getId(), uriPhoto) != null;
|
boolean existsPhoto = FileUtils.getPhotoFileIfExists(context, track.getId(), uriPhoto) != null;
|
||||||
@@ -121,7 +121,7 @@ public class KmzTrackExporter implements TrackExporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addImage(Context context, ZipOutputStream zipOutputStream, Uri uri, Waypoint waypoint) throws IOException {
|
private void addImage(Context context, ZipOutputStream zipOutputStream, Uri uri, Marker waypoint) throws IOException {
|
||||||
try (InputStream inputStream = context.getContentResolver().openInputStream(uri)) {
|
try (InputStream inputStream = context.getContentResolver().openInputStream(uri)) {
|
||||||
ZipEntry zipEntry = new ZipEntry(buildKmzImageFilePath(waypoint));
|
ZipEntry zipEntry = new ZipEntry(buildKmzImageFilePath(waypoint));
|
||||||
zipOutputStream.putNextEntry(zipEntry);
|
zipOutputStream.putNextEntry(zipEntry);
|
||||||
@@ -150,7 +150,7 @@ public class KmzTrackExporter implements TrackExporter {
|
|||||||
*
|
*
|
||||||
* @param waypoint Waypoint object.
|
* @param waypoint Waypoint object.
|
||||||
*/
|
*/
|
||||||
public static String buildKmzImageFilePath(Waypoint waypoint) {
|
public static String buildKmzImageFilePath(Marker waypoint) {
|
||||||
String ext = FileUtils.getExtension(waypoint.getPhotoUrl());
|
String ext = FileUtils.getExtension(waypoint.getPhotoUrl());
|
||||||
ext = ext == null ? "" : "." + ext;
|
ext = ext == null ? "" : "." + ext;
|
||||||
return KMZ_IMAGES_DIR + File.separatorChar + FileUtils.sanitizeFileName(waypoint.getId() + ext);
|
return KMZ_IMAGES_DIR + File.separatorChar + FileUtils.sanitizeFileName(waypoint.getId() + ext);
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ package de.dennisguse.opentracks.io.file.exporter;
|
|||||||
|
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for writing tracks to a file. The expected sequence of calls is:
|
* Interface for writing tracks to a file. The expected sequence of calls is:
|
||||||
@@ -30,7 +30,7 @@ import de.dennisguse.opentracks.content.data.Waypoint;
|
|||||||
* For each track:
|
* For each track:
|
||||||
* {@link #writeBeginWaypoints(Track)}
|
* {@link #writeBeginWaypoints(Track)}
|
||||||
* For each waypoint:
|
* For each waypoint:
|
||||||
* {@link #writeWaypoint(Waypoint)}
|
* {@link #writeWaypoint(Marker)}
|
||||||
* {@link #writeEndWaypoints()}
|
* {@link #writeEndWaypoints()}
|
||||||
* {@link #writeMultiTrackBegin()}
|
* {@link #writeMultiTrackBegin()}
|
||||||
* For each track:
|
* For each track:
|
||||||
@@ -91,7 +91,7 @@ public interface TrackWriter {
|
|||||||
*
|
*
|
||||||
* @param waypoint the waypoint
|
* @param waypoint the waypoint
|
||||||
*/
|
*/
|
||||||
void writeWaypoint(Waypoint waypoint);
|
void writeWaypoint(Marker waypoint);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes the beginning of the tracks.
|
* Writes the beginning of the tracks.
|
||||||
|
|||||||
+6
-6
@@ -39,9 +39,9 @@ import javax.xml.parsers.SAXParser;
|
|||||||
import javax.xml.parsers.SAXParserFactory;
|
import javax.xml.parsers.SAXParserFactory;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
||||||
@@ -70,7 +70,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
|
|
||||||
private Track.Id importTrackId;
|
private Track.Id importTrackId;
|
||||||
private final List<Track.Id> trackIds = new ArrayList<>();
|
private final List<Track.Id> trackIds = new ArrayList<>();
|
||||||
private final List<Waypoint> waypoints = new ArrayList<>();
|
private final List<Marker> waypoints = new ArrayList<>();
|
||||||
|
|
||||||
// The current element content
|
// The current element content
|
||||||
//TODO Should be made private and getter be used by child classes.
|
//TODO Should be made private and getter be used by child classes.
|
||||||
@@ -160,7 +160,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
}
|
}
|
||||||
|
|
||||||
int waypointPosition = -1;
|
int waypointPosition = -1;
|
||||||
Waypoint waypoint = null;
|
Marker waypoint = null;
|
||||||
TrackPoint trackPoint = null;
|
TrackPoint trackPoint = null;
|
||||||
TrackStatisticsUpdater trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics().getStartTime_ms());
|
TrackStatisticsUpdater trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics().getStartTime_ms());
|
||||||
// TODO Should not be necessary anymore?
|
// TODO Should not be necessary anymore?
|
||||||
@@ -209,8 +209,8 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
long duration = trackStatisticsUpdater.getTrackStatistics().getTotalTime();
|
long duration = trackStatisticsUpdater.getTrackStatistics().getTotalTime();
|
||||||
|
|
||||||
// Insert waypoint
|
// Insert waypoint
|
||||||
Waypoint newWaypoint = new Waypoint(waypoint.getName(), waypointDescription, waypoint.getCategory(), icon, track.getId(), length, duration, trackPoint.getLocation(), waypoint.getPhotoUrl());
|
Marker newWaypoint = new Marker(waypoint.getName(), waypointDescription, waypoint.getCategory(), icon, track.getId(), length, duration, trackPoint.getLocation(), waypoint.getPhotoUrl());
|
||||||
contentProviderUtils.insertWaypoint(newWaypoint);
|
contentProviderUtils.insertMarker(newWaypoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the next waypoint
|
// Load the next waypoint
|
||||||
@@ -314,7 +314,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
if (!LocationUtils.isValidLocation(trackPoint.getLocation())) {
|
if (!LocationUtils.isValidLocation(trackPoint.getLocation())) {
|
||||||
throw new SAXException(createErrorMessage("Invalid location detected: " + trackPoint));
|
throw new SAXException(createErrorMessage("Invalid location detected: " + trackPoint));
|
||||||
}
|
}
|
||||||
Waypoint waypoint = new Waypoint(trackPoint.getLocation());
|
Marker waypoint = new Marker(trackPoint.getLocation());
|
||||||
|
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
waypoint.setName(name);
|
waypoint.setName(name);
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ import java.util.List;
|
|||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.io.file.exporter.KmzTrackExporter;
|
import de.dennisguse.opentracks.io.file.exporter.KmzTrackExporter;
|
||||||
import de.dennisguse.opentracks.util.FileUtils;
|
import de.dennisguse.opentracks.util.FileUtils;
|
||||||
@@ -200,9 +200,9 @@ public class KmzTrackImporter implements TrackImporter {
|
|||||||
if (!trackId.isValid()) {
|
if (!trackId.isValid()) {
|
||||||
// 1.- Gets all photo names in the waypoints of the track identified by id.
|
// 1.- Gets all photo names in the waypoints of the track identified by id.
|
||||||
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context);
|
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context);
|
||||||
List<Waypoint> waypoints = contentProviderUtils.getWaypoints(trackId);
|
List<Marker> waypoints = contentProviderUtils.getMarkers(trackId);
|
||||||
List<String> photosName = new ArrayList<>();
|
List<String> photosName = new ArrayList<>();
|
||||||
for (Waypoint w : waypoints) {
|
for (Marker w : waypoints) {
|
||||||
if (w.hasPhoto()) {
|
if (w.hasPhoto()) {
|
||||||
String photoUrl = Uri.decode(w.getPhotoUrl());
|
String photoUrl = Uri.decode(w.getPhotoUrl());
|
||||||
photosName.add(photoUrl.substring(photoUrl.lastIndexOf(File.separatorChar) + 1));
|
photosName.add(photoUrl.substring(photoUrl.lastIndexOf(File.separatorChar) + 1));
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ import java.util.List;
|
|||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.TrackListActivity;
|
import de.dennisguse.opentracks.TrackListActivity;
|
||||||
import de.dennisguse.opentracks.TrackRecordingActivity;
|
import de.dennisguse.opentracks.TrackRecordingActivity;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.CustomContentProvider;
|
import de.dennisguse.opentracks.content.provider.CustomContentProvider;
|
||||||
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
||||||
@@ -230,13 +230,13 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
*
|
*
|
||||||
* @return the waypoint id
|
* @return the waypoint id
|
||||||
*/
|
*/
|
||||||
public Waypoint.Id insertWaypoint(String name, String category, String description, String photoUrl) {
|
public Marker.Id insertWaypoint(String name, String category, String description, String photoUrl) {
|
||||||
if (!isRecording() || isPaused()) {
|
if (!isRecording() || isPaused()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name == null) {
|
if (name == null) {
|
||||||
int nextWaypointNumber = contentProviderUtils.getNextWaypointNumber(recordingTrackId);
|
int nextWaypointNumber = contentProviderUtils.getNextMarkerNumber(recordingTrackId);
|
||||||
if (nextWaypointNumber == -1) {
|
if (nextWaypointNumber == -1) {
|
||||||
nextWaypointNumber = 1;
|
nextWaypointNumber = 1;
|
||||||
}
|
}
|
||||||
@@ -259,9 +259,9 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
long duration = stats.getTotalTime();
|
long duration = stats.getTotalTime();
|
||||||
|
|
||||||
// Insert waypoint
|
// Insert waypoint
|
||||||
Waypoint waypoint = new Waypoint(name, description, category, icon, recordingTrackId, length, duration, trackPoint.getLocation(), photoUrl);
|
Marker waypoint = new Marker(name, description, category, icon, recordingTrackId, length, duration, trackPoint.getLocation(), photoUrl);
|
||||||
Uri uri = contentProviderUtils.insertWaypoint(waypoint);
|
Uri uri = contentProviderUtils.insertMarker(waypoint);
|
||||||
return new Waypoint.Id(ContentUris.parseId(uri));
|
return new Marker.Id(ContentUris.parseId(uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ package de.dennisguse.opentracks.services;
|
|||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
||||||
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
||||||
import de.dennisguse.opentracks.services.sensors.BluetoothRemoteSensorManager;
|
import de.dennisguse.opentracks.services.sensors.BluetoothRemoteSensorManager;
|
||||||
@@ -90,7 +90,7 @@ class TrackRecordingServiceBinder extends android.os.Binder implements TrackReco
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Waypoint.Id insertWaypoint(String name, String category, String description, String photoUrl) {
|
public Marker.Id insertWaypoint(String name, String category, String description, String photoUrl) {
|
||||||
return trackRecordingService.insertWaypoint(name, category, description, photoUrl);
|
return trackRecordingService.insertWaypoint(name, category, description, photoUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -31,8 +31,8 @@ import androidx.annotation.NonNull;
|
|||||||
import de.dennisguse.opentracks.BuildConfig;
|
import de.dennisguse.opentracks.BuildConfig;
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.TrackEditActivity;
|
import de.dennisguse.opentracks.TrackEditActivity;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.util.IntentUtils;
|
import de.dennisguse.opentracks.util.IntentUtils;
|
||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
import de.dennisguse.opentracks.util.PreferencesUtils;
|
||||||
|
|
||||||
@@ -181,13 +181,13 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
|
|||||||
*
|
*
|
||||||
* @return the id of the marker or null if none could be created.
|
* @return the id of the marker or null if none could be created.
|
||||||
*/
|
*/
|
||||||
public Waypoint.Id addMarker(Context context, String name, String category, String description, String photoUrl) {
|
public Marker.Id addMarker(Context context, String name, String category, String description, String photoUrl) {
|
||||||
TrackRecordingServiceInterface trackRecordingService = getServiceIfBound();
|
TrackRecordingServiceInterface trackRecordingService = getServiceIfBound();
|
||||||
if (trackRecordingService == null) {
|
if (trackRecordingService == null) {
|
||||||
Log.d(TAG, "Unable to add marker, no track recording service");
|
Log.d(TAG, "Unable to add marker, no track recording service");
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
Waypoint.Id waypoint = trackRecordingService.insertWaypoint(name, category, description, photoUrl);
|
Marker.Id waypoint = trackRecordingService.insertWaypoint(name, category, description, photoUrl);
|
||||||
if (waypoint != null) {
|
if (waypoint != null) {
|
||||||
Toast.makeText(context, R.string.marker_add_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, R.string.marker_add_success, Toast.LENGTH_SHORT).show();
|
||||||
return waypoint;
|
return waypoint;
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ package de.dennisguse.opentracks.services;
|
|||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPoint;
|
import de.dennisguse.opentracks.content.data.TrackPoint;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
||||||
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
||||||
import de.dennisguse.opentracks.services.sensors.BluetoothRemoteSensorManager;
|
import de.dennisguse.opentracks.services.sensors.BluetoothRemoteSensorManager;
|
||||||
@@ -93,7 +93,7 @@ public interface TrackRecordingServiceInterface {
|
|||||||
*
|
*
|
||||||
* @return the ID of the inserted waypoint
|
* @return the ID of the inserted waypoint
|
||||||
*/
|
*/
|
||||||
Waypoint.Id insertWaypoint(String name, String category, String description, String photoUrl);
|
Marker.Id insertWaypoint(String name, String category, String description, String photoUrl);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current sensor data. Returns null if there is no data.
|
* Gets the current sensor data. Returns null if there is no data.
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
import de.dennisguse.opentracks.content.data.TrackPointsColumns;
|
||||||
import de.dennisguse.opentracks.content.data.TracksColumns;
|
import de.dennisguse.opentracks.content.data.TracksColumns;
|
||||||
import de.dennisguse.opentracks.content.data.WaypointsColumns;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -55,7 +55,7 @@ public class IntentDashboardUtils {
|
|||||||
ArrayList<Uri> uris = new ArrayList<>();
|
ArrayList<Uri> uris = new ArrayList<>();
|
||||||
uris.add(TRACK_URI_INDEX, Uri.withAppendedPath(TracksColumns.CONTENT_URI, trackIdList));
|
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(TRACKPOINTS_URI_INDEX, Uri.withAppendedPath(TrackPointsColumns.CONTENT_URI_BY_TRACKID, trackIdList));
|
||||||
uris.add(WAYPOINTS_URI_INDEX, Uri.withAppendedPath(WaypointsColumns.CONTENT_URI_BY_TRACKID, trackIdList));
|
uris.add(WAYPOINTS_URI_INDEX, Uri.withAppendedPath(MarkerColumns.CONTENT_URI_BY_TRACKID, trackIdList));
|
||||||
|
|
||||||
Intent intent = new Intent(ACTION_DASHBOARD);
|
Intent intent = new Intent(ACTION_DASHBOARD);
|
||||||
intent.putParcelableArrayListExtra(ACTION_DASHBOARD_PAYLOAD, uris);
|
intent.putParcelableArrayListExtra(ACTION_DASHBOARD_PAYLOAD, uris);
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ import java.util.Date;
|
|||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.content.DescriptionGenerator;
|
import de.dennisguse.opentracks.content.DescriptionGenerator;
|
||||||
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
import de.dennisguse.opentracks.content.data.Track;
|
||||||
import de.dennisguse.opentracks.content.data.Waypoint;
|
|
||||||
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.ShareContentProvider;
|
import de.dennisguse.opentracks.content.provider.ShareContentProvider;
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ public class IntentUtils {
|
|||||||
.putExtra(Intent.EXTRA_TEXT, context.getString(R.string.share_image_body));
|
.putExtra(Intent.EXTRA_TEXT, context.getString(R.string.share_image_body));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showCoordinateOnMap(Context context, Waypoint waypoint) {
|
public static void showCoordinateOnMap(Context context, Marker waypoint) {
|
||||||
showCoordinateOnMap(context, waypoint.getLocation().getLatitude(), waypoint.getLocation().getLongitude(), waypoint.getName());
|
showCoordinateOnMap(context, waypoint.getLocation().getLatitude(), waypoint.getLocation().getLongitude(), waypoint.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user