From: Adam Cohen Date: Thu, 31 Jul 2014 07:09:45 +0000 (-0700) Subject: Fix screen issues with externally added items X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=7ec3bbff8b6364dc609eb06ba85e6f3bb999c67e;p=android-x86%2Fpackages-apps-Trebuchet.git Fix screen issues with externally added items -> Ensure that when an item is added to the db from an external source that the screen id exists. -> If the screen id does not exist, add that id as the largest rank Change-Id: I98d68900c428d80666dab1909418c6d9b0f52e10 (cherry picked from commit 484526620012f88bcd9d5656a71d4218a9acd090) --- 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; }