Merge "desktop-exploded-view: Expand touch area for the task header close button" into main

This commit is contained in:
Treehugger Robot
2025-05-29 21:17:04 -07:00
committed by Android (Google) Code Review
2 changed files with 26 additions and 0 deletions
+1
View File
@@ -91,6 +91,7 @@
<dimen name="task_thumbnail_header_padding_start_end">12dp</dimen>
<dimen name="task_thumbnail_header_margin_between_views">8dp</dimen>
<dimen name="task_thumbnail_header_icon_size">18dp</dimen>
<dimen name="task_thumbnail_header_close_button_hit_rect_size">32dp</dimen>
<dimen name="task_thumbnail_header_round_corner_radius">16dp</dimen>
<!-- The size for non-overlapping layout in desktop tile -->
<dimen name="desktop_vertical_padding_between_tasks">24dp</dimen>
@@ -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 -> {