Merge "Import translations. DO NOT MERGE ANYWHERE" into sc-v2-dev
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index e781160..e2ef3bc 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -290,19 +290,35 @@
public static void getTaskDimension(Context context, DeviceProfile dp, PointF out) {
if (dp.isMultiWindowMode) {
WindowBounds bounds = SplitScreenBounds.INSTANCE.getSecondaryWindowBounds(context);
- if (TaskView.clipStatusAndNavBars(dp)) {
- out.x = bounds.availableSize.x;
- out.y = bounds.availableSize.y;
- } else {
- out.x = bounds.availableSize.x + bounds.insets.left + bounds.insets.right;
- out.y = bounds.availableSize.y + bounds.insets.top + bounds.insets.bottom;
+ out.x = bounds.availableSize.x;
+ out.y = bounds.availableSize.y;
+ if (!TaskView.clipLeft(dp)) {
+ out.x += bounds.insets.left;
}
- } else if (TaskView.clipStatusAndNavBars(dp)) {
- out.x = dp.availableWidthPx;
- out.y = dp.availableHeightPx;
+ if (!TaskView.clipRight(dp)) {
+ out.x += bounds.insets.right;
+ }
+ if (!TaskView.clipTop(dp)) {
+ out.y += bounds.insets.top;
+ }
+ if (!TaskView.clipBottom(dp)) {
+ out.y += bounds.insets.bottom;
+ }
} else {
out.x = dp.widthPx;
out.y = dp.heightPx;
+ if (TaskView.clipLeft(dp)) {
+ out.x -= dp.getInsets().left;
+ }
+ if (TaskView.clipRight(dp)) {
+ out.x -= dp.getInsets().right;
+ }
+ if (TaskView.clipTop(dp)) {
+ out.y -= dp.getInsets().top;
+ }
+ if (TaskView.clipBottom(dp)) {
+ out.y -= Math.max(dp.getInsets().bottom, dp.taskbarSize);
+ }
}
}
diff --git a/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java b/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
index 21e0ae8..841e578 100644
--- a/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
+++ b/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
@@ -396,9 +396,17 @@
Rect insets = dp.getInsets();
float fullWidth = dp.widthPx;
float fullHeight = dp.heightPx;
- if (TaskView.clipStatusAndNavBars(dp)) {
- fullWidth -= insets.left + insets.right;
- fullHeight -= insets.top + insets.bottom;
+ if (TaskView.clipLeft(dp)) {
+ fullWidth -= insets.left;
+ }
+ if (TaskView.clipRight(dp)) {
+ fullWidth -= insets.right;
+ }
+ if (TaskView.clipTop(dp)) {
+ fullHeight -= insets.top;
+ }
+ if (TaskView.clipBottom(dp)) {
+ fullHeight -= insets.bottom;
}
getTaskDimension(mContext, dp, outPivot);
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 853a3aa..618d9aa 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -2807,14 +2807,49 @@
resetTaskVisuals();
int pageToSnapTo = mCurrentPage;
- if ((dismissedIndex < pageToSnapTo && !showAsGrid)
- || pageToSnapTo == taskCount - 1) {
- pageToSnapTo -= 1;
- }
+ int taskViewIdToSnapTo = -1;
if (showAsGrid) {
+ // Get the id of the task view we will snap to based on the current
+ // page's relative position as the order of indices change over time due
+ // to dismissals.
+ TaskView snappedTaskView = getTaskViewAtByAbsoluteIndex(mCurrentPage);
+ if (snappedTaskView != null) {
+ if (snappedTaskView.getTaskViewId() == mFocusedTaskViewId) {
+ if (finalNextFocusedTaskView != null) {
+ taskViewIdToSnapTo = finalNextFocusedTaskView.getTaskViewId();
+ } else {
+ taskViewIdToSnapTo = mFocusedTaskViewId;
+ }
+ } else {
+ int snappedTaskViewId = snappedTaskView.getTaskViewId();
+ boolean isSnappedTaskInTopRow = mTopRowIdSet.contains(
+ snappedTaskViewId);
+ IntArray taskViewIdArray =
+ isSnappedTaskInTopRow ? getTopRowIdArray()
+ : getBottomRowIdArray();
+ int snappedIndex = taskViewIdArray.indexOf(snappedTaskViewId);
+ taskViewIdArray.removeValue(dismissedTaskViewId);
+ if (snappedIndex < taskViewIdArray.size()) {
+ taskViewIdToSnapTo = taskViewIdArray.get(snappedIndex);
+ } else if (snappedIndex == taskViewIdArray.size()) {
+ // If the snapped task is the last item from the dismissed row,
+ // snap to the same column in the other grid row
+ IntArray inverseRowTaskViewIdArray =
+ isSnappedTaskInTopRow ? getBottomRowIdArray()
+ : getTopRowIdArray();
+ if (snappedIndex < inverseRowTaskViewIdArray.size()) {
+ taskViewIdToSnapTo = inverseRowTaskViewIdArray.get(
+ snappedIndex);
+ }
+ }
+ }
+ }
+
int primaryScroll = mOrientationHandler.getPrimaryScroll(RecentsView.this);
int currentPageScroll = getScrollForPage(pageToSnapTo);
mCurrentPageScrollDiff = primaryScroll - currentPageScroll;
+ } else if (dismissedIndex < pageToSnapTo || pageToSnapTo == taskCount - 1) {
+ pageToSnapTo -= 1;
}
removeViewInLayout(dismissedTaskView);
mTopRowIdSet.remove(dismissedTaskViewId);
@@ -2834,40 +2869,50 @@
// Update scroll and snap to page.
updateScrollSynchronously();
- int highestVisibleTaskIndex = getHighestVisibleTaskIndex();
- if (highestVisibleTaskIndex < Integer.MAX_VALUE) {
- TaskView taskView = getTaskViewAt(highestVisibleTaskIndex);
+ if (showAsGrid) {
+ // Rebalance tasks in the grid
+ int highestVisibleTaskIndex = getHighestVisibleTaskIndex();
+ if (highestVisibleTaskIndex < Integer.MAX_VALUE) {
+ TaskView taskView = getTaskViewAt(highestVisibleTaskIndex);
- boolean shouldRebalance = false;
- int screenStart = mOrientationHandler.getPrimaryScroll(
- RecentsView.this);
- int taskStart = mOrientationHandler.getChildStart(taskView)
- + (int) taskView.getOffsetAdjustment(
- /*fullscreenEnabled=*/ false,
- /*gridEnabled=*/ true);
-
- // Rebalance only if there is a maximum gap between the task and the
- // screen's edge; this ensures that rebalanced tasks are outside the
- // visible screen.
- if (mIsRtl) {
- shouldRebalance = taskStart <= screenStart + mPageSpacing;
- } else {
- int screenEnd = screenStart + mOrientationHandler.getMeasuredSize(
+ boolean shouldRebalance = false;
+ int screenStart = mOrientationHandler.getPrimaryScroll(
RecentsView.this);
- int taskSize = (int) (mOrientationHandler.getMeasuredSize(taskView)
- * taskView.getSizeAdjustment(/*fullscreenEnabled=*/ false));
- int taskEnd = taskStart + taskSize;
+ int taskStart = mOrientationHandler.getChildStart(taskView)
+ + (int) taskView.getOffsetAdjustment(/*fullscreenEnabled=*/
+ false, /*gridEnabled=*/ true);
- shouldRebalance = taskEnd >= screenEnd - mPageSpacing;
+ // Rebalance only if there is a maximum gap between the task and the
+ // screen's edge; this ensures that rebalanced tasks are outside the
+ // visible screen.
+ if (mIsRtl) {
+ shouldRebalance = taskStart <= screenStart + mPageSpacing;
+ } else {
+ int screenEnd =
+ screenStart + mOrientationHandler.getMeasuredSize(
+ RecentsView.this);
+ int taskSize = (int) (mOrientationHandler.getMeasuredSize(
+ taskView) * taskView
+ .getSizeAdjustment(/*fullscreenEnabled=*/false));
+ int taskEnd = taskStart + taskSize;
+
+ shouldRebalance = taskEnd >= screenEnd - mPageSpacing;
+ }
+
+ if (shouldRebalance) {
+ updateGridProperties(/*isTaskDismissal=*/ true,
+ highestVisibleTaskIndex);
+ updateScrollSynchronously();
+ }
}
- if (shouldRebalance) {
- updateGridProperties(/*isTaskDismissal=*/ true,
- highestVisibleTaskIndex);
- updateScrollSynchronously();
+ // If snapping to another page due to indices rearranging, find the new
+ // index after dismissal & rearrange using the task view id.
+ if (taskViewIdToSnapTo != -1) {
+ pageToSnapTo = indexOfChild(
+ getTaskViewFromTaskViewId(taskViewIdToSnapTo));
}
}
-
setCurrentPage(pageToSnapTo);
dispatchScrollChanged();
}
@@ -2880,10 +2925,32 @@
}
/**
+ * Returns all the tasks in the top row, without the focused task
+ */
+ private IntArray getTopRowIdArray() {
+ if (mTopRowIdSet.isEmpty()) {
+ return new IntArray(0);
+ }
+ IntArray topArray = new IntArray(mTopRowIdSet.size());
+ int taskViewCount = getTaskViewCount();
+ for (int i = 0; i < taskViewCount; i++) {
+ int taskViewId = getTaskViewAt(i).getTaskViewId();
+ if (mTopRowIdSet.contains(taskViewId)) {
+ topArray.add(taskViewId);
+ }
+ }
+ return topArray;
+ }
+
+ /**
* Returns all the tasks in the bottom row, without the focused task
*/
private IntArray getBottomRowIdArray() {
- IntArray bottomArray = new IntArray();
+ int bottomRowIdArraySize = getTaskViewCount() - mTopRowIdSet.size() - 1;
+ if (bottomRowIdArraySize <= 0) {
+ return new IntArray(0);
+ }
+ IntArray bottomArray = new IntArray(bottomRowIdArraySize);
int taskViewCount = getTaskViewCount();
for (int i = 0; i < taskViewCount; i++) {
int taskViewId = getTaskViewAt(i).getTaskViewId();
@@ -2904,7 +2971,7 @@
if (mTopRowIdSet.isEmpty()) return Integer.MAX_VALUE; // return earlier
int lastVisibleIndex = Integer.MAX_VALUE;
- IntArray topRowIdArray = mTopRowIdSet.getArray();
+ IntArray topRowIdArray = getTopRowIdArray();
IntArray bottomRowIdArray = getBottomRowIdArray();
int balancedColumns = Math.min(bottomRowIdArray.size(), topRowIdArray.size());
diff --git a/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java b/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java
index 0577cce..28044e4 100644
--- a/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java
+++ b/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java
@@ -211,10 +211,6 @@
return Insets.NONE;
}
- if (!TaskView.clipStatusAndNavBars(mActivity.getDeviceProfile())) {
- return Insets.NONE;
- }
-
RectF bitmapRect = new RectF(
0, 0,
mThumbnailData.thumbnail.getWidth(), mThumbnailData.thumbnail.getHeight());
@@ -228,11 +224,14 @@
RectF boundsInBitmapSpace = new RectF();
boundsToBitmapSpace.mapRect(boundsInBitmapSpace, viewRect);
- return Insets.of(
- Math.round(boundsInBitmapSpace.left),
- Math.round(boundsInBitmapSpace.top),
- Math.round(bitmapRect.right - boundsInBitmapSpace.right),
- Math.round(bitmapRect.bottom - boundsInBitmapSpace.bottom));
+ DeviceProfile dp = mActivity.getDeviceProfile();
+ int leftInset = TaskView.clipLeft(dp) ? Math.round(boundsInBitmapSpace.left) : 0;
+ int topInset = TaskView.clipTop(dp) ? Math.round(boundsInBitmapSpace.top) : 0;
+ int rightInset = TaskView.clipRight(dp) ? Math.round(
+ bitmapRect.right - boundsInBitmapSpace.right) : 0;
+ int bottomInset = TaskView.clipBottom(dp)
+ ? Math.round(bitmapRect.bottom - boundsInBitmapSpace.bottom) : 0;
+ return Insets.of(leftInset, topInset, rightInset, bottomInset);
}
@@ -440,8 +439,19 @@
int thumbnailRotation = thumbnailData.rotation;
int deltaRotate = getRotationDelta(currentRotation, thumbnailRotation);
- RectF thumbnailClipHint = TaskView.clipStatusAndNavBars(dp)
- ? new RectF(thumbnailData.insets) : new RectF();
+ RectF thumbnailClipHint = new RectF();
+ if (TaskView.clipLeft(dp)) {
+ thumbnailClipHint.left = thumbnailData.insets.left;
+ }
+ if (TaskView.clipRight(dp)) {
+ thumbnailClipHint.right = thumbnailData.insets.right;
+ }
+ if (TaskView.clipTop(dp)) {
+ thumbnailClipHint.top = thumbnailData.insets.top;
+ }
+ if (TaskView.clipBottom(dp)) {
+ thumbnailClipHint.bottom = thumbnailData.insets.bottom;
+ }
float scale = thumbnailData.scale;
final float thumbnailScale;
diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java
index cb379f7..f84a05c 100644
--- a/quickstep/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/src/com/android/quickstep/views/TaskView.java
@@ -146,19 +146,39 @@
public static final float MAX_PAGE_SCRIM_ALPHA = 0.4f;
/**
- * Should the TaskView display clip off the status and navigation bars in recents. When this
- * is false the overview shows the whole screen scaled down instead.
+ * Should the TaskView display clip off the left inset in RecentsView.
*/
- public static boolean clipStatusAndNavBars(DeviceProfile deviceProfile) {
- return deviceProfile.isTaskbarPresentInApps;
+ public static boolean clipLeft(DeviceProfile deviceProfile) {
+ return false;
+ }
+
+ /**
+ * Should the TaskView display clip off the top inset in RecentsView.
+ */
+ public static boolean clipTop(DeviceProfile deviceProfile) {
+ return false;
+ }
+
+ /**
+ * Should the TaskView display clip off the right inset in RecentsView.
+ */
+ public static boolean clipRight(DeviceProfile deviceProfile) {
+ return false;
+ }
+
+ /**
+ * Should the TaskView display clip off the bottom inset in RecentsView.
+ */
+ public static boolean clipBottom(DeviceProfile deviceProfile) {
+ return deviceProfile.isTablet;
}
/**
* Should the TaskView scale down to fit whole thumbnail in fullscreen.
*/
public static boolean useFullThumbnail(DeviceProfile deviceProfile) {
- return deviceProfile.isTaskbarPresentInApps;
- };
+ return deviceProfile.isTablet && !deviceProfile.isTaskbarPresentInApps;
+ }
private static final float EDGE_SCALE_DOWN_FACTOR_CAROUSEL = 0.03f;
private static final float EDGE_SCALE_DOWN_FACTOR_GRID = 0.00f;