From dd70d66852bb8bd16f55796e546ba290360d1198 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Thu, 4 Oct 2012 16:53:44 -0700 Subject: Fix for widgets with config not getting size info (issue 7266053) Change-Id: I0b55555ed38d4f2a70345d1b6316a075a9346111 --- src/com/android/launcher2/AppsCustomizePagedView.java | 5 +++-- src/com/android/launcher2/Launcher.java | 14 +++++++++++++- src/com/android/launcher2/PendingAddItemInfo.java | 3 +++ 3 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java index 817eb413a..609bb6d09 100644 --- a/src/com/android/launcher2/AppsCustomizePagedView.java +++ b/src/com/android/launcher2/AppsCustomizePagedView.java @@ -628,7 +628,10 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen private void preloadWidget(final PendingAddWidgetInfo info) { final AppWidgetProviderInfo pInfo = info.info; + final Bundle options = getDefaultOptionsForWidget(mLauncher, info); + if (pInfo.configure != null) { + info.bindOptions = options; return; } @@ -637,8 +640,6 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen @Override public void run() { mWidgetLoadingId = mLauncher.getAppWidgetHost().allocateAppWidgetId(); - - Bundle options = getDefaultOptionsForWidget(mLauncher, info); // Options will be null for platforms with JB or lower, so this serves as an // SDK level check. if (options == null) { diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 4ae9c7d26..3fdf5c3ce 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -1746,13 +1746,25 @@ public final class Launcher extends Activity // In this case, we either need to start an activity to get permission to bind // the widget, or we need to start an activity to configure the widget, or both. appWidgetId = getAppWidgetHost().allocateAppWidgetId(); - if (mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, info.componentName)) { + Bundle options = info.bindOptions; + + boolean success = false; + if (options != null) { + success = mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, + info.componentName, options); + } else { + success = mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, + info.componentName); + } + if (success) { addAppWidgetImpl(appWidgetId, info, null, info.info); } else { mPendingAddWidgetInfo = info.info; Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName); + // TODO: we need to make sure that this accounts for the options bundle. + // intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options); startActivityForResult(intent, REQUEST_BIND_APPWIDGET); } } diff --git a/src/com/android/launcher2/PendingAddItemInfo.java b/src/com/android/launcher2/PendingAddItemInfo.java index 9a133ed27..a1e7b06a5 100644 --- a/src/com/android/launcher2/PendingAddItemInfo.java +++ b/src/com/android/launcher2/PendingAddItemInfo.java @@ -20,6 +20,7 @@ import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; import android.content.pm.ActivityInfo; +import android.os.Bundle; import android.os.Parcelable; /** @@ -55,6 +56,7 @@ class PendingAddWidgetInfo extends PendingAddItemInfo { int icon; AppWidgetProviderInfo info; AppWidgetHostView boundWidget; + Bundle bindOptions = null; // Any configuration data that we want to pass to a configuration activity when // starting up a widget @@ -95,6 +97,7 @@ class PendingAddWidgetInfo extends PendingAddItemInfo { spanY = copy.spanY; minSpanX = copy.minSpanX; minSpanY = copy.minSpanY; + bindOptions = copy.bindOptions == null ? null : (Bundle) copy.bindOptions.clone(); } @Override -- cgit v1.2.3