forked from upstream-mirrors/OpenTracks
Track.Id must now always be valid (if present).
This commit is contained in:
+1
-1
@@ -328,7 +328,7 @@ public class TrackRecordingServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addTrack(Track track, boolean isRecording) {
|
private void addTrack(Track track, boolean isRecording) {
|
||||||
assertTrue(track.getId().isValid());
|
assertNotNull(track.getId());
|
||||||
contentProviderUtils.insertTrack(track);
|
contentProviderUtils.insertTrack(track);
|
||||||
assertEquals(track.getId(), contentProviderUtils.getTrack(track.getId()).getId());
|
assertEquals(track.getId(), contentProviderUtils.getTrack(track.getId()).getId());
|
||||||
PreferencesUtils.setLong(context, R.string.recording_track_id_key, isRecording ? track.getId().getId() : PreferencesUtils.RECORDING_TRACK_ID_DEFAULT);
|
PreferencesUtils.setLong(context, R.string.recording_track_id_key, isRecording ? track.getId().getId() : PreferencesUtils.RECORDING_TRACK_ID_DEFAULT);
|
||||||
|
|||||||
+1
-1
@@ -203,7 +203,7 @@ public class TrackRecordingServiceTestLooper {
|
|||||||
|
|
||||||
// Start a track.
|
// Start a track.
|
||||||
Track.Id trackId = service.startNewTrack();
|
Track.Id trackId = service.startNewTrack();
|
||||||
assertTrue(trackId.isValid());
|
assertNotNull(trackId);
|
||||||
assertTrue(service.isRecording());
|
assertTrue(service.isRecording());
|
||||||
Track track = contentProviderUtils.getTrack(trackId);
|
Track track = contentProviderUtils.getTrack(trackId);
|
||||||
assertNotNull(track);
|
assertNotNull(track);
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
|
|||||||
|
|
||||||
trackRecordingServiceConnection = new TrackRecordingServiceConnection();
|
trackRecordingServiceConnection = new TrackRecordingServiceConnection();
|
||||||
Track.Id trackId = getIntent().getParcelableExtra(EXTRA_TRACK_ID);
|
Track.Id trackId = getIntent().getParcelableExtra(EXTRA_TRACK_ID);
|
||||||
if (!trackId.isValid()) {
|
if (trackId == null) {
|
||||||
Log.e(TAG, "invalid trackId");
|
Log.e(TAG, "invalid trackId");
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import java.util.Objects;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A track.
|
* A track.
|
||||||
@@ -127,11 +126,6 @@ public class Track {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated //TODO Use a Track.Id of null instead
|
|
||||||
public boolean isValid() {
|
|
||||||
return id != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import android.database.Cursor;
|
|||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -224,7 +223,7 @@ public class ContentProviderUtils {
|
|||||||
* @param trackId the track id.
|
* @param trackId the track id.
|
||||||
*/
|
*/
|
||||||
public Track getTrack(Track.Id trackId) {
|
public Track getTrack(Track.Id trackId) {
|
||||||
if (trackId == null || !trackId.isValid()) {
|
if (trackId == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try (Cursor cursor = getTrackCursor(TracksColumns._ID + "=?", new String[]{Long.toString(trackId.getId())}, null)) {
|
try (Cursor cursor = getTrackCursor(TracksColumns._ID + "=?", new String[]{Long.toString(trackId.getId())}, null)) {
|
||||||
@@ -286,7 +285,7 @@ public class ContentProviderUtils {
|
|||||||
TrackStatistics trackStatistics = track.getTrackStatistics();
|
TrackStatistics trackStatistics = track.getTrackStatistics();
|
||||||
|
|
||||||
// Value < 0 indicates no id is available
|
// Value < 0 indicates no id is available
|
||||||
if (track.getId() != null && track.getId().isValid()) {
|
if (track.getId() != null) {
|
||||||
values.put(TracksColumns._ID, track.getId().getId());
|
values.put(TracksColumns._ID, track.getId().getId());
|
||||||
}
|
}
|
||||||
values.put(TracksColumns.UUID, UUIDUtils.toBytes(track.getUuid()));
|
values.put(TracksColumns.UUID, UUIDUtils.toBytes(track.getUuid()));
|
||||||
@@ -385,10 +384,7 @@ public class ContentProviderUtils {
|
|||||||
/**
|
/**
|
||||||
* @return -1 if not able to get the next marker number.
|
* @return -1 if not able to get the next marker number.
|
||||||
*/
|
*/
|
||||||
public int getNextMarkerNumber(Track.Id trackId) {
|
public int getNextMarkerNumber(@NonNull Track.Id trackId) {
|
||||||
if (!trackId.isValid()) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
String[] projection = {MarkerColumns._ID};
|
String[] projection = {MarkerColumns._ID};
|
||||||
String selection = MarkerColumns.TRACKID + "=?";
|
String selection = MarkerColumns.TRACKID + "=?";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
@@ -416,11 +412,7 @@ public class ContentProviderUtils {
|
|||||||
* @param minMarkerId the minimum marker id. null to ignore
|
* @param minMarkerId the minimum marker id. null to ignore
|
||||||
* @param maxCount the maximum number of markers to return. -1 for no limit
|
* @param maxCount the maximum number of markers to return. -1 for no limit
|
||||||
*/
|
*/
|
||||||
public Cursor getMarkerCursor(Track.Id trackId, @Nullable Marker.Id minMarkerId, int maxCount) {
|
public Cursor getMarkerCursor(@NonNull Track.Id trackId, @Nullable Marker.Id minMarkerId, int maxCount) {
|
||||||
if (!trackId.isValid()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String selection;
|
String selection;
|
||||||
String[] selectionArgs;
|
String[] selectionArgs;
|
||||||
if (minMarkerId != null) {
|
if (minMarkerId != null) {
|
||||||
@@ -449,10 +441,6 @@ public class ContentProviderUtils {
|
|||||||
|
|
||||||
@Deprecated //TODO TracksColumns.MARKER_COUNT while querying for tracks
|
@Deprecated //TODO TracksColumns.MARKER_COUNT while querying for tracks
|
||||||
public int getMarkerCount(Track.Id trackId) {
|
public int getMarkerCount(Track.Id trackId) {
|
||||||
if (!trackId.isValid()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
String[] projection = new String[]{"count(*) AS count"};
|
String[] projection = new String[]{"count(*) AS count"};
|
||||||
String selection = MarkerColumns.TRACKID + "=?";
|
String selection = MarkerColumns.TRACKID + "=?";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
@@ -633,9 +621,6 @@ public class ContentProviderUtils {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public Track.Id getFirstTrackPointId(Track.Id trackId) {
|
public Track.Id getFirstTrackPointId(Track.Id trackId) {
|
||||||
if (!trackId.isValid()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String selection = TrackPointsColumns._ID + "=(SELECT MIN(" + TrackPointsColumns._ID + ") FROM " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=?)";
|
String selection = TrackPointsColumns._ID + "=(SELECT MIN(" + TrackPointsColumns._ID + ") FROM " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=?)";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
try (Cursor cursor = getTrackPointCursor(new String[]{TrackPointsColumns._ID}, selection, selectionArgs, TrackPointsColumns._ID)) {
|
try (Cursor cursor = getTrackPointCursor(new String[]{TrackPointsColumns._ID}, selection, selectionArgs, TrackPointsColumns._ID)) {
|
||||||
@@ -653,11 +638,7 @@ public class ContentProviderUtils {
|
|||||||
* @param trackId the track id
|
* @param trackId the track id
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public long getLastTrackPointId(Track.Id trackId) {
|
public long getLastTrackPointId(@NonNull Track.Id trackId) {
|
||||||
if (trackId == null || !trackId.isValid()) {
|
|
||||||
Log.w(TAG, "Fix callers who do this.");
|
|
||||||
return -1L;
|
|
||||||
}
|
|
||||||
String selection = TrackPointsColumns._ID + "=(SELECT MAX(" + TrackPointsColumns._ID + ") from " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=?)";
|
String selection = TrackPointsColumns._ID + "=(SELECT MAX(" + TrackPointsColumns._ID + ") from " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=?)";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
try (Cursor cursor = getTrackPointCursor(new String[]{TrackPointsColumns._ID}, selection, selectionArgs, TrackPointsColumns._ID)) {
|
try (Cursor cursor = getTrackPointCursor(new String[]{TrackPointsColumns._ID}, selection, selectionArgs, TrackPointsColumns._ID)) {
|
||||||
@@ -676,9 +657,6 @@ public class ContentProviderUtils {
|
|||||||
* @return trackPoint id if the location is in the track. -1L otherwise.
|
* @return trackPoint id if the location is in the track. -1L otherwise.
|
||||||
*/
|
*/
|
||||||
public long getTrackPointId(Track.Id trackId, Location location) {
|
public long getTrackPointId(Track.Id trackId, Location location) {
|
||||||
if (!trackId.isValid()) {
|
|
||||||
return -1L;
|
|
||||||
}
|
|
||||||
String selection = TrackPointsColumns._ID + "=(SELECT MAX(" + TrackPointsColumns._ID + ") FROM " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=? AND " + TrackPointsColumns.TIME + "=?)";
|
String selection = TrackPointsColumns._ID + "=(SELECT MAX(" + TrackPointsColumns._ID + ") FROM " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=? AND " + TrackPointsColumns.TIME + "=?)";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId()), Long.toString(location.getTime())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId()), Long.toString(location.getTime())};
|
||||||
try (Cursor cursor = getTrackPointCursor(new String[]{TrackPointsColumns._ID}, selection, selectionArgs, TrackPointsColumns._ID)) {
|
try (Cursor cursor = getTrackPointCursor(new String[]{TrackPointsColumns._ID}, selection, selectionArgs, TrackPointsColumns._ID)) {
|
||||||
@@ -707,10 +685,6 @@ public class ContentProviderUtils {
|
|||||||
* @param descending true to sort the result in descending order (latest location first)
|
* @param descending true to sort the result in descending order (latest location first)
|
||||||
*/
|
*/
|
||||||
public Cursor getTrackPointCursor(Track.Id trackId, long startTrackPointId, int maxLocations, boolean descending) {
|
public Cursor getTrackPointCursor(Track.Id trackId, long startTrackPointId, int maxLocations, boolean descending) {
|
||||||
if (!trackId.isValid()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String selection;
|
String selection;
|
||||||
String[] selectionArgs;
|
String[] selectionArgs;
|
||||||
if (startTrackPointId >= 0) {
|
if (startTrackPointId >= 0) {
|
||||||
@@ -740,9 +714,6 @@ public class ContentProviderUtils {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public TrackPoint getLastValidTrackPoint(Track.Id trackId) {
|
public TrackPoint getLastValidTrackPoint(Track.Id trackId) {
|
||||||
if (!trackId.isValid()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String selection = TrackPointsColumns._ID + "=(SELECT MAX(" + TrackPointsColumns._ID + ") FROM " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=? AND " + TrackPointsColumns.LATITUDE + "<=" + MAX_LATITUDE + ")";
|
String selection = TrackPointsColumns._ID + "=(SELECT MAX(" + TrackPointsColumns._ID + ") FROM " + TrackPointsColumns.TABLE_NAME + " WHERE " + TrackPointsColumns.TRACKID + "=? AND " + TrackPointsColumns.LATITUDE + "<=" + MAX_LATITUDE + ")";
|
||||||
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
String[] selectionArgs = new String[]{Long.toString(trackId.getId())};
|
||||||
return findTrackPointBy(selection, selectionArgs);
|
return findTrackPointBy(selection, selectionArgs);
|
||||||
|
|||||||
@@ -153,7 +153,6 @@ public class KmzTrackImporter implements TrackImporter {
|
|||||||
* TODO: May load multiple tracks, but only returns the last Track.Id.
|
* TODO: May load multiple tracks, but only returns the last Track.Id.
|
||||||
*
|
*
|
||||||
* @param inputStream kmz input stream.
|
* @param inputStream kmz input stream.
|
||||||
* @return null if error or the id of the track otherwise.
|
|
||||||
*/
|
*/
|
||||||
private Track.Id findAndParseKmlFile(InputStream inputStream) {
|
private Track.Id findAndParseKmlFile(InputStream inputStream) {
|
||||||
try (ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {
|
try (ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {
|
||||||
@@ -198,29 +197,27 @@ public class KmzTrackImporter implements TrackImporter {
|
|||||||
* @param trackId the id of the Track.
|
* @param trackId the id of the Track.
|
||||||
*/
|
*/
|
||||||
private void deleteOrphanImages(Context context, Track.Id trackId) {
|
private void deleteOrphanImages(Context context, Track.Id trackId) {
|
||||||
if (!trackId.isValid()) {
|
// 1.- Gets all photo names in the markers of the track identified by id.
|
||||||
// 1.- Gets all photo names in the markers of the track identified by id.
|
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context);
|
||||||
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context);
|
List<Marker> markers = contentProviderUtils.getMarkers(trackId);
|
||||||
List<Marker> markers = contentProviderUtils.getMarkers(trackId);
|
List<String> photosName = new ArrayList<>();
|
||||||
List<String> photosName = new ArrayList<>();
|
for (Marker marker : markers) {
|
||||||
for (Marker marker : markers) {
|
if (marker.hasPhoto()) {
|
||||||
if (marker.hasPhoto()) {
|
String photoUrl = Uri.decode(marker.getPhotoUrl());
|
||||||
String photoUrl = Uri.decode(marker.getPhotoUrl());
|
photosName.add(photoUrl.substring(photoUrl.lastIndexOf(File.separatorChar) + 1));
|
||||||
photosName.add(photoUrl.substring(photoUrl.lastIndexOf(File.separatorChar) + 1));
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.- Deletes all orphan photos from external storage.
|
||||||
|
File dir = FileUtils.getPhotoDir(context, trackId);
|
||||||
|
if (dir.exists() && dir.isDirectory()) {
|
||||||
|
for (File file : dir.listFiles()) {
|
||||||
|
if (!photosName.contains(file.getName())) {
|
||||||
|
file.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (dir.listFiles().length == 0) {
|
||||||
// 2.- Deletes all orphan photos from external storage.
|
dir.delete();
|
||||||
File dir = FileUtils.getPhotoDir(context, trackId);
|
|
||||||
if (dir.exists() && dir.isDirectory()) {
|
|
||||||
for (File file : dir.listFiles()) {
|
|
||||||
if (!photosName.contains(file.getName())) {
|
|
||||||
file.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dir.listFiles().length == 0) {
|
|
||||||
dir.delete();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user