Make Dialer support rotary controller

1. Introduce FocusArea into Dialer
2. Make the HEADER item non-focusable

Bug: 161483726
Test: manual

Change-Id: If79b1d5f8b91f1242f1417fb2360c34d4f1a1bbf
diff --git a/res/layout/dialpad_fragment_with_type_down.xml b/res/layout/dialpad_fragment_with_type_down.xml
index bdb1f49..6986311 100644
--- a/res/layout/dialpad_fragment_with_type_down.xml
+++ b/res/layout/dialpad_fragment_with_type_down.xml
@@ -19,23 +19,29 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <fragment
-        android:id="@+id/dialpad_fragment"
-        android:name="com.android.car.dialer.ui.dialpad.KeypadFragment"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
+    <com.android.car.ui.FocusArea
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:orientation="vertical"
+        android:gravity="center_horizontal"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@+id/call_button"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@+id/divider"/>
-
-    <ImageView
-        android:id="@+id/call_button"
-        style="@style/DialpadPrimaryButton"
-        android:src="@drawable/icon_call_button"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@+id/divider"/>
+        app:layout_constraintRight_toLeftOf="@+id/divider">
+
+        <fragment
+            android:id="@+id/dialpad_fragment"
+            android:name="com.android.car.dialer.ui.dialpad.KeypadFragment"
+            android:layout_weight="1"
+            android:layout_height="match_parent"
+            android:layout_width="wrap_content"/>
+
+        <ImageView
+            android:id="@+id/call_button"
+            style="@style/DialpadPrimaryButton"
+            android:src="@drawable/icon_call_button"/>
+
+    </com.android.car.ui.FocusArea>
 
     <androidx.constraintlayout.widget.Guideline
         android:id="@+id/divider"
@@ -44,13 +50,14 @@
         android:orientation="vertical"
         app:layout_constraintGuide_percent="0.5"/>
 
-    <FrameLayout
-        android:layout_height="0dp"
+    <com.android.car.ui.FocusArea
         android:layout_width="0dp"
+        android:layout_height="0dp"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toRightOf="@id/divider"
         app:layout_constraintRight_toRightOf="parent">
         <include layout="@layout/dialpad_info"/>
-    </FrameLayout>
+    </com.android.car.ui.FocusArea>
+
 </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/incall_dialpad_fragment.xml b/res/layout/incall_dialpad_fragment.xml
index 1d1dc4c..c66d64d 100644
--- a/res/layout/incall_dialpad_fragment.xml
+++ b/res/layout/incall_dialpad_fragment.xml
@@ -20,15 +20,22 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <fragment
-        android:id="@+id/dialpad_fragment"
-        android:name="com.android.car.dialer.ui.dialpad.KeypadFragment"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
+    <com.android.car.ui.FocusArea
+        android:id="@+id/dialpad_focus_area"
+        android:layout_height="0dp"
+        android:layout_width="0dp"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/divider"/>
+        app:layout_constraintEnd_toStartOf="@+id/divider">
+
+        <fragment
+            android:id="@+id/dialpad_fragment"
+            android:name="com.android.car.dialer.ui.dialpad.KeypadFragment"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"/>
+
+    </com.android.car.ui.FocusArea>
 
     <androidx.constraintlayout.widget.Guideline
         android:id="@+id/divider"
@@ -42,8 +49,8 @@
         android:layout_width="0dp"
         android:id="@+id/dialpad_info_boundaries"
         app:layout_constraintDimensionRatio="W, 1:1"
-        app:layout_constraintTop_toTopOf="@id/dialpad_fragment"
-        app:layout_constraintBottom_toBottomOf="@id/dialpad_fragment"
+        app:layout_constraintTop_toTopOf="@id/dialpad_focus_area"
+        app:layout_constraintBottom_toBottomOf="@id/dialpad_focus_area"
         app:layout_constraintStart_toEndOf="@id/divider"
         app:layout_constraintEnd_toEndOf="parent"/>
 
diff --git a/res/layout/loading_list_fragment.xml b/res/layout/loading_list_fragment.xml
index 4bd9c8d..7c8707d 100644
--- a/res/layout/loading_list_fragment.xml
+++ b/res/layout/loading_list_fragment.xml
@@ -19,5 +19,12 @@
     android:id="@+id/loading_frame_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
-    <include layout="@layout/list_fragment"/>
+
+    <com.android.car.ui.FocusArea
+        android:id="@+id/loading_focus_area"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+        <include layout="@layout/list_fragment"/>
+    </com.android.car.ui.FocusArea>
+
 </com.android.car.dialer.widget.LoadingFrameLayout>
