From 6f98e1ebd0133f069cad0098126e75beb352eaa0 Mon Sep 17 00:00:00 2001 From: Steven Ng Date: Thu, 18 Mar 2021 22:00:51 +0000 Subject: [PATCH] Notify WidgetHostView drag content change only at onDraw Reapply RemoteViews can happen asynchronously. RemoteViews may not finish reinflation right after setColorResource. Let's call it onDraw. Test: Manual Bug: 182282587 Change-Id: I3653b4c64a5897637181f61096464b75945ab5f5 --- .../launcher3/widget/LauncherAppWidgetHostView.java | 7 ++++++- .../widget/dragndrop/AppWidgetHostViewDragListener.java | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java index 8df70fbf3a..5c18faf213 100644 --- a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java +++ b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java @@ -19,6 +19,7 @@ package com.android.launcher3.widget; import android.appwidget.AppWidgetProviderInfo; import android.content.Context; import android.content.res.Configuration; +import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.RectF; import android.os.Handler; @@ -120,8 +121,12 @@ public class LauncherAppWidgetHostView extends NavigableAppWidgetHostView } else { super.setColorResources(colors); } + } - if (mDragListener != null) { + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (mIsInDragMode && mDragListener != null) { mDragListener.onDragContentChanged(); } } diff --git a/src/com/android/launcher3/widget/dragndrop/AppWidgetHostViewDragListener.java b/src/com/android/launcher3/widget/dragndrop/AppWidgetHostViewDragListener.java index c5e6fbd827..66bb363dde 100644 --- a/src/com/android/launcher3/widget/dragndrop/AppWidgetHostViewDragListener.java +++ b/src/com/android/launcher3/widget/dragndrop/AppWidgetHostViewDragListener.java @@ -54,6 +54,8 @@ public final class AppWidgetHostViewDragListener implements DragController.DragL /** Notifies when there is a content change in the drag view. */ public void onDragContentChanged() { - mDragObject.dragView.invalidate(); + if (mDragObject.dragView != null) { + mDragObject.dragView.invalidate(); + } } }