diff options
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) + } + } + } } |