diff --git a/res/layout/no_hfp.xml b/res/layout/no_hfp.xml
index 0ec017e..fbdcaa5 100644
--- a/res/layout/no_hfp.xml
+++ b/res/layout/no_hfp.xml
@@ -13,56 +13,62 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<androidx.constraintlayout.widget.ConstraintLayout
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/no_hfp_error_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <Button
-        android:id="@+id/emergency_call_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/emergency_button_text"
-        android:minWidth="@dimen/emergency_button_min_width"
-        android:minHeight="@dimen/emergency_button_min_height"
-        android:background="?android:attr/selectableItemBackground"
-        android:textColor="@color/emergency_text_color"
-        android:layout_marginBottom="@dimen/emergency_button_bottom_margin"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/no_hfp_error_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
 
-    <ImageView
-        android:id="@+id/error_icon"
-        android:layout_width="@dimen/no_hfp_icon_size"
-        android:layout_height="@dimen/no_hfp_icon_size"
-        android:tint="@color/primary_icon_color"
-        android:src="@drawable/ic_bluetooth"
-        android:layout_marginBottom="@dimen/no_hfp_icon_margin_bottom"
-        app:layout_constraintVertical_chainStyle="packed"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/error_string"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
+        <Button
+            android:id="@+id/emergency_call_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/emergency_button_text"
+            android:minWidth="@dimen/emergency_button_min_width"
+            android:minHeight="@dimen/emergency_button_min_height"
+            android:background="?android:attr/selectableItemBackground"
+            android:textColor="@color/emergency_text_color"
+            android:layout_marginBottom="@dimen/emergency_button_bottom_margin"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"/>
 
-    <TextView
-        android:id="@id/error_string"
-        style="@style/FullScreenErrorMessageStyle"
-        android:text="@string/no_hfp"
-        app:layout_constraintTop_toBottomOf="@id/error_icon"
-        app:layout_constraintBottom_toTopOf="@+id/connect_bluetooth_button"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
+        <ImageView
+            android:id="@+id/error_icon"
+            android:layout_width="@dimen/no_hfp_icon_size"
+            android:layout_height="@dimen/no_hfp_icon_size"
+            android:tint="@color/primary_icon_color"
+            android:src="@drawable/ic_bluetooth"
+            android:layout_marginBottom="@dimen/no_hfp_icon_margin_bottom"
+            app:layout_constraintVertical_chainStyle="packed"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toTopOf="@id/error_string"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"/>
 
-    <com.android.car.apps.common.UxrButton
-        android:id="@+id/connect_bluetooth_button"
-        style="@style/FullScreenErrorButtonStyle"
-        android:text="@string/connect_bluetooth_button_text"
-        android:layout_marginTop="@dimen/connect_bluetooth_button_margin_top"
-        app:layout_constraintTop_toBottomOf="@+id/error_string"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
-</androidx.constraintlayout.widget.ConstraintLayout>
+        <TextView
+            android:id="@id/error_string"
+            style="@style/FullScreenErrorMessageStyle"
+            android:text="@string/no_hfp"
+            app:layout_constraintTop_toBottomOf="@id/error_icon"
+            app:layout_constraintBottom_toTopOf="@+id/connect_bluetooth_button"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"/>
+
+        <com.android.car.apps.common.UxrButton
+            android:id="@+id/connect_bluetooth_button"
+            style="@style/FullScreenErrorButtonStyle"
+            android:text="@string/connect_bluetooth_button_text"
+            android:layout_marginTop="@dimen/connect_bluetooth_button_margin_top"
+            app:layout_constraintTop_toBottomOf="@+id/error_string"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"/>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</com.android.car.ui.FocusArea>
diff --git a/res/layout/ongoing_call_fragment.xml b/res/layout/ongoing_call_fragment.xml
index 02b2818..7981e79 100644
--- a/res/layout/ongoing_call_fragment.xml
+++ b/res/layout/ongoing_call_fragment.xml
@@ -43,13 +43,13 @@
             android:layout_width="match_parent"
             android:layout_height="0dp"
             app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toTopOf="@+id/ongoing_call_control_bar"/>
+            app:layout_constraintBottom_toTopOf="@+id/control_bar_focus_area"/>
 
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="0dp"
             app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toTopOf="@+id/ongoing_call_control_bar"
+            app:layout_constraintBottom_toTopOf="@+id/control_bar_focus_area"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent">
 
@@ -71,17 +71,25 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintEnd_toEndOf="parent"/>
 
-        <fragment
-            android:id="@+id/ongoing_call_control_bar"
-            android:name="com.android.car.dialer.ui.activecall.OnGoingCallControllerBarFragment"
+        <com.android.car.ui.FocusArea
+            android:id="@+id/control_bar_focus_area"
             android:layout_width="match_parent"
