Avoid flicker to drop a widget that needs a config activity.
When dropping a widget that requires an config activity, drop a PendingAppWidgetHostView to workspace Adb command to try the feature: adb shell device_config put launcher com.android.launcher3.enable_add_app_widget_via_config_activity_v2 true Fix: 284236964 Test: manual Flag: aconfig launcher.enable_add_app_widget_via_config_activity_v2 DISABLED Change-Id: Ifd0be5c607a388cf8a8f6d77b46c03112e3e599f
This commit is contained in:
@@ -16,13 +16,20 @@
|
||||
|
||||
package com.android.launcher3.widget;
|
||||
|
||||
import static android.graphics.Paint.ANTI_ALIAS_FLAG;
|
||||
import static android.graphics.Paint.DITHER_FLAG;
|
||||
import static android.graphics.Paint.FILTER_BITMAP_FLAG;
|
||||
|
||||
import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon;
|
||||
import static com.android.launcher3.icons.FastBitmapDrawable.getDisabledColorFilter;
|
||||
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
|
||||
|
||||
import android.appwidget.AppWidgetProviderInfo;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
@@ -85,8 +92,12 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView
|
||||
private boolean mDrawableSizeChanged;
|
||||
|
||||
private final TextPaint mPaint;
|
||||
|
||||
private final Paint mPreviewPaint;
|
||||
private Layout mSetupTextLayout;
|
||||
|
||||
@Nullable private Bitmap mPreviewBitmap;
|
||||
|
||||
public PendingAppWidgetHostView(Context context, LauncherAppWidgetInfo info,
|
||||
@Nullable LauncherAppWidgetProviderInfo appWidget) {
|
||||
this(context, info, appWidget,
|
||||
@@ -116,6 +127,15 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView
|
||||
mDrawableSizeChanged = true;
|
||||
}
|
||||
|
||||
/** Set {@link Bitmap} of widget preview. */
|
||||
public void setPreviewBitmap(@Nullable Bitmap previewBitmap) {
|
||||
if (this.mPreviewBitmap == previewBitmap) {
|
||||
return;
|
||||
}
|
||||
this.mPreviewBitmap = previewBitmap;
|
||||
invalidate();
|
||||
}
|
||||
|
||||
private PendingAppWidgetHostView(Context context, LauncherAppWidgetInfo info,
|
||||
LauncherAppWidgetProviderInfo appwidget, CharSequence label) {
|
||||
super(new ContextThemeWrapper(context, R.style.WidgetContainerTheme));
|
||||
@@ -130,11 +150,16 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView
|
||||
mPaint.setColor(Themes.getAttrColor(getContext(), android.R.attr.textColorPrimary));
|
||||
mPaint.setTextSize(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX,
|
||||
mLauncher.getDeviceProfile().iconTextSizePx, getResources().getDisplayMetrics()));
|
||||
|
||||
mPreviewPaint = new Paint(ANTI_ALIAS_FLAG | DITHER_FLAG | FILTER_BITMAP_FLAG);
|
||||
setWillNotDraw(false);
|
||||
setBackgroundResource(R.drawable.pending_widget_bg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppWidgetProviderInfo getAppWidgetInfo() {
|
||||
return mAppwidget;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateAppWidget(RemoteViews remoteViews) {
|
||||
checkIfRestored();
|
||||
@@ -393,6 +418,11 @@ public class PendingAppWidgetHostView extends LauncherAppWidgetHostView
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
if (mPreviewBitmap != null
|
||||
&& (mInfo.restoreStatus & LauncherAppWidgetInfo.FLAG_UI_NOT_READY) != 0) {
|
||||
canvas.drawBitmap(mPreviewBitmap, 0, 0, mPreviewPaint);
|
||||
return;
|
||||
}
|
||||
if (mCenterDrawable == null) {
|
||||
// Nothing to draw
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user