Snap for 7662560 from e46e09469e to tm-release
Change-Id: I812f0ad5105c7e2c0e72fa993d09255bf0366f41
This commit is contained in:
@@ -290,19 +290,35 @@ public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_T
|
||||
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;
|
||||
}
|
||||
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 if (TaskView.clipStatusAndNavBars(dp)) {
|
||||
out.x = dp.availableWidthPx;
|
||||
out.y = dp.availableHeightPx;
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -396,9 +396,17 @@ public class RecentsOrientedState implements
|
||||
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);
|
||||
|
||||
@@ -2807,14 +2807,49 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
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 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
// 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();
|
||||
}
|
||||
@@ -2879,11 +2924,33 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
return anim;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
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());
|
||||
|
||||
|
||||
@@ -211,10 +211,6 @@ public class TaskThumbnailView extends View implements PluginListener<OverviewSc
|
||||
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 @@ public class TaskThumbnailView extends View implements PluginListener<OverviewSc
|
||||
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 @@ public class TaskThumbnailView extends View implements PluginListener<OverviewSc
|
||||
|
||||
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;
|
||||
|
||||
@@ -146,19 +146,39 @@ public class TaskView extends FrameLayout implements Reusable {
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user