Fix class cast issue in AddItemActivity am: 671ffb88ca am: 414e50b0f3
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15299573
Change-Id: I799285ff538d8b9fd232edfb88faa8af09327cd0
diff --git a/src/com/android/launcher3/widget/WidgetCell.java b/src/com/android/launcher3/widget/WidgetCell.java
index edcab4e..c2e1caa 100644
--- a/src/com/android/launcher3/widget/WidgetCell.java
+++ b/src/com/android/launcher3/widget/WidgetCell.java
@@ -46,6 +46,7 @@
import com.android.launcher3.BaseActivity;
import com.android.launcher3.CheckLongPressHelper;
import com.android.launcher3.DeviceProfile;
+import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.icons.FastBitmapDrawable;
import com.android.launcher3.icons.RoundDrawableWrapper;
@@ -242,12 +243,7 @@
private void applyPreviewOnAppWidgetHostView(WidgetItem item) {
if (mRemoteViewsPreview != null) {
- mAppWidgetHostViewPreview = new NavigableAppWidgetHostView(getContext()) {
- @Override
- protected boolean shouldAllowDirectClick() {
- return false;
- }
- };
+ mAppWidgetHostViewPreview = createAppWidgetHostView(getContext());
setAppWidgetHostViewPreview(mAppWidgetHostViewPreview, item.widgetInfo,
mRemoteViewsPreview);
return;
@@ -255,10 +251,15 @@
if (!item.hasPreviewLayout()) return;
- mAppWidgetHostViewPreview = new LauncherAppWidgetHostView(getContext());
+ Context context = getContext();
+ // If the context is a Launcher activity, DragView will show mAppWidgetHostViewPreview as
+ // a preview during drag & drop. And thus, we should use LauncherAppWidgetHostView, which
+ // supports applying local color extraction during drag & drop.
+ mAppWidgetHostViewPreview = isLauncherContext(context)
+ ? new LauncherAppWidgetHostView(context)
+ : createAppWidgetHostView(context);
LauncherAppWidgetProviderInfo launcherAppWidgetProviderInfo =
- LauncherAppWidgetProviderInfo.fromProviderInfo(getContext(),
- item.widgetInfo.clone());
+ LauncherAppWidgetProviderInfo.fromProviderInfo(context, item.widgetInfo.clone());
// A hack to force the initial layout to be the preview layout since there is no API for
// rendering a preview layout for work profile apps yet. For non-work profile layout, a
// proper solution is to use RemoteViews(PackageName, LayoutId).
@@ -431,6 +432,24 @@
return "";
}
+ private static NavigableAppWidgetHostView createAppWidgetHostView(Context context) {
+ return new NavigableAppWidgetHostView(context) {
+ @Override
+ protected boolean shouldAllowDirectClick() {
+ return false;
+ }
+ };
+ }
+
+ private static boolean isLauncherContext(Context context) {
+ try {
+ Launcher.getLauncher(context);
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
@Override
public CharSequence getAccessibilityClassName() {
return WidgetCell.class.getName();