summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/LauncherProvider.java
diff options
context:
space:
mode:
authorBjorn Bringert <bringert@android.com>2009-12-15 13:33:11 +0000
committerBjorn Bringert <bringert@android.com>2009-12-15 13:33:11 +0000
commit3425134204ad9dab032821016df40d4efda92f1a (patch)
treec77e6c02fa2b90d232591533cc837a24f5880037 /src/com/android/launcher2/LauncherProvider.java
parent1cc7f41015c0b0a2c140a1e00466636a683ed05b (diff)
downloadandroid_packages_apps_Trebuchet-3425134204ad9dab032821016df40d4efda92f1a.tar.gz
android_packages_apps_Trebuchet-3425134204ad9dab032821016df40d4efda92f1a.tar.bz2
android_packages_apps_Trebuchet-3425134204ad9dab032821016df40d4efda92f1a.zip
Bind converted widgets directly.
Before, Launcher2 sent an intent to com.android.settings/com.android.settings.LauncherAppWidgetBinder to bind any converted appwidgets. That doesn't seem to work anymore, and is not how non-converted widgets are bound. Changing to binding the widgets directly fixes a problem where the search widget was not bound after an upgrade from Eclair to Master. The search widget conversion problem was introduced in Change I85d64defe155c0cad97fafef6a3db62c6cab504a where I got rid of the built-in search widget. This patch may break conversion of legacy built-in clock and photo widgets, but I believe that was already broken because of the non-functional widget binding mechanism. Bug: http://b/2322160
Diffstat (limited to 'src/com/android/launcher2/LauncherProvider.java')
-rw-r--r--src/com/android/launcher2/LauncherProvider.java86
1 files changed, 19 insertions, 67 deletions
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 47d899125..d40e1ecf9 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -469,24 +469,16 @@ public class LauncherProvider extends ContentProvider {
* LauncherAppWidgetBinder to finish the actual binding.
*/
private void convertWidgets(SQLiteDatabase db) {
+ final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(mContext);
final int[] bindSources = new int[] {
Favorites.ITEM_TYPE_WIDGET_CLOCK,
Favorites.ITEM_TYPE_WIDGET_PHOTO_FRAME,
Favorites.ITEM_TYPE_WIDGET_SEARCH,
};
-
- final ArrayList<ComponentName> bindTargets = new ArrayList<ComponentName>();
- bindTargets.add(new ComponentName("com.android.alarmclock",
- "com.android.alarmclock.AnalogAppWidgetProvider"));
- bindTargets.add(new ComponentName("com.android.camera",
- "com.android.camera.PhotoAppWidgetProvider"));
- bindTargets.add(new ComponentName("com.android.quicksearchbox",
- "com.android.quicksearchbox.SearchWidgetProvider"));
final String selectWhere = buildOrWhereString(Favorites.ITEM_TYPE, bindSources);
Cursor c = null;
- boolean allocatedAppWidgets = false;
db.beginTransaction();
try {
@@ -524,8 +516,21 @@ public class LauncherProvider extends ContentProvider {
String updateWhere = Favorites._ID + "=" + favoriteId;
db.update(TABLE_FAVORITES, values, updateWhere, null);
-
- allocatedAppWidgets = true;
+
+ ComponentName cn = null;
+ if (favoriteType == Favorites.ITEM_TYPE_WIDGET_CLOCK) {
+ appWidgetManager.bindAppWidgetId(appWidgetId,
+ new ComponentName("com.android.alarmclock",
+ "com.android.alarmclock.AnalogAppWidgetProvider"));
+ } else if (favoriteType == Favorites.ITEM_TYPE_WIDGET_PHOTO_FRAME) {
+ appWidgetManager.bindAppWidgetId(appWidgetId,
+ new ComponentName("com.android.camera",
+ "com.android.camera.PhotoAppWidgetProvider"));
+ } else if (favoriteType == Favorites.ITEM_TYPE_WIDGET_SEARCH) {
+ appWidgetManager.bindAppWidgetId(appWidgetId,
+ new ComponentName("com.android.quicksearchbox",
+ "com.android.quicksearchbox.SearchWidgetProvider"));
+ }
} catch (RuntimeException ex) {
Log.e(TAG, "Problem allocating appWidgetId", ex);
}
@@ -540,34 +545,9 @@ public class LauncherProvider extends ContentProvider {
c.close();
}
}
-
- // If any appWidgetIds allocated, then launch over to binder
- if (allocatedAppWidgets) {
- launchAppWidgetBinder(bindSources, bindTargets);
- }
}
/**
- * Launch the widget binder that walks through the Launcher database,
- * binding any matching widgets to the corresponding targets. We can't
- * bind ourselves because our parent process can't obtain the
- * BIND_APPWIDGET permission.
- */
- private void launchAppWidgetBinder(int[] bindSources, ArrayList<ComponentName> bindTargets) {
- final Intent intent = new Intent();
- intent.setComponent(new ComponentName("com.android.settings",
- "com.android.settings.LauncherAppWidgetBinder"));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
- final Bundle extras = new Bundle();
- extras.putIntArray(EXTRA_BIND_SOURCES, bindSources);
- extras.putParcelableArrayList(EXTRA_BIND_TARGETS, bindTargets);
- intent.putExtras(extras);
-
- mContext.startActivity(intent);
- }
-
- /**
* Loads the default set of favorite packages from an xml file.
*
* @param db The database to write the values into
@@ -667,37 +647,9 @@ public class LauncherProvider extends ContentProvider {
}
private boolean addClockWidget(SQLiteDatabase db, ContentValues values) {
- final int[] bindSources = new int[] {
- Favorites.ITEM_TYPE_WIDGET_CLOCK,
- };
-
- final ArrayList<ComponentName> bindTargets = new ArrayList<ComponentName>();
- bindTargets.add(new ComponentName("com.android.alarmclock",
- "com.android.alarmclock.AnalogAppWidgetProvider"));
-
- boolean allocatedAppWidgets = false;
-
- // Try binding to an analog clock widget
- try {
- int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
-
- values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_WIDGET_CLOCK);
- values.put(Favorites.SPANX, 2);
- values.put(Favorites.SPANY, 2);
- values.put(Favorites.APPWIDGET_ID, appWidgetId);
- db.insert(TABLE_FAVORITES, null, values);
-
- allocatedAppWidgets = true;
- } catch (RuntimeException ex) {
- Log.e(TAG, "Problem allocating appWidgetId", ex);
- }
-
- // If any appWidgetIds allocated, then launch over to binder
- if (allocatedAppWidgets) {
- launchAppWidgetBinder(bindSources, bindTargets);
- }
-
- return allocatedAppWidgets;
+ ComponentName cn = new ComponentName("com.android.alarmclock",
+ "com.android.alarmclock.AnalogAppWidgetProvider");
+ return addAppWidget(db, values, cn, 2, 2);
}
private boolean addAppWidget(SQLiteDatabase db, ContentValues values, TypedArray a) {