Merge "Prevent launcher crash when an App Widget is removed." into sc-dev am: 8c3f8d3f71

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/14063486

Change-Id: I315c2c459b9196523efe2b3667cb9f8e6112a132
This commit is contained in:
Pierre Barbier de Reuille
2021-04-01 15:45:07 +00:00
committed by Automerger Merge Worker
@@ -27,15 +27,21 @@ import android.graphics.drawable.Drawable;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
/** A drawable which renders {@link LauncherAppWidgetHostView} to a canvas. */
/**
* A drawable which renders {@link LauncherAppWidgetHostView} to a canvas.
*
* TODO(b/183609936) Stop using that class and remove it.
*/
public final class AppWidgetHostViewDrawable extends Drawable {
private final LauncherAppWidgetHostView mAppWidgetHostView;
private Paint mPaint = new Paint();
private final Path mClipPath;
private final boolean mWasAttached;
public AppWidgetHostViewDrawable(LauncherAppWidgetHostView appWidgetHostView) {
mAppWidgetHostView = appWidgetHostView;
mWasAttached = appWidgetHostView.isAttachedToWindow();
Path clipPath = null;
if (appWidgetHostView.getClipToOutline()) {
Outline outline = new Outline();
@@ -56,7 +62,12 @@ public final class AppWidgetHostViewDrawable extends Drawable {
if (mClipPath != null) {
canvas.clipPath(mClipPath);
}
mAppWidgetHostView.draw(canvas);
// If the view was never attached, or is current attached, then draw. Otherwise do not try
// to draw, or we might trigger bugs with items that get drawn while requiring the view to
// be attached.
if (!mWasAttached || mAppWidgetHostView.isAttachedToWindow()) {
mAppWidgetHostView.draw(canvas);
}
canvas.restoreToCount(saveCount);
}