From 85d4b5f78e831fdfe6da39f6edafd32c7d63dfea Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 24 Sep 2012 13:15:14 -0700 Subject: [PATCH] Ensuring that keyguard widgets are bound with correct options -> We need to bind the widget and indicate that it is a keyguard widget Change-Id: I8e76b45b86aecc671669022c6f5fad071b62837d --- src/com/android/settings/AppWidgetPickActivity.java | 15 +++++++++++---- src/com/android/settings/SecuritySettings.java | 13 +++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/AppWidgetPickActivity.java b/src/com/android/settings/AppWidgetPickActivity.java index f242dcf4c5..a475649f24 100644 --- a/src/com/android/settings/AppWidgetPickActivity.java +++ b/src/com/android/settings/AppWidgetPickActivity.java @@ -143,15 +143,22 @@ public class AppWidgetPickActivity extends ActivityPicker { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = getIntentForPosition(which); - + int result; - if (intent.getExtras() != null) { - // If there are any extras, it's because this entry is custom. + if (intent.getExtras() != null && + (intent.getExtras().containsKey(AppWidgetManager.EXTRA_CUSTOM_INFO) || + intent.getExtras().containsKey(AppWidgetManager.EXTRA_CUSTOM_EXTRAS))) { + // If these extras are present it's because this entry is custom. // Don't try to bind it, just pass it back to the app. setResultData(RESULT_OK, intent); } else { try { - mAppWidgetManager.bindAppWidgetId(mAppWidgetId, intent.getComponent()); + Bundle options = null; + if (intent.getExtras() != null) { + options = intent.getExtras().getBundle( + AppWidgetManager.EXTRA_APPWIDGET_OPTIONS); + } + mAppWidgetManager.bindAppWidgetId(mAppWidgetId, intent.getComponent(), options); result = RESULT_OK; } catch (IllegalArgumentException e) { // This is thrown if they're already bound, or otherwise somehow diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index a3f34861b1..f5d1608704 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -475,6 +475,17 @@ public class SecuritySettings extends SettingsPreferenceFragment } } + private Intent getBaseIntent() { + Intent baseIntent = new Intent(Intent.ACTION_MAIN, null); + baseIntent.addCategory(Intent.CATEGORY_DEFAULT); + + Bundle options = new Bundle(); + options.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, + AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD); + baseIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options); + return baseIntent; + } + @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { final String key = preference.getKey(); @@ -511,6 +522,7 @@ public class SecuritySettings extends SettingsPreferenceFragment // Launch the widget picker pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_INFO, extraInfos); pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_EXTRAS, extraExtras); + pickIntent.putExtra(Intent.EXTRA_INTENT, getBaseIntent()); startActivityForResult(pickIntent, REQUEST_PICK_USER_SELECTED_APPWIDGET); } else { Log.e(TAG, "Unable to allocate an AppWidget id in lock screen"); @@ -545,6 +557,7 @@ public class SecuritySettings extends SettingsPreferenceFragment // Launch the widget picker pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_INFO, extraInfos); pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_EXTRAS, extraExtras); + pickIntent.putExtra(Intent.EXTRA_INTENT, getBaseIntent()); startActivityForResult(pickIntent, REQUEST_PICK_STATUS_APPWIDGET); } else { Log.e(TAG, "Unable to allocate an AppWidget id in lock screen"); -- 2.11.0