diff options
author | 2025-02-27 03:40:26 -0800 | |
---|---|---|
committer | 2025-02-28 17:13:47 +0000 | |
commit | 158b50bf4302d6ce50ab65a03f0fac2caa76f38f (patch) | |
tree | 8717d6c4a440fd8682ee96947bb9bb466e2fb8a8 | |
parent | 4c1f6e8e2d1605c9de95bb65e63bf636eced8675 (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
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) + } + } + } } |