Migrating CarSettings to use baselayout

With this CL, we're updating all the activities that need toolbar to use CarUi specific theme.
Also some of the fragments are updated to respond to window inset changes.

And a BaseTest class is introduced to install toolbar for test activities.

Bug: 150007206
Test: Manual
Change-Id: I6879b4c910a61c7622a10d15afa06400ca1d6de7
diff --git a/res/layout/choose_lock_password.xml b/res/layout/choose_lock_password.xml
index 815d344..a57fa6b 100644
--- a/res/layout/choose_lock_password.xml
+++ b/res/layout/choose_lock_password.xml
@@ -21,8 +21,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <include layout="@layout/toolbar"/>
-
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
diff --git a/res/layout/choose_lock_pattern.xml b/res/layout/choose_lock_pattern.xml
index ab7ae28..449629f 100644
--- a/res/layout/choose_lock_pattern.xml
+++ b/res/layout/choose_lock_pattern.xml
@@ -21,8 +21,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <include layout="@layout/toolbar"/>
-
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
diff --git a/res/layout/choose_lock_pin.xml b/res/layout/choose_lock_pin.xml
index 954bf8a..643d0a6 100644
--- a/res/layout/choose_lock_pin.xml
+++ b/res/layout/choose_lock_pin.xml
@@ -21,8 +21,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <include layout="@layout/toolbar"/>
-
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
diff --git a/res/layout/confirm_lock_password.xml b/res/layout/confirm_lock_password.xml
index 4b92d9c..e016206 100644
--- a/res/layout/confirm_lock_password.xml
+++ b/res/layout/confirm_lock_password.xml
@@ -22,8 +22,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <include layout="@layout/toolbar"/>
-
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
diff --git a/res/layout/confirm_lock_pattern.xml b/res/layout/confirm_lock_pattern.xml
index dc35577..054bd26 100644
--- a/res/layout/confirm_lock_pattern.xml
+++ b/res/layout/confirm_lock_pattern.xml
@@ -22,8 +22,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <include layout="@layout/toolbar"/>
-
     <LinearLayout
         android:gravity="center"
         android:layout_width="match_parent"
diff --git a/res/layout/confirm_lock_pin.xml b/res/layout/confirm_lock_pin.xml
index 2414545..717d9d0 100644
--- a/res/layout/confirm_lock_pin.xml
+++ b/res/layout/confirm_lock_pin.xml
@@ -21,8 +21,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <include layout="@layout/toolbar"/>
-
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
diff --git a/res/layout/date_picker.xml b/res/layout/date_picker.xml
index 960ae65..fdb5462 100644
--- a/res/layout/date_picker.xml
+++ b/res/layout/date_picker.xml
@@ -20,8 +20,6 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <include layout="@layout/toolbar"/>
-
     <DatePicker
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/date_picker"
diff --git a/res/layout/edit_username_fragment.xml b/res/layout/edit_username_fragment.xml
index cc1a5c0..031866d 100644
--- a/res/layout/edit_username_fragment.xml
+++ b/res/layout/edit_username_fragment.xml
@@ -20,13 +20,11 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <include layout="@layout/toolbar"/>
-
     <FrameLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_below="@id/toolbar"
+        android:layout_alignParentTop="true"
         android:paddingEnd="@dimen/edit_username_padding_end"
         android:paddingStart="@dimen/edit_username_padding_start"
         android:paddingTop="@dimen/edit_username_text_padding_top">
diff --git a/res/layout/quick_settings.xml b/res/layout/quick_settings.xml
index e4600a3..018b45d 100644
--- a/res/layout/quick_settings.xml
+++ b/res/layout/quick_settings.xml
@@ -20,13 +20,11 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <include layout="@layout/toolbar"/>
-
     <com.android.car.ui.recyclerview.CarUiRecyclerView
         android:id="@+id/list"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_below="@+id/toolbar"
+        android:layout_alignParentTop="true"
         android:layout_above="@+id/build_info"/>
 
     <TextView
