From c6fcadf9210add9769e403706ab5e42a1cf2a4f2 Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Sun, 20 Oct 2013 02:03:50 -0700 Subject: Support for adding live folders in the default workspace Change-Id: I69fe7bde3e8247ce574ddbbeba942344c761842a --- .../cyanogenmod/trebuchet/LauncherProvider.java | 48 ++++++++++++++++++++++ .../cyanogenmod/trebuchet/LauncherSettings.java | 6 +++ 2 files changed, 54 insertions(+) diff --git a/src/com/cyanogenmod/trebuchet/LauncherProvider.java b/src/com/cyanogenmod/trebuchet/LauncherProvider.java index 00220b183..260a16a6b 100644 --- a/src/com/cyanogenmod/trebuchet/LauncherProvider.java +++ b/src/com/cyanogenmod/trebuchet/LauncherProvider.java @@ -239,6 +239,7 @@ public class LauncherProvider extends ContentProvider { private static final String TAG_ALLAPPS = "allapps"; private static final String TAG_FOLDER = "folder"; private static final String TAG_EXTRA = "extra"; + private static final String TAG_LIVE_FOLDER = "live-folder"; private final Context mContext; private final AppWidgetHost mAppWidgetHost; @@ -358,6 +359,7 @@ public class LauncherProvider extends ContentProvider { final int screenIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites.SCREEN); final int cellXIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CELLX); final int cellYIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CELLY); + final int receiverIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites.RECEIVER); ContentValues[] rows = new ContentValues[c.getCount()]; int i = 0; @@ -376,6 +378,8 @@ public class LauncherProvider extends ContentProvider { values.put(LauncherSettings.Favorites.SCREEN, c.getInt(screenIndex)); values.put(LauncherSettings.Favorites.CELLX, c.getInt(cellXIndex)); values.put(LauncherSettings.Favorites.CELLY, c.getInt(cellYIndex)); + values.put(LauncherSettings.Favorites.RECEIVER, c.getInt(receiverIndex)); + rows[i++] = values; } @@ -654,6 +658,9 @@ public class LauncherProvider extends ContentProvider { } else if (TAG_SHORTCUT.equals(name)) { long id = addUriShortcut(db, values, a); added = id >= 0; + } else if (TAG_LIVE_FOLDER.equals(name)) { + long id = addLiveFolder(db, values, a, packageManager); + added = id >= 0; } else if (TAG_FOLDER.equals(name)) { String title; int titleResId = a.getResourceId(R.styleable.Favorite_title, -1); @@ -772,6 +779,47 @@ public class LauncherProvider extends ContentProvider { } } + private long addLiveFolder(SQLiteDatabase db, ContentValues values, TypedArray a, + PackageManager packageManager) { + long id = -1; + String packageName = a.getString(R.styleable.Favorite_packageName); + String className = a.getString(R.styleable.Favorite_className); + try { + ComponentName cn; + try { + cn = new ComponentName(packageName, className); + packageManager.getReceiverInfo(cn, 0); + } catch (PackageManager.NameNotFoundException nnfe) { + String[] packages = packageManager.currentToCanonicalPackageNames( + new String[] { packageName }); + cn = new ComponentName(packages[0], className); + packageManager.getReceiverInfo(cn, 0); + } + String title; + int titleResId = a.getResourceId(R.styleable.Favorite_title, -1); + if (titleResId != -1) { + title = mContext.getResources().getString(titleResId); + } else { + title = mContext.getResources().getString(R.string.folder_name); + } + values.put(LauncherSettings.Favorites.TITLE, title); + + values.put(Favorites.RECEIVER, cn.toString()); + values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_LIVE_FOLDER); + values.put(Favorites.SPANX, 1); + values.put(Favorites.SPANY, 1); + id = generateNewId(); + values.put(Favorites._ID, id); + if (dbInsertAndCheck(db, TABLE_FAVORITES, null, values) < 0) { + return -1; + } + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "Unable to add favorite: " + packageName + + "/" + className, e); + } + return id; + } + private ComponentName getSearchWidgetProvider() { SearchManager searchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); diff --git a/src/com/cyanogenmod/trebuchet/LauncherSettings.java b/src/com/cyanogenmod/trebuchet/LauncherSettings.java index aa52d0480..1b22cfee9 100644 --- a/src/com/cyanogenmod/trebuchet/LauncherSettings.java +++ b/src/com/cyanogenmod/trebuchet/LauncherSettings.java @@ -180,6 +180,12 @@ class LauncherSettings { */ static final String SPANY = "spanY"; + /** + * The receiver component for this item + *

Type: STRING

+ */ + static final String RECEIVER = "receiverComponent"; + /** * The favorite is a user created folder */ -- cgit v1.2.3