From 05fa101519d03f279175f358a0d7e0cadabbae99 Mon Sep 17 00:00:00 2001 From: "Xiaoqian (Daisy) Dai" Date: Wed, 28 May 2025 10:28:00 -0700 Subject: [PATCH] desktop-exploded-view: Expand touch area for the task header close button According to the spec, the hit rect of the close button should be 32dp. Flag: com.android.launcher3.enable_desktop_exploded_view Test: Manual Bug: 420930786 Change-Id: I2a066c03ba728780520ce95648c20103376c73c7 --- quickstep/res/values/dimens.xml | 1 + .../android/quickstep/views/TaskHeaderView.kt | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index 61c5f40dc2..81b5d9873e 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 -> {