diff --git a/res/layout/time_picker.xml b/res/layout/time_picker.xml
index 2c64b28..15dfac8 100644
--- a/res/layout/time_picker.xml
+++ b/res/layout/time_picker.xml
@@ -20,8 +20,6 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <include layout="@layout/toolbar"/>
-
     <TimePicker
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/time_picker"
diff --git a/res/layout/toolbar.xml b/res/layout/toolbar.xml
deleted file mode 100644
index e34690c..0000000
--- a/res/layout/toolbar.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright 2017 The Android Open Source Project
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-         http://www.apache.org/licenses/LICENSE-2.0
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<com.android.car.ui.toolbar.Toolbar
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/toolbar"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"/>
\ No newline at end of file
diff --git a/res/layout/user_switcher.xml b/res/layout/user_switcher.xml
index 86b7713..84d8538 100644
--- a/res/layout/user_switcher.xml
+++ b/res/layout/user_switcher.xml
@@ -20,14 +20,12 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <include layout="@layout/toolbar"/>
-
     <com.android.car.settings.users.UserGridRecyclerView
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/user_grid"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_below="@+id/toolbar"
+        android:layout_alignParentTop="true"
         android:layout_gravity="center_vertical"
         android:background="?attr/userSwitcherBackground"/>
 </RelativeLayout>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 170baa3..b8ddf75 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -16,7 +16,7 @@
 -->
 
 <resources>
-    <style name="CarSettingTheme" parent="@style/Theme.CarUi">
+    <style name="CarSettingTheme" parent="@style/Theme.CarUi.WithToolbar">
         <item name="wifi_signal">@drawable/wifi_signal</item>
         <item name="wifiSignalColor">?android:attr/textColorPrimary</item>
         <item name="iconColor">?android:attr/textColorPrimary</item>
diff --git a/src/com/android/car/settings/common/BaseFragment.java b/src/com/android/car/settings/common/BaseFragment.java
index 86f0ce4..047371d 100644
--- a/src/com/android/car/settings/common/BaseFragment.java
+++ b/src/com/android/car/settings/common/BaseFragment.java
@@ -16,6 +16,9 @@
 
 package com.android.car.settings.common;
 
+import static com.android.car.ui.core.CarUi.requireInsets;
+import static com.android.car.ui.core.CarUi.requireToolbar;
+
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.drivingstate.CarUxRestrictionsManager;
 import android.content.Context;
@@ -30,8 +33,11 @@
 import androidx.fragment.app.Fragment;
 
 import com.android.car.settings.R;
+import com.android.car.ui.baselayout.Insets;
+import com.android.car.ui.baselayout.InsetsChangedListener;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
+import com.android.car.ui.toolbar.ToolbarController;
 
 import java.util.List;
 
@@ -39,7 +45,7 @@
  * Base fragment for setting activity.
  */
 public abstract class BaseFragment extends Fragment implements
