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

Commit 57e41f9f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Calculate grid layout size separately from task size" into sc-dev

parents da2ecb30 26c1f3b1
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -29,7 +29,11 @@
    <dimen name="overview_actions_bottom_margin_three_button">8dp</dimen>
    <dimen name="overview_actions_horizontal_margin">16dp</dimen>

    <dimen name="recents_row_spacing">48dp</dimen>
    <dimen name="overview_grid_top_margin">77dp</dimen>
    <dimen name="overview_grid_bottom_margin">90dp</dimen>
    <dimen name="overview_grid_side_margin">54dp</dimen>
    <dimen name="overview_grid_row_spacing">42dp</dimen>

    <dimen name="recents_page_spacing">16dp</dimen>
    <dimen name="recents_clear_all_deadzone_vertical_margin">70dp</dimen>

+15 −0
Original line number Diff line number Diff line
@@ -257,6 +257,21 @@ public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_T
                Math.round(x) + Math.round(outWidth), Math.round(y) + Math.round(outHeight));
    }

    /**
     * Calculates the overview grid size for the provided device configuration.
     */
    public final void calculateGridSize(Context context, DeviceProfile dp, Rect outRect) {
        Resources res = context.getResources();
        int topMargin = res.getDimensionPixelSize(R.dimen.overview_grid_top_margin);
        int bottomMargin = res.getDimensionPixelSize(R.dimen.overview_grid_bottom_margin);
        int sideMargin = res.getDimensionPixelSize(R.dimen.overview_grid_side_margin);

        Rect insets = dp.getInsets();
        outRect.set(0, 0, dp.widthPx, dp.heightPx);
        outRect.inset(Math.max(insets.left, sideMargin), Math.max(insets.top, topMargin),
                Math.max(insets.right, sideMargin), Math.max(insets.bottom, bottomMargin));
    }

    /**
     * Calculates the modal taskView size for the provided device configuration
     */
