diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index 99e2c818bd..744979faf0 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -91,6 +91,7 @@
12dp
8dp
18dp
+ 32dp
16dp
24dp
diff --git a/quickstep/src/com/android/quickstep/views/TaskHeaderView.kt b/quickstep/src/com/android/quickstep/views/TaskHeaderView.kt
index 1fda5a3ace..bb0044161d 100644
--- a/quickstep/src/com/android/quickstep/views/TaskHeaderView.kt
+++ b/quickstep/src/com/android/quickstep/views/TaskHeaderView.kt
@@ -17,7 +17,9 @@
package com.android.quickstep.views
import android.content.Context
+import android.graphics.Rect
import android.util.AttributeSet
+import android.view.TouchDelegate
import android.widget.ImageButton
import android.widget.ImageView
import android.widget.TextView
@@ -33,6 +35,29 @@ class TaskHeaderView @JvmOverloads constructor(context: Context, attrs: Attribut
private val headerIconView: ImageView by lazy { findViewById(R.id.header_app_icon) }
private val headerCloseButton: ImageButton by lazy { findViewById(R.id.header_close_button) }
+ override fun onFinishInflate() {
+ super.onFinishInflate()
+ // Post to ensure the button has been laid out and has its dimensions.
+ headerCloseButton.post {
+ val delegateArea = Rect()
+ headerCloseButton.getHitRect(delegateArea)
+
+ // Calculate the desired touch area size in pixels.
+ val touchTargetSize =
+ resources.getDimensionPixelSize(
+ R.dimen.task_thumbnail_header_close_button_hit_rect_size
+ )
+
+ // Expand the hit rect to the desired touch target size, centered on the button.
+ val sizeDifferenceX = (touchTargetSize - delegateArea.width()) / 2
+ val sizeDifferenceY = (touchTargetSize - delegateArea.height()) / 2
+ delegateArea.inset(-sizeDifferenceX, -sizeDifferenceY)
+
+ // The TouchDelegate is set on the parent `TaskHeaderView`.
+ touchDelegate = TouchDelegate(delegateArea, headerCloseButton)
+ }
+ }
+
fun setState(taskHeaderState: TaskHeaderUiState) {
when (taskHeaderState) {
is TaskHeaderUiState.ShowHeader -> {