-        CarUxRestrictionsManager.OnUxRestrictionsChangedListener {
+        CarUxRestrictionsManager.OnUxRestrictionsChangedListener, InsetsChangedListener {
 
     /**
      * Return the {@link FragmentHost}.
@@ -100,8 +106,8 @@
         return Toolbar.NavButtonMode.BACK;
     }
 
-    protected final Toolbar getToolbar() {
-        return requireActivity().findViewById(R.id.toolbar);
+    protected final ToolbarController getToolbar() {
+        return requireToolbar(requireActivity());
     }
 
     @Override
@@ -125,7 +131,7 @@
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        Toolbar toolbar = getToolbar();
+        ToolbarController toolbar = getToolbar();
         if (toolbar != null) {
             List<MenuItem> items = getToolbarMenuItems();
             if (items != null) {
@@ -144,9 +150,23 @@
     }
 
     @Override
+    public void onCarUiInsetsChanged(Insets insets) {
+        View view = requireView();
+        View recyclerView = view.findViewById(R.id.recycler_view);
+        if (recyclerView != null) {
+            recyclerView.setPadding(0, insets.getTop(), 0, insets.getBottom());
+            view.setPadding(insets.getLeft(), 0, insets.getRight(), 0);
+        } else {
+            view.setPadding(insets.getLeft(), insets.getTop(),
+                    insets.getRight(), insets.getBottom());
+        }
+    }
+
+    @Override
     public void onStart() {
         super.onStart();
         onUxRestrictionsChanged(getCurrentRestrictions());
+        onCarUiInsetsChanged(requireInsets(requireActivity()));
     }
 
     /**
diff --git a/src/com/android/car/settings/common/SettingsFragment.java b/src/com/android/car/settings/common/SettingsFragment.java
index e026fe5..9977e97 100644
--- a/src/com/android/car/settings/common/SettingsFragment.java
+++ b/src/com/android/car/settings/common/SettingsFragment.java
@@ -16,6 +16,9 @@
 
 package com.android.car.settings.common;
 
+import static com.android.car.ui.core.CarUi.requireInsets;
+import static com.android.car.ui.core.CarUi.requireToolbar;
+
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.drivingstate.CarUxRestrictionsManager;
 import android.content.Context;
@@ -42,6 +45,7 @@
 import com.android.car.ui.preference.PreferenceFragment;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
+import com.android.car.ui.toolbar.ToolbarController;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -84,8 +88,8 @@
     @XmlRes
     protected abstract int getPreferenceScreenResId();
 
-    protected Toolbar getToolbar() {
-        return requireActivity().findViewById(R.id.toolbar);
+    protected ToolbarController getToolbar() {
+        return requireToolbar(requireActivity());
     }
     /**
      * Returns the MenuItems to display in the toolbar. Subclasses should override this to
@@ -161,6 +165,12 @@
         });
     }
 
+    @Override
+    public void onStart() {
+        super.onStart();
+        onCarUiInsetsChanged(requireInsets(requireActivity()));
+    }
+
     /**
      * Inflates the preferences from {@link #getPreferenceScreenResId()} and associates the
      * preference with their corresponding {@link PreferenceController} instances.
@@ -182,7 +192,7 @@
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        Toolbar toolbar = requireActivity().findViewById(R.id.toolbar);
+        ToolbarController toolbar = getToolbar();
         if (toolbar != null) {
             List<MenuItem> items = getToolbarMenuItems();
             if (items != null) {
diff --git a/src/com/android/car/settings/users/EditUsernameFragment.java b/src/com/android/car/settings/users/EditUsernameFragment.java
index 0443c57..8674f9f 100644
--- a/src/com/android/car/settings/users/EditUsernameFragment.java
+++ b/src/com/android/car/settings/users/EditUsernameFragment.java
@@ -104,6 +104,7 @@
 
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
         mUserNameEditText = view.findViewById(R.id.user_name_text_edit);
     }
 
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 06301ff..5711937 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -26,6 +26,7 @@
         "truth-prebuilt",
         "testng",
         "android.car",
+        "car-ui-lib-testing-support",
     ],
 
     java_resource_dirs: ["config"],
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java
index d423d4f..6fc9876 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountDetailsFragmentTest.java
@@ -35,6 +35,7 @@
 import com.android.car.settings.testutils.ShadowContentResolver;
 import com.android.car.settings.testutils.ShadowUserHelper;
 import com.android.car.settings.users.UserHelper;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.Toolbar;
 
 import org.junit.After;
@@ -74,6 +75,9 @@
         mContext = application;
         // Add the account to the official list of accounts
         getShadowAccountManager().addAccount(mAccount);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java
index 673bdef..7ffe5cc 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountSettingsFragmentTest.java
@@ -34,6 +34,7 @@
 import com.android.car.settings.testutils.ShadowContentResolver;
 import com.android.car.settings.testutils.ShadowUserHelper;
 import com.android.car.settings.users.UserHelper;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -70,6 +71,9 @@
         // Set up user info
         when(mMockUserHelper.getCurrentProcessUserInfo())
                 .thenReturn(new UserInfo(mUserId, "USER", /* flags= */ 0));
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java
index f8bdd11..eb0c347 100644
--- a/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/accounts/AccountSyncDetailsFragmentTest.java
@@ -36,6 +36,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowAccountManager;
 import com.android.car.settings.testutils.ShadowContentResolver;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -75,6 +76,9 @@
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         ShadowContentResolver.setSyncListener(mMockSyncListener);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
index 0c56ee7..44f5ef5 100644
--- a/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
@@ -48,6 +48,7 @@
 import com.android.car.settings.testutils.ShadowSmsApplication;
 import com.android.car.settings.testutils.ShadowUserManager;
 import com.android.car.settings.testutils.ShadowUtils;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.settingslib.Utils;
@@ -105,6 +106,9 @@
         mController.create();
 
         mFragment = ApplicationDetailsFragment.getInstance(PACKAGE_NAME);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
index da01e72..4c893c3 100644
--- a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
@@ -32,6 +32,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowBluetoothAdapter;
 import com.android.car.settings.testutils.ShadowBluetoothPan;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -83,6 +84,9 @@
 
         mFragment = BluetoothDeviceDetailsFragment.newInstance(mCachedDevice);
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePickerFragmentTest.java b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePickerFragmentTest.java
index 785caf9..775a2bf 100644
--- a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePickerFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothDevicePickerFragmentTest.java
@@ -24,6 +24,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowBluetoothAdapter;
 import com.android.car.settings.testutils.ShadowBluetoothPan;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
