Delete unused images
Bug: 3303813
When clearing history or deleting a bookmark, the images associated
are never removed. This will prune unused images on every delete or
update.
Change-Id: I733bf4bd9c06cd8e827a576738f7873d6bdaf8bb
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index be9db9a..1eaad25 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -96,6 +96,11 @@
"url LIKE ? OR url LIKE ? OR url LIKE ? OR url LIKE ?"
+ " OR title LIKE ?";
+ private static final String IMAGE_PRUNE =
+ "url_key NOT IN (SELECT url FROM bookmarks " +
+ "WHERE url IS NOT NULL AND deleted == 0) AND url_key NOT IN " +
+ "(SELECT url FROM history WHERE url IS NOT NULL)";
+
static final int BOOKMARKS = 1000;
static final int BOOKMARKS_ID = 1001;
static final int BOOKMARKS_FOLDER = 1002;
@@ -936,7 +941,9 @@
// fall through
}
case BOOKMARKS: {
- return deleteBookmarks(selection, selectionArgs, callerIsSyncAdapter);
+ int deleted = deleteBookmarks(selection, selectionArgs, callerIsSyncAdapter);
+ pruneImages();
+ return deleted;
}
case HISTORY_ID: {
@@ -947,7 +954,9 @@
}
case HISTORY: {
filterSearchClient(selectionArgs);
- return db.delete(TABLE_HISTORY, selection, selectionArgs);
+ int deleted = db.delete(TABLE_HISTORY, selection, selectionArgs);
+ pruneImages();
+ return deleted;
}
case SEARCHES_ID: {
@@ -1257,8 +1266,10 @@
// fall through
}
case BOOKMARKS: {
- return updateBookmarksInTransaction(values, selection, selectionArgs,
+ int updated = updateBookmarksInTransaction(values, selection, selectionArgs,
callerIsSyncAdapter);
+ pruneImages();
+ return updated;
}
case HISTORY_ID: {
@@ -1268,7 +1279,9 @@
// fall through
}
case HISTORY: {
- return updateHistoryInTransaction(values, selection, selectionArgs);
+ int updated = updateHistoryInTransaction(values, selection, selectionArgs);
+ pruneImages();
+ return updated;
}
case SYNCSTATE: {
@@ -1462,6 +1475,11 @@
return imageValues;
}
+ void pruneImages() {
+ final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+ db.delete(TABLE_IMAGES, IMAGE_PRUNE, null);
+ }
+
static class SuggestionsCursor extends AbstractCursor {
private static final int ID_INDEX = 0;
private static final int URL_INDEX = 1;