Merge "DO NOT MERGE: Fix various settings chassification bugs" into qt-dev
diff --git a/res/layout/settings_fragment.xml b/res/layout/settings_fragment.xml
index e4628de..9dfbd90 100644
--- a/res/layout/settings_fragment.xml
+++ b/res/layout/settings_fragment.xml
@@ -27,7 +27,7 @@
         android:id="@android:id/list_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-        <com.android.car.apps.common.widget.PagedRecyclerView
+        <com.android.car.ui.recyclerview.CarUiRecyclerView
             android:id="@+id/recycler_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/res/xml/modify_system_settings_fragment.xml b/res/xml/modify_system_settings_fragment.xml
index 7aa22b4..a9bb722 100644
--- a/res/xml/modify_system_settings_fragment.xml
+++ b/res/xml/modify_system_settings_fragment.xml
@@ -19,10 +19,11 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/modify_system_settings_title">
-    <Preference
+    <com.android.car.ui.preference.CarUiPreference
         android:key="@string/pk_modify_system_settings_description"
         android:selectable="false"
-        android:summary="@string/modify_system_settings_description"/>
+        android:summary="@string/modify_system_settings_description"
+        settings:showChevron="false"/>
     <com.android.car.settings.common.LogicalPreferenceGroup
         android:key="@string/pk_modify_system_settings"
         settings:controller="com.android.car.settings.applications.specialaccess.AppOpsPreferenceController"/>
diff --git a/src/com/android/car/settings/accounts/AccountListPreferenceController.java b/src/com/android/car/settings/accounts/AccountListPreferenceController.java
index 8075558..2007aca 100644
--- a/src/com/android/car/settings/accounts/AccountListPreferenceController.java
+++ b/src/com/android/car/settings/accounts/AccountListPreferenceController.java
@@ -251,7 +251,7 @@
         return false;
     }
 
