From c1ec2d4260873984bdbe4c1666146a84c4df24a5 Mon Sep 17 00:00:00 2001 From: Vinit Nayak Date: Wed, 17 Nov 2021 15:26:03 -0800 Subject: [PATCH] Open taskMenu based on TaskIdAttributeContainer * We were always passing in the same task no matter which task icon was clicked. * Use TaskIdAttributeContainer to associate IconViews with their respective tasks Fixes: 206154715 Test: Correct menu opens for split and fullscreen tasks Change-Id: I79a32541ea9ebae9ad78ad933f55212d0bc64b56 --- .../android/quickstep/views/GroupedTaskView.java | 10 +--------- .../quickstep/views/TaskMenuViewWithArrow.kt | 7 +++---- .../com/android/quickstep/views/TaskView.java | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java index df99d27376..71d4aa0830 100644 --- a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java +++ b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java @@ -79,7 +79,7 @@ public class GroupedTaskView extends TaskView { mSecondaryTask = secondary; mTaskIdContainer[1] = secondary.key.id; mTaskIdAttributeContainer[1] = new TaskIdAttributeContainer(secondary, mSnapshotView2, - STAGE_POSITION_BOTTOM_OR_RIGHT); + mIconView2, STAGE_POSITION_BOTTOM_OR_RIGHT); mTaskIdAttributeContainer[0].setStagePosition(STAGE_POSITION_TOP_OR_LEFT); mSnapshotView2.bind(secondary); mSplitBoundsConfig = splitBoundsConfig; @@ -120,14 +120,6 @@ public class GroupedTaskView extends TaskView { } } - protected boolean showTaskMenuWithContainer(IconView iconView) { - if (mActivity.getDeviceProfile().overviewShowAsGrid) { - return TaskMenuViewWithArrow.Companion.showForTask(mTaskIdAttributeContainer[0]); - } else { - return TaskMenuView.showForTask(mTaskIdAttributeContainer[0]); - } - } - public void updateSplitBoundsConfig(StagedSplitBounds stagedSplitBounds) { mSplitBoundsConfig = stagedSplitBounds; invalidate(); diff --git a/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt b/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt index 5059f8b532..f891e03a6f 100644 --- a/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt +++ b/quickstep/src/com/android/quickstep/views/TaskMenuViewWithArrow.kt @@ -61,14 +61,13 @@ class TaskMenuViewWithArrow : ArrowPopup { private val menuWidth = context.resources.getDimensionPixelSize(R.dimen.task_menu_width_grid) - private lateinit var taskView: TaskView private lateinit var optionLayout: LinearLayout private lateinit var taskContainer: TaskIdAttributeContainer override fun isOfType(type: Int): Boolean = type and TYPE_TASK_MENU != 0 override fun getTargetObjectLocation(outPos: Rect?) { - popupContainer.getDescendantRectRelativeToSelf(taskView.iconView, outPos) + popupContainer.getDescendantRectRelativeToSelf(taskContainer.iconView, outPos) } override fun onControllerInterceptTouchEvent(ev: MotionEvent?): Boolean { @@ -91,7 +90,6 @@ class TaskMenuViewWithArrow : ArrowPopup { return false } - taskView = taskContainer.taskView this.taskContainer = taskContainer if (!populateMenu()) return false show() @@ -111,7 +109,8 @@ class TaskMenuViewWithArrow : ArrowPopup { private fun addMenuOptions() { // Add the options TaskOverlayFactory - .getEnabledShortcuts(taskView, mActivityContext.deviceProfile, taskContainer) + .getEnabledShortcuts(taskContainer.taskView, mActivityContext.deviceProfile, + taskContainer) .forEach { this.addMenuOption(it) } // Add the spaces between items diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index e9a3779b7f..6c27b96e56 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -539,7 +539,7 @@ public class TaskView extends FrameLayout implements Reusable { mTask = task; mTaskIdContainer[0] = mTask.key.id; mTaskIdAttributeContainer[0] = new TaskIdAttributeContainer(task, mSnapshotView, - STAGE_POSITION_UNDEFINED); + mIconView, STAGE_POSITION_UNDEFINED); mSnapshotView.bind(task); setOrientationState(orientedState); } @@ -828,10 +828,12 @@ public class TaskView extends FrameLayout implements Reusable { } protected boolean showTaskMenuWithContainer(IconView iconView) { + TaskIdAttributeContainer menuContainer = + mTaskIdAttributeContainer[iconView == mIconView ? 0 : 1]; if (mActivity.getDeviceProfile().overviewShowAsGrid) { - return TaskMenuViewWithArrow.Companion.showForTask(mTaskIdAttributeContainer[0]); + return TaskMenuViewWithArrow.Companion.showForTask(menuContainer); } else { - return TaskMenuView.showForTask(mTaskIdAttributeContainer[0]); + return TaskMenuView.showForTask(menuContainer); } } @@ -1553,13 +1555,15 @@ public class TaskView extends FrameLayout implements Reusable { public class TaskIdAttributeContainer { private final TaskThumbnailView mThumbnailView; private final Task mTask; + private final IconView mIconView; /** Defaults to STAGE_POSITION_UNDEFINED if in not a split screen task view */ private @SplitConfigurationOptions.StagePosition int mStagePosition; public TaskIdAttributeContainer(Task task, TaskThumbnailView thumbnailView, - int stagePosition) { + IconView iconView, int stagePosition) { this.mTask = task; this.mThumbnailView = thumbnailView; + this.mIconView = iconView; this.mStagePosition = stagePosition; } @@ -1579,6 +1583,10 @@ public class TaskView extends FrameLayout implements Reusable { return TaskView.this; } + public IconView getIconView() { + return mIconView; + } + public int getStagePosition() { return mStagePosition; }