diff options
Diffstat (limited to 'src/com/android/launcher3/LauncherSettings.java')
-rw-r--r-- | src/com/android/launcher3/LauncherSettings.java | 72 |
1 files changed, 50 insertions, 22 deletions
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java index 105d5f30c8..34ebaf2539 100644 --- a/src/com/android/launcher3/LauncherSettings.java +++ b/src/com/android/launcher3/LauncherSettings.java @@ -19,8 +19,13 @@ package com.android.launcher3; import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns; +import androidx.annotation.NonNull; + import com.android.launcher3.model.data.ItemInfo; +import java.util.LinkedHashMap; +import java.util.stream.Collectors; + /** * Settings related utilities. */ @@ -289,28 +294,51 @@ public class LauncherSettings { public static void addTableToDb(SQLiteDatabase db, long myProfileId, boolean optional, String tableName) { - String ifNotExists = optional ? " IF NOT EXISTS " : ""; - db.execSQL("CREATE TABLE " + ifNotExists + tableName + " (" + - "_id INTEGER PRIMARY KEY," + - "title TEXT," + - "intent TEXT," + - "container INTEGER," + - "screen INTEGER," + - "cellX INTEGER," + - "cellY INTEGER," + - "spanX INTEGER," + - "spanY INTEGER," + - "itemType INTEGER," + - "appWidgetId INTEGER NOT NULL DEFAULT -1," + - "icon BLOB," + - "appWidgetProvider TEXT," + - "modified INTEGER NOT NULL DEFAULT 0," + - "restored INTEGER NOT NULL DEFAULT 0," + - "profileId INTEGER DEFAULT " + myProfileId + "," + - "rank INTEGER NOT NULL DEFAULT 0," + - "options INTEGER NOT NULL DEFAULT 0," + - APPWIDGET_SOURCE + " INTEGER NOT NULL DEFAULT " + CONTAINER_UNKNOWN + - ");"); + db.execSQL("CREATE TABLE " + (optional ? " IF NOT EXISTS " : "") + tableName + " (" + + getJoinedColumnsToTypes(myProfileId) + ");"); + } + + // LinkedHashMap maintains Order of Insertion + @NonNull + private static LinkedHashMap<String, String> getColumnsToTypes(long profileId) { + final LinkedHashMap<String, String> columnsToTypes = new LinkedHashMap<>(); + columnsToTypes.put(_ID, "INTEGER PRIMARY KEY"); + columnsToTypes.put(TITLE, "TEXT"); + columnsToTypes.put(INTENT, "TEXT"); + columnsToTypes.put(CONTAINER, "INTEGER"); + columnsToTypes.put(SCREEN, "INTEGER"); + columnsToTypes.put(CELLX, "INTEGER"); + columnsToTypes.put(CELLY, "INTEGER"); + columnsToTypes.put(SPANX, "INTEGER"); + columnsToTypes.put(SPANY, "INTEGER"); + columnsToTypes.put(ITEM_TYPE, "INTEGER"); + columnsToTypes.put(APPWIDGET_ID, "INTEGER NOT NULL DEFAULT -1"); + columnsToTypes.put(ICON, "BLOB"); + columnsToTypes.put(APPWIDGET_PROVIDER, "TEXT"); + columnsToTypes.put(MODIFIED, "INTEGER NOT NULL DEFAULT 0"); + columnsToTypes.put(RESTORED, "INTEGER NOT NULL DEFAULT 0"); + columnsToTypes.put(PROFILE_ID, "INTEGER DEFAULT " + profileId); + columnsToTypes.put(RANK, "INTEGER NOT NULL DEFAULT 0"); + columnsToTypes.put(OPTIONS, "INTEGER NOT NULL DEFAULT 0"); + columnsToTypes.put(APPWIDGET_SOURCE, "INTEGER NOT NULL DEFAULT -1"); + return columnsToTypes; + } + + private static String getJoinedColumnsToTypes(long profileId) { + return getColumnsToTypes(profileId) + .entrySet() + .stream() + .map(it -> it.getKey() + " " + it.getValue()) + .collect(Collectors.joining(", ")); + } + + /** + * Returns an ordered list of columns in the Favorites table as one string, ready to use in + * an SQL statement. + */ + @NonNull + public static String getColumns(long profileId) { + return String.join(", ", getColumnsToTypes(profileId).keySet()); } } |