From 334efebaba9f17d9fc79bfdee1a610d6d626dc7c Mon Sep 17 00:00:00 2001 From: Zak Cohen Date: Fri, 19 Mar 2021 16:42:07 -0700 Subject: [PATCH] Overview - Adds first pass at making landscape layout real. Adds dynamic sizing to margins around task view, also creates space in the overview actions view in landscape to make space for the proactive chips if needed. Bug: 182529089 Test: Local build and run on two devices Change-Id: I447de3564a3249ede4e8e8a4d3e5d1c177f6be61 --- .../res/layout/overview_clear_all_button.xml | 3 +- quickstep/res/layout/task.xml | 5 +-- quickstep/res/values-land/dimens.xml | 2 ++ quickstep/res/values/dimens.xml | 4 --- .../quickstep/BaseActivityInterface.java | 26 ++++++++------- .../quickstep/util/TaskViewSimulator.java | 6 ++-- .../quickstep/views/ClearAllButton.java | 15 ++++++--- .../quickstep/views/OverviewActionsView.java | 13 ++++++++ .../android/quickstep/views/RecentsView.java | 18 +++++------ .../android/quickstep/views/TaskMenuView.java | 7 ++-- .../com/android/quickstep/views/TaskView.java | 32 +++++++++---------- res/values/dimens.xml | 4 +++ src/com/android/launcher3/DeviceProfile.java | 9 ++++++ 13 files changed, 87 insertions(+), 57 deletions(-) diff --git a/quickstep/res/layout/overview_clear_all_button.xml b/quickstep/res/layout/overview_clear_all_button.xml index 34ff91df9a..c61610a438 100644 --- a/quickstep/res/layout/overview_clear_all_button.xml +++ b/quickstep/res/layout/overview_clear_all_button.xml @@ -22,5 +22,4 @@ android:layout_height="wrap_content" android:text="@string/recents_clear_all" android:textColor="?attr/workspaceTextColor" - android:textSize="14sp" - android:translationY="@dimen/task_thumbnail_half_top_margin" /> \ No newline at end of file + android:textSize="14sp" /> \ No newline at end of file diff --git a/quickstep/res/layout/task.xml b/quickstep/res/layout/task.xml index 0f9a6aad6f..7e5b85c41d 100644 --- a/quickstep/res/layout/task.xml +++ b/quickstep/res/layout/task.xml @@ -13,6 +13,8 @@ See the License for the specific language governing permissions and limitations under the License. --> + + android:layout_height="match_parent"/> 24dp + + 8dp \ No newline at end of file diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index 755bce8612..0ff11c5f5e 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -15,11 +15,7 @@ --> - - 80dp - 40dp 48dp - 16dp 2dp diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index 5942b3aaf4..462630cac3 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -201,14 +201,18 @@ public abstract class BaseActivityInterface 0 ? endTranslation : 0; } + + /** + * Get the Y translation that is set in the original layout position, before scrolling. + */ + private float getOriginalTranslationY() { + return mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx / 2.0f; + } } diff --git a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java index 1241982040..6fcd54cf62 100644 --- a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java +++ b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java @@ -29,6 +29,7 @@ import android.widget.FrameLayout; import androidx.annotation.IntDef; import androidx.annotation.Nullable; +import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; import com.android.launcher3.R; import com.android.launcher3.util.MultiValueAlpha; @@ -144,6 +145,7 @@ public class OverviewActionsView extends FrameLayo public void setInsets(Rect insets) { mInsets.set(insets); updateVerticalMargin(SysUINavigationMode.getMode(getContext())); + updateHorizontalPadding(); } public void updateHiddenFlags(@ActionsHiddenFlags int visibilityFlags, boolean enable) { @@ -187,6 +189,10 @@ public class OverviewActionsView extends FrameLayo return mMultiValueAlpha.getProperty(INDEX_FULLSCREEN_ALPHA); } + private void updateHorizontalPadding() { + setPadding(mInsets.left, 0, mInsets.right, 0); + } + /** Updates vertical margins for different navigation mode or configuration changes. */ public void updateVerticalMargin(Mode mode) { LayoutParams actionParams = (LayoutParams) findViewById( @@ -196,6 +202,13 @@ public class OverviewActionsView extends FrameLayo getBottomVerticalMargin(mode)); } + /** + * Set the device profile for this view to draw with. + */ + public void setDp(DeviceProfile dp) { + requestLayout(); + } + protected int getBottomVerticalMargin(Mode mode) { int bottomMargin; int orientation = getResources().getConfiguration().orientation; diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 4d8176c7e5..d637bb4aca 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -310,7 +310,6 @@ public abstract class RecentsView extends PagedView protected final T mActivity; private final float mFastFlingVelocity; private final RecentsModel mModel; - private final int mTaskTopMargin; private final int mRowSpacing; private final ClearAllButton mClearAllButton; private final Rect mClearAllButtonDeadZoneRect = new Rect(); @@ -529,8 +528,6 @@ public abstract class RecentsView extends PagedView mIsRtl = mOrientationHandler.getRecentsRtlSetting(getResources()); setLayoutDirection(mIsRtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR); - mTaskTopMargin = getResources() - .getDimensionPixelSize(R.dimen.task_thumbnail_top_margin); mRowSpacing = getResources().getDimensionPixelSize(R.dimen.overview_grid_row_spacing); mSquaredTouchSlop = squaredTouchSlop(context); @@ -1066,7 +1063,9 @@ public abstract class RecentsView extends PagedView public void setInsets(Rect insets) { mInsets.set(insets); resetPaddingFromTaskSize(); - mLiveTileTaskViewSimulator.setDp(mActivity.getDeviceProfile()); + DeviceProfile dp = mActivity.getDeviceProfile(); + mLiveTileTaskViewSimulator.setDp(dp); + mActionsView.setDp(dp); } private void resetPaddingFromTaskSize() { @@ -1075,7 +1074,7 @@ public abstract class RecentsView extends PagedView mTaskWidth = mTempRect.width(); mTaskHeight = mTempRect.height(); - mTempRect.top -= mTaskTopMargin; + mTempRect.top -= dp.overviewTaskThumbnailTopMarginPx; setPadding(mTempRect.left - mInsets.left, mTempRect.top - mInsets.top, dp.widthPx - mInsets.right - mTempRect.right, dp.heightPx - mInsets.bottom - mTempRect.bottom); @@ -1602,7 +1601,8 @@ public abstract class RecentsView extends PagedView final int boxLength = Math.max(mTaskWidth, mTaskHeight); float availableHeight = mLastComputedGridSize.height(); float rowHeight = (availableHeight - mRowSpacing) / 2; - float gridScale = rowHeight / (boxLength + mTaskTopMargin); + int taskTopMargin = mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx; + float gridScale = rowHeight / (boxLength + taskTopMargin); int topRowWidth = 0; int bottomRowWidth = 0; @@ -1635,7 +1635,7 @@ public abstract class RecentsView extends PagedView gridTranslations[i] -= taskGridHorizontalDiff; taskView.setGridOffsetTranslationX(taskGridHorizontalDiff); - float taskGridVerticalDiff = mLastComputedGridSize.top + mTaskTopMargin * gridScale + float taskGridVerticalDiff = mLastComputedGridSize.top + taskTopMargin * gridScale - mLastComputedTaskSize.top; // Off-set gap due to task scaling. @@ -1669,7 +1669,7 @@ public abstract class RecentsView extends PagedView bottomSet.add(i); // Move into bottom row. - float heightOffset = (boxLength + mTaskTopMargin) * gridScale + mRowSpacing; + float heightOffset = (boxLength + taskTopMargin) * gridScale + mRowSpacing; taskView.setGridTranslationY(heightOffset + taskGridVerticalDiff); // Move horizontally into empty space. @@ -2485,7 +2485,7 @@ public abstract class RecentsView extends PagedView if (child == mSplitHiddenTaskView) { int left = newScroll[i] + getPaddingStart(); - int topMargin = mSplitHiddenTaskView.getThumbnailTopMargin(); + int topMargin = mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx; int top = -mSplitHiddenTaskView.getHeight() - locationOnScreen[1]; mSplitHiddenTaskView.layout(left, top, left + mSplitHiddenTaskView.getWidth(), diff --git a/quickstep/src/com/android/quickstep/views/TaskMenuView.java b/quickstep/src/com/android/quickstep/views/TaskMenuView.java index a5b7a5b575..a46daf38fd 100644 --- a/quickstep/src/com/android/quickstep/views/TaskMenuView.java +++ b/quickstep/src/com/android/quickstep/views/TaskMenuView.java @@ -58,7 +58,6 @@ public class TaskMenuView extends AbstractFloatingView { private static final int REVEAL_OPEN_DURATION = 150; private static final int REVEAL_CLOSE_DURATION = 100; - private final float mThumbnailTopMargin; private BaseDraggingActivity mActivity; private TextView mTaskName; private AnimatorSet mOpenCloseAnimator; @@ -73,7 +72,6 @@ public class TaskMenuView extends AbstractFloatingView { super(context, attrs, defStyleAttr); mActivity = BaseDraggingActivity.fromContext(context); - mThumbnailTopMargin = getResources().getDimension(R.dimen.task_thumbnail_top_margin); setClipToOutline(true); } @@ -123,14 +121,15 @@ public class TaskMenuView extends AbstractFloatingView { } public void setPosition(float x, float y, PagedOrientationHandler pagedOrientationHandler) { - float adjustedY = y + mThumbnailTopMargin; + int taskTopMargin = mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx; + float adjustedY = y + taskTopMargin; // Changing pivot to make computations easier // NOTE: Changing the pivots means the rotated view gets rotated about the new pivots set, // which would render the X and Y position set here incorrect setPivotX(0); if (mActivity.getDeviceProfile().isTablet && FeatureFlags.ENABLE_OVERVIEW_GRID.get()) { // In tablet, set pivotY to original position without mThumbnailTopMargin adjustment. - setPivotY(-mThumbnailTopMargin); + setPivotY(-taskTopMargin); } else { setPivotY(0); } diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index a2acab880f..be044e7c48 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -376,7 +376,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { mCurrentFullscreenParams = new FullscreenDrawParams(context); mDigitalWellBeingToast = new DigitalWellBeingToast(mActivity, this); - mOutlineProvider = new TaskOutlineProvider(getContext(), mCurrentFullscreenParams); + mOutlineProvider = new TaskOutlineProvider(getContext(), mCurrentFullscreenParams, + mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx); setOutlineProvider(mOutlineProvider); } @@ -673,16 +674,12 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { } } - public int getThumbnailTopMargin() { - return (int) getResources().getDimension(R.dimen.task_thumbnail_top_margin); - } - public void setOrientationState(RecentsOrientedState orientationState) { PagedOrientationHandler orientationHandler = orientationState.getOrientationHandler(); boolean isRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL; LayoutParams snapshotParams = (LayoutParams) mSnapshotView.getLayoutParams(); - int thumbnailPadding = (int) getResources().getDimension(R.dimen.task_thumbnail_top_margin); - int taskIconMargin = (int) getResources().getDimension(R.dimen.task_icon_top_margin); + snapshotParams.topMargin = mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx; + int taskIconMargin = mActivity.getDeviceProfile().overviewTaskMarginPx; int taskIconHeight = (int) getResources().getDimension(R.dimen.task_thumbnail_icon_size); LayoutParams iconParams = (LayoutParams) mIconView.getLayoutParams(); switch (orientationHandler.getRotation()) { @@ -694,7 +691,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { break; case ROTATION_180: iconParams.gravity = BOTTOM | CENTER_HORIZONTAL; - iconParams.bottomMargin = -thumbnailPadding; + iconParams.bottomMargin = -snapshotParams.topMargin; iconParams.leftMargin = iconParams.rightMargin = 0; iconParams.topMargin = taskIconMargin; break; @@ -711,6 +708,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { iconParams.topMargin = taskIconMargin; break; } + mSnapshotView.setLayoutParams(snapshotParams); mIconView.setLayoutParams(iconParams); mIconView.setRotation(orientationHandler.getDegreesRotated()); @@ -1083,17 +1081,17 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { private static final class TaskOutlineProvider extends ViewOutlineProvider { - private final int mMarginTop; + private int mMarginTop; private FullscreenDrawParams mFullscreenParams; - TaskOutlineProvider(Context context, FullscreenDrawParams fullscreenParams) { - mMarginTop = context.getResources().getDimensionPixelSize( - R.dimen.task_thumbnail_top_margin); + TaskOutlineProvider(Context context, FullscreenDrawParams fullscreenParams, int topMargin) { + mMarginTop = topMargin; mFullscreenParams = fullscreenParams; } - public void setFullscreenParams(FullscreenDrawParams params) { + public void updateParams(FullscreenDrawParams params, int topMargin) { mFullscreenParams = params; + mMarginTop = topMargin; } @Override @@ -1216,7 +1214,9 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { } thumbnail.setFullscreenParams(mCurrentFullscreenParams); - mOutlineProvider.setFullscreenParams(mCurrentFullscreenParams); + mOutlineProvider.updateParams( + mCurrentFullscreenParams, + mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx); invalidateOutline(); } @@ -1238,8 +1238,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { void updateTaskSize() { ViewGroup.LayoutParams params = getLayoutParams(); if (mActivity.getDeviceProfile().isTablet && FeatureFlags.ENABLE_OVERVIEW_GRID.get()) { - final int thumbnailPadding = (int) getResources().getDimension( - R.dimen.task_thumbnail_top_margin); + final int thumbnailPadding = + mActivity.getDeviceProfile().overviewTaskThumbnailTopMarginPx; Rect lastComputedTaskSize = getRecentsView().getLastComputedTaskSize(); int taskWidth = lastComputedTaskSize.width(); diff --git a/res/values/dimens.xml b/res/values/dimens.xml index cf830c7ed4..d54e3a142c 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -286,4 +286,8 @@ 16dp + + 0dp + 0dp + diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index fa19ee6918..09f4cde195 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -151,6 +151,10 @@ public class DeviceProfile { public int allAppsIconDrawablePaddingPx; public float allAppsIconTextSizePx; + // Overview + public int overviewTaskThumbnailTopMarginPx; + public int overviewTaskMarginPx; + // Widgets public final PointF appWidgetScale = new PointF(1.0f, 1.0f); @@ -297,6 +301,11 @@ public class DeviceProfile { : (hotseatBarTopPaddingPx + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize))); + + overviewTaskMarginPx = res.getDimensionPixelSize(R.dimen.overview_task_margin); + overviewTaskThumbnailTopMarginPx = res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_size) + 2 * overviewTaskMarginPx; + // Calculate all of the remaining variables. extraSpace = updateAvailableDimensions(res); // Now that we have all of the variables calculated, we can tune certain sizes.