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 -> {