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

Commit 56e367b7 authored by Alex Chau's avatar Alex Chau Committed by Android (Google) Code Review
Browse files

Merge "Fix taskbar icon flicker and jump when transforming to hotseat" into tm-dev

parents c907fd0a e2e1509d
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import androidx.annotation.Nullable;

import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BaseQuickstepLauncher;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.LauncherState;
import com.android.launcher3.Utilities;
import com.android.launcher3.statemanager.StateManager;
@@ -407,18 +406,13 @@ import java.util.function.Supplier;
        boolean firstFrameVisChanged = (taskbarWillBeVisible && Float.compare(currentValue, 1) != 0)
                || (!taskbarWillBeVisible && Float.compare(currentValue, 0) != 0);

        updateIconAlignment(alignment);

        // Sync the first frame where we swap taskbar and hotseat.
        if (firstFrameVisChanged && mCanSyncViews && !Utilities.IS_RUNNING_IN_TEST_HARNESS) {
            DeviceProfile dp = mLauncher.getDeviceProfile();

            // Do all the heavy work before the sync.
            mControllers.taskbarViewController.createIconAlignmentControllerIfNotExists(dp);

            ViewRootSync.synchronizeNextDraw(mLauncher.getHotseat(),
                    mControllers.taskbarActivityContext.getDragLayer(),
                    () -> updateIconAlignment(alignment));
        } else {
            updateIconAlignment(alignment);
                    () -> {});
        }
    }

