summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Elliot Sisteron <elliotsisteron@google.com> 2025-02-27 03:40:26 -0800
committer Elliot Sisteron <elliotsisteron@google.com> 2025-02-28 17:13:47 +0000
commit158b50bf4302d6ce50ab65a03f0fac2caa76f38f (patch)
tree8717d6c4a440fd8682ee96947bb9bb466e2fb8a8
parent4c1f6e8e2d1605c9de95bb65e63bf636eced8675 (diff)
Increase touch target for SafetyBrandChipPreference
Bug: 319339273 Change-Id: Ia9034f6630c82c0b76ef7a3730c351f6a2b89f8c Test: atest SafetyCenterSubpagesTest Flag: NONE trivial fix Relnote: Touch target accessibility fix for Safety Center subpages
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt5
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt51
2 files changed, 56 insertions, 0 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt
index c5287af53..e0f284d16 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyBrandChipPreference.kt
@@ -45,6 +45,11 @@ internal class SafetyBrandChipPreference(context: Context, attrs: AttributeSet)
super.onBindViewHolder(holder)
val brandChipButton = holder.findViewById(R.id.brand_chip)!!
brandChipButton.setOnClickListener(brandChipClickListener)
+ SafetyCenterTouchTarget.configureSize(
+ brandChipButton,
+ R.dimen.sc_icon_button_touch_target_size,
+ useWidthHeightFix = true,
+ )
}
/**
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt
index 01d23241f..44d055d5e 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterTouchTarget.kt
@@ -34,6 +34,24 @@ object SafetyCenterTouchTarget {
*/
@JvmStatic
fun configureSize(view: View, @DimenRes minTouchTargetSizeResource: Int) {
+ configureSize(view, minTouchTargetSizeResource, useWidthHeightFix = false)
+ }
+
+ @JvmStatic
+ fun configureSize(
+ view: View,
+ @DimenRes minTouchTargetSizeResource: Int,
+ useWidthHeightFix: Boolean,
+ ) {
+ // TODO: b/399872661 - Look into fixing all call sites and remove this boolean.
+ if (useWidthHeightFix) {
+ configureSizeUsingBothWidthAndHeight(view, minTouchTargetSizeResource)
+ } else {
+ configureSizeUsingWidthOnly(view, minTouchTargetSizeResource)
+ }
+ }
+
+ private fun configureSizeUsingWidthOnly(view: View, @DimenRes minTouchTargetSizeResource: Int) {
val parent = view.parent as View
val res = view.context.resources
val minTouchTargetSize = res.getDimensionPixelSize(minTouchTargetSizeResource)
@@ -53,4 +71,37 @@ object SafetyCenterTouchTarget {
}
}
}
+
+ private fun configureSizeUsingBothWidthAndHeight(
+ view: View,
+ @DimenRes minTouchTargetSizeResource: Int,
+ ) {
+ val parent = view.parent as View
+ val res = view.context.resources
+ val minTouchTargetSize = res.getDimensionPixelSize(minTouchTargetSizeResource)
+
+ // Defer getHitRect so that it's called after the parent's children are laid out.
+ parent.post {
+ val hitRect = Rect()
+ view.getHitRect(hitRect)
+ val currentTouchTargetWidth = hitRect.width()
+ val adjustWidthInsetBy =
+ if (currentTouchTargetWidth < minTouchTargetSize) {
+ (minTouchTargetSize - currentTouchTargetWidth) / 2
+ } else {
+ 0
+ }
+ val currentTouchTargetHeight = hitRect.height()
+ val adjustHeightInsetBy =
+ if (currentTouchTargetHeight < minTouchTargetSize) {
+ (minTouchTargetSize - currentTouchTargetHeight) / 2
+ } else {
+ 0
+ }
+ if (adjustWidthInsetBy != 0 || adjustHeightInsetBy != 0) {
+ hitRect.inset(-adjustWidthInsetBy, -adjustHeightInsetBy)
+ parent.touchDelegate = TouchDelegate(hitRect, view)
+ }
+ }
+ }
}