@@ -54,6 +55,9 @@
 
         mFragment = new BluetoothDevicePickerFragment();
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothPairingSelectionFragmentTest.java b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothPairingSelectionFragmentTest.java
index 8d23ec0..f4f1bf3 100644
--- a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothPairingSelectionFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothPairingSelectionFragmentTest.java
@@ -30,6 +30,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowBluetoothAdapter;
 import com.android.car.settings.testutils.ShadowBluetoothPan;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.settingslib.bluetooth.BluetoothCallback;
 import com.android.settingslib.bluetooth.BluetoothEventManager;
@@ -71,6 +72,9 @@
 
         mFragment = new BluetoothPairingSelectionFragment();
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothSettingsFragmentTest.java b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothSettingsFragmentTest.java
index d8d33bf..014d176 100644
--- a/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/bluetooth/BluetoothSettingsFragmentTest.java
@@ -37,6 +37,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowBluetoothAdapter;
 import com.android.car.settings.testutils.ShadowBluetoothPan;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -71,6 +72,9 @@
                 null);
         mFragment = new BluetoothSettingsFragment();
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/common/CarSettingActivityTest.java b/tests/robotests/src/com/android/car/settings/common/CarSettingActivityTest.java
index df1cf94..7f2d657 100644
--- a/tests/robotests/src/com/android/car/settings/common/CarSettingActivityTest.java
+++ b/tests/robotests/src/com/android/car/settings/common/CarSettingActivityTest.java
@@ -39,6 +39,7 @@
 import com.android.car.settings.datetime.DatetimeSettingsFragment;
 import com.android.car.settings.testutils.DummyFragment;
 import com.android.car.settings.testutils.ShadowCar;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -74,6 +75,9 @@
         mActivityController = ActivityController.of(new CarSettingActivity());
         mActivity = mActivityController.get();
         mActivityController.setup();
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java b/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java
index bdcdda1..d92655f 100644
--- a/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java
@@ -37,6 +37,7 @@
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.DummyFragment;
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.Toolbar;
 
 import org.junit.Before;
@@ -60,6 +61,9 @@
         mContext = RuntimeEnvironment.application;
         mFragmentController = FragmentController.of(new TestSettingsFragment());
         mFragment = mFragmentController.get();
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/datetime/TimePickerFragmentTest.java b/tests/robotests/src/com/android/car/settings/datetime/TimePickerFragmentTest.java
index 38f9ce5..98efc70 100644
--- a/tests/robotests/src/com/android/car/settings/datetime/TimePickerFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/datetime/TimePickerFragmentTest.java
@@ -23,6 +23,7 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -38,12 +39,14 @@
     private TimePickerFragment mFragment;
     private FragmentController<TimePickerFragment> mFragmentController;
 
-
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mFragment = new TimePickerFragment();
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/location/LocationSettingsFragmentTest.java b/tests/robotests/src/com/android/car/settings/location/LocationSettingsFragmentTest.java
index ae73168..ddc078d 100644
--- a/tests/robotests/src/com/android/car/settings/location/LocationSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/location/LocationSettingsFragmentTest.java
@@ -25,6 +25,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowLocationManager;
 import com.android.car.settings.testutils.ShadowSecureSettings;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -57,6 +58,9 @@
         mFragment = new LocationSettingsFragment();
         mFragmentController = FragmentController.of(mFragment);
         mFragmentController.setup();
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/network/MobileNetworkFragmentTest.java b/tests/robotests/src/com/android/car/settings/network/MobileNetworkFragmentTest.java
index fff4d4a..3be9079 100644
--- a/tests/robotests/src/com/android/car/settings/network/MobileNetworkFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/network/MobileNetworkFragmentTest.java
@@ -25,6 +25,7 @@
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowSubscriptionManager;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.Toolbar;
 
 import org.junit.After;
