Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2563c276 authored by Federico Baron's avatar Federico Baron Committed by Automerger Merge Worker
Browse files

Fix bug where very large widgets get cropped out am: cb36de9e

parents 5d744eed cb36de9e
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.launcher3.widget;

import static android.view.View.MeasureSpec.getSize;
import static android.view.View.MeasureSpec.makeMeasureSpec;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
@@ -118,6 +119,8 @@ public class WidgetCell extends LinearLayout {
    private TextView mWidgetName;
    private TextView mWidgetDims;
    private TextView mWidgetDescription;
    private Consumer<Bitmap> mCallback;
    private @Nullable Bitmap mCachedPreview;

    protected WidgetItem mItem;

@@ -429,6 +432,8 @@ public class WidgetCell extends LinearLayout {
     */
    private void ensurePreviewWithCallback(Consumer<Bitmap> callback,
            @Nullable Bitmap cachedPreview) {
        mCallback = callback;
        mCachedPreview = cachedPreview;
        if (mAppWidgetHostViewPreview != null) {
            int containerWidth = (int) (mTargetPreviewWidth * mPreviewContainerScale);
            int containerHeight = (int) (mTargetPreviewHeight * mPreviewContainerScale);
@@ -469,6 +474,7 @@ public class WidgetCell extends LinearLayout {
                    INDEX_WIDGET_CENTERING,
                    -(params.width - (params.width * mPreviewContainerScale)) / 2.0f,
                    -(params.height - (params.height * mPreviewContainerScale)) / 2.0f);
            mWidgetImageContainer.removeAllViews();
            mWidgetImageContainer.addView(mAppWidgetHostViewPreview, /* index= */ 0);
            mWidgetImage.setVisibility(View.GONE);
            applyPreview(null);
@@ -579,4 +585,19 @@ public class WidgetCell extends LinearLayout {
                (mTargetPreviewHeight - verticalPadding) * mPreviewContainerScale
                        / appWidgetContentHeight);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int padding = getPaddingLeft() + getPaddingRight();
        int allowedWidth = getSize(widthMeasureSpec) - padding;

        // Here we prevent having clipped widgets when they're too large as the preview width is
        // larger than the max allowed width. We then re-do the preview with the new preview width
        if (allowedWidth > 0 && mCachedPreview == null && allowedWidth < mTargetPreviewWidth) {
            mTargetPreviewWidth = allowedWidth;
            ensurePreviewWithCallback(mCallback, null);
        }

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}