Merge "Pin desktop tile to the right in overview" into tm-qpr-dev
This commit is contained in:
commit
b759d55a50
|
@ -33,7 +33,8 @@
|
|||
<com.android.quickstep.views.TaskThumbnailView
|
||||
android:id="@+id/snapshot"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.android.quickstep.views.IconView
|
||||
android:id="@+id/icon"
|
||||
|
|
|
@ -77,7 +77,8 @@ public class DesktopTaskView extends TaskView {
|
|||
|
||||
private static final boolean DEBUG = true;
|
||||
|
||||
private List<Task> mTasks;
|
||||
@NonNull
|
||||
private List<Task> mTasks = new ArrayList<>();
|
||||
|
||||
private final ArrayList<TaskThumbnailView> mSnapshotViews = new ArrayList<>();
|
||||
|
||||
|
@ -111,8 +112,6 @@ public class DesktopTaskView extends TaskView {
|
|||
getContext().getTheme()));
|
||||
// TODO(b/244348395): this should be wallpaper
|
||||
setBackground(mBackground);
|
||||
|
||||
mSnapshotViews.add(mSnapshotView);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -132,12 +131,9 @@ public class DesktopTaskView extends TaskView {
|
|||
}
|
||||
Log.d(TAG, sb.toString());
|
||||
}
|
||||
if (tasks.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
cancelPendingLoadTasks();
|
||||
|
||||
mTasks = tasks;
|
||||
mTasks = new ArrayList<>(tasks);
|
||||
mSnapshotViewMap.clear();
|
||||
|
||||
// Ensure there are equal number of snapshot views and tasks.
|
||||
|
@ -210,7 +206,8 @@ public class DesktopTaskView extends TaskView {
|
|||
if (task != null) {
|
||||
return mSnapshotViewMap.get(task.key.id);
|
||||
}
|
||||
return null;
|
||||
// Return the place holder snapshot views. Callers expect this to be non-null
|
||||
return mSnapshotView;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -316,6 +313,11 @@ public class DesktopTaskView extends TaskView {
|
|||
callback.accept(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDesktopTask() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
void refreshThumbnails(@Nullable HashMap<Integer, ThumbnailData> thumbnailDatas) {
|
||||
// Sets new thumbnails based on the incoming data and refreshes the rest.
|
||||
|
|
|
@ -1550,8 +1550,14 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
removeView(focusedTaskView);
|
||||
mMovingTaskView = null;
|
||||
focusedTaskView.resetPersistentViewTransforms();
|
||||
addView(focusedTaskView, 0);
|
||||
setCurrentPage(0);
|
||||
int frontTaskIndex = 0;
|
||||
if (DesktopTaskView.DESKTOP_IS_PROTO2_ENABLED && !focusedTaskView.isDesktopTask()) {
|
||||
// If desktop mode is enabled, desktop task view is pinned at first position.
|
||||
// Move focused task to position 1
|
||||
frontTaskIndex = 1;
|
||||
}
|
||||
addView(focusedTaskView, frontTaskIndex);
|
||||
setCurrentPage(frontTaskIndex);
|
||||
|
||||
updateGridProperties();
|
||||
}
|
||||
|
@ -1588,7 +1594,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
|
||||
int currentTaskId = -1;
|
||||
TaskView currentTaskView = getTaskViewAt(mCurrentPage);
|
||||
if (currentTaskView != null) {
|
||||
if (currentTaskView != null && currentTaskView.getTask() != null) {
|
||||
currentTaskId = currentTaskView.getTask().key.id;
|
||||
}
|
||||
|
||||
|
@ -1617,6 +1623,8 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
// update the map of instance counts
|
||||
mFilterState.updateInstanceCountMap(taskGroups);
|
||||
|
||||
DesktopTask desktopTask = null;
|
||||
|
||||
// Add views as children based on whether it's grouped or single task. Looping through
|
||||
// taskGroups backwards populates the thumbnail grid from least recent to most recent.
|
||||
for (int i = taskGroups.size() - 1; i >= 0; i--) {
|
||||
|
@ -1624,6 +1632,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
boolean isRemovalNeeded = stagedTaskIdToBeRemovedFromGrid != INVALID_TASK_ID
|
||||
&& groupTask.containsTask(stagedTaskIdToBeRemovedFromGrid);
|
||||
|
||||
if (groupTask instanceof DesktopTask) {
|
||||
desktopTask = (DesktopTask) groupTask;
|
||||
// Desktop task will be added separately in the end
|
||||
continue;
|
||||
}
|
||||
|
||||
TaskView taskView;
|
||||
if (isRemovalNeeded && groupTask.hasMultipleTasks()) {
|
||||
// If we need to remove half of a pair of tasks, force a TaskView with Type.SINGLE
|
||||
|
@ -1654,9 +1668,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
|
||||
((GroupedTaskView) taskView).bind(leftTopTask, rightBottomTask, mOrientationState,
|
||||
groupTask.mSplitBounds);
|
||||
} else if (taskView instanceof DesktopTaskView) {
|
||||
((DesktopTaskView) taskView).bind(((DesktopTask) groupTask).tasks,
|
||||
mOrientationState);
|
||||
} else {
|
||||
taskView.bind(groupTask.task1, mOrientationState);
|
||||
}
|
||||
|
@ -1669,6 +1680,14 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
|
||||
if (!taskGroups.isEmpty()) {
|
||||
addView(mClearAllButton);
|
||||
|
||||
if (DesktopTaskView.DESKTOP_IS_PROTO2_ENABLED) {
|
||||
TaskView taskView = getTaskViewFromPool(TaskView.Type.DESKTOP);
|
||||
// Always add a desktop task to the first position. Even if it is empty
|
||||
addView(taskView, 0);
|
||||
ArrayList<Task> tasks = desktopTask != null ? desktopTask.tasks : new ArrayList<>();
|
||||
((DesktopTaskView) taskView).bind(tasks, mOrientationState);
|
||||
}
|
||||
}
|
||||
|
||||
// Keep same previous focused task
|
||||
|
@ -1676,6 +1695,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
// If the list changed, maybe the focused task doesn't exist anymore
|
||||
if (newFocusedTaskView == null && getTaskViewCount() > 0) {
|
||||
newFocusedTaskView = getTaskViewAt(0);
|
||||
// Check if the first task is the desktop.
|
||||
// If first task is desktop, try to find another task to set as the focused task
|
||||
if (newFocusedTaskView != null && newFocusedTaskView.isDesktopTask()
|
||||
&& getTaskViewCount() > 1) {
|
||||
newFocusedTaskView = getTaskViewAt(1);
|
||||
}
|
||||
}
|
||||
mFocusedTaskViewId = newFocusedTaskView != null ?
|
||||
newFocusedTaskView.getTaskViewId() : -1;
|
||||
|
@ -1709,7 +1734,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
if (runningTaskId != -1) {
|
||||
targetPage = indexOfChild(newRunningTaskView);
|
||||
} else if (getTaskViewCount() > 0) {
|
||||
targetPage = indexOfChild(requireTaskViewAt(0));
|
||||
TaskView taskView = requireTaskViewAt(0);
|
||||
// If first task id desktop, try to find another task to set the target page
|
||||
if (taskView.isDesktopTask() && getTaskViewCount() > 1) {
|
||||
taskView = requireTaskViewAt(1);
|
||||
}
|
||||
targetPage = indexOfChild(taskView);
|
||||
}
|
||||
}
|
||||
if (targetPage != -1 && mCurrentPage != targetPage) {
|
||||
|
@ -2141,6 +2171,9 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
for (int i = 0; i < getTaskViewCount(); i++) {
|
||||
TaskView taskView = requireTaskViewAt(i);
|
||||
Task task = taskView.getTask();
|
||||
if (task == null) {
|
||||
continue;
|
||||
}
|
||||
int index = indexOfChild(taskView);
|
||||
boolean visible;
|
||||
if (showAsGrid()) {
|
||||
|
@ -2715,6 +2748,8 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
TaskView homeTaskView = getHomeTaskView();
|
||||
TaskView nextFocusedTaskView = null;
|
||||
|
||||
int desktopTaskIndex = Integer.MAX_VALUE;
|
||||
|
||||
if (!isTaskDismissal) {
|
||||
mTopRowIdSet.clear();
|
||||
}
|
||||
|
@ -2741,6 +2776,14 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
// If focused task is snapped, the row width is just task width and spacing.
|
||||
snappedTaskRowWidth = taskWidthAndSpacing;
|
||||
}
|
||||
} else if (taskView.isDesktopTask()) {
|
||||
// Desktop task was not focused. Pin it to the right of focused
|
||||
desktopTaskIndex = i;
|
||||
gridTranslations[i] += mIsRtl ? taskWidthAndSpacing : -taskWidthAndSpacing;
|
||||
|
||||
// Center view vertically in case it's from different orientation.
|
||||
taskView.setGridTranslationY((mLastComputedTaskSize.height() + taskTopMargin
|
||||
- taskView.getLayoutParams().height) / 2f);
|
||||
} else {
|
||||
if (i > focusedTaskIndex) {
|
||||
// For tasks after the focused task, shift by focused task's width and spacing.
|
||||
|
@ -2781,7 +2824,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
// Move horizontally into empty space.
|
||||
float widthOffset = 0;
|
||||
for (int j = i - 1; !topSet.contains(j) && j >= 0; j--) {
|
||||
if (j == focusedTaskIndex) {
|
||||
if (j == focusedTaskIndex || j == desktopTaskIndex) {
|
||||
continue;
|
||||
}
|
||||
widthOffset += requireTaskViewAt(j).getLayoutParams().width + mPageSpacing;
|
||||
|
@ -2800,7 +2843,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
// Move horizontally into empty space.
|
||||
float widthOffset = 0;
|
||||
for (int j = i - 1; !bottomSet.contains(j) && j >= 0; j--) {
|
||||
if (j == focusedTaskIndex) {
|
||||
if (j == focusedTaskIndex || j == desktopTaskIndex) {
|
||||
continue;
|
||||
}
|
||||
widthOffset += requireTaskViewAt(j).getLayoutParams().width + mPageSpacing;
|
||||
|
@ -5101,6 +5144,10 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||
}
|
||||
|
||||
private int getFirstViewIndex() {
|
||||
if (DesktopTaskView.DESKTOP_IS_PROTO2_ENABLED) {
|
||||
// Desktop task is at position 0, that is the first view
|
||||
return 0;
|
||||
}
|
||||
TaskView focusedTaskView = mShowAsGridLastOnLayout ? getFocusedTaskView() : null;
|
||||
return focusedTaskView != null ? indexOfChild(focusedTaskView) : 0;
|
||||
}
|
||||
|
|
|
@ -1033,6 +1033,11 @@ public class TaskView extends FrameLayout implements Reusable {
|
|||
return deviceProfile.isTablet && !isFocusedTask();
|
||||
}
|
||||
|
||||
/** Whether this task view represents the desktop */
|
||||
public boolean isDesktopTask() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to animate a smooth transition when going directly from an app into Overview (and
|
||||
* vice versa). Icons fade in, and DWB banners slide in with a "shift up" animation.
|
||||
|
@ -1543,7 +1548,7 @@ public class TaskView extends FrameLayout implements Reusable {
|
|||
int boxWidth;
|
||||
int boxHeight;
|
||||
boolean isFocusedTask = isFocusedTask();
|
||||
if (isFocusedTask) {
|
||||
if (isFocusedTask || isDesktopTask()) {
|
||||
// Task will be focused and should use focused task size. Use focusTaskRatio
|
||||
// that is associated with the original orientation of the focused task.
|
||||
boxWidth = taskWidth;
|
||||
|
|
Loading…
Reference in New Issue