diff options
author | Adam Cohen <adamcohen@google.com> | 2014-08-08 04:33:31 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-07 17:50:16 +0000 |
commit | 36f82a32a644e3c06e16283d33b9a74cac1935d8 (patch) | |
tree | 3ba61801a05d57e3468ecc13d81b1e20939ce230 | |
parent | a66233aeb1ba7f152de73e66fd99ca0b90c6cf55 (diff) | |
parent | 7ec3bbff8b6364dc609eb06ba85e6f3bb999c67e (diff) | |
download | android_packages_apps_Trebuchet-36f82a32a644e3c06e16283d33b9a74cac1935d8.tar.gz android_packages_apps_Trebuchet-36f82a32a644e3c06e16283d33b9a74cac1935d8.tar.bz2 android_packages_apps_Trebuchet-36f82a32a644e3c06e16283d33b9a74cac1935d8.zip |
Merge "Fix screen issues with externally added items" into ub-now-porkchop
-rw-r--r-- | src/com/android/launcher3/LauncherProvider.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index f77cdca41..88ea45a43 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -1285,9 +1285,62 @@ public class LauncherProvider extends ContentProvider { } return false; } + + // Add screen id if not present + long screenId = values.getAsLong(LauncherSettings.Favorites.SCREEN); + if (!addScreenIdIfNecessary(screenId)) { + return false; + } + return true; + } + + // Returns true of screen id exists, or if successfully added + private boolean addScreenIdIfNecessary(long screenId) { + if (!hasScreenId(screenId)) { + int rank = getMaxScreenRank() + 1; + + ContentValues v = new ContentValues(); + v.put(LauncherSettings.WorkspaceScreens._ID, screenId); + v.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, rank); + if (dbInsertAndCheck(this, getWritableDatabase(), + TABLE_WORKSPACE_SCREENS, null, v) < 0) { + return false; + } + } return true; } + private boolean hasScreenId(long screenId) { + SQLiteDatabase db = getWritableDatabase(); + Cursor c = db.rawQuery("SELECT * FROM " + TABLE_WORKSPACE_SCREENS + " WHERE " + + LauncherSettings.WorkspaceScreens._ID + " = " + screenId, null); + if (c != null) { + int count = c.getCount(); + c.close(); + return count > 0; + } else { + return false; + } + } + + private int getMaxScreenRank() { + SQLiteDatabase db = getWritableDatabase(); + Cursor c = db.rawQuery("SELECT MAX(" + LauncherSettings.WorkspaceScreens.SCREEN_RANK + + ") FROM " + TABLE_WORKSPACE_SCREENS, null); + + // get the result + final int maxRankIndex = 0; + int rank = -1; + if (c != null && c.moveToNext()) { + rank = c.getInt(maxRankIndex); + } + if (c != null) { + c.close(); + } + + return rank; + } + private static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException { int type; @@ -1334,6 +1387,7 @@ public class LauncherProvider extends ContentProvider { // Ensure that the max ids are initialized mMaxItemId = initializeMaxItemId(db); mMaxScreenId = initializeMaxScreenId(db); + return count; } |