+22 −10
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ public class TaskViewSimulator implements TransformParams.BuilderProxy {
    private final boolean mIsRecentsRtl;

    private final Rect mTaskRect = new Rect();
    private final Rect mGridRect = new Rect();
    private boolean mDrawsBelowRecents;
    private final PointF mPivot = new PointF();
    private DeviceProfile mDp;
@@ -124,7 +125,7 @@ public class TaskViewSimulator implements TransformParams.BuilderProxy {
        Resources resources = context.getResources();
        mIsRecentsRtl = mOrientationState.getOrientationHandler().getRecentsRtlSetting(resources);
        mTaskThumbnailPadding = (int) resources.getDimension(R.dimen.task_thumbnail_top_margin);
        mRowSpacing = (int) resources.getDimension(R.dimen.recents_row_spacing);
        mRowSpacing = (int) resources.getDimension(R.dimen.overview_grid_row_spacing);
    }

    /**
@@ -266,6 +267,7 @@ public class TaskViewSimulator implements TransformParams.BuilderProxy {
            mOrientationStateId = mOrientationState.getStateId();

            getFullScreenScale();
            mSizeStrategy.calculateGridSize(mContext, mDp, mGridRect);
            mThumbnailData.rotation = mOrientationState.getDisplayRotation();

            mPositionHelper.updateThumbnailMatrix(
@@ -304,24 +306,34 @@ public class TaskViewSimulator implements TransformParams.BuilderProxy {
        mMatrix.postTranslate(insets.left, insets.top);
        mMatrix.postScale(scale, scale);

        // Apply TaskView matrix: gridProgress related properties
        float interpolatedGridProgress = ACCEL_DEACCEL.getInterpolation(gridProgress.value);

        // Apply TaskView matrix: gridProgress
        final int boxLength = (int) Math.max(taskWidth, taskHeight);
        float availableHeight =
                mTaskThumbnailPadding + taskHeight + mSizeStrategy.getOverviewActionsHeight(
                        mContext);
        float availableHeight = mGridRect.height();
        float rowHeight = (availableHeight - mRowSpacing) / 2;
        float gridScale = rowHeight / (boxLength + mTaskThumbnailPadding);
        scale = Utilities.mapRange(interpolatedGridProgress, 1f, gridScale);
        mMatrix.postScale(scale, scale, mIsRecentsRtl ? 0 : taskWidth, 0);
        float taskWidthDiff = taskWidth * (1 - gridScale);
        float taskWidthOffset = mIsRecentsRtl ? taskWidthDiff : -taskWidthDiff;
        mOrientationState.getOrientationHandler().set(mMatrix, MATRIX_POST_TRANSLATE,
                Utilities.mapRange(interpolatedGridProgress, 0, taskWidthOffset));
        mOrientationState.getOrientationHandler().setSecondary(mMatrix, MATRIX_POST_TRANSLATE,
                Utilities.mapRange(interpolatedGridProgress, 0, gridTranslationSecondary.value));

        // Apply TaskView matrix: task rect and grid rect difference
        float scaledWidth = taskWidth * gridScale;
        float taskGridHorizontalDiff;
        if (mIsRecentsRtl) {
            float taskRight = mTaskRect.left + scaledWidth;
            taskGridHorizontalDiff = mGridRect.right - taskRight;
        } else {
            float taskLeft = mTaskRect.right - scaledWidth;
            taskGridHorizontalDiff = mGridRect.left - taskLeft;
        }
        float taskGridVerticalDiff =
                mGridRect.top + mTaskThumbnailPadding * gridScale - mTaskRect.top;
        mOrientationState.getOrientationHandler().set(mMatrix, MATRIX_POST_TRANSLATE,
                Utilities.mapRange(interpolatedGridProgress, 0, taskGridHorizontalDiff));
        mOrientationState.getOrientationHandler().setSecondary(mMatrix, MATRIX_POST_TRANSLATE,
                Utilities.mapRange(interpolatedGridProgress, 0, taskGridVerticalDiff));

        // Apply TaskView matrix: translate, scroll
        mMatrix.postTranslate(mTaskRect.left, mTaskRect.top);
        mOrientationState.getOrientationHandler().set(mMatrix, MATRIX_POST_TRANSLATE,
+31 −28
Original line number Diff line number Diff line
@@ -264,6 +264,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
    protected final TransformParams mLiveTileParams = new TransformParams();
    protected final TaskViewSimulator mLiveTileTaskViewSimulator;
    protected final Rect mLastComputedTaskSize = new Rect();
    protected final Rect mLastComputedGridSize = new Rect();
    // How much a task that is directly offscreen will be pushed out due to RecentsView scale/pivot.
    protected Float mLastComputedTaskPushOutDistance = null;
    protected boolean mEnableDrawingLiveTile = false;
@@ -471,7 +472,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        setLayoutDirection(mIsRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
        mTaskTopMargin = getResources()
                .getDimensionPixelSize(R.dimen.task_thumbnail_top_margin);
        mRowSpacing = (int) getResources().getDimension(R.dimen.recents_row_spacing);
        mRowSpacing = getResources().getDimensionPixelSize(R.dimen.overview_grid_row_spacing);
        mSquaredTouchSlop = squaredTouchSlop(context);

        mEmptyIcon = context.getDrawable(R.drawable.ic_empty_recents);
@@ -1012,6 +1013,10 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        setPadding(mTempRect.left - mInsets.left, mTempRect.top - mInsets.top,
                dp.widthPx - mInsets.right - mTempRect.right,
                dp.heightPx - mInsets.bottom - mTempRect.bottom);

        mSizeStrategy.calculateGridSize(mActivity, mActivity.getDeviceProfile(),
                mLastComputedGridSize);

        // Force TaskView to update size from thumbnail
        updateTaskSize();
    }
@@ -1521,22 +1526,10 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        }

        final int boxLength = Math.max(mTaskWidth, mTaskHeight);

        float availableHeight =
                mTaskTopMargin + mTaskHeight + mSizeStrategy.getOverviewActionsHeight(mContext);
        float availableHeight = mLastComputedGridSize.height();
        float rowHeight = (availableHeight - mRowSpacing) / 2;
        float gridScale = rowHeight / (boxLength + mTaskTopMargin);

        TaskView firstTask = getTaskViewAt(0);
        float firstTaskWidthOffset;
        if (mIsRtl) {
            // Move the first task to the right edge.
            firstTaskWidthOffset = mTaskWidth - firstTask.getLayoutParams().width * gridScale;
        } else {
            // Move the first task to the left edge.
            firstTaskWidthOffset = -firstTask.getLayoutParams().width * (1 - gridScale);
        }

        int topRowWidth = 0;
        int bottomRowWidth = 0;
        float topAccumulatedTranslationX = 0;
@@ -1546,13 +1539,22 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
        for (int i = 0; i < taskCount; i++) {
            TaskView taskView = getTaskViewAt(i);
            taskView.setGridScale(gridScale);
            gridTranslations[i] = 0;

            float taskWidthDiff = mTaskWidth - taskView.getLayoutParams().width * gridScale;
            float taskWidthOffset = mIsRtl ? taskWidthDiff : -taskWidthDiff;
            // Visually we want to move all task by firstTaskWidthOffset, but calculate page scroll
            // according to right edge (or left in nonRtl) of TaskView.
            gridTranslations[i] = firstTaskWidthOffset - taskWidthOffset;
            taskView.setGridOffsetTranslationX(taskWidthOffset);
            float scaledWidth = taskView.getLayoutParams().width * gridScale;
            float taskGridHorizontalDiff;
            if (mIsRtl) {
                float taskRight = mLastComputedTaskSize.left + scaledWidth;
                taskGridHorizontalDiff = mLastComputedGridSize.right - taskRight;
            } else {
                float taskLeft = mLastComputedTaskSize.right - scaledWidth;
                taskGridHorizontalDiff = mLastComputedGridSize.left - taskLeft;
            }
            gridTranslations[i] -= taskGridHorizontalDiff;
            taskView.setGridOffsetTranslationX(taskGridHorizontalDiff);

            float taskGridVerticalDiff = mLastComputedGridSize.top + mTaskTopMargin * gridScale
                    - mLastComputedTaskSize.top;

            // Off-set gap due to task scaling.
            float widthDiff = taskView.getLayoutParams().width * (1 - gridScale);
@@ -1567,7 +1569,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
                topRowWidth += taskView.getLayoutParams().width * gridScale + mPageSpacing;
                topSet.add(i);

                taskView.setGridTranslationY(0);
                taskView.setGridTranslationY(taskGridVerticalDiff);

                // Move horizontally into empty space.
                float widthOffset = 0;
@@ -1578,15 +1580,14 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView

                float gridTranslationX = mIsRtl ? widthOffset : -widthOffset;
                gridTranslations[i] += gridTranslationX;
                topAccumulatedTranslationX += gridTranslationX + gridScaleTranslationX;
                bottomAccumulatedTranslationX += gridScaleTranslationX;
                topAccumulatedTranslationX += gridTranslationX;
            } else {
                gridTranslations[i] += bottomAccumulatedTranslationX;
                bottomRowWidth += taskView.getLayoutParams().width * gridScale + mPageSpacing;

                // Move into bottom row.
                float heightOffset = (boxLength + mTaskTopMargin) * gridScale + mRowSpacing;
                taskView.setGridTranslationY(heightOffset);
                taskView.setGridTranslationY(heightOffset + taskGridVerticalDiff);

                // Move horizontally into empty space.
                float widthOffset = 0;
@@ -1597,9 +1598,10 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView

                float gridTranslationX = mIsRtl ? widthOffset : -widthOffset;
                gridTranslations[i] += gridTranslationX;
                topAccumulatedTranslationX += gridScaleTranslationX;
                bottomAccumulatedTranslationX += gridTranslationX + gridScaleTranslationX;
                bottomAccumulatedTranslationX += gridTranslationX;
            }
            topAccumulatedTranslationX += gridScaleTranslationX;
            bottomAccumulatedTranslationX += gridScaleTranslationX;
        }

        // Use the accumulated translation of the longer row.
@@ -1632,8 +1634,9 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
                    mIsRtl ? -shortTotalCompensation : shortTotalCompensation;
        }

        float clearAllTotalTranslationX = firstTaskWidthOffset + clearAllAccumulatedTranslation
                + clearAllShorterRowCompensation + clearAllShortTotalCompensation;
        float clearAllTotalTranslationX =
                clearAllAccumulatedTranslation + clearAllShorterRowCompensation
                        + clearAllShortTotalCompensation;

        // We need to maintain first task's grid translation at 0, now shift translation of all
        // the TaskViews to achieve that.