Set the bounds offset of RecyclerView FocusArea

When FocusAreas overlap, RotaryService may fail to find the correct
nudge target. Setting the bounds offset of the FocusArea can fix
the bug.

This CL also updates the description of related methods.

Bug: 171843406
Test: manual
Change-Id: I93871aab95bca8dfeb446f2521bc7670711401bf
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusArea.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusArea.java
index 457d8cc..5bf1fb9 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusArea.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusArea.java
@@ -688,7 +688,11 @@
         }
     }
 
-    /** Sets the padding (in pixels) of the FocusArea highlight. */
+    /**
+     * Sets the padding (in pixels) of the FocusArea highlight.
+     * <p>
+     * It doesn't affect other values, such as the paddings on its child views.
+     */
     public void setHighlightPadding(int left, int top, int right, int bottom) {
         if (mPaddingLeft == left && mPaddingTop == top && mPaddingRight == right
                 && mPaddingBottom == bottom) {
@@ -701,7 +705,13 @@
         invalidate();
     }
 
-    /** Sets the offset (in pixels) of the FocusArea's bounds. */
+    /**
+     * Sets the offset (in pixels) of the FocusArea's bounds.
+     * <p>
+     * It only affects the perceived bounds for the purposes of finding the nudge target. It doesn't
+     * affect the FocusArea's view bounds or highlight bounds. The offset should only be used when
+     * FocusAreas are overlapping and nudge interaction is ambiguous.
+     */
     public void setBoundsOffset(int left, int top, int right, int bottom) {
         mLeftOffset = left;
         mTopOffset = top;
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceFragment.java
index fbd6856..ed2c724 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceFragment.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceFragment.java
@@ -103,6 +103,7 @@
 
             FocusArea focusArea = CarUiUtils.requireViewByRefId(view, R.id.car_ui_focus_area);
             focusArea.setHighlightPadding(0, newHeight, 0, 0);
+            focusArea.setBoundsOffset(0, newHeight, 0, 0);
         });
 
         recyclerView.setClipToPadding(false);
@@ -125,6 +126,7 @@
         View view = requireView();
         FocusArea focusArea = CarUiUtils.requireViewByRefId(view, R.id.car_ui_focus_area);
         focusArea.setHighlightPadding(0, insets.getTop(), 0, insets.getBottom());
+        focusArea.setBoundsOffset(0, insets.getTop(), 0, insets.getBottom());
         CarUiUtils.requireViewByRefId(view, R.id.recycler_view)
                 .setPadding(0, insets.getTop(), 0, insets.getBottom());
         view.setPadding(insets.getLeft(), 0, insets.getRight(), 0);