-    private static class AccountPreference extends Preference {
+    private static class AccountPreference extends CarUiPreference {
         /** Account that this Preference represents. */
         private final Account mAccount;
         private final CharSequence mLabel;
@@ -266,6 +266,7 @@
             setTitle(account.name);
             setSummary(label);
             setIcon(icon);
+            setShowChevron(false);
         }
 
         /**
diff --git a/src/com/android/car/settings/accounts/ChooseAccountPreferenceController.java b/src/com/android/car/settings/accounts/ChooseAccountPreferenceController.java
index d1cbafa..540edab 100644
--- a/src/com/android/car/settings/accounts/ChooseAccountPreferenceController.java
+++ b/src/com/android/car/settings/accounts/ChooseAccountPreferenceController.java
@@ -29,11 +29,11 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.collection.ArrayMap;
-import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
 
 import com.android.car.settings.common.FragmentController;
 import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiPreference;
 import com.android.settingslib.accounts.AuthenticatorHelper;
 
 import java.util.ArrayList;
@@ -251,7 +251,7 @@
         void addAccount(String accountType);
     }
 
-    private static class AuthenticatorDescriptionPreference extends Preference {
+    private static class AuthenticatorDescriptionPreference extends CarUiPreference {
         private final String mType;
 
         AuthenticatorDescriptionPreference(Context context, String accountType, CharSequence label,
@@ -262,6 +262,7 @@
             setKey(accountType);
             setTitle(label);
             setIcon(icon);
+            setShowChevron(false);
         }
 
         private String getAccountType() {
diff --git a/src/com/android/car/settings/common/BaseFragment.java b/src/com/android/car/settings/common/BaseFragment.java
index 6055954..17b957e 100644
--- a/src/com/android/car/settings/common/BaseFragment.java
+++ b/src/com/android/car/settings/common/BaseFragment.java
@@ -23,7 +23,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.TextView;
 
 import androidx.annotation.LayoutRes;
 import androidx.annotation.NonNull;
@@ -78,8 +77,8 @@
 
     /**
      * Returns the string id for the current Fragment title. Subclasses should override this
-     * method to set the title to display. Use {@link #setTitle(CharSequence)} to update the
-     * displayed title while resumed. The default title is the Settings Activity label.
+     * method to set the title to display. Use {@link #getToolbar().setTitle(CharSequence)} to
+     * update the displayed title while resumed. The default title is the Settings Activity label.
      */
     @StringRes
     protected int getTitleId() {
@@ -106,19 +105,6 @@
         return requireActivity().findViewById(R.id.toolbar);
     }
 
-    /**
-     * Should be used to override fragment's title. This should only be called after
-     * {@link #onActivityCreated(Bundle)}.
-     *
-     * @param title CharSequence to set as the new title.
-     */
-    protected final void setTitle(CharSequence title) {
-        TextView titleView = requireActivity().findViewById(R.id.title);
-        if (titleView != null) {
-            titleView.setText(title);
-        }
-    }
-
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
diff --git a/src/com/android/car/settings/common/SettingsFragment.java b/src/com/android/car/settings/common/SettingsFragment.java
index e4e7e5b..ca9b40c 100644
--- a/src/com/android/car/settings/common/SettingsFragment.java
+++ b/src/com/android/car/settings/common/SettingsFragment.java
@@ -90,7 +90,7 @@
     protected abstract int getPreferenceScreenResId();
 
     protected Toolbar getToolbar() {
-        return requireActivity().requireViewById(R.id.toolbar);
+        return requireActivity().findViewById(R.id.toolbar);
     }
     /**
      * Returns the MenuItems to display in the toolbar. Subclasses should override this to
diff --git a/src/com/android/car/settings/language/ChildLocalePickerFragment.java b/src/com/android/car/settings/language/ChildLocalePickerFragment.java
index b5fc5ba..aa6c1b2 100644
--- a/src/com/android/car/settings/language/ChildLocalePickerFragment.java
+++ b/src/com/android/car/settings/language/ChildLocalePickerFragment.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.os.Bundle;
-import android.widget.TextView;
 
 import androidx.annotation.XmlRes;
 
@@ -70,8 +69,7 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
-        TextView titleView = getActivity().findViewById(R.id.title);
-        titleView.setText(mParentLocaleInfo.getFullNameNative());
+        getToolbar().setTitle(mParentLocaleInfo.getFullNameNative());
     }
 
     @Override
diff --git a/src/com/android/car/settings/system/MasterClearFragment.java b/src/com/android/car/settings/system/MasterClearFragment.java
index e6deb06..91ee7ae 100644
--- a/src/com/android/car/settings/system/MasterClearFragment.java
+++ b/src/com/android/car/settings/system/MasterClearFragment.java
@@ -28,11 +28,11 @@
 import androidx.annotation.XmlRes;
 import androidx.recyclerview.widget.RecyclerView;
 
-import com.android.car.apps.common.widget.PagedRecyclerView;
 import com.android.car.settings.R;
 import com.android.car.settings.common.ActivityResultCallback;
 import com.android.car.settings.common.SettingsFragment;
 import com.android.car.settings.security.CheckLockActivity;
+import com.android.car.ui.recyclerview.CarUiRecyclerView;
 import com.android.car.ui.toolbar.MenuItem;
 
 import java.util.Collections;
@@ -85,8 +85,8 @@
                 new ViewTreeObserver.OnGlobalLayoutListener() {
                     @Override
                     public void onGlobalLayout() {
-                        if (recyclerView instanceof PagedRecyclerView) {
-                            PagedRecyclerView pagedRecyclerView = (PagedRecyclerView) recyclerView;
+                        if (recyclerView instanceof CarUiRecyclerView) {
+                            CarUiRecyclerView pagedRecyclerView = (CarUiRecyclerView) recyclerView;
                             if (!pagedRecyclerView.fullyInitialized()) {
                                 return;
                             }
@@ -112,8 +112,8 @@
     /** Returns {@code true} if the RecyclerView is completely displaying the last item. */
     private boolean isAtEnd() {
         RecyclerView recyclerView = getListView();
-        RecyclerView.LayoutManager layoutManager = (recyclerView instanceof PagedRecyclerView)
-                ? ((PagedRecyclerView) recyclerView).getEffectiveLayoutManager()
+        RecyclerView.LayoutManager layoutManager = (recyclerView instanceof CarUiRecyclerView)
+                ? ((CarUiRecyclerView) recyclerView).getEffectiveLayoutManager()
                 : recyclerView.getLayoutManager();
         if (layoutManager == null || layoutManager.getChildCount() == 0) {
             return true;
diff --git a/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java b/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java
index 3f4e2e1..d5b701e 100644
--- a/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java
@@ -86,7 +86,9 @@
 
     @Test
     public void masterClearButtonClicked_launchesCheckLockActivity() {
-        findMasterClearButton(mFragment.requireActivity()).performClick();
+        MenuItem masterClearButton = findMasterClearButton(mFragment.requireActivity());
+        masterClearButton.setEnabled(true);
+        masterClearButton.performClick();
 
         Intent startedIntent = ShadowApplication.getInstance().getNextStartedActivity();
         assertThat(startedIntent.getComponent().getClassName()).isEqualTo(