-            android:layout_height="@dimen/in_call_controller_bar_height"
-            android:layout_marginStart="@dimen/in_call_controller_bar_margin"
-            android:layout_marginEnd="@dimen/in_call_controller_bar_margin"
+            android:layout_height="wrap_content"
             android:layout_marginBottom="@dimen/in_call_controller_bar_margin_bottom"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"/>
+            app:layout_constraintStart_toStartOf="parent">
+
+            <fragment
+                android:id="@+id/ongoing_call_control_bar"
+                android:name="com.android.car.dialer.ui.activecall.OnGoingCallControllerBarFragment"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/in_call_controller_bar_height"
+                android:layout_marginStart="@dimen/in_call_controller_bar_margin"
+                android:layout_marginEnd="@dimen/in_call_controller_bar_margin"/>
+
+        </com.android.car.ui.FocusArea>
+
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/onhold_user_profile.xml b/res/layout/onhold_user_profile.xml
index a557658..15b2af8 100644
--- a/res/layout/onhold_user_profile.xml
+++ b/res/layout/onhold_user_profile.xml
@@ -10,114 +10,121 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<androidx.cardview.widget.CardView
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:elevation="@dimen/dialer_card_elevation"
-    app:cardBackgroundColor="@color/onhold_call_background"
-    app:cardCornerRadius="@dimen/onhold_profile_corner_radius">
+    android:layout_height="match_parent">
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <androidx.cardview.widget.CardView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:id="@+id/swap_calls_view"
-        android:background="?android:attr/selectableItemBackground">
+        android:elevation="@dimen/dialer_card_elevation"
+        app:cardBackgroundColor="@color/onhold_call_background"
+        app:cardCornerRadius="@dimen/onhold_profile_corner_radius">
 
-        <androidx.constraintlayout.widget.Guideline
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:id="@+id/guideline"
-            android:orientation="vertical"
-            app:layout_constraintGuide_begin="@dimen/onhold_profile_guideline"/>
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:id="@+id/swap_calls_view"
+            android:background="?android:attr/selectableItemBackground">
 
-        <ImageView
-            android:id="@+id/icon"
-            android:layout_width="@dimen/small_avatar_icon_size"
-            android:layout_height="@dimen/small_avatar_icon_size"
-            android:scaleType="centerCrop"
-            android:layout_marginStart="@dimen/onhold_profile_avatar_margin"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="parent"/>
+            <androidx.constraintlayout.widget.Guideline
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/guideline"
+                android:orientation="vertical"
+                app:layout_constraintGuide_begin="@dimen/onhold_profile_guideline"/>
 
-        <TextView
-            android:id="@+id/title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:theme="@style/Theme.Dialer.BidiText"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:singleLine="true"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="@id/guideline"
-            app:layout_constraintEnd_toStartOf="@+id/title_separator"/>
+            <ImageView
+                android:id="@+id/icon"
+                android:layout_width="@dimen/small_avatar_icon_size"
+                android:layout_height="@dimen/small_avatar_icon_size"
+                android:scaleType="centerCrop"
+                android:layout_marginStart="@dimen/onhold_profile_avatar_margin"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"/>
 
-        <TextView
-            android:id="@id/title_separator"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/onhold_profile_status_margin"
-            android:layout_marginEnd="@dimen/onhold_profile_status_margin"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:singleLine="true"
-            android:text="@string/onhold_call_separator"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toEndOf="@id/title"
-            app:layout_constraintEnd_toStartOf="@+id/time"/>
+            <TextView
+                android:id="@+id/title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:theme="@style/Theme.Dialer.BidiText"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:singleLine="true"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="@id/guideline"
+                app:layout_constraintEnd_toStartOf="@+id/title_separator"/>
 
-        <Chronometer
-            android:id="@id/time"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:textColor="@color/onhold_time_color"
-            android:singleLine="true"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toEndOf="@id/title_separator"
-            app:layout_constraintEnd_toStartOf="@+id/time_separator"/>
+            <TextView
+                android:id="@id/title_separator"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/onhold_profile_status_margin"
+                android:layout_marginEnd="@dimen/onhold_profile_status_margin"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:singleLine="true"
+                android:text="@string/onhold_call_separator"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toEndOf="@id/title"
+                app:layout_constraintEnd_toStartOf="@+id/time"/>
 
-        <TextView
-            android:id="@id/time_separator"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/onhold_profile_status_margin"
-            android:layout_marginEnd="@dimen/onhold_profile_status_margin"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:singleLine="true"
-            android:text="@string/onhold_call_separator"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toEndOf="@id/time"
-            app:layout_constraintEnd_toStartOf="@+id/onhold_label"/>
+            <Chronometer
+                android:id="@id/time"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:textColor="@color/onhold_time_color"
+                android:singleLine="true"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toEndOf="@id/title_separator"
+                app:layout_constraintEnd_toStartOf="@+id/time_separator"/>
 
