summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2014-08-08 04:33:31 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-07 17:50:16 +0000
commit36f82a32a644e3c06e16283d33b9a74cac1935d8 (patch)
tree3ba61801a05d57e3468ecc13d81b1e20939ce230
parenta66233aeb1ba7f152de73e66fd99ca0b90c6cf55 (diff)
parent7ec3bbff8b6364dc609eb06ba85e6f3bb999c67e (diff)
downloadandroid_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.java54
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;
}