Images/folders are deleted when tracks/waypoints are deleted.

This fixes #189.
This commit is contained in:
Román Martínez
2020-04-27 18:18:02 +02:00
committed by GitHub
parent 39c5422341
commit 240d8f6b6c
6 changed files with 190 additions and 36 deletions
@@ -170,7 +170,7 @@ public class ContentProviderUtils {
contentResolver.delete(TracksColumns.CONTENT_URI, null, null);
File dir = FileUtils.getPhotoDir(context);
deleteDirectoryRecurse(dir);
FileUtils.deleteDirectoryRecurse(dir);
}
/**
@@ -181,6 +181,9 @@ public class ContentProviderUtils {
public void deleteTrack(Context context, long trackId) {
deleteTrackPointsAndWaypoints(context, trackId);
// Delete track folder resources.
FileUtils.deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
// Delete track last since it triggers a database vacuum call
contentResolver.delete(TracksColumns.CONTENT_URI, TracksColumns._ID + "=?", new String[]{Long.toString(trackId)});
}
@@ -196,21 +199,6 @@ public class ContentProviderUtils {
contentResolver.delete(TrackPointsColumns.CONTENT_URI_BY_ID, where, selectionArgs);
contentResolver.delete(WaypointsColumns.CONTENT_URI, WaypointsColumns.TRACKID + "=?", new String[]{Long.toString(trackId)});
deleteDirectoryRecurse(FileUtils.getPhotoDir(context, trackId));
}
/**
* Delete the directory recursively.
*
* @param dir the directory
*/
private void deleteDirectoryRecurse(File dir) {
if (dir != null && dir.exists() && dir.isDirectory()) {
for (File child : dir.listFiles()) {
deleteDirectoryRecurse(child);
}
dir.delete();
}
}
/**
@@ -392,11 +380,11 @@ public class ContentProviderUtils {
return waypoint;
}
public void deleteWaypoint(long waypointId) {
public void deleteWaypoint(Context context, long waypointId) {
final Waypoint waypoint = getWaypoint(waypointId);
if (waypoint != null && waypoint.hasPhoto()) {
Uri uri = waypoint.getPhotoURI();
File file = new File(uri.getPath());
File file = FileUtils.getPhotoFileIfExists(context, waypoint.getTrackId(), uri);
if (file.exists()) {
File parent = file.getParentFile();
file.delete();
@@ -85,7 +85,7 @@ public class DeleteMarkerDialogFragment extends DialogFragment {
public void run() {
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(fragmentActivity);
for (long markerId : markerIds) {
contentProviderUtils.deleteWaypoint(markerId);
contentProviderUtils.deleteWaypoint(getContext(), markerId);
}
caller.onDeleteMarkerDone();
}
@@ -189,7 +189,6 @@ public class KmzTrackImporter implements TrackImporter {
zipInputStream.closeEntry();
}
return trackId;
} catch (IOException e) {
Log.e(TAG, "Unable to import file", e);
@@ -241,16 +240,6 @@ public class KmzTrackImporter implements TrackImporter {
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context);
contentProviderUtils.deleteTrack(context, trackId);
}
if (importTrackId != -1L) {
File dir = FileUtils.getPhotoDir(context, importTrackId);
if (dir.exists() && dir.isDirectory()) {
for (File file : dir.listFiles()) {
file.delete();
}
dir.delete();
}
}
}
/**
@@ -284,4 +284,20 @@ public class FileUtils {
return file;
}
/**
* Delete the directory recursively.
*
* @param file the directory
*/
public static void deleteDirectoryRecurse(File file) {
if (file != null && file.exists() && file.isDirectory()) {
for (File child : file.listFiles()) {
deleteDirectoryRecurse(child);
}
file.delete();
} else if (file != null && file.isFile()) {
file.delete();
}
}
}