-        <TextView
-            android:id="@id/onhold_label"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:singleLine="true"
-            android:text="@string/call_state_hold"
-            android:textColor="@color/onhold_label_color"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toEndOf="@id/time_separator"
-            app:layout_constraintEnd_toStartOf="@+id/swap_call"/>
+            <TextView
+                android:id="@id/time_separator"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/onhold_profile_status_margin"
+                android:layout_marginEnd="@dimen/onhold_profile_status_margin"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:singleLine="true"
+                android:text="@string/onhold_call_separator"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toEndOf="@id/time"
+                app:layout_constraintEnd_toStartOf="@+id/onhold_label"/>
 
-        <TextView
-            android:id="@id/swap_call"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginEnd="@dimen/onhold_profile_avatar_margin"
-            android:text="@string/swap_call_label"
-            android:textAppearance="?android:attr/textAppearanceLarge"
-            android:singleLine="true"
-            android:textColor="?android:attr/colorAccent"
-            app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"/>
-    </androidx.constraintlayout.widget.ConstraintLayout>
-</androidx.cardview.widget.CardView>
+            <TextView
+                android:id="@id/onhold_label"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:singleLine="true"
+                android:text="@string/call_state_hold"
+                android:textColor="@color/onhold_label_color"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toEndOf="@id/time_separator"
+                app:layout_constraintEnd_toStartOf="@+id/swap_call"/>
+
+            <TextView
+                android:id="@id/swap_call"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="@dimen/onhold_profile_avatar_margin"
+                android:text="@string/swap_call_label"
+                android:textAppearance="?android:attr/textAppearanceLarge"
+                android:singleLine="true"
+                android:textColor="?android:attr/colorAccent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"/>
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </androidx.cardview.widget.CardView>
+
+</com.android.car.ui.FocusArea>
diff --git a/res/layout/telecom_activity.xml b/res/layout/telecom_activity.xml
index 5dd55fe..97797bd 100644
--- a/res/layout/telecom_activity.xml
+++ b/res/layout/telecom_activity.xml
@@ -17,7 +17,6 @@
 
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/fragment_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java b/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java
index a96ca07..473365e 100644
--- a/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java
+++ b/src/com/android/car/dialer/ui/common/DialerListBaseFragment.java
@@ -30,6 +30,7 @@
 
 import com.android.car.dialer.R;
 import com.android.car.dialer.widget.LoadingFrameLayout;
+import com.android.car.ui.FocusArea;
 import com.android.car.ui.baselayout.Insets;
 import com.android.car.ui.recyclerview.CarUiRecyclerView;
 import com.android.car.ui.recyclerview.ContentLimiting;
@@ -49,6 +50,7 @@
 
     private LoadingFrameLayout mLoadingFrameLayout;
     private CarUiRecyclerView mRecyclerView;
+    private FocusArea mFocusArea;
     private LifeCycleObserverUxrContentLimiter mUxrContentLimiter;
 
     @Override
@@ -58,6 +60,7 @@
         mLoadingFrameLayout = view.findViewById(R.id.loading_frame_layout);
         mRecyclerView = view.requireViewById(R.id.list_view);
         mRecyclerView.setLayoutManager(createLayoutManager());
+        mFocusArea = view.requireViewById(R.id.loading_focus_area);
         mUxrContentLimiter = new LifeCycleObserverUxrContentLimiter(
                 new UxrContentLimiterImpl(getContext(), R.xml.uxr_config));
         getLifecycle().addObserver(mUxrContentLimiter);
@@ -138,7 +141,7 @@
         int listTopPadding = requireContext().getResources().getDimensionPixelSize(
                 R.dimen.list_top_padding);
         mRecyclerView.setPadding(0, insets.getTop() + listTopPadding, 0, insets.getBottom());
-        requireView().setPadding(insets.getLeft(), 0,
-                insets.getRight(), 0);
+        mFocusArea.setHighlightPadding(0, insets.getTop() + listTopPadding, 0, insets.getBottom());
+        requireView().setPadding(insets.getLeft(), 0, insets.getRight(), 0);
     }
 }
diff --git a/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java b/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java
index a140c0d..7ffcf0e 100644
--- a/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java
+++ b/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java
@@ -108,6 +108,7 @@
                 Header header = (Header) mFavoriteContacts.get(position);
                 viewHolder.onBind(header);
                 viewHolder.itemView.setOnClickListener(null);
+                viewHolder.itemView.setFocusable(false);
                 break;
             case TYPE_ADD_FAVORITE:
                 viewHolder.itemView.setOnClickListener(v -> {