@@ -52,6 +53,9 @@
     @Before
     public void setUp() {
         mContext = RuntimeEnvironment.application;
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/security/ChooseLockPatternFragmentTest.java b/tests/robotests/src/com/android/car/settings/security/ChooseLockPatternFragmentTest.java
index a42ba26..a6c3708 100644
--- a/tests/robotests/src/com/android/car/settings/security/ChooseLockPatternFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/security/ChooseLockPatternFragmentTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.Mockito.verify;
 
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -38,6 +39,9 @@
     @Before
     public void initFragment() {
         mFragment = FragmentController.of(new ChooseLockPatternFragment()).setup();
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     /**
diff --git a/tests/robotests/src/com/android/car/settings/security/ChooseLockPinPasswordFragmentTest.java b/tests/robotests/src/com/android/car/settings/security/ChooseLockPinPasswordFragmentTest.java
index 93e4797..0ef3c55 100644
--- a/tests/robotests/src/com/android/car/settings/security/ChooseLockPinPasswordFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/security/ChooseLockPinPasswordFragmentTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.Mockito.verify;
 
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -39,6 +40,9 @@
     public void initFragment() {
         mFragment = FragmentController.of(
                 ChooseLockPinPasswordFragment.newPasswordInstance()).setup();
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     /**
diff --git a/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java b/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java
index b5a5413..ebfeccd 100644
--- a/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/security/ConfirmLockPinPasswordFragmentTest.java
@@ -22,6 +22,7 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.BaseTestActivity;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.internal.widget.LockscreenCredential;
 
 import org.junit.Before;
@@ -44,6 +45,9 @@
         mTestActivity = Robolectric.setupActivity(TestSettingsScreenLockActivity.class);
         mPinFragment = ConfirmLockPinPasswordFragment.newPinInstance();
         mTestActivity.launchFragment(mPinFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     /**
diff --git a/tests/robotests/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragmentTest.java
index 6568fd2..2ebb848 100644
--- a/tests/robotests/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/storage/AppStorageSettingsDetailsFragmentTest.java
@@ -42,6 +42,7 @@
 import com.android.car.settings.testutils.ShadowApplicationPackageManager;
 import com.android.car.settings.testutils.ShadowApplicationsState;
 import com.android.car.settings.testutils.ShadowRestrictedLockUtilsInternal;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.settingslib.RestrictedLockUtils;
@@ -106,6 +107,9 @@
         when(mApplicationsState.getEntry(eq(PACKAGE_NAME), anyInt())).thenReturn(appEntry);
         ShadowApplicationsState.setInstance(mApplicationsState);
         mFragmentController.setup();
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/system/MasterClearConfirmFragmentTest.java b/tests/robotests/src/com/android/car/settings/system/MasterClearConfirmFragmentTest.java
index 5e3b771..6a42541 100644
--- a/tests/robotests/src/com/android/car/settings/system/MasterClearConfirmFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/MasterClearConfirmFragmentTest.java
@@ -33,6 +33,7 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.Toolbar;
 
 import org.junit.After;
@@ -76,6 +77,9 @@
         // Default to not provisioned.
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED,
                 0);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/system/ResetNetworkConfirmFragmentTest.java b/tests/robotests/src/com/android/car/settings/system/ResetNetworkConfirmFragmentTest.java
index 06b4dc1..f100f98 100644
--- a/tests/robotests/src/com/android/car/settings/system/ResetNetworkConfirmFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/ResetNetworkConfirmFragmentTest.java
@@ -38,6 +38,7 @@
 import com.android.car.settings.testutils.ShadowRecoverySystem;
 import com.android.car.settings.testutils.ShadowTelephonyManager;
 import com.android.car.settings.testutils.ShadowWifiManager;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -98,6 +99,9 @@
 
         Toolbar toolbar = fragment.getActivity().requireViewById(R.id.toolbar);
         mResetButton = toolbar.getMenuItems().get(0);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/users/ChooseNewAdminFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/ChooseNewAdminFragmentTest.java
index 58cc51e..6b1de8d 100644
--- a/tests/robotests/src/com/android/car/settings/users/ChooseNewAdminFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/ChooseNewAdminFragmentTest.java
@@ -25,6 +25,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
 import com.android.car.settings.testutils.ShadowUserManager;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -56,6 +57,9 @@
         mFragment = ChooseNewAdminFragment.newInstance(TEST_ADMIN_USER);
         mFragmentController = FragmentController.of(mFragment);
         mFragmentController.setup();
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/users/EditUsernameFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/EditUsernameFragmentTest.java
index 536b410..afcf6e8 100644
--- a/tests/robotests/src/com/android/car/settings/users/EditUsernameFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/EditUsernameFragmentTest.java
@@ -27,6 +27,7 @@
 
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.BaseTestActivity;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -56,6 +57,9 @@
     @Before
     public void setUpTestActivity() {
         mTestActivity = Robolectric.setupActivity(BaseTestActivity.class);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     /**
diff --git a/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
index 2277858..2966a88 100644
--- a/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
@@ -31,6 +31,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowUserHelper;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -85,6 +86,9 @@
         MockitoAnnotations.initMocks(this);
         ShadowUserHelper.setInstance(mUserHelper);
         setCurrentUserWithFlags(/* flags= */ 0);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java
index eb2c98f..df93acc 100644
--- a/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java
@@ -24,6 +24,7 @@
 import com.android.car.settings.R;
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.Toolbar;
 
 import org.junit.Before;
@@ -58,6 +59,9 @@
         mContext = RuntimeEnvironment.application;
         mUserManager = UserManager.get(mContext);
         Shadows.shadowOf(mUserManager).addUser(TEST_USER_ID, TEST_NAME, /* flags= */ 0);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
index 72b0164..d0ea79e 100644
--- a/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
@@ -35,6 +35,7 @@
 import com.android.car.settings.testutils.ShadowUserHelper;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
 import com.android.car.settings.testutils.ShadowUserManager;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.car.ui.utils.CarUxRestrictionsUtil;
@@ -81,6 +82,9 @@
 
         mFragment = new UsersListFragment();
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/wifi/AccessPointPreferenceTest.java b/tests/robotests/src/com/android/car/settings/wifi/AccessPointPreferenceTest.java
index 1776472..706c502 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/AccessPointPreferenceTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/AccessPointPreferenceTest.java
@@ -31,6 +31,7 @@
 import com.android.car.settings.R;
 import com.android.car.settings.common.SettingsFragment;
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.settingslib.wifi.AccessPoint;
 
 import org.junit.Before;
@@ -63,6 +64,9 @@
         mPreference = new AccessPointPreference(context, mAccessPoint);
         mPreference.setKey(TEST_KEY);
         fragment.getPreferenceScreen().addPreference(mPreference);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/wifi/AddWifiFragmentTest.java b/tests/robotests/src/com/android/car/settings/wifi/AddWifiFragmentTest.java
index c836025..2b37397 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/AddWifiFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/AddWifiFragmentTest.java
@@ -28,6 +28,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowLocalBroadcastManager;
 import com.android.car.settings.testutils.ShadowWifiManager;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 import com.android.settingslib.wifi.AccessPoint;
@@ -57,6 +58,9 @@
         mLocalBroadcastManager = LocalBroadcastManager.getInstance(mContext);
         mFragment = new AddWifiFragment();
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/wifi/NetworkNameRestrictedPasswordEditTextPreferenceTest.java b/tests/robotests/src/com/android/car/settings/wifi/NetworkNameRestrictedPasswordEditTextPreferenceTest.java
index 4cfe836..6f87875 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/NetworkNameRestrictedPasswordEditTextPreferenceTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/NetworkNameRestrictedPasswordEditTextPreferenceTest.java
@@ -23,6 +23,7 @@
 import com.android.car.settings.R;
 import com.android.car.settings.common.SettingsFragment;
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -51,6 +52,9 @@
         mPreference = new NetworkNameRestrictedPasswordEditTextPreference(mContext);
         mPreference.setKey(KEY);
         fragment.getPreferenceScreen().addPreference(mPreference);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/wifi/WifiTetherFragmentTest.java b/tests/robotests/src/com/android/car/settings/wifi/WifiTetherFragmentTest.java
index e3cda2e..f680905 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/WifiTetherFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/WifiTetherFragmentTest.java
@@ -37,6 +37,7 @@
 import com.android.car.settings.testutils.FragmentController;
 import com.android.car.settings.testutils.ShadowCarWifiManager;
 import com.android.car.settings.testutils.ShadowConnectivityManager;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 import com.android.car.ui.toolbar.MenuItem;
 import com.android.car.ui.toolbar.Toolbar;
 
@@ -80,6 +81,9 @@
                 Context.WIFI_SERVICE, mWifiManager);
         mFragment = new WifiTetherFragment();
         mFragmentController = FragmentController.of(mFragment);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/car/settings/wifi/preferences/WifiWakeupTogglePreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/wifi/preferences/WifiWakeupTogglePreferenceControllerTest.java
index 91bca15..2de0532 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/preferences/WifiWakeupTogglePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/preferences/WifiWakeupTogglePreferenceControllerTest.java
@@ -40,6 +40,7 @@
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowLocationManager;
 import com.android.car.settings.testutils.ShadowSecureSettings;
+import com.android.car.ui.core.testsupport.CarUiInstallerRobolectric;
 
 import org.junit.After;
 import org.junit.Before;
@@ -77,6 +78,9 @@
         mController.mWifiManager = mWifiManager;
 
         mControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
+
+        // Needed to install Install CarUiLib BaseLayouts Toolbar for test activity
+        CarUiInstallerRobolectric.install();
     }
 
     @After