+3 −11
Original line number Diff line number Diff line
@@ -204,16 +204,6 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
                ));
    }

    /**
     * Creates the icon alignment controller if it does not already exist.
     * @param launcherDp Launcher device profile.
     */
    public void createIconAlignmentControllerIfNotExists(DeviceProfile launcherDp) {
        if (mIconAlignControllerLazy == null) {
            mIconAlignControllerLazy = createIconAlignmentController(launcherDp);
        }
    }

    /**
     * Sets the taskbar icon alignment relative to Launcher hotseat icons
     * @param alignmentRatio [0, 1]
@@ -221,7 +211,9 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
     *                       1 => fully aligned
     */
    public void setLauncherIconAlignment(float alignmentRatio, DeviceProfile launcherDp) {
        createIconAlignmentControllerIfNotExists(launcherDp);
        if (mIconAlignControllerLazy == null) {
            mIconAlignControllerLazy = createIconAlignmentController(launcherDp);
        }
        mIconAlignControllerLazy.setPlayFraction(alignmentRatio);
        if (alignmentRatio <= 0 || alignmentRatio >= 1) {
            // Cleanup lazy controller so that it is created again in next animation
+2 −8
Original line number Diff line number Diff line
@@ -149,8 +149,6 @@ public class CellLayout extends ViewGroup {
    private boolean mVisualizeDropLocation = true;
    private RectF mVisualizeGridRect = new RectF();
    private Paint mVisualizeGridPaint = new Paint();
    private int mGridVisualizationPaddingX;
    private int mGridVisualizationPaddingY;
    private int mGridVisualizationRoundingRadius;
    private float mGridAlpha = 0f;
    private int mGridColor = 0;
@@ -262,10 +260,6 @@ public class CellLayout extends ViewGroup {
        mBackground.setAlpha(0);

        mGridColor = Themes.getAttrColor(getContext(), R.attr.workspaceAccentColor);
        mGridVisualizationPaddingX = res.getDimensionPixelSize(
                R.dimen.grid_visualization_horizontal_cell_spacing);
        mGridVisualizationPaddingY = res.getDimensionPixelSize(
                R.dimen.grid_visualization_vertical_cell_spacing);
        mGridVisualizationRoundingRadius =
                res.getDimensionPixelSize(R.dimen.grid_visualization_rounding_radius);
        mReorderPreviewAnimationMagnitude = (REORDER_PREVIEW_MAGNITUDE * deviceProfile.iconSizePx);
@@ -595,8 +589,8 @@ public class CellLayout extends ViewGroup {

    protected void visualizeGrid(Canvas canvas) {
        DeviceProfile dp = mActivity.getDeviceProfile();
        int paddingX = Math.min((mCellWidth - dp.iconSizePx) / 2, mGridVisualizationPaddingX);
        int paddingY = Math.min((mCellHeight - dp.iconSizePx) / 2, mGridVisualizationPaddingY);
        int paddingX = Math.min((mCellWidth - dp.iconSizePx) / 2, dp.gridVisualizationPaddingX);
        int paddingY = Math.min((mCellHeight - dp.iconSizePx) / 2, dp.gridVisualizationPaddingY);
        mVisualizeGridRect.set(paddingX, paddingY,
                mCellWidth - paddingX,
                mCellHeight - paddingY);
+26 −14
Original line number Diff line number Diff line
@@ -100,6 +100,8 @@ public class DeviceProfile {
    // Workspace
    public final int desiredWorkspaceHorizontalMarginOriginalPx;
    public int desiredWorkspaceHorizontalMarginPx;
    public int gridVisualizationPaddingX;
    public int gridVisualizationPaddingY;
    public Point cellLayoutBorderSpaceOriginalPx;
    public Point cellLayoutBorderSpacePx;
    public Rect cellLayoutPaddingPx = new Rect();
@@ -302,6 +304,10 @@ public class DeviceProfile {

        desiredWorkspaceHorizontalMarginPx = getHorizontalMarginPx(inv, res);
        desiredWorkspaceHorizontalMarginOriginalPx = desiredWorkspaceHorizontalMarginPx;
        gridVisualizationPaddingX = res.getDimensionPixelSize(
                R.dimen.grid_visualization_horizontal_cell_spacing);
        gridVisualizationPaddingY = res.getDimensionPixelSize(
                R.dimen.grid_visualization_vertical_cell_spacing);

        bottomSheetTopPadding = mInsets.top // statusbar height
                + res.getDimensionPixelSize(R.dimen.bottom_sheet_extra_top_padding)
@@ -1066,24 +1072,23 @@ public class DeviceProfile {
                        mInsets.right + hotseatBarSidePaddingStartPx, paddingBottom);
            }
        } else if (isTaskbarPresent) {
            boolean isRtl = Utilities.isRtl(context.getResources());
            int hotseatHeight = workspacePadding.bottom;
            int taskbarOffset = getTaskbarOffsetY();
            // Push icons to the side
            int additionalQsbSpace = isQsbInline ? qsbWidth + hotseatBorderSpace : 0;

            // Center the QSB vertically with hotseat
            int hotseatTopPadding = hotseatHeight - taskbarOffset - hotseatCellHeightPx;
            int hotseatBottomPadding = getHotseatBottomPadding();
            int hotseatTopPadding =
                    workspacePadding.bottom - hotseatBottomPadding - hotseatCellHeightPx;

            int endOffset = ApiWrapper.getHotseatEndOffset(context);
            // Push icons to the side
            int additionalQsbSpace = isQsbInline ? qsbWidth + hotseatBorderSpace : 0;
            int requiredWidth = iconSizePx * numShownHotseatIcons
                    + hotseatBorderSpace * (numShownHotseatIcons - 1)
                    + additionalQsbSpace;

            int endOffset = ApiWrapper.getHotseatEndOffset(context);
            int hotseatWidth = Math.min(requiredWidth, availableWidthPx - endOffset);
            int sideSpacing = (availableWidthPx - hotseatWidth) / 2;
            mHotseatPadding.set(sideSpacing, hotseatTopPadding, sideSpacing, taskbarOffset);

            mHotseatPadding.set(sideSpacing, hotseatTopPadding, sideSpacing, hotseatBottomPadding);

            boolean isRtl = Utilities.isRtl(context.getResources());
            if (isRtl) {
                mHotseatPadding.right += additionalQsbSpace;
            } else {
@@ -1143,10 +1148,7 @@ public class DeviceProfile {
        }
    }

    /**
     * Returns the number of pixels the taskbar is translated from the bottom of the screen.
     */
    public int getTaskbarOffsetY() {
    private int getHotseatBottomPadding() {
        if (isQsbInline) {
            return getQsbOffsetY() - (Math.abs(hotseatQsbHeight - hotseatCellHeightPx) / 2);
        } else {
@@ -1154,6 +1156,16 @@ public class DeviceProfile {
        }
    }

    /**
     * Returns the number of pixels the taskbar is translated from the bottom of the screen.
     */
    public int getTaskbarOffsetY() {
        int taskbarIconBottomSpace = (taskbarSize - iconSizePx) / 2;
        int launcherIconBottomSpace =
                Math.min((hotseatCellHeightPx - iconSizePx) / 2, gridVisualizationPaddingY);
        return getHotseatBottomPadding() + launcherIconBottomSpace - taskbarIconBottomSpace;
    }

    /**
     * Returns the number of pixels required below OverviewActions excluding insets.
     */