summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/LauncherProvider.java
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2015-06-10 16:00:42 -0700
committerSunny Goyal <sunnygoyal@google.com>2015-06-12 12:38:16 -0700
commitb1622cc30f2fd9b579cb918083e063685950df92 (patch)
treeaf024a3a882a860f3c508d847a27e629d3467150 /src/com/android/launcher3/LauncherProvider.java
parent51cd50d7f1649f4bdea42483503810735555868e (diff)
downloadandroid_packages_apps_Trebuchet-b1622cc30f2fd9b579cb918083e063685950df92.tar.gz
android_packages_apps_Trebuchet-b1622cc30f2fd9b579cb918083e063685950df92.tar.bz2
android_packages_apps_Trebuchet-b1622cc30f2fd9b579cb918083e063685950df92.zip
Deleting empty folders based on DB state
> Previously folders were getting deleted based on in-memory loader state. If for some reason, an item failed to load, we would delete the folder from DB as well. Bug: 21354058 Change-Id: I5318ee8a99afa9cafd93ed2b9ef0e155f502a41b
Diffstat (limited to 'src/com/android/launcher3/LauncherProvider.java')
-rw-r--r--src/com/android/launcher3/LauncherProvider.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index cb808c22b..9b52a80c9 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -62,6 +62,7 @@ import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
public class LauncherProvider extends ContentProvider {
private static final String TAG = "Launcher.LauncherProvider";
@@ -271,6 +272,42 @@ public class LauncherProvider extends ContentProvider {
return null;
}
+ /**
+ * Deletes any empty folder from the DB.
+ * @return Ids of deleted folders.
+ */
+ public List<Long> deleteEmptyFolders() {
+ ArrayList<Long> folderIds = new ArrayList<Long>();
+ SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+ db.beginTransaction();
+ try {
+ // Select folders whose id do not match any container value.
+ String selection = LauncherSettings.Favorites.ITEM_TYPE + " = "
+ + LauncherSettings.Favorites.ITEM_TYPE_FOLDER + " AND "
+ + LauncherSettings.Favorites._ID + " NOT IN (SELECT " +
+ LauncherSettings.Favorites.CONTAINER + " FROM "
+ + TABLE_FAVORITES + ")";
+ Cursor c = db.query(TABLE_FAVORITES,
+ new String[] {LauncherSettings.Favorites._ID},
+ selection, null, null, null, null);
+ while (c.moveToNext()) {
+ folderIds.add(c.getLong(0));
+ }
+ c.close();
+ if (folderIds.size() > 0) {
+ db.delete(TABLE_FAVORITES, Utilities.createDbSelectionQuery(
+ LauncherSettings.Favorites._ID, folderIds), null);
+ }
+ db.setTransactionSuccessful();
+ } catch (SQLException ex) {
+ Log.e(TAG, ex.getMessage(), ex);
+ folderIds.clear();
+ } finally {
+ db.endTransaction();
+ }
+ return folderIds;
+ }
+
private void notifyListeners() {
// always notify the backup agent
LauncherBackupAgentHelper.dataChanged(getContext());