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)
This commit is contained in:
Adam Cohen 2014-07-31 00:09:45 -07:00
parent fe9da818cd
commit 7ec3bbff8b
1 changed files with 54 additions and 0 deletions

View File

@ -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;
}