summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/LauncherProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher2/LauncherProvider.java')
-rw-r--r--src/com/android/launcher2/LauncherProvider.java92
1 files changed, 64 insertions, 28 deletions
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 5ffd9844f..96cc63cee 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -65,11 +65,11 @@ public class LauncherProvider extends ContentProvider {
private static final boolean LOGD = false;
private static final String DATABASE_NAME = "launcher.db";
-
- private static final int DATABASE_VERSION = 8;
+
+ private static final int DATABASE_VERSION = 9;
static final String AUTHORITY = "com.android.launcher2.settings";
-
+
static final String TABLE_FAVORITES = "favorites";
static final String PARAMETER_NOTIFY = "notify";
@@ -199,7 +199,7 @@ public class LauncherProvider extends ContentProvider {
private static final String TAG_SEARCH = "search";
private static final String TAG_APPWIDGET = "appwidget";
private static final String TAG_SHORTCUT = "shortcut";
-
+
private final Context mContext;
private final AppWidgetHost mAppWidgetHost;
private long mMaxId = -1;
@@ -208,7 +208,12 @@ public class LauncherProvider extends ContentProvider {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
mAppWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID);
- mMaxId = initializeMaxId(getWritableDatabase());
+
+ // In the case where neither onCreate nor onUpgrade gets called, we read the maxId from
+ // the DB here
+ if (mMaxId == -1) {
+ mMaxId = initializeMaxId(getWritableDatabase());
+ }
}
/**
@@ -254,10 +259,10 @@ public class LauncherProvider extends ContentProvider {
mAppWidgetHost.deleteHost();
sendAppWidgetResetNotify();
}
-
+
if (!convertDatabase(db)) {
// Populate favorites table with initial favorites
- loadFavorites(db);
+ loadFavorites(db, ItemInfo.NO_ID);
}
}
@@ -427,6 +432,18 @@ public class LauncherProvider extends ContentProvider {
version = 8;
}
+ if (version < 9) {
+ // The max id is not yet set at this point (onUpgrade is triggered in the ctor
+ // before it gets a change to get set, so we need to read it here when we use it)
+ if (mMaxId == -1) {
+ mMaxId = initializeMaxId(db);
+ }
+
+ // Add default hotseat icons
+ loadFavorites(db, LauncherSettings.Favorites.CONTAINER_HOTSEAT);
+ version = 9;
+ }
+
if (version != DATABASE_VERSION) {
Log.w(TAG, "Destroying all old data.");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAVORITES);
@@ -672,8 +689,9 @@ public class LauncherProvider extends ContentProvider {
* Loads the default set of favorite packages from an xml file.
*
* @param db The database to write the values into
+ * @param filterContainerId The specific container id of items to load
*/
- private int loadFavorites(SQLiteDatabase db) {
+ private int loadFavorites(SQLiteDatabase db, long filterContainerId) {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ContentValues values = new ContentValues();
@@ -700,26 +718,42 @@ public class LauncherProvider extends ContentProvider {
TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.Favorite);
- values.clear();
- values.put(LauncherSettings.Favorites.CONTAINER,
- LauncherSettings.Favorites.CONTAINER_DESKTOP);
- values.put(LauncherSettings.Favorites.SCREEN,
- a.getString(R.styleable.Favorite_screen));
- values.put(LauncherSettings.Favorites.CELLX,
- a.getString(R.styleable.Favorite_x));
- values.put(LauncherSettings.Favorites.CELLY,
- a.getString(R.styleable.Favorite_y));
-
- if (TAG_FAVORITE.equals(name)) {
- added = addAppShortcut(db, values, a, packageManager, intent);
- } else if (TAG_SEARCH.equals(name)) {
- added = addSearchWidget(db, values);
- } else if (TAG_CLOCK.equals(name)) {
- added = addClockWidget(db, values);
- } else if (TAG_APPWIDGET.equals(name)) {
- added = addAppWidget(db, values, a, packageManager);
- } else if (TAG_SHORTCUT.equals(name)) {
- added = addUriShortcut(db, values, a);
+ long container = LauncherSettings.Favorites.CONTAINER_DESKTOP;
+ if (a.hasValue(R.styleable.Favorite_container)) {
+ container = Long.valueOf(a.getString(R.styleable.Favorite_container));
+ }
+ if (filterContainerId == ItemInfo.NO_ID || filterContainerId == container) {
+ String screen = a.getString(R.styleable.Favorite_screen);
+ String x = a.getString(R.styleable.Favorite_x);
+ String y = a.getString(R.styleable.Favorite_y);
+
+ // If we are adding to the hotset, the screen is used as the position in the
+ // hotset. This screen can't be at position 0 because AllApps is in the
+ // zeroth position.
+ if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT &&
+ Integer.valueOf(screen) <= 0) {
+ throw new RuntimeException("Invalid screen position for hotseat item");
+ }
+
+ values.clear();
+ values.put(LauncherSettings.Favorites.CONTAINER, container);
+ values.put(LauncherSettings.Favorites.SCREEN, screen);
+ values.put(LauncherSettings.Favorites.CELLX, x);
+ values.put(LauncherSettings.Favorites.CELLY, y);
+
+ System.out.println("Adding item to container: " + container);
+
+ if (TAG_FAVORITE.equals(name)) {
+ added = addAppShortcut(db, values, a, packageManager, intent);
+ } else if (TAG_SEARCH.equals(name)) {
+ added = addSearchWidget(db, values);
+ } else if (TAG_CLOCK.equals(name)) {
+ added = addClockWidget(db, values);
+ } else if (TAG_APPWIDGET.equals(name)) {
+ added = addAppWidget(db, values, a, packageManager);
+ } else if (TAG_SHORTCUT.equals(name)) {
+ added = addUriShortcut(db, values, a);
+ }
}
if (added) i++;
@@ -730,6 +764,8 @@ public class LauncherProvider extends ContentProvider {
Log.w(TAG, "Got exception parsing favorites.", e);
} catch (IOException e) {
Log.w(TAG, "Got exception parsing favorites.", e);
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Got exception parsing favorites.", e);
}
return i;