[automerger skipped] Merge "Import translations. DO NOT MERGE ANYWHERE" into pi-car-dev am: 104b9b93da -s ours am: 0bf49793d3 -s ours am: c0690f52fa -s ours

am skip reason: subject contains skip directive

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/libs/+/13134858

Change-Id: Ib1f291c2cd9c61b5b435518f327b28883a9f7e41
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java b/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
deleted file mode 100644
index 156abd8..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2019 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.
- */
-
-package android.car.encryptionrunner;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-/**
- * Factory that creates encryption runner.
- */
-public class EncryptionRunnerFactory {
-
-    private EncryptionRunnerFactory() {
-        // prevent instantiation.
-    }
-
-    /**
-     * Creates a new {@link EncryptionRunner}.
-     */
-    public static EncryptionRunner newRunner() {
-        return new Ukey2EncryptionRunner();
-    }
-
-    /**
-     * Creates a new {@link EncryptionRunner} one that doesn't actually do encryption but is useful
-     * for testing.
-     */
-    @VisibleForTesting
-    public static EncryptionRunner newDummyRunner() {
-        return new DummyEncryptionRunner();
-    }
-}
diff --git a/android-car-lib/res/values/values.xml b/android-car-lib/res/values/values.xml
index 0ae2c80..15e70f0 100644
--- a/android-car-lib/res/values/values.xml
+++ b/android-car-lib/res/values/values.xml
@@ -446,6 +446,12 @@
     <style name="Widget.Car.Button.ActionBar">
         <item name="android:scaleType">fitCenter</item>
         <item name="android:padding">@dimen/car_action_button_icon_inset</item>
+        <!-- Added paddingStart/End explicitly to make sure style works the same regardless of -->
+        <!-- whether RTL is enabled or disabled. -->
+        <!-- Note: When RTL is enabled, paddingStart/End overrides value of padding, -->
+        <!-- while padding overrides value of paddingStart/End when RTL is disabled. -->
+        <item name="android:paddingStart">@dimen/car_action_button_icon_inset</item>
+        <item name="android:paddingEnd">@dimen/car_action_button_icon_inset</item>
         <item name="android:background">@drawable/car_action_button_background</item>
         <item name="android:tint">@color/car_tint</item>
     </style>
diff --git a/car-apps-common/Android.bp b/car-apps-common/Android.bp
index 8c52089..dae4a15 100644
--- a/car-apps-common/Android.bp
+++ b/car-apps-common/Android.bp
@@ -24,7 +24,8 @@
         enabled: false,
     },
 
-    libs: ["android.car"],
+    libs: ["android.car-stubs",],
+    min_sdk_version: "29",
 
     static_libs: [
         "androidx.annotation_annotation",
diff --git a/car-apps-common/res/drawable-ldrtl/background_image_scrim.xml b/car-apps-common/res/drawable-ldrtl/background_image_scrim.xml
new file mode 100644
index 0000000..9035a65
--- /dev/null
+++ b/car-apps-common/res/drawable-ldrtl/background_image_scrim.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 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
+  -->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <gradient
+                android:angle="270"
+                android:startColor="#F5000000"
+                android:centerColor="@android:color/transparent"
+                android:endColor="#F5000000"/>
+        </shape>
+    </item>
+    <item>
+        <shape>
+            <gradient
+                android:angle="180"
+                android:centerX="0.52"
+                android:startColor="@android:color/transparent"
+                android:centerColor="@android:color/black"
+                android:endColor="@android:color/black" />
+        </shape>
+    </item>
+    <item>
+        <shape>
+            <gradient
+                android:angle="180"
+                android:centerX="0.62"
+                android:startColor="@android:color/transparent"
+                android:centerColor="#B3000000"
+                android:endColor="#B3000000" />
+        </shape>
+    </item>
+    <item>
+        <shape>
+            <solid android:color="@color/background_image_30p_black"/>
+        </shape>
+    </item>
+</layer-list>
diff --git a/car-apps-common/res/layout-port/background_image.xml b/car-apps-common/res/layout-port/background_image.xml
index e7c547c..7e4ee8e 100644
--- a/car-apps-common/res/layout-port/background_image.xml
+++ b/car-apps-common/res/layout-port/background_image.xml
@@ -22,11 +22,11 @@
         android:id="@+id/background_image_image"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        app:align_horizontal="left"
+        app:align_horizontal="start"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"/>
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
 
     <View
         android:layout_width="0dp"
@@ -34,8 +34,8 @@
         android:background="@drawable/background_image_scrim"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"/>
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
 
     <View
         android:id="@+id/background_image_darkening_scrim"
@@ -45,6 +45,6 @@
         android:visibility="gone"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toRightOf="parent"
-        app:layout_constraintRight_toRightOf="parent"/>
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
 </merge>
diff --git a/car-apps-common/res/layout/background_image.xml b/car-apps-common/res/layout/background_image.xml
index f230600..bb889ea 100644
--- a/car-apps-common/res/layout/background_image.xml
+++ b/car-apps-common/res/layout/background_image.xml
@@ -29,11 +29,11 @@
         android:id="@+id/background_image_image"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        app:align_horizontal="right"
+        app:align_horizontal="end"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@+id/background_image_guideline"/>
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toStartOf="@+id/background_image_guideline"/>
 
     <View
         android:layout_width="0dp"
@@ -41,8 +41,8 @@
         android:background="@drawable/background_image_scrim"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent"/>
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
 
     <View
         android:id="@+id/background_image_darkening_scrim"
@@ -52,6 +52,6 @@
         android:visibility="gone"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toRightOf="parent"
-        app:layout_constraintRight_toRightOf="parent"/>
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
 </merge>
diff --git a/car-apps-common/res/values/attrs.xml b/car-apps-common/res/values/attrs.xml
index f99da29..c7b3541 100644
--- a/car-apps-common/res/values/attrs.xml
+++ b/car-apps-common/res/values/attrs.xml
@@ -86,8 +86,8 @@
     <declare-styleable name="CrossfadeImageView">
         <attr name="align_horizontal" format="enum">
             <enum name="center" value="0"/>
-            <enum name="left" value="1"/>
-            <enum name="right" value="2"/>
+            <enum name="start" value="1"/>
+            <enum name="end" value="2"/>
         </attr>
     </declare-styleable>
 
diff --git a/car-apps-common/res/values/config.xml b/car-apps-common/res/values/config.xml
index f274eb8..68a0fa1 100644
--- a/car-apps-common/res/values/config.xml
+++ b/car-apps-common/res/values/config.xml
@@ -41,4 +41,10 @@
          1 (show one letter) or 0 (show avatar anonymous icon)
     -->
     <integer name="config_number_of_letters_shown_for_avatar">1</integer>
+
+    <!-- String format used to format a address Uri. -->
+    <string name="config_address_uri_format" translatable="false">geo:0,0?q=%s</string>
+    <!-- String format used to format a navigation Uri. -->
+    <string name="config_navigation_uri_format" translatable="false">google.navigation:q=%s</string>
+
 </resources>
diff --git a/car-apps-common/res/values/styles.xml b/car-apps-common/res/values/styles.xml
index 6983bdc..73457af 100644
--- a/car-apps-common/res/values/styles.xml
+++ b/car-apps-common/res/values/styles.xml
@@ -29,6 +29,12 @@
         <item name="android:layout_height">@dimen/control_bar_button_size</item>
         <!-- This padding is used to force resizing of provided icons. -->
         <item name="android:padding">@dimen/control_bar_button_padding</item>
+        <!-- Added paddingStart/End explicitly to make sure style works regardless of whether -->
+        <!-- RTL is enabled or disabled. -->
+        <!-- Note: When RTL is enabled, paddingStart/End overrides value of padding, -->
+        <!-- while padding overrides value of paddingStart/End when RTL is disabled. -->
+        <item name="android:paddingStart">@dimen/control_bar_button_padding</item>
+        <item name="android:paddingEnd">@dimen/control_bar_button_padding</item>
         <!-- Note: fitCenter makes icons disappear if the view is too small... -->
         <item name="android:scaleType">fitCenter</item>
         <item name="android:layout_gravity">center</item>
@@ -69,6 +75,7 @@
     <style name="TextAppearance">
         <item name="android:fontFamily">roboto-regular</item>
         <item name="android:textColor">@color/primary_text_color</item>
+        <item name="android:textAlignment">viewStart</item>
     </style>
 
     <style name="TextAppearance.Display1" parent="TextAppearance">
@@ -101,12 +108,8 @@
         <item name="android:letterSpacing">@dimen/letter_spacing_body3</item>
     </style>
 
-    <style name="MinimizedControlBarTitle" parent="TextAppearance.Body1">
-        <item name="android:textDirection">locale</item>
-    </style>
-    <style name="MinimizedControlBarSubtitle" parent="TextAppearance.Body3">
-        <item name="android:textDirection">locale</item>
-    </style>
+    <style name="MinimizedControlBarTitle" parent="TextAppearance.Body1"/>
+    <style name="MinimizedControlBarSubtitle" parent="TextAppearance.Body3"/>
 
     <!-- Styles for ControlBar -->
     <style name="ControlBar">
diff --git a/car-apps-common/src/com/android/car/apps/common/CropAlignedImageView.java b/car-apps-common/src/com/android/car/apps/common/CropAlignedImageView.java
index f11f33b..0adbcf6 100644
--- a/car-apps-common/src/com/android/car/apps/common/CropAlignedImageView.java
+++ b/car-apps-common/src/com/android/car/apps/common/CropAlignedImageView.java
@@ -19,9 +19,13 @@
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Matrix;
+import android.text.TextUtils;
 import android.util.AttributeSet;
+import android.view.View;
 import android.widget.ImageView;
 
+import java.util.Locale;
+
 /**
  * A {@link ImageView} that scales in a similar way as {@link ScaleType#CENTER_CROP} but aligning
  * the image to the specified edge of the view.
@@ -29,8 +33,8 @@
 public class CropAlignedImageView extends ImageView {
 
     private static final int ALIGN_HORIZONTAL_CENTER = 0;
-    private static final int ALIGN_HORIZONTAL_LEFT = 1;
-    private static final int ALIGN_HORIZONTAL_RIGHT = 2;
+    private static final int ALIGN_HORIZONTAL_START = 1;
+    private static final int ALIGN_HORIZONTAL_END = 2;
 
     private int mAlignHorizontal;
     private float mAdditionalScale = 1f;
@@ -82,6 +86,8 @@
             float fitHorizontallyScaleFactor = mFrameWidth / originalImageWidth;
             float fitVerticallyScaleFactor = mFrameHeight / originalImageHeight;
             float usedScaleFactor = Math.max(fitHorizontallyScaleFactor, fitVerticallyScaleFactor);
+            int layoutDirection = TextUtils.getLayoutDirectionFromLocale(Locale.getDefault());
+            boolean isRTL = layoutDirection == View.LAYOUT_DIRECTION_RTL;
 
             // mAdditionalScale isn't factored into the fittedImageWidth
             // because we want to scale from the center of the fitted image, so our translations
@@ -97,11 +103,11 @@
                 case ALIGN_HORIZONTAL_CENTER:
                     dx = mFrameWidth / 2f;
                     break;
-                case ALIGN_HORIZONTAL_LEFT:
-                    dx = fittedImageWidth / 2f;
+                case ALIGN_HORIZONTAL_START:
+                    dx = isRTL ? (mFrameWidth - fittedImageWidth / 2f) : fittedImageWidth / 2f;
                     break;
-                case ALIGN_HORIZONTAL_RIGHT:
-                    dx = (mFrameWidth - fittedImageWidth / 2f);
+                case ALIGN_HORIZONTAL_END:
+                    dx = isRTL ? fittedImageWidth / 2f : (mFrameWidth - fittedImageWidth / 2f);
                     break;
             }
             matrix.postTranslate(dx, mFrameHeight / 2f);
diff --git a/car-apps-common/src/com/android/car/apps/common/NavigationUtils.java b/car-apps-common/src/com/android/car/apps/common/NavigationUtils.java
new file mode 100644
index 0000000..aa0171e
--- /dev/null
+++ b/car-apps-common/src/com/android/car/apps/common/NavigationUtils.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+package com.android.car.apps.common;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.net.Uri;
+
+/**
+ * Helper methods for addresses and navigation.
+ */
+public class NavigationUtils {
+
+    /**
+     * Returns the search location intent.
+     *
+     * @param address should be a location as either a place name or address.
+     */
+    public static Intent getViewAddressIntent(Resources res, String address) {
+        String formattedAddress = String.format(res.getString(R.string.config_address_uri_format),
+                Uri.encode(address));
+        Uri addressUri = Uri.parse(formattedAddress);
+        return new Intent(Intent.ACTION_VIEW, addressUri);
+    }
+
+    /**
+     * Returns the search location intent.
+     *
+     * @param address should be a location as either a place name or address.
+     */
+    public static Intent getViewAddressIntent(Context context, String address) {
+        Resources resources = context.getResources();
+        return getViewAddressIntent(resources, address);
+    }
+
+    /**
+     * Returns the navigation intent.
+     *
+     * @param address should be a location as either a place name or address.
+     */
+    public static Intent getNavigationIntent(Resources res, String address) {
+        String formattedAddress = String.format(
+                res.getString(R.string.config_navigation_uri_format), Uri.encode(address));
+        Uri addressUri = Uri.parse(formattedAddress);
+        return new Intent(Intent.ACTION_VIEW, addressUri);
+    }
+
+    /**
+     * Returns the navigation Intent.
+     *
+     * @param address should be a location as either a place name or address.
+     */
+    public static Intent getNavigationIntent(Context context, String address) {
+        Resources resources = context.getResources();
+        return getNavigationIntent(resources, address);
+    }
+}
diff --git a/car-apps-common/src/com/android/car/apps/common/log/L.java b/car-apps-common/src/com/android/car/apps/common/log/L.java
new file mode 100644
index 0000000..ad1c284
--- /dev/null
+++ b/car-apps-common/src/com/android/car/apps/common/log/L.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+package com.android.car.apps.common.log;
+
+import android.os.Build;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Util class for logging.
+ */
+public class L {
+    private static final List<String> TYPE_LIST = Arrays.asList("eng", "userdebug");
+    /**
+     * Logs verbose level logs if loggable.
+     *
+     * <p>@see String#format(String, Object...) for formatting log string.
+     */
+    public static void v(String tag, @NonNull String msg, Object... args) {
+        if (Log.isLoggable(tag, Log.VERBOSE) || TYPE_LIST.contains(Build.TYPE)) {
+            Log.v(tag, String.format(msg, args));
+        }
+    }
+
+    /**
+     * Logs debug level logs if loggable.
+     *
+     * <p>@see String#format(String, Object...) for formatting log string.
+     */
+    public static void d(String tag, @NonNull String msg, Object... args) {
+        if (Log.isLoggable(tag, Log.DEBUG) || TYPE_LIST.contains(Build.TYPE)) {
+            Log.d(tag, String.format(msg, args));
+        }
+    }
+
+    /**
+     * Logs info level logs if loggable.
+     *
+     * <p>@see String#format(String, Object...) for formatting log string.
+     */
+    public static void i(String tag, @NonNull String msg, Object... args) {
+        if (Log.isLoggable(tag, Log.INFO) || TYPE_LIST.contains(Build.TYPE)) {
+            Log.i(tag, String.format(msg, args));
+        }
+    }
+
+    /**
+     * Logs warning level logs if loggable.
+     *
+     * <p>@see String#format(String, Object...) for formatting log string.
+     */
+    public static void w(String tag, @NonNull String msg, Object... args) {
+        if (Log.isLoggable(tag, Log.WARN) || TYPE_LIST.contains(Build.TYPE)) {
+            Log.w(tag, String.format(msg, args));
+        }
+    }
+
+    /**
+     * Logs error level logs if loggable.
+     *
+     * <p>@see String#format(String, Object...) for formatting log string.
+     */
+    public static void e(String tag, @NonNull String msg, Object... args) {
+        if (Log.isLoggable(tag, Log.ERROR) || TYPE_LIST.contains(Build.TYPE)) {
+            Log.e(tag, String.format(msg, args));
+        }
+    }
+
+    /**
+     * Logs warning level logs if loggable.
+     *
+     * <p>@see String#format(String, Object...) for formatting log string.
+     */
+    public static void e(String tag, Exception e, @NonNull String msg, Object... args) {
+        if (Log.isLoggable(tag, Log.ERROR) || TYPE_LIST.contains(Build.TYPE)) {
+            Log.e(tag, String.format(msg, args), e);
+        }
+    }
+}
diff --git a/car-assist-client-lib/res/values-iw/strings.xml b/car-assist-client-lib/res/values-iw/strings.xml
index 510432d..dc96640 100644
--- a/car-assist-client-lib/res/values-iw/strings.xml
+++ b/car-assist-client-lib/res/values-iw/strings.xml
@@ -16,6 +16,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="assist_action_failed_toast" msgid="3250146468076483714">"לא ניתן לבקש מה-Assistant לבצע פעולה!"</string>
+    <string name="assist_action_failed_toast" msgid="3250146468076483714">"לא ניתן לבקש מ-Assistant לבצע פעולה!"</string>
     <string name="says" msgid="8575666015622916107">"רוצה להודיע כי"</string>
 </resources>
diff --git a/car-assist-client-lib/src/com/android/car/assist/client/CarAssistUtils.java b/car-assist-client-lib/src/com/android/car/assist/client/CarAssistUtils.java
index 1f9d915..6007637 100644
--- a/car-assist-client-lib/src/com/android/car/assist/client/CarAssistUtils.java
+++ b/car-assist-client-lib/src/com/android/car/assist/client/CarAssistUtils.java
@@ -164,8 +164,7 @@
         return hasMessagingStyle(sbn)
                 && hasRequiredAssistantCallbacks(sbn)
                 && ((getReplyAction(sbn.getNotification()) == null)
-                    || replyCallbackHasRemoteInput(sbn))
-                && assistantCallbacksShowNoUi(sbn);
+                    || replyCallbackHasRemoteInput(sbn));
     }
 
     /** Returns true if the semantic action provided can be supported. */
diff --git a/car-media-common/res/layout/playback_fragment.xml b/car-media-common/res/layout/playback_fragment.xml
index 6d751cc..17e10b0 100644
--- a/car-media-common/res/layout/playback_fragment.xml
+++ b/car-media-common/res/layout/playback_fragment.xml
@@ -46,25 +46,26 @@
             android:layout_width="@dimen/app_selector_icon_size"
             android:layout_height="@dimen/app_selector_icon_size"
             android:layout_gravity="center"
-            android:layout_marginLeft="@dimen/playback_fragment_text_margin_x"
+            android:layout_marginStart="@dimen/playback_fragment_text_margin_x"
             android:background="?android:attr/selectableItemBackground"
             android:src="@drawable/ic_app_switch"
             app:layout_constraintTop_toTopOf="@+id/app_name"
             app:layout_constraintBottom_toBottomOf="@+id/app_name"
-            app:layout_constraintLeft_toLeftOf="parent"/>
+            app:layout_constraintStart_toStartOf="parent"/>
 
         <TextView
             android:id="@+id/app_name"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/playback_fragment_text_margin_top"
-            android:layout_marginLeft="@dimen/playback_fragment_text_margin_x"
-            android:layout_marginRight="@dimen/playback_fragment_text_margin_x"
+            android:layout_marginStart="@dimen/playback_fragment_text_margin_x"
+            android:layout_marginEnd="@dimen/playback_fragment_text_margin_x"
             android:textAppearance="?android:attr/textAppearanceMedium"
             android:singleLine="true"
             android:includeFontPadding="false"
-            app:layout_constraintLeft_toRightOf="@+id/app_icon"
-            app:layout_constraintRight_toLeftOf="@+id/app_selector_container"
+            android:textAlignment="viewStart"
+            app:layout_constraintStart_toEndOf="@+id/app_icon"
+            app:layout_constraintEnd_toStartOf="@+id/app_selector_container"
             app:layout_constraintTop_toTopOf="parent"/>
 
         <TextView
@@ -73,10 +74,10 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/playback_fragment_text_margin_top"
-            android:layout_marginLeft="@dimen/playback_fragment_text_margin_x"
-            android:layout_marginRight="@dimen/playback_fragment_text_margin_x"
-            app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintRight_toRightOf="parent"
+            android:layout_marginStart="@dimen/playback_fragment_text_margin_x"
+            android:layout_marginEnd="@dimen/playback_fragment_text_margin_x"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/app_name"/>
 
         <TextView
@@ -85,10 +86,10 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/playback_fragment_text_margin_top"
-            android:layout_marginLeft="@dimen/playback_fragment_text_margin_x"
-            android:layout_marginRight="@dimen/playback_fragment_text_margin_x"
-            app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintRight_toLeftOf="@+id/app_selector_container"
+            android:layout_marginStart="@dimen/playback_fragment_text_margin_x"
+            android:layout_marginEnd="@dimen/playback_fragment_text_margin_x"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/app_selector_container"
             app:layout_constraintTop_toBottomOf="@+id/title"/>
 
         <FrameLayout
@@ -97,10 +98,10 @@
             android:layout_width="@dimen/app_selector_icon_touch_target"
             android:layout_height="@dimen/app_selector_icon_touch_target"
             android:background="?android:attr/selectableItemBackground"
-            android:layout_marginRight="@dimen/app_selector_margin_x"
+            android:layout_marginEnd="@dimen/app_selector_margin_x"
             app:layout_constraintTop_toTopOf="@+id/app_name"
             app:layout_constraintBottom_toBottomOf="@+id/app_name"
-            app:layout_constraintRight_toRightOf="parent">
+            app:layout_constraintEnd_toEndOf="parent">
 
             <ImageView
                 android:id="@+id/app_selector"
@@ -119,8 +120,8 @@
             app:columns="3"
             app:enableOverflow="false"
             app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintRight_toRightOf="parent"/>
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"/>
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
diff --git a/car-media-common/res/values/attrs.xml b/car-media-common/res/values/attrs.xml
index 75ff716..04e2dbb 100644
--- a/car-media-common/res/values/attrs.xml
+++ b/car-media-common/res/values/attrs.xml
@@ -34,8 +34,8 @@
     <declare-styleable name="CrossfadeImageView">
         <attr name="align_horizontal" format="enum">
             <enum name="center" value="0"/>
-            <enum name="left" value="1"/>
-            <enum name="right" value="2"/>
+            <enum name="start" value="1"/>
+            <enum name="end" value="2"/>
         </attr>
     </declare-styleable>
 </resources>
diff --git a/car-media-common/res/values/styles.xml b/car-media-common/res/values/styles.xml
index 5d00241..972837d 100644
--- a/car-media-common/res/values/styles.xml
+++ b/car-media-common/res/values/styles.xml
@@ -18,13 +18,11 @@
     <style name="PlaybackTitleStyle" parent="TextAppearance.Body1">
         <item name="android:singleLine">true</item>
         <item name="android:includeFontPadding">false</item>
-        <item name="android:textDirection">locale</item>
     </style>
 
     <style name="PlaybackSubtitleStyle" parent="TextAppearance.Body3">
         <item name="android:textColor">@color/secondary_text_color</item>
         <item name="android:singleLine">true</item>
         <item name="android:includeFontPadding">false</item>
-        <item name="android:textDirection">locale</item>
     </style>
 </resources>
diff --git a/car-media-common/src/com/android/car/media/common/ControlBarHelper.java b/car-media-common/src/com/android/car/media/common/ControlBarHelper.java
index 0f011fd..4e3b7b9 100644
--- a/car-media-common/src/com/android/car/media/common/ControlBarHelper.java
+++ b/car-media-common/src/com/android/car/media/common/ControlBarHelper.java
@@ -64,8 +64,8 @@
 
         model.getProgress().observe(owner,
                 progress -> {
-                    progressBar.setProgress((int) progress.getProgress());
                     progressBar.setMax((int) progress.getMaxProgress());
+                    progressBar.setProgress((int) progress.getProgress());
                 });
     }
 }
diff --git a/car-media-common/src/com/android/car/media/common/browse/BrowsedMediaItems.java b/car-media-common/src/com/android/car/media/common/browse/BrowsedMediaItems.java
index dea0d6a..5c0a13d 100644
--- a/car-media-common/src/com/android/car/media/common/browse/BrowsedMediaItems.java
+++ b/car-media-common/src/com/android/car/media/common/browse/BrowsedMediaItems.java
@@ -26,6 +26,7 @@
 import com.android.car.media.common.MediaItemMetadata;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -146,6 +147,7 @@
             mHandler.removeCallbacks(mRetryRunnable);
             mIsDataLoaded = true;
             setValue(children.stream()
+                    .filter(Objects::nonNull)
                     .map(MediaItemMetadata::new)
                     .collect(Collectors.toList()));
         }
diff --git a/car-media-common/src/com/android/car/media/common/browse/SearchedMediaItems.java b/car-media-common/src/com/android/car/media/common/browse/SearchedMediaItems.java
index 51411f0..2f7d0c9 100644
--- a/car-media-common/src/com/android/car/media/common/browse/SearchedMediaItems.java
+++ b/car-media-common/src/com/android/car/media/common/browse/SearchedMediaItems.java
@@ -28,6 +28,7 @@
 import com.android.car.media.common.MediaItemMetadata;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * A LiveData that provides access to a MediaBrowser's search results for a given query
@@ -43,7 +44,10 @@
         public void onSearchResult(@NonNull String query, Bundle extras,
                                    @NonNull List<MediaBrowserCompat.MediaItem> items) {
             super.onSearchResult(query, extras, items);
-            setValue(items.stream().map(MediaItemMetadata::new).collect(toList()));
+            setValue(items.stream()
+                    .filter(Objects::nonNull)
+                    .map(MediaItemMetadata::new)
+                    .collect(toList()));
         }
 
         @Override
diff --git a/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java b/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java
index 95c0dd5..94803f5 100644
--- a/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java
+++ b/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java
@@ -293,7 +293,8 @@
         public void onQueueChanged(@Nullable List<MediaSessionCompat.QueueItem> queue) {
             List<MediaItemMetadata> filtered = queue == null ? Collections.emptyList()
                     : queue.stream()
-                            .filter(item -> item.getDescription() != null
+                            .filter(item -> item != null
+                                    && item.getDescription() != null
                                     && item.getDescription().getTitle() != null)
                             .map(MediaItemMetadata::new)
                             .collect(Collectors.toList());
diff --git a/car-messenger-common/Android.bp b/car-messenger-common/Android.bp
index 19ed50f..da0d075 100644
--- a/car-messenger-common/Android.bp
+++ b/car-messenger-common/Android.bp
@@ -19,19 +19,22 @@
 
     srcs: ["src/**/*.java"],
 
+    manifest: "AndroidManifest.xml",
+
     optimize: {
         enabled: false,
     },
 
-    libs: ["android.car"],
+    min_sdk_version: "29",
+
+    libs: ["android.car-system-stubs",],
 
     resource_dirs: ["res"],
 
     static_libs: [
-        "android.car.userlib",
-        "androidx.legacy_legacy-support-v4",
         "car-apps-common-bp",
         "car-messenger-protos",
         "connected-device-protos",
+        "libphonenumber",
     ],
 }
diff --git a/car-messenger-common/res/values-fr-rCA/strings.xml b/car-messenger-common/res/values-fr-rCA/strings.xml
index 56086e6..9bbe2c7 100644
--- a/car-messenger-common/res/values-fr-rCA/strings.xml
+++ b/car-messenger-common/res/values-fr-rCA/strings.xml
@@ -19,6 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <plurals name="notification_new_message" formatted="false" msgid="1631343923556571689">
       <item quantity="one">%d nouveau message</item>
+      <item quantity="many">%d new messages</item>
       <item quantity="other">%d nouveaux messages</item>
     </plurals>
     <string name="action_play" msgid="1884580550634079470">"Faire jouer"</string>
diff --git a/car-messenger-common/res/values-fr/strings.xml b/car-messenger-common/res/values-fr/strings.xml
index a96b14f..12cb2f7 100644
--- a/car-messenger-common/res/values-fr/strings.xml
+++ b/car-messenger-common/res/values-fr/strings.xml
@@ -19,6 +19,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <plurals name="notification_new_message" formatted="false" msgid="1631343923556571689">
       <item quantity="one">%d nouveau message</item>
+      <item quantity="many">%d new messages</item>
       <item quantity="other">%d nouveaux messages</item>
     </plurals>
     <string name="action_play" msgid="1884580550634079470">"Lire"</string>
diff --git a/car-messenger-common/res/values-mn/strings.xml b/car-messenger-common/res/values-mn/strings.xml
index d47453b..0cd0bcc 100644
--- a/car-messenger-common/res/values-mn/strings.xml
+++ b/car-messenger-common/res/values-mn/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <plurals name="notification_new_message" formatted="false" msgid="1631343923556571689">
-      <item quantity="other">%d шинэ зурвас</item>
-      <item quantity="one">Шинэ зурвас</item>
+      <item quantity="other">%d шинэ мессеж</item>
+      <item quantity="one">Шинэ мессеж</item>
     </plurals>
     <string name="action_play" msgid="1884580550634079470">"Тоглуулах"</string>
     <string name="action_mark_as_read" msgid="5185216939940407938">"Уншсан гэж тэмдэглэх"</string>
@@ -30,7 +30,7 @@
     <string name="auto_reply_failed_message" msgid="6445984971657465627">"Хариу илгээх боломжгүй байна. Дахин оролдоно уу."</string>
     <string name="auto_reply_device_disconnected" msgid="5861772755278229950">"Хариу илгээх боломжгүй байна. Төхөөрөмж холбогдоогүй байна."</string>
     <string name="tts_sender_says" msgid="5352698006545359668">"%s хэлж байна"</string>
-    <string name="tts_failed_toast" msgid="1483313550894086353">"Зурвасыг унших боломжгүй байна."</string>
+    <string name="tts_failed_toast" msgid="1483313550894086353">"Мессежийг унших боломжгүй байна."</string>
     <string name="reply_message_display_template" msgid="6348622926232346974">"\"%s\""</string>
     <string name="message_sent_notice" msgid="7172592196465284673">"%s-д хариу илгээсэн"</string>
     <string name="name_not_available" msgid="3800013092212550915">"Нэр ашиглалтад алга"</string>
diff --git a/car-messenger-common/res/values/strings.xml b/car-messenger-common/res/values/strings.xml
index ff604e2..b19ffdb 100644
--- a/car-messenger-common/res/values/strings.xml
+++ b/car-messenger-common/res/values/strings.xml
@@ -41,6 +41,6 @@
     <string name="name_not_available">Name not available</string>
 
     <!-- Formats a group conversation's title for a message notification. The format is: <Sender of last message> mdot <Name of the conversation>.-->
-    <string name="group_conversation_title_separator" translatable="false">%1$s&#160;&#8226;&#160;%2$s</string>
+    <string name="group_conversation_title_separator" translatable="false">&#160;&#8226;&#160;</string>
 
 </resources>
diff --git a/car-messenger-common/src/com/android/car/messenger/common/BaseNotificationDelegate.java b/car-messenger-common/src/com/android/car/messenger/common/BaseNotificationDelegate.java
index 3045cdc..6397a47 100644
--- a/car-messenger-common/src/com/android/car/messenger/common/BaseNotificationDelegate.java
+++ b/car-messenger-common/src/com/android/car/messenger/common/BaseNotificationDelegate.java
@@ -17,19 +17,17 @@
 package com.android.car.messenger.common;
 
 import android.app.Notification;
+import android.app.Notification.Action;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
+import android.app.Person;
 import android.app.RemoteInput;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.os.Bundle;
 
-import androidx.core.app.NotificationCompat;
-import androidx.core.app.NotificationCompat.Action;
-import androidx.core.app.Person;
-
-import com.android.car.apps.common.LetterTileDrawable;
+import androidx.annotation.Nullable;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -73,7 +71,6 @@
             "com.android.car.messenger.common.REMOTE_INPUT_KEY";
 
     protected final Context mContext;
-    protected final String mClassName;
     protected final NotificationManager mNotificationManager;
     protected final boolean mUseLetterTile;
 
@@ -81,7 +78,7 @@
      * Maps a conversation's Notification Metadata to the conversation's unique key.
      * The extending class should always keep this map updated with the latest new/updated
      * notification information before calling {@link BaseNotificationDelegate#postNotification(
-     * ConversationKey, ConversationNotificationInfo, String)}.
+     * ConversationKey, ConversationNotificationInfo, String, Bitmap)}.
      **/
     protected final Map<ConversationKey, ConversationNotificationInfo> mNotificationInfos =
             new HashMap<>();
@@ -90,40 +87,27 @@
      * Maps a conversation's Notification Builder to the conversation's unique key. When the
      * conversation gets updated, this builder should be retrieved, updated, and reposted.
      **/
-    private final Map<ConversationKey, NotificationCompat.Builder> mNotificationBuilders =
+    private final Map<ConversationKey, Notification.Builder> mNotificationBuilders =
             new HashMap<>();
 
     /**
      * Maps a message's metadata with the message's unique key.
      * The extending class should always keep this map updated with the latest message information
      * before calling {@link BaseNotificationDelegate#postNotification(
-     * ConversationKey, ConversationNotificationInfo, String)}.
+     * ConversationKey, ConversationNotificationInfo, String, Bitmap)}.
      **/
     protected final Map<MessageKey, Message> mMessages = new HashMap<>();
 
-    /**
-     * Maps a Bitmap of a sender's Large Icon to the sender's unique key.
-     * The extending class should always keep this map updated with the loaded Sender large icons
-     * before calling {@link BaseNotificationDelegate#postNotification(
-     * ConversationKey, ConversationNotificationInfo, String)}. If the large icon is not found for
-     * the {@link SenderKey} when constructing the notification, a {@link LetterTileDrawable} will
-     * be created for the sender, unless {@link BaseNotificationDelegate#mUseLetterTile} is set to
-     * false.
-     **/
-    protected final Map<SenderKey, Bitmap> mSenderLargeIcons = new HashMap<>();
-
     private final int mBitmapSize;
     private final float mCornerRadiusPercent;
 
     /**
      * Constructor for the BaseNotificationDelegate class.
      * @param context of the calling application.
-     * @param className of the calling application.
      * @param useLetterTile whether a letterTile icon should be used if no avatar icon is given.
      **/
-    public BaseNotificationDelegate(Context context, String className, boolean useLetterTile) {
+    public BaseNotificationDelegate(Context context, boolean useLetterTile) {
         mContext = context;
-        mClassName = className;
         mUseLetterTile = useLetterTile;
         mNotificationManager =
                 (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
@@ -141,7 +125,6 @@
         clearNotifications(predicate);
         mNotificationBuilders.entrySet().removeIf(entry -> predicate.test(entry.getKey()));
         mNotificationInfos.entrySet().removeIf(entry -> predicate.test(entry.getKey()));
-        mSenderLargeIcons.entrySet().removeIf(entry -> predicate.test(entry.getKey()));
         mMessages.entrySet().removeIf(
                 messageKeyMapMessageEntry -> predicate.test(messageKeyMapMessageEntry.getKey()));
     }
@@ -159,6 +142,23 @@
         });
     }
 
+    protected void dismissInternal(ConversationKey convoKey) {
+        clearNotifications(key -> key.equals(convoKey));
+        excludeFromNotification(convoKey);
+    }
+
+    /**
+     * Excludes messages from a notification so that the messages are not shown to the user once
+     * the notification gets updated with newer messages.
+     */
+    protected void excludeFromNotification(ConversationKey convoKey) {
+        ConversationNotificationInfo info = mNotificationInfos.get(convoKey);
+        for (MessageKey key : info.mMessageKeys) {
+            Message message = mMessages.get(key);
+            message.excludeFromNotification();
+        }
+    }
+
     /**
      * Helper method to add {@link Message}s to the {@link ConversationNotificationInfo}. This
      * should be called when a new message has arrived.
@@ -180,10 +180,11 @@
      * and all of its {@link Message} objects have been linked to it.
      **/
     protected void postNotification(ConversationKey conversationKey,
-            ConversationNotificationInfo notificationInfo, String channelId) {
+            ConversationNotificationInfo notificationInfo, String channelId,
+            @Nullable Bitmap avatarIcon) {
         boolean newNotification = !mNotificationBuilders.containsKey(conversationKey);
 
-        NotificationCompat.Builder builder = newNotification ? new NotificationCompat.Builder(
+        Notification.Builder builder = newNotification ? new Notification.Builder(
                 mContext, channelId) : mNotificationBuilders.get(
                 conversationKey);
         builder.setChannelId(channelId);
@@ -194,9 +195,8 @@
                 R.plurals.notification_new_message, notificationInfo.mMessageKeys.size(),
                 notificationInfo.mMessageKeys.size()));
 
-        if (mSenderLargeIcons.containsKey(getSenderKeyFromConversation(conversationKey))) {
-            builder.setLargeIcon(
-                    mSenderLargeIcons.get(getSenderKeyFromConversation(conversationKey)));
+        if (avatarIcon != null) {
+            builder.setLargeIcon(avatarIcon);
         } else if (mUseLetterTile) {
             builder.setLargeIcon(Utils.createLetterTile(mContext,
                     Utils.getInitials(lastMessage.getSenderName(), ""),
@@ -204,7 +204,7 @@
         }
         // Else, no avatar icon will be shown.
 
-        builder.setWhen(lastMessage.getReceiveTime());
+        builder.setWhen(lastMessage.getReceivedTime());
 
         // Create MessagingStyle
         String userName = (notificationInfo.getUserDisplayName() == null
@@ -213,7 +213,7 @@
         Person user = new Person.Builder()
                 .setName(userName)
                 .build();
-        NotificationCompat.MessagingStyle messagingStyle = new NotificationCompat.MessagingStyle(
+        Notification.MessagingStyle messagingStyle = new Notification.MessagingStyle(
                 user);
         Person sender = new Person.Builder()
                 .setName(lastMessage.getSenderName())
@@ -223,7 +223,7 @@
             if (!message.shouldExcludeFromNotification()) {
                 messagingStyle.addMessage(
                         message.getMessageText(),
-                        message.getReceiveTime(),
+                        message.getReceivedTime(),
                         notificationInfo.isGroupConvo() ? new Person.Builder()
                                 .setName(message.getSenderName())
                                 .setUri(message.getSenderContactUri())
@@ -231,18 +231,18 @@
             }
         });
         if (notificationInfo.isGroupConvo()) {
-            messagingStyle.setConversationTitle(
-                    mContext.getString(R.string.group_conversation_title_separator,
-                            lastMessage.getSenderName(), notificationInfo.getConvoTitle()));
+            messagingStyle.setConversationTitle(Utils.constructGroupConversationHeader(
+                    lastMessage.getSenderName(), notificationInfo.getConvoTitle(),
+                    mContext.getString(R.string.group_conversation_title_separator)));
         }
 
         // We are creating this notification for the first time.
         if (newNotification) {
             builder.setCategory(Notification.CATEGORY_MESSAGE);
-            if (notificationInfo.getAppSmallIconResId() == 0) {
-                builder.setSmallIcon(R.drawable.ic_message);
+            if (notificationInfo.getAppIcon() != null) {
+                builder.setSmallIcon(notificationInfo.getAppIcon());
             } else {
-                builder.setSmallIcon(notificationInfo.getAppSmallIconResId());
+                builder.setSmallIcon(R.drawable.ic_message);
             }
 
             builder.setShowWhen(true);
@@ -281,7 +281,7 @@
             int notificationId) {
         final int icon = android.R.drawable.ic_media_play;
 
-        final List<NotificationCompat.Action> actionList = new ArrayList<>();
+        final List<Notification.Action> actionList = new ArrayList<>();
 
         // Reply action
         if (shouldAddReplyAction(conversationKey.getDeviceId())) {
@@ -289,14 +289,9 @@
             PendingIntent replyIntent = createServiceIntent(conversationKey, notificationId,
                     ACTION_REPLY);
             actionList.add(
-                    new NotificationCompat.Action.Builder(icon, replyString, replyIntent)
-                            .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_REPLY)
-                            .setShowsUserInterface(false)
-                            .addRemoteInput(
-                                    new androidx.core.app.RemoteInput.Builder(
-                                            EXTRA_REMOTE_INPUT_KEY)
-                                            .build()
-                            )
+                    new Notification.Action.Builder(icon, replyString, replyIntent)
+                            .setSemanticAction(Notification.Action.SEMANTIC_ACTION_REPLY)
+                            .addRemoteInput(new RemoteInput.Builder(EXTRA_REMOTE_INPUT_KEY).build())
                             .build()
             );
         }
@@ -306,9 +301,8 @@
         PendingIntent markAsReadIntent = createServiceIntent(conversationKey, notificationId,
                 ACTION_MARK_AS_READ);
         actionList.add(
-                new NotificationCompat.Action.Builder(icon, markAsRead, markAsReadIntent)
-                        .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ)
-                        .setShowsUserInterface(false)
+                new Notification.Action.Builder(icon, markAsRead, markAsReadIntent)
+                        .setSemanticAction(Notification.Action.SEMANTIC_ACTION_MARK_AS_READ)
                         .build()
         );
 
@@ -319,16 +313,11 @@
             String action) {
         Intent intent = new Intent(mContext, mContext.getClass())
                 .setAction(action)
-                .setClassName(mContext, mClassName)
+                .setClassName(mContext, mContext.getClass().getName())
                 .putExtra(EXTRA_CONVERSATION_KEY, conversationKey);
 
         return PendingIntent.getForegroundService(mContext, notificationId, intent,
                 PendingIntent.FLAG_UPDATE_CURRENT);
     }
 
-    protected SenderKey getSenderKeyFromConversation(ConversationKey conversationKey) {
-        ConversationNotificationInfo info = mNotificationInfos.get(conversationKey);
-        return mMessages.get(info.getLastMessageKey()).getSenderKey();
-    }
-
 }
diff --git a/car-messenger-common/src/com/android/car/messenger/common/ConversationNotificationInfo.java b/car-messenger-common/src/com/android/car/messenger/common/ConversationNotificationInfo.java
index 5567f50..accebf1 100644
--- a/car-messenger-common/src/com/android/car/messenger/common/ConversationNotificationInfo.java
+++ b/car-messenger-common/src/com/android/car/messenger/common/ConversationNotificationInfo.java
@@ -18,11 +18,12 @@
 
 import static com.android.car.apps.common.util.SafeLog.logw;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.os.Build;
+import android.graphics.drawable.Icon;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import com.android.car.messenger.NotificationMsgProto.NotificationMsg;
 import com.android.car.messenger.NotificationMsgProto.NotificationMsg.ConversationNotification;
 import com.android.car.messenger.NotificationMsgProto.NotificationMsg.MessagingStyle;
@@ -36,7 +37,7 @@
  * ConversationNotificationInfo object.
  **/
 public class ConversationNotificationInfo {
-    private static final String TAG = "CMC.ConversationNotificationInfo";
+    private static final String TAG = "CMC.ConvoNotifInfo";
     private static int sNextNotificationId = 0;
     final int mNotificationId = sNextNotificationId++;
 
@@ -51,9 +52,11 @@
     private final String mNotificationKey;
     @Nullable
     private final String mAppDisplayName;
+    private final String mAppPackageName;
     @Nullable
     private final String mUserDisplayName;
-    private final int mAppSmallIconResId;
+    @Nullable
+    private final Icon mAppIcon;
 
     public final LinkedList<MessageKey> mMessageKeys = new LinkedList<>();
 
@@ -68,7 +71,7 @@
         MessagingStyle messagingStyle = conversation.getMessagingStyle();
 
         if (!Utils.isValidConversationNotification(conversation, /* isShallowCheck= */ true)) {
-            if (Log.isLoggable(TAG, Log.DEBUG) || Build.IS_DEBUGGABLE) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
                 throw new IllegalArgumentException(
                         "ConversationNotificationInfo is missing required fields");
             } else {
@@ -77,18 +80,28 @@
             }
         }
 
+        Icon appIcon = null;
+        if (conversation.getAppIcon() != null) {
+            byte[] iconBytes = conversation.getAppIcon().toByteArray();
+            if (iconBytes != null && iconBytes.length > 0) {
+                appIcon = Icon.createWithData(iconBytes, 0, iconBytes.length);
+            }
+        }
+
         return new ConversationNotificationInfo(deviceName, deviceId,
                 messagingStyle.getConvoTitle(),
                 messagingStyle.getIsGroupConvo(), notificationKey,
                 conversation.getMessagingAppDisplayName(),
-                messagingStyle.getUserDisplayName(), /* appSmallIconResId= */ 0);
+                conversation.getMessagingAppPackageName(),
+                messagingStyle.getUserDisplayName(),
+                appIcon);
 
     }
 
     private ConversationNotificationInfo(@Nullable String deviceName, String deviceId,
             String convoTitle, boolean isGroupConvo, @Nullable String notificationKey,
-            @Nullable String appDisplayName, @Nullable String userDisplayName,
-            int appSmallIconResId) {
+            @Nullable String appDisplayName, String appPackageName,
+            @Nullable String userDisplayName, @Nullable Icon appIcon) {
         boolean missingDeviceId = (deviceId == null);
         boolean missingTitle = (convoTitle == null);
         if (missingDeviceId || missingTitle) {
@@ -107,8 +120,9 @@
         this.mIsGroupConvo = isGroupConvo;
         this.mNotificationKey = notificationKey;
         this.mAppDisplayName = appDisplayName;
+        this.mAppPackageName = appPackageName;
         this.mUserDisplayName = userDisplayName;
-        this.mAppSmallIconResId = appSmallIconResId;
+        this.mAppIcon = appIcon;
     }
 
     /** Returns the id that should be used for this object's {@link android.app.Notification} **/
@@ -158,6 +172,13 @@
     }
 
     /**
+     * Returns the package name of the application that posted this notification.
+     **/
+    public String getAppPackageName() {
+        return mAppPackageName;
+    }
+
+    /**
      * Returns the User Display Name if this object is based on a @link ConversationNotification}.
      * This is needed for {@link android.app.Notification.MessagingStyle}.
      */
@@ -167,9 +188,10 @@
     }
 
 
-    /** Returns the icon's resource id of the application that posted this notification. **/
-    public int getAppSmallIconResId() {
-        return mAppSmallIconResId;
+    /** Returns the app's icon of the application that posted this notification. **/
+    @Nullable
+    public Icon getAppIcon() {
+        return mAppIcon;
     }
 
     public MessageKey getLastMessageKey() {
diff --git a/car-messenger-common/src/com/android/car/messenger/common/Message.java b/car-messenger-common/src/com/android/car/messenger/common/Message.java
index 017d055..462e22d 100644
--- a/car-messenger-common/src/com/android/car/messenger/common/Message.java
+++ b/car-messenger-common/src/com/android/car/messenger/common/Message.java
@@ -18,10 +18,10 @@
 
 import static com.android.car.apps.common.util.SafeLog.logw;
 
-import android.annotation.Nullable;
-import android.os.Build;
 import android.util.Log;
 
+import androidx.annotation.Nullable;
+
 import com.android.car.messenger.NotificationMsgProto.NotificationMsg;
 import com.android.car.messenger.NotificationMsgProto.NotificationMsg.MessagingStyleMessage;
 
@@ -36,7 +36,7 @@
     private final String mSenderName;
     private final String mDeviceId;
     private final String mMessageText;
-    private final long mReceiveTime;
+    private final long mReceivedTime;
     private final boolean mIsReadOnPhone;
     private boolean mShouldExclude;
     private final String mHandle;
@@ -64,14 +64,15 @@
      *
      * @param deviceId of the phone that received this message.
      * @param updatedMessage containing the information to base this message object off of.
-     * @param appDisplayName of the messaging app this message belongs to.
+     * @param senderKey of the sender of the message. Not guaranteed to be unique for all senders
+     *                  if this message is part of a group conversation.
      **/
     @Nullable
     public static Message parseFromMessage(String deviceId,
-            MessagingStyleMessage updatedMessage, String appDisplayName) {
+            MessagingStyleMessage updatedMessage, SenderKey senderKey) {
 
         if (!Utils.isValidMessagingStyleMessage(updatedMessage)) {
-            if (Log.isLoggable(TAG, Log.DEBUG) || Build.IS_DEBUGGABLE) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
                 throw new IllegalArgumentException(
                         "MessagingStyleMessage is missing required fields");
             } else {
@@ -88,12 +89,12 @@
                 Utils.createMessageHandle(updatedMessage),
                 MessageType.NOTIFICATION_MESSAGE,
                 /* senderContactUri */ null,
-                appDisplayName);
+                senderKey);
     }
 
-    private Message(String senderName, String deviceId, String messageText, long receiveTime,
+    private Message(String senderName, String deviceId, String messageText, long receivedTime,
             boolean isReadOnPhone, String handle, MessageType messageType,
-            @Nullable String senderContactUri, String senderKeyMetadata) {
+            @Nullable String senderContactUri, SenderKey senderKey) {
         boolean missingSenderName = (senderName == null);
         boolean missingDeviceId = (deviceId == null);
         boolean missingText = (messageText == null);
@@ -121,13 +122,13 @@
         this.mSenderName = senderName;
         this.mDeviceId = deviceId;
         this.mMessageText = messageText;
-        this.mReceiveTime = receiveTime;
+        this.mReceivedTime = receivedTime;
         this.mIsReadOnPhone = isReadOnPhone;
         this.mShouldExclude = false;
         this.mHandle = handle;
         this.mMessageType = messageType;
         this.mSenderContactUri = senderContactUri;
-        this.mSenderKey = new SenderKey(deviceId, senderName, senderKeyMetadata);
+        this.mSenderKey = senderKey;
     }
 
     /**
@@ -157,8 +158,8 @@
      * Returns the milliseconds since epoch at which this message notification was received on the
      * head-unit.
      */
-    public long getReceiveTime() {
-        return mReceiveTime;
+    public long getReceivedTime() {
+        return mReceivedTime;
     }
 
     /**
@@ -196,7 +197,12 @@
     }
 
     /**
-     * Returns the {@link SenderKey} that is unique for each contact per device.
+     * If the message came from BluetoothMapClient, this retrieves a key that is unique
+     * for each contact per device.
+     * If the message came from {@link NotificationMsg}, this retrieves a key that is only
+     * guaranteed to be unique per sender in a 1-1 conversation. If this message is part of a
+     * group conversation, the senderKey will not be unique if more than one participant in the
+     * conversation share the same name.
      */
     public SenderKey getSenderKey() {
         return mSenderKey;
@@ -223,7 +229,7 @@
                 + " mSenderName='" + mSenderName + '\''
                 + ", mMessageText='" + mMessageText + '\''
                 + ", mSenderContactUri='" + mSenderContactUri + '\''
-                + ", mReceiveTime=" + mReceiveTime + '\''
+                + ", mReceiveTime=" + mReceivedTime + '\''
                 + ", mIsReadOnPhone= " + mIsReadOnPhone + '\''
                 + ", mShouldExclude= " + mShouldExclude + '\''
                 + ", mHandle='" + mHandle + '\''
diff --git a/car-messenger-common/src/com/android/car/messenger/common/ProjectionStateListener.java b/car-messenger-common/src/com/android/car/messenger/common/ProjectionStateListener.java
index 5557830..5432563 100644
--- a/car-messenger-common/src/com/android/car/messenger/common/ProjectionStateListener.java
+++ b/car-messenger-common/src/com/android/car/messenger/common/ProjectionStateListener.java
@@ -42,24 +42,31 @@
     static final String PROJECTION_STATUS_EXTRA_DEVICE_STATE =
             "android.car.projection.DEVICE_STATE";
 
-    private final CarProjectionManager mCarProjectionManager;
+    private CarProjectionManager mCarProjectionManager;
+    private Car mCar;
 
     private int mProjectionState = ProjectionStatus.PROJECTION_STATE_INACTIVE;
     private List<ProjectionStatus> mProjectionDetails = Collections.emptyList();
 
     public ProjectionStateListener(Context context) {
-        mCarProjectionManager = (CarProjectionManager)
-                Car.createCar(context).getCarManager(Car.PROJECTION_SERVICE);
-    }
-
-    /** Registers the listener. Should be called when the caller starts up. **/
-    public void start() {
-        mCarProjectionManager.registerProjectionStatusListener(this);
+        mCar = Car.createCar(context);
+        mCarProjectionManager = (CarProjectionManager) mCar.getCarManager(Car.PROJECTION_SERVICE);
+        if (mCarProjectionManager != null) {
+            mCarProjectionManager.registerProjectionStatusListener(this);
+        }
     }
 
     /** Unregisters the listener. Should be called when the caller's lifecycle is ending. **/
-    public void stop() {
-        mCarProjectionManager.unregisterProjectionStatusListener(this);
+    public void destroy() {
+        if (mCarProjectionManager != null) {
+            mCarProjectionManager.unregisterProjectionStatusListener(this);
+        }
+        if (mCar != null) {
+            mCar.disconnect();
+            mCar = null;
+        }
+        mProjectionState = ProjectionStatus.PROJECTION_STATE_INACTIVE;
+        mProjectionDetails = Collections.emptyList();
     }
 
 
@@ -68,7 +75,6 @@
             List<ProjectionStatus> details) {
         mProjectionState = state;
         mProjectionDetails = details;
-
     }
 
     /**
diff --git a/car-messenger-common/src/com/android/car/messenger/common/SenderKey.java b/car-messenger-common/src/com/android/car/messenger/common/SenderKey.java
index 2fcd273..bf8222c 100644
--- a/car-messenger-common/src/com/android/car/messenger/common/SenderKey.java
+++ b/car-messenger-common/src/com/android/car/messenger/common/SenderKey.java
@@ -23,8 +23,19 @@
  * unique Key.
  */
 public class SenderKey extends CompositeKey {
+    /**
+     * Returns the SenderKey based on a {@link NotificationMsg} DAO. This key is only
+     * guaranteed to be unique for a 1-1 conversation. If the ConversationKey is for a
+     * group conversation, the senderKey will not be unique if more than one participant in the
+     * conversation share the same name.
+     */
+    public static SenderKey createSenderKey(ConversationKey convoKey,
+            NotificationMsg.Person person) {
+        return new SenderKey(convoKey.getDeviceId(), person.getName(), convoKey.getSubKey());
+    }
+
     /** Creates a senderkey for SMS, MMS, and {@link NotificationMsg}. **/
-    protected SenderKey(String deviceId, String senderName, String keyMetadata) {
+    private SenderKey(String deviceId, String senderName, String keyMetadata) {
         super(deviceId, senderName + "/" + keyMetadata);
     }
 }
diff --git a/car-messenger-common/src/com/android/car/messenger/common/Utils.java b/car-messenger-common/src/com/android/car/messenger/common/Utils.java
index 027189e..99ec52f 100644
--- a/car-messenger-common/src/com/android/car/messenger/common/Utils.java
+++ b/car-messenger-common/src/com/android/car/messenger/common/Utils.java
@@ -21,6 +21,8 @@
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
 
 import androidx.annotation.Nullable;
@@ -34,6 +36,15 @@
 import com.android.car.messenger.NotificationMsgProto.NotificationMsg.MessagingStyleMessage;
 import com.android.car.messenger.NotificationMsgProto.NotificationMsg.Person;
 
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.Phonenumber;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /** Utils methods for the car-messenger-common lib. **/
 public class Utils {
     private static final String TAG = "CMC.Utils";
@@ -152,6 +163,26 @@
     }
 
     /**
+     * Ensure the {@link NotificationMsg.AvatarIconSync} object has all the required fields.
+     **/
+    public static boolean isValidAvatarIconSync(NotificationMsg.AvatarIconSync iconSync) {
+        if (iconSync == null) {
+            logw(TAG, "AvatarIconSync is null");
+            return false;
+        } else if (iconSync.getMessagingAppPackageName() == null) {
+            logw(TAG, "AvatarIconSync is missing required field: appPackageName");
+            return false;
+        } else if (iconSync.getPerson().getName() == null) {
+            logw(TAG, "AvatarIconSync is missing required field: Person's name");
+            return false;
+        } else if (iconSync.getPerson().getAvatar() == null) {
+            logw(TAG, "AvatarIconSync is missing required field: Person's avatar");
+            return false;
+        }
+        return true;
+    }
+
+    /**
      * Creates a Letter Tile Icon that will display the given initials. If the initials are null,
      * then an avatar anonymous icon will be drawn.
      **/
@@ -226,4 +257,119 @@
         return initials.toString();
     }
 
+    /**
+     * Creates a Header for a group conversation, where the senderName and groupName are both shown,
+     * separated by a delimiter.
+     *
+     * @param senderName Sender's name.
+     * @param groupName  Group conversation's name.
+     * @param delimiter  delimiter that separates each element.
+     */
+    public static String constructGroupConversationHeader(String senderName, String groupName,
+            String delimiter) {
+        return constructGroupConversationHeader(senderName, groupName, delimiter,
+                BidiFormatter.getInstance());
+    }
+
+    /**
+     * Creates a Header for a group conversation, where the senderName and groupName are both shown,
+     * separated by a delimiter.
+     *
+     * @param senderName Sender's name.
+     * @param groupName  Group conversation's name.
+     * @param delimiter  delimiter that separates each element.
+     * @param bidiFormatter  formatter for the context's locale.
+     */
+    public static String constructGroupConversationHeader(String senderName, String groupName,
+            String delimiter, BidiFormatter bidiFormatter) {
+        String formattedSenderName = bidiFormatter.unicodeWrap(senderName,
+                TextDirectionHeuristics.FIRSTSTRONG_LTR);
+        String formattedGroupName = bidiFormatter.unicodeWrap(groupName,
+                TextDirectionHeuristics.LOCALE);
+        String title = String.join(delimiter, formattedSenderName, formattedGroupName);
+        return bidiFormatter.unicodeWrap(title, TextDirectionHeuristics.LOCALE);
+    }
+
+    /**
+     * Given a name of all the participants in a group conversation (some names might be phone
+     * numbers), this function creates the conversation title by putting the names in alphabetical
+     * order first, then adding any phone numbers. This title should not exceed the
+     * conversationTitleLength, so not all participants' names are guaranteed to be
+     * in the conversation title.
+     */
+    public static String constructGroupConversationTitle(List<String> names, String delimiter,
+            int conversationTitleLength) {
+        return constructGroupConversationTitle(names, delimiter, conversationTitleLength,
+                BidiFormatter.getInstance());
+    }
+
+    /**
+     * Given a name of all the participants in a group conversation (some names might be phone
+     * numbers), this function creates the conversation title by putting the names in alphabetical
+     * order first, then adding any phone numbers. This title should not exceed the
+     * conversationTitleLength, so not all participants' names are guaranteed to be
+     * in the conversation title.
+     */
+    public static String constructGroupConversationTitle(List<String> names, String delimiter,
+            int conversationTitleLength, BidiFormatter bidiFormatter) {
+        List<String> sortedNames = getSortedSubsetNames(names, conversationTitleLength,
+                delimiter.length());
+        String formattedDelimiter = bidiFormatter.unicodeWrap(delimiter,
+                TextDirectionHeuristics.LOCALE);
+
+        String conversationName = sortedNames.stream().map(name -> bidiFormatter.unicodeWrap(name,
+                TextDirectionHeuristics.FIRSTSTRONG_LTR))
+                .collect(Collectors.joining(formattedDelimiter));
+        return bidiFormatter.unicodeWrap(conversationName, TextDirectionHeuristics.LOCALE);
+    }
+
+    /**
+     * Sorts the list, and returns the first elements whose total length is less than the given
+     * conversationTitleLength.
+     */
+    private static List<String> getSortedSubsetNames(List<String> names,
+            int conversationTitleLength,
+            int delimiterLength) {
+        Collections.sort(names, Utils.ALPHA_THEN_NUMERIC_COMPARATOR);
+        int namesCounter = 0;
+        int indexCounter = 0;
+        while (namesCounter < conversationTitleLength && indexCounter < names.size()) {
+            namesCounter = namesCounter + names.get(indexCounter).length() + delimiterLength;
+            indexCounter = indexCounter + 1;
+        }
+        return names.subList(0, indexCounter);
+    }
+
+    /** Comparator that sorts names alphabetically first, then phone numbers numerically. **/
+    public static final Comparator<String> ALPHA_THEN_NUMERIC_COMPARATOR =
+            new Comparator<String>() {
+                private boolean isPhoneNumber(String input) {
+                    PhoneNumberUtil util = PhoneNumberUtil.getInstance();
+                    try {
+                        Phonenumber.PhoneNumber phoneNumber = util.parse(input, /* defaultRegion */
+                                null);
+                        return util.isValidNumber(phoneNumber);
+                    } catch (NumberParseException e) {
+                        return false;
+                    }
+                }
+
+                private boolean isOfSameType(String o1, String o2) {
+                    boolean isO1PhoneNumber = isPhoneNumber(o1);
+                    boolean isO2PhoneNumber = isPhoneNumber(o2);
+                    return isO1PhoneNumber == isO2PhoneNumber;
+                }
+
+                @Override
+                public int compare(String o1, String o2) {
+                    // if both are names, sort based on names.
+                    // if both are number, sort numerically.
+                    // if one is phone number and the other is a name, give name precedence.
+                    if (!isOfSameType(o1, o2)) {
+                        return isPhoneNumber(o1) ? 1 : -1;
+                    } else {
+                        return o1.compareTo(o2);
+                    }
+                }
+            };
 }
diff --git a/car-messenger-common/tests/unit/Android.bp b/car-messenger-common/tests/unit/Android.bp
new file mode 100644
index 0000000..af73ac8
--- /dev/null
+++ b/car-messenger-common/tests/unit/Android.bp
@@ -0,0 +1,39 @@
+//
+// Copyright (C) 2019 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.
+//
+
+android_test {
+    name: "car-messenger-common-lib-unit-tests",
+
+    srcs: ["src/**/*.java"],
+
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+        "android.test.mock",
+    ],
+
+    static_libs: [
+        "android.car",
+        "androidx.test.core",
+        "androidx.test.ext.junit",
+        "androidx.test.rules",
+        "car-messenger-common",
+        "mockito-target-extended-minus-junit4",
+        "truth-prebuilt",
+    ],
+
+    min_sdk_version: "29",
+}
\ No newline at end of file
diff --git a/car-messenger-common/tests/unit/AndroidManifest.xml b/car-messenger-common/tests/unit/AndroidManifest.xml
new file mode 100644
index 0000000..eefce32
--- /dev/null
+++ b/car-messenger-common/tests/unit/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<!--
+  ~ Copyright (C) 2020 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
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.car.messenger.common.tests.unit">
+    <uses-permission android:name="android.car.permission.ACCESS_CAR_PROJECTION_STATUS"/>
+    <application android:testOnly="true"
+                 android:debuggable="true"
+                 xmlns:tools="http://schemas.android.com/tools">
+        <uses-library android:name="android.test.runner" />
+        <!-- Workaround for b/113294940 -->
+        <provider
+            android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer"
+            tools:replace="android:authorities"
+            android:authorities="${applicationId}.lifecycle"
+            android:exported="false"
+            android:multiprocess="true" />
+    </application>
+
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="com.android.car.messenger.common.tests.unit"
+                     android:label="Car Messenger Lib Test Cases" />
+</manifest>
\ No newline at end of file
diff --git a/car-messenger-common/tests/unit/README.md b/car-messenger-common/tests/unit/README.md
new file mode 100644
index 0000000..12bb628
--- /dev/null
+++ b/car-messenger-common/tests/unit/README.md
@@ -0,0 +1,24 @@
+# Instructions for running unit tests
+
+### Build unit test module
+
+`m car-messenger-common-lib-unit-tests`
+
+### Install resulting apk on device
+
+`adb install -r -t $OUT/testcases/car-messenger-common-lib-unit-tests/arm64/car-messenger-common-lib-unit-tests.apk`
+
+### Run all tests
+
+`adb shell am instrument -w com.android.car.messenger.common.tests.unit`
+
+### Run tests in a class
+
+`adb shell am instrument -w -e class com.android.car.messenger.common.<classPath> com.android.car.messenger.common.tests.unit`
+
+### Run a specific test
+
+`adb shell am instrument -w -e class com.android.car.messenger.common.<classPath>#<testMethod> com.android.car.messenger.common.tests.unit`
+
+More general information can be found at
+http://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html
\ No newline at end of file
diff --git a/car-messenger-common/tests/unit/src/com.android.car.messenger.common/UtilsTest.java b/car-messenger-common/tests/unit/src/com.android.car.messenger.common/UtilsTest.java
new file mode 100644
index 0000000..acdffbd
--- /dev/null
+++ b/car-messenger-common/tests/unit/src/com.android.car.messenger.common/UtilsTest.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+package com.android.car.messenger.common;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.text.BidiFormatter;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class UtilsTest {
+
+    private static final String ARABIC_NAME = "جﺗﺧ";
+    private static final List<String> NAMES = Arrays.asList("+1-650-900-1234", "Logan.", "Emily",
+            "Christopher", "!Sam", ARABIC_NAME);
+    private static final String NAME_DELIMITER = "، ";
+    private static final String TITLE_DELIMITER = " : ";
+    private static final int TITLE_LENGTH = 30;
+    private static final BidiFormatter RTL_FORMATTER = BidiFormatter.getInstance(/* rtlContext= */
+            true);
+
+    @Test
+    public void testNameWithMultipleNumbers() {
+        // Ensure that a group name with many phone numbers sorts the phone numbers correctly.
+        List<String> senderNames = Arrays.asList("+1-650-900-1234", "+1-650-900-1111",
+                "+1-100-200-1234");
+        String actual = Utils.constructGroupConversationTitle(senderNames, NAME_DELIMITER,
+                TITLE_LENGTH + 20);
+        String expected = "+1-100-200-1234، +1-650-900-1111، +1-650-900-1234";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testNameWithInternationalNumbers() {
+        // Ensure that a group name with many phone numbers sorts the phone numbers correctly.
+        List<String> senderNames = Arrays.asList("+44-20-7183-8750", "+1-650-900-1111",
+                "+1-100-200-1234");
+        String actual = Utils.constructGroupConversationTitle(senderNames, NAME_DELIMITER,
+                TITLE_LENGTH + 20);
+        String expected = "+1-100-200-1234، +1-650-900-1111، +44-20-7183-8750";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testNameConstructorLtr() {
+        String actual = Utils.constructGroupConversationTitle(NAMES, NAME_DELIMITER, TITLE_LENGTH);
+        assertThat(actual).isEqualTo("!Sam، Christopher، Emily، Logan.");
+    }
+
+    @Test
+    public void testNameConstructorLtr_longerTitle() {
+        String actual = Utils.constructGroupConversationTitle(NAMES, NAME_DELIMITER,
+                TITLE_LENGTH + 5);
+        assertThat(actual).isEqualTo(
+                "!Sam، Christopher، Emily، Logan.، \u200E\u202Bجﺗﺧ\u202C\u200E");
+
+    }
+
+    @Test
+    public void testTitleConstructorLtr() {
+        String actual = Utils.constructGroupConversationHeader("Christopher",
+                "!Sam، Emily، Logan.، +1-650-900-1234", TITLE_DELIMITER);
+        String expected = "Christopher : !Sam، Emily، Logan.، +1-650-900-1234";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testTitleConstructorLtr_with_rtlName() {
+        String actual = Utils.constructGroupConversationHeader(ARABIC_NAME, "!Sam، Logan.، جﺗﺧ",
+                TITLE_DELIMITER);
+        // Note: the Group name doesn't have the RTL tag because in the function we format the
+        // entire group name string, not each name in the string.
+        String expected = "\u200E\u202Bجﺗﺧ\u202C\u200E : !Sam، Logan.، جﺗﺧ\u200E";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testTitleConstructorLtr_with_phoneNumber() {
+        String actual = Utils.constructGroupConversationHeader("+1-650-900-1234",
+                "!Sam، Logan.، جﺗﺧ",
+                TITLE_DELIMITER);
+        // Note: the Group name doesn't have the RTL tag because in the function we format the
+        // entire group name string, not each name in the string.
+        String expected = "+1-650-900-1234 : !Sam، Logan.، جﺗﺧ\u200E";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    /**
+     * NOTE for all the RTL tests done below: When BidiFormatter is unicode-wrapping strings, they
+     * are actually adding invisible Unicode characters to denote whether a section is RTL, LTR,
+     * etc. These invisible characters are NOT visible on the terminal output, or if you copy
+     * paste the string to most HTML pages. They ARE visible when you paste them in certain
+     * text editors like IntelliJ, or there are some online tools that provide this as well.
+     *
+     * Therefore, in most of these RTL tests (and some of the LTR tests) you will see the
+     * invisible characters in the expected strings. Here's a couple of the characters, and what
+     * they're used for:
+     * \u200F is the RTL mark
+     * \u200E is the LTR mark
+     * \u202A marks the start of LTR embedding
+     * \u202B marks the start of RTL embedding
+     * \u202C pops the directional formatting - Must be used to end an embedding
+     */
+    @Test
+    public void testNameWithInternationalNumbers_rtl() {
+        // Ensure that a group name with many phone numbers sorts the phone numbers correctly.
+        List<String> senderNames = Arrays.asList("+44-20-7183-8750", "+1-650-900-1111",
+                "+1-100-200-1234");
+        String actual = Utils.constructGroupConversationTitle(senderNames, NAME_DELIMITER,
+                TITLE_LENGTH + 20, RTL_FORMATTER);
+        String expected = "\u200F\u202A\u200F\u202A+1-100-200-1234\u202C\u200F\u200F\u202A، "
+                + "\u202C\u200F\u200F\u202A+1-650-900-1111\u202C\u200F\u200F\u202A، "
+                + "\u202C\u200F\u200F\u202A+44-20-7183-8750\u202C\u200F\u202C\u200F";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testNameConstructorRtl() {
+        String actual = Utils.constructGroupConversationTitle(NAMES, NAME_DELIMITER, TITLE_LENGTH,
+                /* isRtl */ RTL_FORMATTER);
+
+        String expected =
+                "\u200F\u202A\u200F\u202A!Sam\u202C\u200F\u200F\u202A، \u202C\u200F"
+                        + "\u200F\u202AChristopher\u202C\u200F\u200F\u202A، \u202C\u200F"
+                        + "\u200F\u202AEmily\u202C\u200F\u200F\u202A، "
+                        + "\u202C\u200F\u200F\u202ALogan.\u202C\u200F\u202C\u200F";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testNameConstructorRtl_longerTitle() {
+        String actual = Utils.constructGroupConversationTitle(NAMES, NAME_DELIMITER,
+                TITLE_LENGTH + 5, /* isRtl */ RTL_FORMATTER);
+
+        String expected =
+                "\u200F\u202A\u200F\u202A!Sam\u202C\u200F\u200F\u202A، "
+                        + "\u202C\u200F\u200F\u202AChristopher\u202C\u200F\u200F"
+                        + "\u202A، \u202C\u200F\u200F\u202AEmily\u202C\u200F\u200F\u202A، "
+                        + "\u202C\u200F\u200F\u202ALogan.\u202C\u200F\u200F\u202A، "
+                        + "\u202C\u200Fجﺗﺧ\u202C\u200F";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testTitleConstructorRtl_with_rtlName() {
+        String actual = Utils.constructGroupConversationHeader(ARABIC_NAME, "!Sam، Logan.، جﺗﺧ",
+                TITLE_DELIMITER, RTL_FORMATTER);
+        // Note: the Group name doesn't have the RTL tag because in the function we format the
+        // entire group name string, not each name in the string.
+        // Also, note that the sender's name, which is RTL still has LTR embedded because we wrap
+        // it with FIRSTSTRONG_LTR.
+        String expected = "\u200F\u202Aجﺗﺧ : \u200F\u202A!Sam، Logan.، جﺗﺧ\u202C\u200F\u202C"
+                + "\u200F";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+
+    @Test
+    public void testTitleConstructorRtl_with_phoneNumber() {
+        String actual = Utils.constructGroupConversationHeader("+1-650-900-1234",
+                "!Sam، Logan.، جﺗﺧ",
+                TITLE_DELIMITER, RTL_FORMATTER);
+        // Note: the Group name doesn't have the RTL tag because in the function we format the
+        // entire group name string, not each name in the string.
+        String expected = "\u200F\u202A\u200F\u202A+1-650-900-1234\u202C\u200F : "
+                + "\u200F\u202A!Sam، Logan.، جﺗﺧ\u202C\u200F\u202C\u200F";
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void testTitleConstructorRtl() {
+        String actual = Utils.constructGroupConversationHeader("Christopher",
+                "+1-650-900-1234، Logan.، Emily، Christopher، !Sam", TITLE_DELIMITER, /* isRtl */
+                RTL_FORMATTER).trim();
+
+        String expected =
+                "\u200F\u202A\u200F\u202AChristopher\u202C\u200F : \u200F\u202A+1-650-900-1234، "
+                        + "Logan.، Emily، Christopher، !Sam\u202C\u200F\u202C\u200F";
+
+        assertThat(actual).isEqualTo(expected);
+    }
+}
diff --git a/car-telephony-common/res/values-bg/strings.xml b/car-telephony-common/res/values-bg/strings.xml
index 1f38d61..ac7dbf6 100644
--- a/car-telephony-common/res/values-bg/strings.xml
+++ b/car-telephony-common/res/values-bg/strings.xml
@@ -20,7 +20,7 @@
     <string name="voicemail" msgid="2125552157407909509">"Гласова поща"</string>
     <string name="phone_label_with_info" msgid="4652109530699808645">"<xliff:g id="LABEL">%1$s</xliff:g>  ·  <xliff:g id="DURATION">%2$s</xliff:g>"</string>
     <string name="call_state_connecting" msgid="5930724746375294866">"Свързва се…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Набира се…"</string>
+    <string name="call_state_dialing" msgid="1534599871716648114">"Набиране…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Задържано"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Обаждането завърши"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Установена е връзка"</string>
diff --git a/car-telephony-common/res/values-da/strings.xml b/car-telephony-common/res/values-da/strings.xml
index dcd52a0..6995f5c 100644
--- a/car-telephony-common/res/values-da/strings.xml
+++ b/car-telephony-common/res/values-da/strings.xml
@@ -21,7 +21,7 @@
     <string name="phone_label_with_info" msgid="4652109530699808645">"<xliff:g id="LABEL">%1$s</xliff:g>  ·  <xliff:g id="DURATION">%2$s</xliff:g>"</string>
     <string name="call_state_connecting" msgid="5930724746375294866">"Tilslutter…"</string>
     <string name="call_state_dialing" msgid="1534599871716648114">"Ringer op…"</string>
-    <string name="call_state_hold" msgid="6834028102796624100">"Afventer"</string>
+    <string name="call_state_hold" msgid="6834028102796624100">"På hold"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Opkaldet er slut"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Der er forbindelse"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"Ringer…"</string>
diff --git a/car-telephony-common/res/values-et/strings.xml b/car-telephony-common/res/values-et/strings.xml
index ee65909..e74cb8a 100644
--- a/car-telephony-common/res/values-et/strings.xml
+++ b/car-telephony-common/res/values-et/strings.xml
@@ -25,5 +25,5 @@
     <string name="call_state_call_ended" msgid="4159349597599886429">"Kõne lõpetati"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Ühendatud"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"Heliseb …"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Ühenduse katkest. …"</string>
+    <string name="call_state_call_ending" msgid="5037498349965472247">"Ühenduse katkestamine…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-in/strings.xml b/car-telephony-common/res/values-in/strings.xml
index 53a7831..9ef213c 100644
--- a/car-telephony-common/res/values-in/strings.xml
+++ b/car-telephony-common/res/values-in/strings.xml
@@ -25,5 +25,5 @@
     <string name="call_state_call_ended" msgid="4159349597599886429">"Panggilan Diakhiri"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Terhubung"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"Berdering…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Memutus hubungan..."</string>
+    <string name="call_state_call_ending" msgid="5037498349965472247">"Memutus sambungan..."</string>
 </resources>
diff --git a/car-telephony-common/res/values-iw/strings.xml b/car-telephony-common/res/values-iw/strings.xml
index 0d1cd68..8e0fe49 100644
--- a/car-telephony-common/res/values-iw/strings.xml
+++ b/car-telephony-common/res/values-iw/strings.xml
@@ -20,7 +20,7 @@
     <string name="voicemail" msgid="2125552157407909509">"דואר קולי"</string>
     <string name="phone_label_with_info" msgid="4652109530699808645">"<xliff:g id="LABEL">%1$s</xliff:g>  ·  <xliff:g id="DURATION">%2$s</xliff:g>"</string>
     <string name="call_state_connecting" msgid="5930724746375294866">"מתחבר…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"מחייג…"</string>
+    <string name="call_state_dialing" msgid="1534599871716648114">"החיוג מתבצע…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"בהמתנה"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"השיחה הסתיימה"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"מתבצעת שיחה"</string>
diff --git a/car-telephony-common/res/values-ms/strings.xml b/car-telephony-common/res/values-ms/strings.xml
index 1c1d5de..fcde473 100644
--- a/car-telephony-common/res/values-ms/strings.xml
+++ b/car-telephony-common/res/values-ms/strings.xml
@@ -25,5 +25,5 @@
     <string name="call_state_call_ended" msgid="4159349597599886429">"Panggilan Tamat"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Disambungkan"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"Berdering…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Memutuskan sambungn…"</string>
+    <string name="call_state_call_ending" msgid="5037498349965472247">"Memutuskan sambungan…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ne/strings.xml b/car-telephony-common/res/values-ne/strings.xml
index b021f11..331c544 100644
--- a/car-telephony-common/res/values-ne/strings.xml
+++ b/car-telephony-common/res/values-ne/strings.xml
@@ -23,7 +23,7 @@
     <string name="call_state_dialing" msgid="1534599871716648114">"डायल गर्दै…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"होल्डमा छ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"कल समाप्त भयो"</string>
-    <string name="call_state_call_active" msgid="2769644783657864202">"जडान गरिएको छ"</string>
+    <string name="call_state_call_active" msgid="2769644783657864202">"कनेक्ट गरिएको छ"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"घन्टी बज्दै छ…"</string>
     <string name="call_state_call_ending" msgid="5037498349965472247">"विच्छेद गर्दै…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-nl/strings.xml b/car-telephony-common/res/values-nl/strings.xml
index 7d00163..53543e8 100644
--- a/car-telephony-common/res/values-nl/strings.xml
+++ b/car-telephony-common/res/values-nl/strings.xml
@@ -25,5 +25,5 @@
     <string name="call_state_call_ended" msgid="4159349597599886429">"Gesprek beëindigd"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Verbonden"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"Gaat over…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Verb. verbreken…"</string>
+    <string name="call_state_call_ending" msgid="5037498349965472247">"Verbreken…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-pt/strings.xml b/car-telephony-common/res/values-pt/strings.xml
index 7531adb..1bf5282 100644
--- a/car-telephony-common/res/values-pt/strings.xml
+++ b/car-telephony-common/res/values-pt/strings.xml
@@ -20,7 +20,7 @@
     <string name="voicemail" msgid="2125552157407909509">"Correio de voz"</string>
     <string name="phone_label_with_info" msgid="4652109530699808645">"<xliff:g id="LABEL">%1$s</xliff:g>  ·  <xliff:g id="DURATION">%2$s</xliff:g>"</string>
     <string name="call_state_connecting" msgid="5930724746375294866">"Conectando…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Discando…"</string>
+    <string name="call_state_dialing" msgid="1534599871716648114">"Chamando...…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Em espera"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Chamada encerrada"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Conectado"</string>
diff --git a/car-telephony-common/res/values-sw/strings.xml b/car-telephony-common/res/values-sw/strings.xml
index fc82d68..18a33e0 100644
--- a/car-telephony-common/res/values-sw/strings.xml
+++ b/car-telephony-common/res/values-sw/strings.xml
@@ -20,10 +20,10 @@
     <string name="voicemail" msgid="2125552157407909509">"Ujumbe wa sauti"</string>
     <string name="phone_label_with_info" msgid="4652109530699808645">"<xliff:g id="LABEL">%1$s</xliff:g>  ·  <xliff:g id="DURATION">%2$s</xliff:g>"</string>
     <string name="call_state_connecting" msgid="5930724746375294866">"Inaunganisha…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Inapigia…"</string>
+    <string name="call_state_dialing" msgid="1534599871716648114">"Inapiga…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Imesitishwa"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Simu Imekamilika"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Imeunganisha"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"Inalia…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Inaondoa…"</string>
+    <string name="call_state_call_ending" msgid="5037498349965472247">"Inakata…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-th/strings.xml b/car-telephony-common/res/values-th/strings.xml
index 7af5876..e627b44 100644
--- a/car-telephony-common/res/values-th/strings.xml
+++ b/car-telephony-common/res/values-th/strings.xml
@@ -25,5 +25,5 @@
     <string name="call_state_call_ended" msgid="4159349597599886429">"วางสายแล้ว"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"เชื่อมต่อแล้ว"</string>
     <string name="call_state_call_ringing" msgid="4618803402954375017">"กำลังส่งเสียง…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ยกเลิกการเชื่อมต่อ…"</string>
+    <string name="call_state_call_ending" msgid="5037498349965472247">"ยกเลิกการโทรออก…"</string>
 </resources>
diff --git a/car-telephony-common/res/values/strings.xml b/car-telephony-common/res/values/strings.xml
index 24a3300..9bb8811 100644
--- a/car-telephony-common/res/values/strings.xml
+++ b/car-telephony-common/res/values/strings.xml
@@ -41,10 +41,4 @@
     <string name="call_state_call_ringing">Ringing&#8230;</string>
     <!-- Status label for phone state. &#8230; is an ellipsis. [CHAR LIMIT=25] -->
     <string name="call_state_call_ending">Disconnecting&#8230;</string>
-
-    <!-- String format used to format a address Uri. -->
-    <string name="address_uri_format" translatable="false">geo:0,0?q=%s</string>
-    <!-- String format used to format a navigation Uri. -->
-    <string name="navigation_uri_format" translatable="false">https://maps.google.com/maps?daddr=%s&amp;nav=1</string>
-
 </resources>
\ No newline at end of file
diff --git a/car-telephony-common/src/com/android/car/telephony/common/AsyncQueryLiveData.java b/car-telephony-common/src/com/android/car/telephony/common/AsyncQueryLiveData.java
index 69f00d5..ecacb51 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/AsyncQueryLiveData.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/AsyncQueryLiveData.java
@@ -19,13 +19,14 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.Cursor;
-import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.WorkerThread;
 import androidx.lifecycle.LiveData;
 
+import com.android.car.apps.common.log.L;
+
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 
@@ -78,7 +79,7 @@
     protected abstract T convertToEntity(@NonNull Cursor cursor);
 
     private void onCursorLoaded(Cursor cursor) {
-        Log.d(TAG, "onCursorLoaded: " + this);
+        L.d(TAG, "onCursorLoaded: " + this);
         if (mCurrentCursorRunnable != null) {
             mCurrentCursorRunnable.closeCursorIfNecessary();
             mCurrentRunnableFuture.cancel(false);
diff --git a/car-telephony-common/src/com/android/car/telephony/common/Contact.java b/car-telephony-common/src/com/android/car/telephony/common/Contact.java
index 42a1b9a..498e92b 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/Contact.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/Contact.java
@@ -24,11 +24,12 @@
 import android.os.Parcelable;
 import android.provider.ContactsContract;
 import android.text.TextUtils;
-import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.car.apps.common.log.L;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -233,7 +234,7 @@
 
         if (!TextUtils.equals(accountName, contact.mAccountName)
                 || !TextUtils.equals(lookupKey, contact.mLookupKey)) {
-            Log.w(TAG, "A wrong contact is passed in. A new contact will be created.");
+            L.w(TAG, "A wrong contact is passed in. A new contact will be created.");
             contact = new Contact();
             contact.loadBasicInfo(cursor);
         }
@@ -253,8 +254,7 @@
                 contact.addPostalAddress(cursor);
                 break;
             default:
-                Log.d(TAG,
-                        String.format("This mimetype %s will not be loaded right now.", mimeType));
+                L.d(TAG, String.format("This mimetype %s will not be loaded right now.", mimeType));
         }
 
         return contact;
@@ -364,7 +364,7 @@
     @Override
     public boolean equals(Object obj) {
         return obj instanceof Contact && mLookupKey.equals(((Contact) obj).mLookupKey)
-                && mAccountName.equals(((Contact) obj).mAccountName);
+                && TextUtils.equals(((Contact) obj).mAccountName, mAccountName);
     }
 
     @Override
@@ -450,6 +450,17 @@
     }
 
     /**
+     * Returns the initials of the contact's name based on display order.
+     */
+    public String getInitialsBasedOnDisplayOrder(boolean startWithFirstName) {
+        if (startWithFirstName) {
+            return TelecomUtils.getInitials(mDisplayName, mDisplayNameAlt);
+        } else {
+            return TelecomUtils.getInitials(mDisplayNameAlt, mDisplayName);
+        }
+    }
+
+    /**
      * Returns {@link #mPhoneBookLabel}
      */
     public String getPhonebookLabel() {
diff --git a/car-telephony-common/src/com/android/car/telephony/common/InMemoryPhoneBook.java b/car-telephony-common/src/com/android/car/telephony/common/InMemoryPhoneBook.java
index 960714a..6ef5f21 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/InMemoryPhoneBook.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/InMemoryPhoneBook.java
@@ -20,12 +20,16 @@
 import android.database.Cursor;
 import android.provider.ContactsContract;
 import android.text.TextUtils;
-import android.util.Log;
+
+import android.util.ArrayMap;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.Observer;
+import androidx.lifecycle.Transformations;
+
+import com.android.car.apps.common.log.L;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -54,6 +58,11 @@
      * key to contacts for one account.
      */
     private final Map<String, Map<String, Contact>> mLookupKeyContactMap = new HashMap<>();
+
+    /**
+     * A map which divides contacts by account.
+     */
+    private final Map<String, List<Contact>> mAccountContactsMap = new ArrayMap<>();
     private boolean mIsLoaded = false;
 
     /**
@@ -135,24 +144,39 @@
 
     /**
      * Returns a {@link LiveData} which monitors the contact list changes.
+     *
+     * @deprecated Use {@link #getContactsLiveDataByAccount(String)} instead.
      */
+    @Deprecated
     public LiveData<List<Contact>> getContactsLiveData() {
         return mContactListAsyncQueryLiveData;
     }
 
     /**
+     * Returns a LiveData that represents all contacts within an account.
+     *
+     * @param accountName the name of an account that contains all the contacts. For the contacts
+     *                    from a Bluetooth connected phone, the account name is equal to the
+     *                    Bluetooth address.
+     */
+    public LiveData<List<Contact>> getContactsLiveDataByAccount(String accountName) {
+        return Transformations.map(mContactListAsyncQueryLiveData,
+                contacts -> contacts == null ? null : mAccountContactsMap.get(accountName));
+    }
+
+    /**
      * Looks up a {@link Contact} by the given phone number. Returns null if can't find a Contact or
      * the {@link InMemoryPhoneBook} is still loading.
      */
     @Nullable
     public Contact lookupContactEntry(String phoneNumber) {
-        Log.v(TAG, String.format("lookupContactEntry: %s", phoneNumber));
+        L.v(TAG, String.format("lookupContactEntry: %s", phoneNumber));
         if (!isLoaded()) {
-            Log.w(TAG, "looking up a contact while loading.");
+            L.w(TAG, "looking up a contact while loading.");
         }
 
         if (TextUtils.isEmpty(phoneNumber)) {
-            Log.w(TAG, "looking up an empty phone number.");
+            L.w(TAG, "looking up an empty phone number.");
             return null;
         }
 
@@ -168,10 +192,10 @@
     @Nullable
     public Contact lookupContactByKey(String lookupKey, @Nullable String accountName) {
         if (!isLoaded()) {
-            Log.w(TAG, "looking up a contact while loading.");
+            L.w(TAG, "looking up a contact while loading.");
         }
         if (TextUtils.isEmpty(lookupKey)) {
-            Log.w(TAG, "looking up an empty lookup key.");
+            L.w(TAG, "looking up an empty lookup key.");
             return null;
         }
         if (mLookupKeyContactMap.containsKey(accountName)) {
@@ -189,11 +213,11 @@
     @NonNull
     public List<Contact> lookupContactByKey(String lookupKey) {
         if (!isLoaded()) {
-            Log.w(TAG, "looking up a contact while loading.");
+            L.w(TAG, "looking up a contact while loading.");
         }
 
         if (TextUtils.isEmpty(lookupKey)) {
-            Log.w(TAG, "looking up an empty lookup key.");
+            L.w(TAG, "looking up an empty lookup key.");
             return Collections.emptyList();
         }
         List<Contact> results = new ArrayList<>();
@@ -226,8 +250,13 @@
             subMap.put(lookupKey, Contact.fromCursor(mContext, cursor, subMap.get(lookupKey)));
         }
 
-        for (Map<String, Contact> subMap : contactMap.values()) {
+        mAccountContactsMap.clear();
+        for (String accountName : contactMap.keySet()) {
+            Map<String, Contact> subMap = contactMap.get(accountName);
             contactList.addAll(subMap.values());
+            List<Contact> accountContacts = new ArrayList<>();
+            accountContacts.addAll(subMap.values());
+            mAccountContactsMap.put(accountName, accountContacts);
         }
 
         mLookupKeyContactMap.clear();
@@ -244,7 +273,7 @@
 
     @Override
     public void onChanged(List<Contact> contacts) {
-        Log.d(TAG, "Contacts loaded:" + (contacts == null ? 0 : contacts.size()));
+        L.d(TAG, "Contacts loaded:" + (contacts == null ? 0 : contacts.size()));
         mIsLoaded = true;
     }
 }
diff --git a/car-telephony-common/src/com/android/car/telephony/common/ObservableAsyncQuery.java b/car-telephony-common/src/com/android/car/telephony/common/ObservableAsyncQuery.java
index de0242b..394b6d4 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/ObservableAsyncQuery.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/ObservableAsyncQuery.java
@@ -20,12 +20,13 @@
 import android.content.ContentResolver;
 import android.database.ContentObserver;
 import android.database.Cursor;
-import android.util.Log;
 
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.car.apps.common.log.L;
+
 /**
  * Asynchronously queries data and observes them. A new query will be triggered automatically if
  * data set have changed.
@@ -49,9 +50,9 @@
 
     private AsyncQueryHandler mAsyncQueryHandler;
     private QueryParam.Provider mQueryParamProvider;
-    private Cursor mCurrentCursor;
     private OnQueryFinishedListener mOnQueryFinishedListener;
     private ContentObserver mContentObserver;
+    private ContentResolver mContentResolver;
     private boolean mIsActive = false;
     private int mToken;
 
@@ -64,6 +65,7 @@
             @NonNull ContentResolver cr,
             @NonNull OnQueryFinishedListener listener) {
         mAsyncQueryHandler = new AsyncQueryHandlerImpl(this, cr);
+        mContentResolver = cr;
         mContentObserver = new ContentObserver(mAsyncQueryHandler) {
             @Override
             public void onChange(boolean selfChange) {
@@ -80,8 +82,9 @@
      */
     @MainThread
     public void startQuery() {
-        Log.d(TAG, "startQuery");
+        L.d(TAG, "startQuery");
         mAsyncQueryHandler.cancelOperation(mToken); // Cancel the query task.
+        mContentResolver.unregisterContentObserver(mContentObserver);
 
         mToken++;
         QueryParam queryParam = mQueryParamProvider.getQueryParam();
@@ -94,6 +97,7 @@
                     queryParam.mSelection,
                     queryParam.mSelectionArgs,
                     queryParam.mOrderBy);
+            mContentResolver.registerContentObserver(queryParam.mUri, false, mContentObserver);
         } else {
             mOnQueryFinishedListener.onQueryFinished(null);
         }
@@ -106,9 +110,9 @@
      */
     @MainThread
     public void stopQuery() {
-        Log.d(TAG, "stopQuery");
+        L.d(TAG, "stopQuery");
         mIsActive = false;
-        cleanupCursorIfNecessary();
+        mContentResolver.unregisterContentObserver(mContentObserver);
         mAsyncQueryHandler.cancelOperation(mToken); // Cancel the query task.
     }
 
@@ -116,24 +120,12 @@
         if (!mIsActive) {
             return;
         }
-        Log.d(TAG, "onQueryComplete");
-        cleanupCursorIfNecessary();
-        if (cursor != null) {
-            cursor.registerContentObserver(mContentObserver);
-            mCurrentCursor = cursor;
-        }
+        L.d(TAG, "onQueryComplete");
         if (mOnQueryFinishedListener != null) {
             mOnQueryFinishedListener.onQueryFinished(cursor);
         }
     }
 
-    protected void cleanupCursorIfNecessary() {
-        if (mCurrentCursor != null) {
-            mCurrentCursor.unregisterContentObserver(mContentObserver);
-        }
-        mCurrentCursor = null;
-    }
-
     private static class AsyncQueryHandlerImpl extends AsyncQueryHandler {
         private ObservableAsyncQuery mQuery;
 
diff --git a/car-telephony-common/src/com/android/car/telephony/common/PhoneCallLog.java b/car-telephony-common/src/com/android/car/telephony/common/PhoneCallLog.java
index d90e2ba..02c0808 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/PhoneCallLog.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/PhoneCallLog.java
@@ -71,6 +71,7 @@
     private long mId;
     private String mPhoneNumberString;
     private I18nPhoneNumberWrapper mI18nPhoneNumberWrapper;
+    private String mAccountName;
     private List<Record> mCallRecords = new ArrayList<>();
 
     /**
@@ -81,6 +82,7 @@
         int numberColumn = cursor.getColumnIndex(CallLog.Calls.NUMBER);
         int dateColumn = cursor.getColumnIndex(CallLog.Calls.DATE);
         int callTypeColumn = cursor.getColumnIndex(CallLog.Calls.TYPE);
+        int accountNameColumn = cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID);
 
         PhoneCallLog phoneCallLog = new PhoneCallLog();
         phoneCallLog.mId = cursor.getLong(idColumn);
@@ -89,6 +91,7 @@
                 phoneCallLog.mPhoneNumberString);
         Record record = new Record(cursor.getLong(dateColumn), cursor.getInt(callTypeColumn));
         phoneCallLog.mCallRecords.add(record);
+        phoneCallLog.mAccountName = cursor.getString(accountNameColumn);
         return phoneCallLog;
     }
 
@@ -97,6 +100,14 @@
         return mPhoneNumberString;
     }
 
+    /**
+     * Returns the account name that this call log belongs to. For call logs from Bluetooth device,
+     * account name is the same as Bluetooth address.
+     */
+    public String getAccountName() {
+        return mAccountName;
+    }
+
     /** Returns the id of this log. */
     public long getPhoneLogId() {
         return mId;
@@ -164,6 +175,8 @@
         sb.append(Log.pii(mPhoneNumberString));
         sb.append(" CallLog: ");
         sb.append(mCallRecords.size());
+        sb.append(" Account: ");
+        sb.append(mAccountName);
         return sb.toString();
     }
 }
diff --git a/car-telephony-common/src/com/android/car/telephony/common/PostalAddress.java b/car-telephony-common/src/com/android/car/telephony/common/PostalAddress.java
index cb7c774..7de3be6 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/PostalAddress.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/PostalAddress.java
@@ -16,15 +16,17 @@
 
 package com.android.car.telephony.common;
 
+import android.content.Intent;
 import android.content.res.Resources;
 import android.database.Cursor;
-import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.provider.ContactsContract;
-import android.util.Log;
 
 import androidx.annotation.Nullable;
+import com.android.car.apps.common.NavigationUtils;
+import com.android.car.apps.common.log.L;
+
 
 /**
  * Encapsulates data about an address entry. Typically loaded from the local Address store.
@@ -104,23 +106,20 @@
     }
 
     /**
-     * Returns the address Uri for {@link #mFormattedAddress}.
+     * Returns the address Intent for {@link #mFormattedAddress}.
      */
-    public Uri getAddressUri(Resources res) {
-        String address = String.format(res.getString(R.string.address_uri_format),
-                Uri.encode(mFormattedAddress));
-        Log.d(TAG, "The address is: " + address);
-        return Uri.parse(address);
+    public Intent getAddressIntent(Resources res) {
+        L.d(TAG, "Get address intent");
+        return NavigationUtils.getViewAddressIntent(res, mFormattedAddress);
     }
 
     /**
-     * Returns the navigation Uri for {@link #mFormattedAddress}.
+     * Returns the navigation Intent for {@link #mFormattedAddress}.
      */
-    public Uri getNavigationUri(Resources res) {
-        String address = String.format(res.getString(R.string.navigation_uri_format),
-                Uri.encode(mFormattedAddress));
-        Log.d(TAG, "The address is: " + address);
-        return Uri.parse(address);
+
+    public Intent getNavigationIntent(Resources res) {
+        L.d(TAG, "Get navigation intent");
+        return NavigationUtils.getNavigationIntent(res, mFormattedAddress);
     }
 
     @Override
diff --git a/car-telephony-common/src/com/android/car/telephony/common/TelecomUtils.java b/car-telephony-common/src/com/android/car/telephony/common/TelecomUtils.java
index 090f223..1d934ec 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/TelecomUtils.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/TelecomUtils.java
@@ -38,8 +38,9 @@
 import android.telecom.Call;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
-import android.util.Log;
 import android.widget.ImageView;
 
 import androidx.annotation.Nullable;
@@ -48,6 +49,7 @@
 import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
 
 import com.android.car.apps.common.LetterTileDrawable;
+import com.android.car.apps.common.log.L;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.RequestOptions;
@@ -65,6 +67,14 @@
  */
 public class TelecomUtils {
     private static final String TAG = "CD.TelecomUtils";
+    /**
+     * A reference to keep track of the soring method of sorting by the contact's first name.
+     */
+    public static final Integer SORT_BY_FIRST_NAME = 1;
+    /**
+     * A reference to keep track of the soring method of sorting by the contact's last name.
+     */
+    public static final Integer SORT_BY_LAST_NAME = 2;
 
     private static String sVoicemailNumber;
     private static TelephonyManager sTelephonyManager;
@@ -113,24 +123,19 @@
      * Format a number as a phone number.
      */
     public static String getFormattedNumber(Context context, String number) {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "getFormattedNumber: " + number);
-        }
+        L.d(TAG, "getFormattedNumber: " + number);
         if (number == null) {
             return "";
         }
 
         String countryIso = getCurrentCountryIso(context);
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "PhoneNumberUtils.formatNumberToE16, number: "
-                    + number + ", country: " + countryIso);
-        }
-        String e164 = PhoneNumberUtils.formatNumberToE164(number, countryIso);
-        String formattedNumber = PhoneNumberUtils.formatNumber(number, e164, countryIso);
+        L.d(TAG, "PhoneNumberUtils.formatNumber, number: " + number
+                    + ", country: " + countryIso);
+
+        String formattedNumber = PhoneNumberUtils.formatNumber(number, countryIso);
         formattedNumber = TextUtils.isEmpty(formattedNumber) ? number : formattedNumber;
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "getFormattedNumber, result: " + formattedNumber);
-        }
+        L.d(TAG, "getFormattedNumber, result: " + formattedNumber);
+
         return formattedNumber;
     }
 
@@ -146,16 +151,16 @@
             if (country != null) {
                 countryIso = country.getCountryIso();
             } else {
-                Log.e(TAG, "CountryDetector.detectCountry() returned null.");
+                L.e(TAG, "CountryDetector.detectCountry() returned null.");
             }
         }
         if (countryIso == null) {
             countryIso = locale.getCountry();
-            Log.w(TAG, "No CountryDetector; falling back to countryIso based on locale: "
+            L.w(TAG, "No CountryDetector; falling back to countryIso based on locale: "
                     + countryIso);
         }
         if (countryIso == null || countryIso.length() != 2) {
-            Log.w(TAG, "Invalid locale, falling back to US");
+            L.w(TAG, "Invalid locale, falling back to US");
             countryIso = "US";
         }
         return countryIso;
@@ -379,26 +384,48 @@
     /**
      * Sets a Contact avatar onto the provided {@code icon}. The first letter or both letters of the
      * contact's initials.
+     *
+     * @param sortMethod can be either {@link #SORT_BY_FIRST_NAME} or {@link #SORT_BY_LAST_NAME}.
      */
     public static void setContactBitmapAsync(
             Context context,
             @Nullable final ImageView icon,
-            @Nullable final Contact contact) {
-        setContactBitmapAsync(context, icon, contact, null);
+            @Nullable final Contact contact,
+            Integer sortMethod) {
+        setContactBitmapAsync(context, icon, contact, null, sortMethod);
     }
 
     /**
      * Sets a Contact avatar onto the provided {@code icon}. The first letter or both letters of the
-     * contact's initials or {@code fallbackDisplayName} will be used as a fallback resource if
-     * avatar loading fails.
+     * contact's initials. Will start with first name by default.
      */
     public static void setContactBitmapAsync(
             Context context,
             @Nullable final ImageView icon,
             @Nullable final Contact contact,
             @Nullable final String fallbackDisplayName) {
+        setContactBitmapAsync(context, icon, contact, fallbackDisplayName, SORT_BY_FIRST_NAME);
+    }
+
+    /**
+     * Sets a Contact avatar onto the provided {@code icon}. The first letter or both letters of the
+     * contact's initials or {@code fallbackDisplayName} will be used as a fallback resource if
+     * avatar loading fails.
+     *
+     * @param sortMethod can be either {@link #SORT_BY_FIRST_NAME} or {@link #SORT_BY_LAST_NAME}. If
+     *                   the value is {@link #SORT_BY_FIRST_NAME}, the name and initials order will
+     *                   be first name first. Otherwise, the order will be last name first.
+     */
+    public static void setContactBitmapAsync(
+            Context context,
+            @Nullable final ImageView icon,
+            @Nullable final Contact contact,
+            @Nullable final String fallbackDisplayName,
+            Integer sortMethod) {
         Uri avatarUri = contact != null ? contact.getAvatarUri() : null;
-        String initials = contact != null ? contact.getInitials()
+        boolean startWithFirstName = isSortByFirstName(sortMethod);
+        String initials = contact != null
+                ? contact.getInitialsBasedOnDisplayOrder(startWithFirstName)
                 : (fallbackDisplayName == null ? null : getInitials(fallbackDisplayName, null));
         String identifier = contact == null ? fallbackDisplayName : contact.getDisplayName();
 
@@ -486,7 +513,7 @@
     public static void markCallLogAsRead(Context context, String phoneNumberString) {
         if (context.checkSelfPermission(Manifest.permission.WRITE_CALL_LOG)
                 != PackageManager.PERMISSION_GRANTED) {
-            Log.w(TAG, "Missing WRITE_CALL_LOG permission; not marking missed calls as read.");
+            L.w(TAG, "Missing WRITE_CALL_LOG permission; not marking missed calls as read.");
             return;
         }
         ContentValues contentValues = new ContentValues();
@@ -516,7 +543,7 @@
                             where.toString(),
                             selectionArgs.toArray(selectionArgsArray));
         } catch (IllegalArgumentException e) {
-            Log.e(TAG, "markCallLogAsRead failed", e);
+            L.e(TAG, "markCallLogAsRead failed", e);
         }
     }
 
@@ -550,7 +577,7 @@
         RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(
                 context.getResources(), letterTileDrawable.toBitmap(avatarSize));
         return createFromRoundedBitmapDrawable(roundedBitmapDrawable, avatarSize,
-            cornerRadiusPercent);
+                cornerRadiusPercent);
     }
 
     /** Creates an Icon based on the given roundedBitmapDrawable. **/
@@ -567,6 +594,13 @@
         return Icon.createWithBitmap(result);
     }
 
+    /**
+     * Sets the direction of a string, used for displaying phone numbers.
+     */
+    public static String getBidiWrappedNumber(String string) {
+        return BidiFormatter.getInstance().unicodeWrap(string, TextDirectionHeuristics.LTR);
+    }
+
     private static Uri makeResourceUri(Context context, int resourceId) {
         return new Uri.Builder()
                 .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
@@ -575,4 +609,11 @@
                 .build();
     }
 
+    /**
+     * Returns true if contacts are sorted by their first names. Returns false if they are sorted by
+     * last names.
+     */
+    public static boolean isSortByFirstName(Integer sortMethod) {
+        return SORT_BY_FIRST_NAME.equals(sortMethod);
+    }
 }
diff --git a/car-ui-lib/Android.bp b/car-ui-lib/Android.bp
index f433c4c..ac82b7b 100644
--- a/car-ui-lib/Android.bp
+++ b/car-ui-lib/Android.bp
@@ -31,10 +31,24 @@
     static_libs: [
         "androidx.annotation_annotation",
         "androidx.appcompat_appcompat",
-	"androidx.asynclayoutinflater_asynclayoutinflater",
+        "androidx.asynclayoutinflater_asynclayoutinflater",
         "androidx-constraintlayout_constraintlayout",
         "androidx.preference_preference",
         "androidx.recyclerview_recyclerview",
         "androidx-constraintlayout_constraintlayout-solver",
     ],
 }
+
+// User this if your project includes overlayable.xml
+android_library {
+
+    name: "car-ui-lib-bp-overlayable",
+
+    resource_dirs: [
+        "res-overlayable"
+    ],
+
+    static_libs: [
+        "car-ui-lib-bp",
+    ],
+}
diff --git a/car-ui-lib/build.gradle b/car-ui-lib/build.gradle
index 7775382..edbed36 100644
--- a/car-ui-lib/build.gradle
+++ b/car-ui-lib/build.gradle
@@ -46,11 +46,11 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdkVersion 28
+    compileSdkVersion 29
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 28
+        targetSdkVersion 29
         versionCode 1
         versionName "1.0"
     }
diff --git a/car-ui-lib/findviewbyid-preupload-hook.sh b/car-ui-lib/findviewbyid-preupload-hook.sh
index 4969536..e520eb2 100755
--- a/car-ui-lib/findviewbyid-preupload-hook.sh
+++ b/car-ui-lib/findviewbyid-preupload-hook.sh
@@ -1,11 +1,7 @@
 #!/bin/bash
 
-if grep -rq "findViewById\|requireViewById" car-ui-lib/src/com/android/car/ui/toolbar/; then
-    grep -r "findViewById\|requireViewById" car-ui-lib/src/com/android/car/ui/toolbar/;
+if grep -rq --exclude=CarUiUtils.java "findViewById\|requireViewById" car-ui-lib/src/com/android/car/ui/; then
+    grep -r --exclude=CarUiUtils.java "findViewById\|requireViewById" car-ui-lib/src/com/android/car/ui/;
     echo "Illegal use of findViewById or requireViewById in car-ui-lib. Please consider using CarUiUtils#findViewByRefId or CarUiUtils#requireViewByRefId" && false;
 fi
 
-if grep -rq "findViewById\|requireViewById" car-ui-lib/src/com/android/car/ui/recyclerview/; then
-    grep -r "findViewById\|requireViewById" car-ui-lib/src/com/android/car/ui/recyclerview/;
-    echo "Illegal use of findViewById or requireViewById in car-ui-lib. Please consider using CarUiUtils#findViewByRefId or CarUiUtils#requireViewByRefId" && false;
-fi
diff --git a/car-ui-lib/referencedesign/Android.mk b/car-ui-lib/referencedesign/Android.mk
new file mode 100644
index 0000000..7da04dc
--- /dev/null
+++ b/car-ui-lib/referencedesign/Android.mk
@@ -0,0 +1,33 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+CAR_UI_RRO_SET_NAME := googlecarui
+CAR_UI_RESOURCE_DIR := $(LOCAL_PATH)/res
+CAR_UI_RRO_TARGETS := \
+    com.android.car.ui.paintbooth \
+    com.android.car.rotaryplayground \
+    com.android.car.themeplayground \
+    com.android.car.carlauncher \
+    com.android.car.home \
+    com.android.car.media \
+    com.android.car.radio \
+    com.android.car.calendar \
+    com.android.car.companiondevicesupport \
+    com.android.car.systemupdater \
+    com.android.car.dialer \
+    com.android.car.linkviewer \
+    com.android.car.settings \
+    com.android.car.voicecontrol \
+    com.android.car.faceenroll \
+    com.android.permissioncontroller \
+    com.android.settings.intelligence \
+    com.google.android.apps.automotive.inputmethod \
+    com.google.android.apps.automotive.inputmethod.dev \
+    com.google.android.embedded.projection \
+    com.google.android.gms \
+    com.google.android.packageinstaller \
+    com.google.android.carassistant \
+    com.google.android.tts \
+    com.android.vending \
+
+include packages/apps/Car/libs/car-ui-lib/generate_rros.mk
diff --git a/car-ui-lib/referencedesign/AndroidManifest.xml b/car-ui-lib/referencedesign/AndroidManifest.xml
new file mode 100644
index 0000000..7585b3c
--- /dev/null
+++ b/car-ui-lib/referencedesign/AndroidManifest.xml
@@ -0,0 +1,16 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="{{RRO_PACKAGE_NAME}}">
+    <application android:hasCode="false"/>
+    <!-- IMPORTANT: Setting the category to "BypassIdMapV1" will cause these static RROs not to
+     have an IDMAP V1 generated within the PackageManager which improves boot performance.
+     IDMAP v1 allowed for overlays of values within an AndroidManifest file but that
+     functionality and IDMAP v1 has been removed in the next version of Android and is not used
+      here. -->
+    <overlay android:priority="10"
+        android:targetPackage="{{TARGET_PACKAGE_NAME}}"
+        android:targetName="car-ui-lib"
+        android:isStatic="true"
+        android:category="BypassIdMapV1"
+        android:requiredSystemPropertyName="ro.build.car_ui_rros_enabled"
+        android:requiredSystemPropertyValue="true"/>
+</manifest>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/color/car_ui_text_color_primary.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/color/car_ui_text_color_primary.xml
new file mode 100644
index 0000000..34033e2
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/color/car_ui_text_color_primary.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2019 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.
+-->
+<!-- Copy of ?android:attr/textColorPrimary (frameworks/base/res/res/color/text_color_primary.xml)
+     but with a ux restricted state. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item android:state_enabled="false"
+          android:alpha="?android:attr/disabledAlpha"
+          android:color="?android:attr/colorForeground"/>
+    <item android:color="?android:attr/colorForeground"/>
+</selector>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_icon_arrow_back.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_icon_arrow_back.xml
new file mode 100644
index 0000000..4ad49b2
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_icon_arrow_back.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2018, 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:autoMirrored="true"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
+</vector>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_button_ripple_background.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_button_ripple_background.xml
new file mode 100644
index 0000000..0acb196
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_button_ripple_background.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2019 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.
+  -->
+
+<ripple
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="@color/car_ui_ripple_color" />
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_ic_down.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_ic_down.xml
new file mode 100644
index 0000000..380bf46
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_ic_down.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2019 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.
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48dp"
+        android:height="48dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:pathData="M14.83,16.42L24,25.59l9.17,-9.17L36,19.25l-12,12 -12,-12z"
+        android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_ic_up.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_ic_up.xml
new file mode 100644
index 0000000..2eff62f
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_ic_up.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2019 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.
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48dp"
+        android:height="48dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:pathData="M14.83,30.83L24,21.66l9.17,9.17L36,28 24,16 12,28z"
+        android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml
new file mode 100644
index 0000000..ec6318a
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2019 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.
+  -->
+
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/car_ui_scrollbar_thumb" />
+    <corners android:radius="@dimen/car_ui_scrollbar_thumb_radius"/>
+</shape>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_toolbar_menu_item_divider.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_toolbar_menu_item_divider.xml
new file mode 100644
index 0000000..1e9a5a2
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_toolbar_menu_item_divider.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~
+  ~ Copyright (C) 2019 Google Inc.
+  ~
+  ~ 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.
+  ~
+ -->
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <size
+        android:width="16dp"/>
+</shape>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
new file mode 100644
index 0000000..03f8d82
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~
+  ~ Copyright (C) 2019 Google Inc.
+  ~
+  ~ 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.
+  ~
+ -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="#27ffffff"
+        android:radius="48dp"/>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl-port/car_ui_base_layout_toolbar.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl-port/car_ui_base_layout_toolbar.xml
new file mode 100644
index 0000000..fb97b92
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl-port/car_ui_base_layout_toolbar.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    ~ Copyright (C) 2020 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.
+    -->
+<!-- This is for the two-row version of the toolbar -->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <!-- When the user finishes searching, we call clearFocus() on the editText in the search bar.
+     clearFocus() will actually send the focus to the first focusable thing in the layout.
+     If that focusable thing is still the search bar it will just reselect it, and the user won't
+     be able to deselect. So make a focusable view here to guarantee that we can clear the focus -->
+    <View
+        android:layout_width="1dp"
+        android:layout_height="1dp"
+        android:focusable="true"
+        android:focusableInTouchMode="true" />
+
+    <FrameLayout
+        android:id="@+id/car_ui_base_layout_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/car_ui_toolbar_background"
+        android:layout_alignParentTop="true">
+
+        <!-- The horizontal bias here is so that when you set this view as GONE, it will be
+             treated as if it's all the way to the left instead of centered in the margin -->
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_nav_icon_container"
+            android:layout_width="112dp"
+            android:layout_height="96dp"
+            android:layout_alignParentLeft="true">
+            <!-- missing: icon src -->
+            <ImageView
+                android:id="@+id/car_ui_toolbar_nav_icon"
+                android:layout_width="@dimen/car_ui_toolbar_nav_icon_size"
+                android:layout_height="@dimen/car_ui_toolbar_nav_icon_size"
+                android:layout_gravity="center"
+                android:scaleType="fitXY"
+                android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
+                android:tint="@color/car_ui_text_color_primary"/>
+            <ImageView
+                android:id="@+id/car_ui_toolbar_logo"
+                android:layout_width="@dimen/car_ui_toolbar_logo_size"
+                android:layout_height="@dimen/car_ui_toolbar_logo_size"
+                android:layout_gravity="center"
+                android:scaleType="fitXY"/>
+        </FrameLayout>
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_title_logo_container"
+            android:layout_width="112dp"
+            android:layout_height="96dp"
+            android:layout_alignParentRight="true">
+
+            <ImageView
+                android:id="@+id/car_ui_toolbar_title_logo"
+                android:layout_width="@dimen/car_ui_toolbar_logo_size"
+                android:layout_height="@dimen/car_ui_toolbar_logo_size"
+                android:scaleType="fitXY"
+                android:layout_gravity="center"/>
+        </FrameLayout>
+
+        <LinearLayout
+            android:id="@+id/car_ui_toolbar_title_container"
+            android:layout_height="96dp"
+            android:layout_width="wrap_content"
+            android:orientation="vertical"
+            android:layout_marginRight="112dp"
+            android:layout_alignParentRight="true"
+            android:gravity="center_vertical">
+            <TextView android:id="@+id/car_ui_toolbar_title"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:singleLine="true"
+                      android:textAlignment="viewStart"
+                      android:textAppearance="@style/TextAppearance.CarUi.Widget.Toolbar.Title"/>
+            <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:visibility="gone"
+                      android:textAlignment="viewStart"
+                      android:textAppearance="?android:attr/textAppearanceSmall"/>
+        </LinearLayout>
+
+        <com.android.car.ui.toolbar.TabLayout
+            android:id="@+id/car_ui_toolbar_tabs"
+            android:layout_width="match_parent"
+            android:layout_height="96dp"
+            android:gravity="left"
+            android:layout_alignParentTop="true"
+            android:layout_marginTop="96dp"/>
+
+        <LinearLayout
+            android:id="@+id/car_ui_toolbar_menu_items_container"
+            android:layout_width="wrap_content"
+            android:layout_height="96dp"
+            android:orientation="horizontal"
+            android:divider="@drawable/car_ui_toolbar_menu_item_divider"
+            android:showDividers="beginning|middle|end"
+            android:layout_toRightOf="@+id/car_ui_toolbar_nav_icon_container"
+            android:layout_alignWithParentIfMissing="true"/>
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_search_view_container"
+            android:layout_width="match_parent"
+            android:layout_height="96dp"
+            android:layout_toRightOf="@+id/car_ui_toolbar_menu_items_container"
+            android:layout_alignParentRight="true"/>
+
+        <ProgressBar
+            android:id="@+id/car_ui_toolbar_progress_bar"
+            style="@android:style/Widget.DeviceDefault.ProgressBar.Horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentRight="true"
+            android:layout_alignParentBottom="true"
+            android:indeterminate="true"
+            android:visibility="gone"/>
+
+    </RelativeLayout>
+</RelativeLayout>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_base_layout_toolbar.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_base_layout_toolbar.xml
new file mode 100644
index 0000000..35d7742
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_base_layout_toolbar.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    ~ Copyright (C) 2020 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.
+    -->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <!-- When the user finishes searching, we call clearFocus() on the editText in the search bar.
+     clearFocus() will actually send the focus to the first focusable thing in the layout.
+     If that focusable thing is still the search bar it will just reselect it, and the user won't
+     be able to deselect. So make a focusable view here to guarantee that we can clear the focus -->
+    <View
+        android:layout_width="1dp"
+        android:layout_height="1dp"
+        android:focusable="true"
+        android:focusableInTouchMode="true" />
+
+    <FrameLayout
+        android:id="@+id/car_ui_base_layout_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="96dp"
+        android:layout_alignParentTop="true"
+        android:id="@+id/car_ui_toolbar_background">
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_nav_icon_container"
+            android:layout_width="112dp"
+            android:layout_height="match_parent"
+            android:layout_alignParentLeft="true">
+            <ImageView
+                android:id="@+id/car_ui_toolbar_nav_icon"
+                android:layout_width="@dimen/car_ui_toolbar_nav_icon_size"
+                android:layout_height="@dimen/car_ui_toolbar_nav_icon_size"
+                android:layout_gravity="center"
+                android:scaleType="fitXY"
+                android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
+                android:tint="@color/car_ui_text_color_primary"/>
+            <ImageView
+                android:id="@+id/car_ui_toolbar_logo"
+                android:layout_width="@dimen/car_ui_toolbar_logo_size"
+                android:layout_height="@dimen/car_ui_toolbar_logo_size"
+                android:layout_gravity="center"
+                android:scaleType="fitXY"/>
+        </FrameLayout>
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_title_logo_container"
+            android:layout_width="112dp"
+            android:layout_height="match_parent"
+            android:layout_alignParentRight="true">
+
+            <ImageView
+                android:id="@+id/car_ui_toolbar_title_logo"
+                android:layout_width="@dimen/car_ui_toolbar_logo_size"
+                android:layout_height="@dimen/car_ui_toolbar_logo_size"
+                android:scaleType="fitXY"
+                android:layout_gravity="center"/>
+        </FrameLayout>
+
+        <LinearLayout android:layout_height="wrap_content"
+                      android:layout_width="match_parent"
+                      android:id="@+id/car_ui_toolbar_title_container"
+                      android:orientation="vertical"
+                      android:layout_marginRight="112dp"
+                      android:layout_alignParentRight="true"
+                      android:layout_centerVertical="true">
+            <TextView android:id="@+id/car_ui_toolbar_title"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:singleLine="true"
+                      android:textAppearance="@style/TextAppearance.CarUi.Widget.Toolbar.Title"/>
+            <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:visibility="gone"
+                      android:textAlignment="viewStart"
+                      android:textAppearance="?android:attr/textAppearanceSmall"/>
+        </LinearLayout>
+
+        <com.android.car.ui.toolbar.TabLayout
+            android:id="@+id/car_ui_toolbar_tabs"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:gravity="left"
+            android:layout_toRightOf="@+id/car_ui_toolbar_menu_items_container"
+            android:layout_toLeftOf="@+id/car_ui_toolbar_title_container"/>
+
+        <LinearLayout
+            android:id="@+id/car_ui_toolbar_menu_items_container"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:orientation="horizontal"
+            android:divider="@drawable/car_ui_toolbar_menu_item_divider"
+            android:showDividers="beginning|middle|end"
+            android:layout_toRightOf="@+id/car_ui_toolbar_nav_icon_container"
+            android:layout_alignWithParentIfMissing="true"/>
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_search_view_container"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_toRightOf="@+id/car_ui_toolbar_menu_items_container"
+            android:layout_alignParentRight="true"/>
+
+        <ProgressBar
+            android:id="@+id/car_ui_toolbar_progress_bar"
+            style="@android:style/Widget.DeviceDefault.ProgressBar.Horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignParentLeft="true"
+            android:layout_alignParentRight="true"
+            android:layout_alignParentBottom="true"
+            android:indeterminate="true"
+            android:visibility="gone"/>
+
+    </RelativeLayout>
+</RelativeLayout>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_recycler_view.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_recycler_view.xml
new file mode 100644
index 0000000..c1d16b5
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_recycler_view.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 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
+  -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <com.android.car.ui.recyclerview.CarUiRecyclerViewContainer
+        android:id="@+id/car_ui_recycler_view"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_marginStart="@dimen/car_ui_scrollbar_margin"
+        android:tag="carUiRecyclerView"
+        android:layout_weight="1"/>
+
+    <include layout="@layout/car_ui_recyclerview_scrollbar"/>
+</merge>
\ No newline at end of file
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_recyclerview_scrollbar.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_recyclerview_scrollbar.xml
new file mode 100644
index 0000000..85d624c
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_recyclerview_scrollbar.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2019 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.
+  -->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="@dimen/car_ui_scrollbar_container_width"
+    android:layout_height="match_parent"
+    android:id="@+id/car_ui_scroll_bar"
+    android:gravity="center">
+
+    <ImageView
+        android:id="@+id/car_ui_scrollbar_page_up"
+        android:layout_width="@dimen/car_ui_scrollbar_button_size"
+        android:layout_height="@dimen/car_ui_scrollbar_button_size"
+        android:background="@drawable/car_ui_recyclerview_button_ripple_background"
+        android:contentDescription="@string/car_ui_scrollbar_page_up_button"
+        android:focusable="false"
+        android:hapticFeedbackEnabled="false"
+        android:src="@drawable/car_ui_recyclerview_ic_up"
+        android:scaleType="centerInside"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"/>
+
+    <!-- View height is dynamically calculated during layout. -->
+    <View
+        android:id="@+id/car_ui_scrollbar_thumb"
+        android:layout_width="@dimen/car_ui_scrollbar_thumb_width"
+        android:layout_height="0dp"
+        android:layout_centerHorizontal="true"
+        android:background="@drawable/car_ui_recyclerview_scrollbar_thumb"
+        android:layout_below="@+id/car_ui_scrollbar_page_up" />
+
+    <View
+        android:id="@+id/car_ui_scrollbar_track"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginTop="@dimen/car_ui_scrollbar_separator_margin"
+        android:layout_marginBottom="@dimen/car_ui_scrollbar_separator_margin"
+        android:layout_below="@+id/car_ui_scrollbar_page_up"
+        android:layout_above="@+id/car_ui_scrollbar_page_down"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"/>
+
+    <ImageView
+        android:id="@+id/car_ui_scrollbar_page_down"
+        android:layout_width="@dimen/car_ui_scrollbar_button_size"
+        android:layout_height="@dimen/car_ui_scrollbar_button_size"
+        android:background="@drawable/car_ui_recyclerview_button_ripple_background"
+        android:contentDescription="@string/car_ui_scrollbar_page_down_button"
+        android:focusable="false"
+        android:hapticFeedbackEnabled="false"
+        android:src="@drawable/car_ui_recyclerview_ic_down"
+        android:scaleType="centerInside"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"/>
+</RelativeLayout>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_toolbar.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_toolbar.xml
new file mode 100644
index 0000000..85e34cb
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_toolbar.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019, 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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="96dp"
+    android:id="@+id/car_ui_toolbar_background">
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_nav_icon_container"
+        android:layout_width="112dp"
+        android:layout_height="match_parent"
+        android:layout_alignParentLeft="true">
+        <ImageView
+            android:id="@+id/car_ui_toolbar_nav_icon"
+            android:layout_width="@dimen/car_ui_toolbar_nav_icon_size"
+            android:layout_height="@dimen/car_ui_toolbar_nav_icon_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"
+            android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
+            android:tint="@color/car_ui_text_color_primary"/>
+        <ImageView
+            android:id="@+id/car_ui_toolbar_logo"
+            android:layout_width="@dimen/car_ui_toolbar_logo_size"
+            android:layout_height="@dimen/car_ui_toolbar_logo_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"/>
+    </FrameLayout>
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_title_logo_container"
+        android:layout_width="112dp"
+        android:layout_height="match_parent"
+        android:layout_alignParentRight="true">
+
+        <ImageView
+            android:id="@+id/car_ui_toolbar_title_logo"
+            android:layout_width="@dimen/car_ui_toolbar_logo_size"
+            android:layout_height="@dimen/car_ui_toolbar_logo_size"
+            android:scaleType="fitXY"
+            android:layout_gravity="center"/>
+    </FrameLayout>
+
+    <LinearLayout android:layout_height="wrap_content"
+                  android:layout_width="match_parent"
+                  android:id="@+id/car_ui_toolbar_title_container"
+                  android:orientation="vertical"
+                  android:layout_marginRight="112dp"
+                  android:layout_alignParentRight="true"
+                  android:layout_centerVertical="true">
+        <TextView android:id="@+id/car_ui_toolbar_title"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:singleLine="true"
+                  android:textAppearance="@style/TextAppearance.CarUi.Widget.Toolbar.Title"/>
+        <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:visibility="gone"
+                  android:textAlignment="viewStart"
+                  android:textAppearance="?android:attr/textAppearanceSmall"/>
+    </LinearLayout>
+
+    <com.android.car.ui.toolbar.TabLayout
+        android:id="@+id/car_ui_toolbar_tabs"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="left"
+        android:layout_toRightOf="@+id/car_ui_toolbar_menu_items_container"
+        android:layout_toLeftOf="@+id/car_ui_toolbar_title_container"/>
+
+    <LinearLayout
+        android:id="@+id/car_ui_toolbar_menu_items_container"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        android:divider="@drawable/car_ui_toolbar_menu_item_divider"
+        android:showDividers="beginning|middle|end"
+        android:layout_toRightOf="@+id/car_ui_toolbar_nav_icon_container"
+        android:layout_alignWithParentIfMissing="true"/>
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_search_view_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_toRightOf="@+id/car_ui_toolbar_menu_items_container"
+        android:layout_alignParentRight="true"/>
+
+    <ProgressBar
+        android:id="@+id/car_ui_toolbar_progress_bar"
+        style="@android:style/Widget.DeviceDefault.ProgressBar.Horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentBottom="true"
+        android:indeterminate="true"
+        android:visibility="gone"/>
+
+</RelativeLayout>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_toolbar_two_row.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_toolbar_two_row.xml
new file mode 100644
index 0000000..e5eff70
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-ldrtl/car_ui_toolbar_two_row.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019, 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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:id="@+id/car_ui_toolbar_background">
+
+    <!-- The horizontal bias here is so that when you set this view as GONE, it will be
+         treated as if it's all the way to the left instead of centered in the margin -->
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_nav_icon_container"
+        android:layout_width="112dp"
+        android:layout_height="96dp"
+        android:layout_alignParentLeft="true">
+        <!-- missing: icon src -->
+        <ImageView
+            android:id="@+id/car_ui_toolbar_nav_icon"
+            android:layout_width="@dimen/car_ui_toolbar_nav_icon_size"
+            android:layout_height="@dimen/car_ui_toolbar_nav_icon_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"
+            android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
+            android:tint="@color/car_ui_text_color_primary"/>
+        <ImageView
+            android:id="@+id/car_ui_toolbar_logo"
+            android:layout_width="@dimen/car_ui_toolbar_logo_size"
+            android:layout_height="@dimen/car_ui_toolbar_logo_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"/>
+    </FrameLayout>
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_title_logo_container"
+        android:layout_width="112dp"
+        android:layout_height="96dp"
+        android:layout_alignParentRight="true">
+
+        <ImageView
+            android:id="@+id/car_ui_toolbar_title_logo"
+            android:layout_width="@dimen/car_ui_toolbar_logo_size"
+            android:layout_height="@dimen/car_ui_toolbar_logo_size"
+            android:scaleType="fitXY"
+            android:layout_gravity="center"/>
+    </FrameLayout>
+
+    <LinearLayout
+        android:id="@+id/car_ui_toolbar_title_container"
+        android:layout_height="96dp"
+        android:layout_width="wrap_content"
+        android:orientation="vertical"
+        android:layout_marginRight="112dp"
+        android:layout_alignParentRight="true"
+        android:gravity="center_vertical">
+        <TextView android:id="@+id/car_ui_toolbar_title"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:singleLine="true"
+                  android:textAlignment="viewStart"
+                  android:textAppearance="@style/TextAppearance.CarUi.Widget.Toolbar.Title"/>
+        <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:visibility="gone"
+                  android:textAlignment="viewStart"
+                  android:textAppearance="?android:attr/textAppearanceSmall"/>
+    </LinearLayout>
+
+    <com.android.car.ui.toolbar.TabLayout
+        android:id="@+id/car_ui_toolbar_tabs"
+        android:layout_width="match_parent"
+        android:layout_height="96dp"
+        android:gravity="left"
+        android:layout_alignParentTop="true"
+        android:layout_marginTop="96dp"/>
+
+    <LinearLayout
+        android:id="@+id/car_ui_toolbar_menu_items_container"
+        android:layout_width="wrap_content"
+        android:layout_height="96dp"
+        android:orientation="horizontal"
+        android:divider="@drawable/car_ui_toolbar_menu_item_divider"
+        android:showDividers="beginning|middle|end"
+        android:layout_toRightOf="@+id/car_ui_toolbar_nav_icon_container"
+        android:layout_alignWithParentIfMissing="true"/>
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_search_view_container"
+        android:layout_width="match_parent"
+        android:layout_height="96dp"
+        android:layout_toRightOf="@+id/car_ui_toolbar_menu_items_container"
+        android:layout_alignParentRight="true"/>
+
+    <ProgressBar
+        android:id="@+id/car_ui_toolbar_progress_bar"
+        style="@android:style/Widget.DeviceDefault.ProgressBar.Horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentBottom="true"
+        android:indeterminate="true"
+        android:visibility="gone"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-port/car_ui_base_layout_toolbar.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-port/car_ui_base_layout_toolbar.xml
new file mode 100644
index 0000000..d13f2fd
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/layout-port/car_ui_base_layout_toolbar.xml
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 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.
+  -->
+<!-- This is for the two-row version of the toolbar -->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <!-- When the user finishes searching, we call clearFocus() on the editText in the search bar.
+     clearFocus() will actually send the focus to the first focusable thing in the layout.
+     If that focusable thing is still the search bar it will just reselect it, and the user won't
+     be able to deselect. So make a focusable view here to guarantee that we can clear the focus -->
+    <View
+        android:layout_width="1dp"
+        android:layout_height="1dp"
+        android:focusable="true"
+        android:focusableInTouchMode="true" />
+
+    <FrameLayout
+        android:id="@+id/car_ui_base_layout_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentTop="true" />
+
+    <com.android.car.ui.baselayout.ClickBlockingView
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_alignBottom="@+id/car_ui_toolbar_background"
+        android:layout_alignEnd="@+id/car_ui_toolbar_background"
+        android:layout_alignTop="@+id/car_ui_toolbar_background"
+        android:layout_alignStart="@+id/car_ui_toolbar_background"/>
+
+    <RelativeLayout
+        android:id="@+id/car_ui_toolbar_background"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:tag="car_ui_top_inset"
+        android:layout_alignParentTop="true">
+
+        <View
+            android:id="@+id/car_ui_toolbar_row_separator_guideline2"
+            android:layout_width="match_parent"
+            android:layout_height="96dp" />
+
+        <View
+            android:id="@+id/car_ui_toolbar_row_separator_guideline"
+            android:layout_width="match_parent"
+            android:layout_below="@+id/car_ui_toolbar_row_separator_guideline2"
+            android:layout_height="0dp" />
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_nav_icon_container"
+            android:layout_width="112dp"
+            android:layout_height="0dp"
+            android:layout_above="@+id/car_ui_toolbar_row_separator_guideline"
+            android:layout_alignParentStart="true"
+            android:layout_alignParentTop="true">
+
+            <ImageView
+                android:id="@+id/car_ui_toolbar_nav_icon"
+                android:tint="@color/car_ui_toolbar_nav_icon_color"
+                android:src="@drawable/car_ui_icon_arrow_back"
+                android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
+                android:layout_width="44dp"
+                android:layout_height="44dp"
+                android:layout_gravity="center"
+                android:scaleType="fitXY" />
+
+            <ImageView
+                android:id="@+id/car_ui_toolbar_logo"
+                android:layout_width="44dp"
+                android:layout_height="44dp"
+                android:layout_gravity="center"
+                android:scaleType="fitXY" />
+        </FrameLayout>
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_title_logo_container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_above="@+id/car_ui_toolbar_row_separator_guideline"
+            android:layout_toEndOf="@+id/car_ui_toolbar_nav_icon_container"
+            android:layout_alignParentTop="true">
+
+            <ImageView
+                android:id="@+id/car_ui_toolbar_title_logo"
+                android:layout_width="44dp"
+                android:layout_height="44dp"
+                android:layout_gravity="center"
+                android:scaleType="fitXY" />
+        </FrameLayout>
+
+        <FrameLayout
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginStart="16dp"
+            android:layout_above="@+id/car_ui_toolbar_row_separator_guideline"
+            android:layout_toStartOf="@+id/car_ui_toolbar_menu_items_container"
+            android:layout_toEndOf="@+id/car_ui_toolbar_title_logo_container"
+            android:layout_alignParentTop="true" >
+            <LinearLayout
+                android:layout_gravity="center_vertical"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:id="@+id/car_ui_toolbar_title_container"
+                android:orientation="vertical" >
+                <TextView android:id="@+id/car_ui_toolbar_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:singleLine="true"
+                    android:textSize="32sp"
+                    android:letterSpacing="0.0"
+                    android:textAlignment="viewStart" />
+                <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:visibility="gone"
+                    android:textAppearance="?android:attr/textAppearanceSmall"
+                    android:textAlignment="viewStart" />
+            </LinearLayout>
+        </FrameLayout>
+
+        <FrameLayout
+            android:id="@+id/car_ui_toolbar_search_view_container"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_above="@+id/car_ui_toolbar_row_separator_guideline"
+            android:layout_toStartOf="@+id/car_ui_toolbar_menu_items_container"
+            android:layout_toEndOf="@+id/car_ui_toolbar_nav_icon_container"
+            android:layout_alignWithParentIfMissing="true"
+            android:layout_alignParentTop="true" />
+
+        <LinearLayout
+            android:id="@+id/car_ui_toolbar_menu_items_container"
+            android:divider="@drawable/car_ui_toolbar_menu_item_divider"
+            android:showDividers="beginning|middle|end"
+            android:layout_width="wrap_content"
+            android:layout_height="0dp"
+            android:visibility="gone"
+            android:orientation="horizontal"
+            android:layout_above="@+id/car_ui_toolbar_row_separator_guideline"
+            android:layout_alignParentEnd="true"
+            android:layout_alignParentTop="true" />
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@+id/car_ui_toolbar_row_separator_guideline">
+
+            <com.android.car.ui.toolbar.TabLayout
+                android:id="@+id/car_ui_toolbar_tabs"
+                android:layout_width="match_parent"
+                android:layout_height="96dp" />
+
+            <ProgressBar
+                android:id="@+id/car_ui_toolbar_progress_bar"
+                style="@android:style/Widget.DeviceDefault.ProgressBar.Horizontal"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:indeterminate="true"
+                android:visibility="gone"
+                android:layout_alignBottom="@id/car_ui_toolbar_tabs"
+                android:layout_alignParentEnd="true"
+                android:layout_alignParentStart="true" />
+
+        </RelativeLayout>
+
+    </RelativeLayout>
+
+</RelativeLayout>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/values/styles.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/values/styles.xml
new file mode 100644
index 0000000..6847242
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/values/styles.xml
@@ -0,0 +1,13 @@
+<resources>
+
+    <style name="TextAppearance.CarUi.Widget" parent="android:TextAppearance.DeviceDefault.Widget">
+        <item name="android:textAlignment">viewStart</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.Widget.Toolbar"/>
+
+    <style name="TextAppearance.CarUi.Widget.Toolbar.Title">
+        <item name="android:singleLine">true</item>
+        <item name="android:textSize">32sp</item>
+    </style>
+</resources>
diff --git a/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/values/values.xml b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/values/values.xml
new file mode 100644
index 0000000..2b51240
--- /dev/null
+++ b/car-ui-lib/referencedesign/overlay/frameworks/base/core/res/res/values/values.xml
@@ -0,0 +1,19 @@
+<resources>
+    <dimen name="car_ui_toolbar_logo_size">44dp</dimen>
+    <dimen name="car_ui_toolbar_nav_icon_size">44dp</dimen>
+
+    <dimen name="car_ui_scrollbar_margin">112dp</dimen>
+    <dimen name="car_ui_scrollbar_container_width">112dp</dimen>
+    <dimen name="car_ui_scrollbar_button_size">76dp</dimen>
+    <dimen name="car_ui_scrollbar_thumb_width">7dp</dimen>
+    <dimen name="car_ui_scrollbar_separator_margin">16dp</dimen>
+
+    <string name="car_ui_scrollbar_page_up_button">Scroll up</string>
+    <string name="car_ui_scrollbar_page_down_button">Scroll down</string>
+
+    <color name="car_ui_ripple_color">#27ffffff</color>
+    <color name="car_ui_scrollbar_thumb">#99ffffff</color>
+    <dimen name="car_ui_scrollbar_thumb_radius">100dp</dimen>
+
+    <color name="car_ui_toolbar_nav_icon_color">@color/car_ui_text_color_primary</color>
+</resources>
diff --git a/car-ui-lib/referencedesign/product.mk b/car-ui-lib/referencedesign/product.mk
new file mode 100644
index 0000000..f77e94d
--- /dev/null
+++ b/car-ui-lib/referencedesign/product.mk
@@ -0,0 +1,39 @@
+# Inherit from this product to include the "Reference Design" RROs for CarUi
+
+# Include built-time overlays
+PRODUCT_PACKAGE_OVERLAYS += \
+    packages/apps/Car/libs/car-ui-lib/referencedesign/overlay/
+PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS += \
+    packages/apps/Car/libs/car-ui-lib/referencedesign/overlay/
+
+# Include generated RROs
+PRODUCT_PACKAGES += \
+    googlecarui-com-android-car-ui-paintbooth \
+    googlecarui-com-android-car-rotaryplayground \
+    googlecarui-com-android-car-themeplayground \
+    googlecarui-com-android-car-carlauncher \
+    googlecarui-com-android-car-home \
+    googlecarui-com-android-car-media \
+    googlecarui-com-android-car-radio \
+    googlecarui-com-android-car-calendar \
+    googlecarui-com-android-car-companiondevicesupport \
+    googlecarui-com-android-car-systemupdater \
+    googlecarui-com-android-car-dialer \
+    googlecarui-com-android-car-linkviewer \
+    googlecarui-com-android-car-settings \
+    googlecarui-com-android-car-voicecontrol \
+    googlecarui-com-android-car-faceenroll \
+    googlecarui-com-android-permissioncontroller \
+    googlecarui-com-android-settings-intelligence \
+    googlecarui-com-google-android-apps-automotive-inputmethod \
+    googlecarui-com-google-android-apps-automotive-inputmethod-dev \
+    googlecarui-com-google-android-embedded-projection \
+    googlecarui-com-google-android-gms \
+    googlecarui-com-google-android-packageinstaller \
+    googlecarui-com-google-android-carassistant \
+    googlecarui-com-google-android-tts \
+    googlecarui-com-android-vending \
+
+# This system property is used to enable the RROs on startup via
+# the requiredSystemPropertyName/Value attributes in the manifest
+PRODUCT_PRODUCT_PROPERTIES += ro.build.car_ui_rros_enabled=true
diff --git a/car-ui-lib/referencedesign/res/values-ldrtl/values.xml b/car-ui-lib/referencedesign/res/values-ldrtl/values.xml
new file mode 100644
index 0000000..c83009d
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/values-ldrtl/values.xml
@@ -0,0 +1,30 @@
+<resources>
+    <item type="layout" name="car_ui_base_layout_toolbar">@*android:layout/car_ui_base_layout_toolbar</item>
+    <item type="layout" name="car_ui_toolbar">@*android:layout/car_ui_toolbar</item>
+    <item type="layout" name="car_ui_toolbar_two_row">@*android:layout/car_ui_toolbar_two_row</item>
+    <item type="bool" name="car_ui_toolbar_nav_icon_reserve_space">false</item>
+    <item type="bool" name="car_ui_toolbar_logo_fills_nav_icon_space">false</item>
+
+    <item type="id" name="car_ui_toolbar_background">@*android:id/car_ui_toolbar_background</item>
+    <item type="id" name="car_ui_toolbar_nav_icon_container">@*android:id/car_ui_toolbar_nav_icon_container</item>
+    <item type="id" name="car_ui_toolbar_nav_icon">@*android:id/car_ui_toolbar_nav_icon</item>
+    <item type="id" name="car_ui_toolbar_logo">@*android:id/car_ui_toolbar_logo</item>
+    <item type="id" name="car_ui_toolbar_title_logo">@*android:id/car_ui_toolbar_title_logo</item>
+    <item type="id" name="car_ui_toolbar_title_container">@*android:id/car_ui_toolbar_title_container</item>
+    <item type="id" name="car_ui_toolbar_menu_items_container">@*android:id/car_ui_toolbar_menu_items_container</item>
+    <item type="id" name="car_ui_toolbar_title">@*android:id/car_ui_toolbar_title</item>
+    <item type="id" name="car_ui_toolbar_subtitle">@*android:id/car_ui_toolbar_subtitle</item>
+    <item type="id" name="car_ui_toolbar_tabs">@*android:id/car_ui_toolbar_tabs</item>
+    <item type="id" name="car_ui_toolbar_search_view_container">@*android:id/car_ui_toolbar_search_view_container</item>
+    <item type="id" name="car_ui_toolbar_progress_bar">@*android:id/car_ui_toolbar_progress_bar</item>
+    <item type="id" name="car_ui_toolbar_title_logo_container">@*android:id/car_ui_toolbar_title_logo_container</item>
+    <item type="id" name="car_ui_base_layout_content_container">@*android:id/car_ui_base_layout_content_container</item>
+
+     <item type="layout" name="car_ui_recycler_view">@*android:layout/car_ui_recycler_view</item>
+     <item type="id" name="car_ui_recycler_view">@*android:id/car_ui_recycler_view</item>
+     <item type="id" name="car_ui_scroll_bar">@*android:id/car_ui_scroll_bar</item>
+     <item type="id" name="car_ui_scrollbar_page_up">@*android:id/car_ui_scrollbar_page_up</item>
+     <item type="id" name="car_ui_scrollbar_thumb">@*android:id/car_ui_scrollbar_thumb</item>
+     <item type="id" name="car_ui_scrollbar_track">@*android:id/car_ui_scrollbar_track</item>
+     <item type="id" name="car_ui_scrollbar_page_down">@*android:id/car_ui_scrollbar_page_down</item>
+</resources>
diff --git a/car-ui-lib/referencedesign/res/values-port/bools.xml b/car-ui-lib/referencedesign/res/values-port/bools.xml
new file mode 100644
index 0000000..ac4c389
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/values-port/bools.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2020 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.
+  -->
+
+<resources>
+    <!-- Toolbar -->
+
+    <!-- Whether tabs should use flex layout or not -->
+    <bool name="car_ui_toolbar_tab_flexible_layout">true</bool>
+    <!-- Whether tabs should be displayed on a second row, or they should be placed in the first
+         row, replacing the title -->
+    <bool name="car_ui_toolbar_tabs_on_second_row">true</bool>
+</resources>
diff --git a/car-ui-lib/referencedesign/res/values-port/values.xml b/car-ui-lib/referencedesign/res/values-port/values.xml
new file mode 100644
index 0000000..c069d81
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/values-port/values.xml
@@ -0,0 +1,18 @@
+<resources>
+     <item type="layout" name="car_ui_base_layout_toolbar">@*android:layout/car_ui_base_layout_toolbar</item>
+     <item type="id" name="car_ui_base_layout_content_container">@*android:id/car_ui_base_layout_content_container</item>
+     <item type="id" name="car_ui_toolbar_background">@*android:id/car_ui_toolbar_background</item>
+     <item type="id" name="car_ui_toolbar_row_separator_guideline">@*android:id/car_ui_toolbar_row_separator_guideline</item>
+     <item type="id" name="car_ui_toolbar_nav_icon_container">@*android:id/car_ui_toolbar_nav_icon_container</item>
+     <item type="id" name="car_ui_toolbar_nav_icon">@*android:id/car_ui_toolbar_nav_icon</item>
+     <item type="id" name="car_ui_toolbar_logo">@*android:id/car_ui_toolbar_logo</item>
+     <item type="id" name="car_ui_toolbar_title_logo_container">@*android:id/car_ui_toolbar_title_logo_container</item>
+     <item type="id" name="car_ui_toolbar_title_logo">@*android:id/car_ui_toolbar_title_logo</item>
+     <item type="id" name="car_ui_toolbar_title_container">@*android:id/car_ui_toolbar_title_container</item>
+     <item type="id" name="car_ui_toolbar_title">@*android:id/car_ui_toolbar_title</item>
+     <item type="id" name="car_ui_toolbar_subtitle">@*android:id/car_ui_toolbar_subtitle</item>
+     <item type="id" name="car_ui_toolbar_search_view_container">@*android:id/car_ui_toolbar_search_view_container</item>
+     <item type="id" name="car_ui_toolbar_menu_items_container">@*android:id/car_ui_toolbar_menu_items_container</item>
+     <item type="id" name="car_ui_toolbar_tabs">@*android:id/car_ui_toolbar_tabs</item>
+     <item type="id" name="car_ui_toolbar_progress_bar">@*android:id/car_ui_toolbar_progress_bar</item>
+</resources>
diff --git a/car-ui-lib/res-overlayable/values/overlayable.xml b/car-ui-lib/res-overlayable/values/overlayable.xml
new file mode 100644
index 0000000..821cc50
--- /dev/null
+++ b/car-ui-lib/res-overlayable/values/overlayable.xml
@@ -0,0 +1,465 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--Copyright (C) 2020 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.-->
+<!--THIS FILE IS AUTO GENERATED, DO NOT EDIT MANUALLY.-->
+<resources>
+  <overlayable name="car-ui-lib">
+    <policy type="public">
+      <item type="attr" name="CarUiToolbarStyle"/>
+      <item type="attr" name="barrierDirection"/>
+      <item type="attr" name="carUiPreferenceStyle"/>
+      <item type="attr" name="carUiRecyclerViewStyle"/>
+      <item type="attr" name="chainUseRtl"/>
+      <item type="attr" name="constraintSet"/>
+      <item type="attr" name="constraint_referenced_ids"/>
+      <item type="attr" name="layout_constraintBaseline_creator"/>
+      <item type="attr" name="layout_constraintBaseline_toBaselineOf"/>
+      <item type="attr" name="layout_constraintBottom_creator"/>
+      <item type="attr" name="layout_constraintBottom_toBottomOf"/>
+      <item type="attr" name="layout_constraintBottom_toTopOf"/>
+      <item type="attr" name="layout_constraintDimensionRatio"/>
+      <item type="attr" name="layout_constraintEnd_toEndOf"/>
+      <item type="attr" name="layout_constraintEnd_toStartOf"/>
+      <item type="attr" name="layout_constraintGuide_begin"/>
+      <item type="attr" name="layout_constraintGuide_end"/>
+      <item type="attr" name="layout_constraintGuide_percent"/>
+      <item type="attr" name="layout_constraintHeight_default"/>
+      <item type="attr" name="layout_constraintHeight_max"/>
+      <item type="attr" name="layout_constraintHeight_min"/>
+      <item type="attr" name="layout_constraintHeight_percent"/>
+      <item type="attr" name="layout_constraintHorizontal_bias"/>
+      <item type="attr" name="layout_constraintHorizontal_chainStyle"/>
+      <item type="attr" name="layout_constraintHorizontal_weight"/>
+      <item type="attr" name="layout_constraintLeft_creator"/>
+      <item type="attr" name="layout_constraintLeft_toLeftOf"/>
+      <item type="attr" name="layout_constraintLeft_toRightOf"/>
+      <item type="attr" name="layout_constraintRight_creator"/>
+      <item type="attr" name="layout_constraintRight_toLeftOf"/>
+      <item type="attr" name="layout_constraintRight_toRightOf"/>
+      <item type="attr" name="layout_constraintStart_toEndOf"/>
+      <item type="attr" name="layout_constraintStart_toStartOf"/>
+      <item type="attr" name="layout_constraintTop_creator"/>
+      <item type="attr" name="layout_constraintTop_toBottomOf"/>
+      <item type="attr" name="layout_constraintTop_toTopOf"/>
+      <item type="attr" name="layout_constraintVertical_bias"/>
+      <item type="attr" name="layout_constraintVertical_chainStyle"/>
+      <item type="attr" name="layout_constraintVertical_weight"/>
+      <item type="attr" name="layout_constraintWidth_default"/>
+      <item type="attr" name="layout_constraintWidth_max"/>
+      <item type="attr" name="layout_constraintWidth_min"/>
+      <item type="attr" name="layout_constraintWidth_percent"/>
+      <item type="attr" name="layout_editor_absoluteX"/>
+      <item type="attr" name="layout_editor_absoluteY"/>
+      <item type="attr" name="layout_goneMarginBottom"/>
+      <item type="attr" name="layout_goneMarginEnd"/>
+      <item type="attr" name="layout_goneMarginLeft"/>
+      <item type="attr" name="layout_goneMarginRight"/>
+      <item type="attr" name="layout_goneMarginStart"/>
+      <item type="attr" name="layout_goneMarginTop"/>
+      <item type="attr" name="layout_optimizationLevel"/>
+      <item type="attr" name="state_ux_restricted"/>
+      <item type="attr" name="title"/>
+      <item type="bool" name="car_ui_list_item_single_line_title"/>
+      <item type="bool" name="car_ui_preference_list_show_full_screen"/>
+      <item type="bool" name="car_ui_preference_show_chevron"/>
+      <item type="bool" name="car_ui_scrollbar_enable"/>
+      <item type="bool" name="car_ui_toolbar_logo_fills_nav_icon_space"/>
+      <item type="bool" name="car_ui_toolbar_nav_icon_reserve_space"/>
+      <item type="bool" name="car_ui_toolbar_show_logo"/>
+      <item type="bool" name="car_ui_toolbar_tab_flexible_layout"/>
+      <item type="bool" name="car_ui_toolbar_tabs_on_second_row"/>
+      <item type="color" name="car_ui_activity_background_color"/>
+      <item type="color" name="car_ui_color_accent"/>
+      <item type="color" name="car_ui_list_item_body_text_color"/>
+      <item type="color" name="car_ui_list_item_divider"/>
+      <item type="color" name="car_ui_list_item_header_text_color"/>
+      <item type="color" name="car_ui_list_item_title_text_color"/>
+      <item type="color" name="car_ui_preference_category_title_text_color"/>
+      <item type="color" name="car_ui_preference_edit_text_dialog_message_text_color"/>
+      <item type="color" name="car_ui_preference_icon_color"/>
+      <item type="color" name="car_ui_preference_summary_text_color"/>
+      <item type="color" name="car_ui_preference_switch_track_text_color"/>
+      <item type="color" name="car_ui_preference_title_text_color"/>
+      <item type="color" name="car_ui_recyclerview_divider_color"/>
+      <item type="color" name="car_ui_ripple_color"/>
+      <item type="color" name="car_ui_scrollbar_thumb"/>
+      <item type="color" name="car_ui_text_color_hint"/>
+      <item type="color" name="car_ui_text_color_primary"/>
+      <item type="color" name="car_ui_text_color_secondary"/>
+      <item type="color" name="car_ui_toolbar_menu_item_icon_background_color"/>
+      <item type="color" name="car_ui_toolbar_menu_item_icon_color"/>
+      <item type="color" name="car_ui_toolbar_nav_icon_color"/>
+      <item type="color" name="car_ui_toolbar_search_hint_text_color"/>
+      <item type="color" name="car_ui_toolbar_tab_item_selector"/>
+      <item type="color" name="car_ui_toolbar_tab_selected_color"/>
+      <item type="color" name="car_ui_toolbar_tab_unselected_color"/>
+      <item type="dimen" name="car_ui_body1_size"/>
+      <item type="dimen" name="car_ui_body2_size"/>
+      <item type="dimen" name="car_ui_body3_size"/>
+      <item type="dimen" name="car_ui_button_disabled_alpha"/>
+      <item type="dimen" name="car_ui_dialog_edittext_height"/>
+      <item type="dimen" name="car_ui_dialog_edittext_margin_bottom"/>
+      <item type="dimen" name="car_ui_dialog_edittext_margin_end"/>
+      <item type="dimen" name="car_ui_dialog_edittext_margin_start"/>
+      <item type="dimen" name="car_ui_dialog_edittext_margin_top"/>
+      <item type="dimen" name="car_ui_dialog_icon_size"/>
+      <item type="dimen" name="car_ui_dialog_title_margin"/>
+      <item type="dimen" name="car_ui_header_list_item_text_start_margin"/>
+      <item type="dimen" name="car_ui_letter_spacing_body1"/>
+      <item type="dimen" name="car_ui_letter_spacing_body3"/>
+      <item type="dimen" name="car_ui_list_item_action_divider_height"/>
+      <item type="dimen" name="car_ui_list_item_action_divider_width"/>
+      <item type="dimen" name="car_ui_list_item_avatar_icon_height"/>
+      <item type="dimen" name="car_ui_list_item_avatar_icon_width"/>
+      <item type="dimen" name="car_ui_list_item_body_text_size"/>
+      <item type="dimen" name="car_ui_list_item_check_box_end_inset"/>
+      <item type="dimen" name="car_ui_list_item_check_box_height"/>
+      <item type="dimen" name="car_ui_list_item_check_box_icon_container_width"/>
+      <item type="dimen" name="car_ui_list_item_check_box_start_inset"/>
+      <item type="dimen" name="car_ui_list_item_content_icon_height"/>
+      <item type="dimen" name="car_ui_list_item_content_icon_width"/>
+      <item type="dimen" name="car_ui_list_item_end_inset"/>
+      <item type="dimen" name="car_ui_list_item_header_height"/>
+      <item type="dimen" name="car_ui_list_item_header_start_inset"/>
+      <item type="dimen" name="car_ui_list_item_header_text_size"/>
+      <item type="dimen" name="car_ui_list_item_height"/>
+      <item type="dimen" name="car_ui_list_item_icon_container_width"/>
+      <item type="dimen" name="car_ui_list_item_icon_size"/>
+      <item type="dimen" name="car_ui_list_item_radio_button_end_inset"/>
+      <item type="dimen" name="car_ui_list_item_radio_button_height"/>
+      <item type="dimen" name="car_ui_list_item_radio_button_icon_container_width"/>
+      <item type="dimen" name="car_ui_list_item_radio_button_start_inset"/>
+      <item type="dimen" name="car_ui_list_item_start_inset"/>
+      <item type="dimen" name="car_ui_list_item_supplemental_icon_size"/>
+      <item type="dimen" name="car_ui_list_item_text_no_icon_start_margin"/>
+      <item type="dimen" name="car_ui_list_item_text_start_margin"/>
+      <item type="dimen" name="car_ui_list_item_title_text_size"/>
+      <item type="dimen" name="car_ui_margin"/>
+      <item type="dimen" name="car_ui_padding_0"/>
+      <item type="dimen" name="car_ui_padding_1"/>
+      <item type="dimen" name="car_ui_padding_2"/>
+      <item type="dimen" name="car_ui_padding_3"/>
+      <item type="dimen" name="car_ui_padding_4"/>
+      <item type="dimen" name="car_ui_padding_5"/>
+      <item type="dimen" name="car_ui_padding_6"/>
+      <item type="dimen" name="car_ui_preference_category_icon_margin_end"/>
+      <item type="dimen" name="car_ui_preference_category_icon_size"/>
+      <item type="dimen" name="car_ui_preference_category_min_height"/>
+      <item type="dimen" name="car_ui_preference_category_text_size"/>
+      <item type="dimen" name="car_ui_preference_content_margin_bottom"/>
+      <item type="dimen" name="car_ui_preference_content_margin_top"/>
+      <item type="dimen" name="car_ui_preference_dropdown_padding_start"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_margin_bottom"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_margin_top"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_message_margin_bottom"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_message_margin_end"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_message_margin_start"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_message_text_size"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_text_margin_end"/>
+      <item type="dimen" name="car_ui_preference_edit_text_dialog_text_margin_start"/>
+      <item type="dimen" name="car_ui_preference_icon_margin_end"/>
+      <item type="dimen" name="car_ui_preference_icon_size"/>
+      <item type="dimen" name="car_ui_preference_summary_text_size"/>
+      <item type="dimen" name="car_ui_preference_switch_height"/>
+      <item type="dimen" name="car_ui_preference_switch_text_size"/>
+      <item type="dimen" name="car_ui_preference_switch_width"/>
+      <item type="dimen" name="car_ui_preference_switch_width_half"/>
+      <item type="dimen" name="car_ui_preference_title_text_size"/>
+      <item type="dimen" name="car_ui_primary_icon_size"/>
+      <item type="dimen" name="car_ui_recyclerview_divider_bottom_margin"/>
+      <item type="dimen" name="car_ui_recyclerview_divider_end_margin"/>
+      <item type="dimen" name="car_ui_recyclerview_divider_height"/>
+      <item type="dimen" name="car_ui_recyclerview_divider_start_margin"/>
+      <item type="dimen" name="car_ui_recyclerview_divider_top_margin"/>
+      <item type="dimen" name="car_ui_scrollbar_button_size"/>
+      <item type="dimen" name="car_ui_scrollbar_container_width"/>
+      <item type="dimen" name="car_ui_scrollbar_decelerate_interpolator_factor"/>
+      <item type="dimen" name="car_ui_scrollbar_deceleration_times_divisor"/>
+      <item type="dimen" name="car_ui_scrollbar_margin"/>
+      <item type="dimen" name="car_ui_scrollbar_milliseconds_per_inch"/>
+      <item type="dimen" name="car_ui_scrollbar_min_thumb_height"/>
+      <item type="dimen" name="car_ui_scrollbar_padding_bottom"/>
+      <item type="dimen" name="car_ui_scrollbar_padding_top"/>
+      <item type="dimen" name="car_ui_scrollbar_separator_margin"/>
+      <item type="dimen" name="car_ui_scrollbar_thumb_radius"/>
+      <item type="dimen" name="car_ui_scrollbar_thumb_width"/>
+      <item type="dimen" name="car_ui_sub1_size"/>
+      <item type="dimen" name="car_ui_sub2_size"/>
+      <item type="dimen" name="car_ui_sub3_size"/>
+      <item type="dimen" name="car_ui_toolbar_bottom_inset"/>
+      <item type="dimen" name="car_ui_toolbar_bottom_view_height"/>
+      <item type="dimen" name="car_ui_toolbar_end_inset"/>
+      <item type="dimen" name="car_ui_toolbar_first_row_height"/>
+      <item type="dimen" name="car_ui_toolbar_logo_size"/>
+      <item type="dimen" name="car_ui_toolbar_margin"/>
+      <item type="dimen" name="car_ui_toolbar_menu_item_icon_background_size"/>
+      <item type="dimen" name="car_ui_toolbar_menu_item_icon_ripple_radius"/>
+      <item type="dimen" name="car_ui_toolbar_menu_item_icon_size"/>
+      <item type="dimen" name="car_ui_toolbar_menu_item_margin"/>
+      <item type="dimen" name="car_ui_toolbar_nav_icon_size"/>
+      <item type="dimen" name="car_ui_toolbar_row_height"/>
+      <item type="dimen" name="car_ui_toolbar_search_close_icon_container_width"/>
+      <item type="dimen" name="car_ui_toolbar_search_close_icon_size"/>
+      <item type="dimen" name="car_ui_toolbar_search_height"/>
+      <item type="dimen" name="car_ui_toolbar_search_search_icon_container_width"/>
+      <item type="dimen" name="car_ui_toolbar_search_search_icon_size"/>
+      <item type="dimen" name="car_ui_toolbar_second_row_height"/>
+      <item type="dimen" name="car_ui_toolbar_separator_height"/>
+      <item type="dimen" name="car_ui_toolbar_start_inset"/>
+      <item type="dimen" name="car_ui_toolbar_tab_icon_height"/>
+      <item type="dimen" name="car_ui_toolbar_tab_icon_width"/>
+      <item type="dimen" name="car_ui_toolbar_tab_padding_x"/>
+      <item type="dimen" name="car_ui_toolbar_tab_text_width"/>
+      <item type="dimen" name="car_ui_toolbar_title_logo_padding"/>
+      <item type="dimen" name="car_ui_toolbar_title_margin_start"/>
+      <item type="dimen" name="car_ui_toolbar_title_no_logo_margin_start"/>
+      <item type="dimen" name="car_ui_toolbar_top_inset"/>
+      <item type="dimen" name="car_ui_touch_target_height"/>
+      <item type="dimen" name="car_ui_touch_target_width"/>
+      <item type="dimen" name="wrap_content"/>
+      <item type="drawable" name="car_ui_activity_background"/>
+      <item type="drawable" name="car_ui_divider"/>
+      <item type="drawable" name="car_ui_icon_arrow_back"/>
+      <item type="drawable" name="car_ui_icon_close"/>
+      <item type="drawable" name="car_ui_icon_down"/>
+      <item type="drawable" name="car_ui_icon_lock"/>
+      <item type="drawable" name="car_ui_icon_overflow_menu"/>
+      <item type="drawable" name="car_ui_icon_search"/>
+      <item type="drawable" name="car_ui_icon_search_nav_icon"/>
+      <item type="drawable" name="car_ui_icon_settings"/>
+      <item type="drawable" name="car_ui_list_header_background"/>
+      <item type="drawable" name="car_ui_list_item_avatar_icon_outline"/>
+      <item type="drawable" name="car_ui_list_item_background"/>
+      <item type="drawable" name="car_ui_list_item_divider"/>
+      <item type="drawable" name="car_ui_list_limiting_message_background"/>
+      <item type="drawable" name="car_ui_preference_icon_chevron"/>
+      <item type="drawable" name="car_ui_preference_icon_chevron_disabled"/>
+      <item type="drawable" name="car_ui_preference_icon_chevron_enabled"/>
+      <item type="drawable" name="car_ui_recyclerview_button_ripple_background"/>
+      <item type="drawable" name="car_ui_recyclerview_divider"/>
+      <item type="drawable" name="car_ui_recyclerview_ic_down"/>
+      <item type="drawable" name="car_ui_recyclerview_ic_up"/>
+      <item type="drawable" name="car_ui_recyclerview_scrollbar_thumb"/>
+      <item type="drawable" name="car_ui_toolbar_background"/>
+      <item type="drawable" name="car_ui_toolbar_menu_item_divider"/>
+      <item type="drawable" name="car_ui_toolbar_menu_item_icon_background"/>
+      <item type="drawable" name="car_ui_toolbar_menu_item_icon_ripple"/>
+      <item type="drawable" name="car_ui_toolbar_search_close_icon"/>
+      <item type="drawable" name="car_ui_toolbar_search_search_icon"/>
+      <item type="id" name="action_container"/>
+      <item type="id" name="action_container_touch_interceptor"/>
+      <item type="id" name="action_divider"/>
+      <item type="id" name="avatar_icon"/>
+      <item type="id" name="body"/>
+      <item type="id" name="car_ui_alert_icon"/>
+      <item type="id" name="car_ui_alert_subtitle"/>
+      <item type="id" name="car_ui_alert_title"/>
+      <item type="id" name="car_ui_base_layout_content_container"/>
+      <item type="id" name="car_ui_check_box_end_guideline"/>
+      <item type="id" name="car_ui_check_box_start_guideline"/>
+      <item type="id" name="car_ui_list_item_end_guideline"/>
+      <item type="id" name="car_ui_list_item_start_guideline"/>
+      <item type="id" name="car_ui_list_limiting_message"/>
+      <item type="id" name="car_ui_preference_fragment_container"/>
+      <item type="id" name="car_ui_recycler_view"/>
+      <item type="id" name="car_ui_scroll_bar"/>
+      <item type="id" name="car_ui_scrollbar_page_down"/>
+      <item type="id" name="car_ui_scrollbar_page_up"/>
+      <item type="id" name="car_ui_scrollbar_thumb"/>
+      <item type="id" name="car_ui_scrollbar_track"/>
+      <item type="id" name="car_ui_toolbar"/>
+      <item type="id" name="car_ui_toolbar_background"/>
+      <item type="id" name="car_ui_toolbar_bottom_guideline"/>
+      <item type="id" name="car_ui_toolbar_bottom_styleable"/>
+      <item type="id" name="car_ui_toolbar_end_guideline"/>
+      <item type="id" name="car_ui_toolbar_logo"/>
+      <item type="id" name="car_ui_toolbar_menu_item_icon"/>
+      <item type="id" name="car_ui_toolbar_menu_item_icon_container"/>
+      <item type="id" name="car_ui_toolbar_menu_item_switch"/>
+      <item type="id" name="car_ui_toolbar_menu_item_text"/>
+      <item type="id" name="car_ui_toolbar_menu_item_text_with_icon"/>
+      <item type="id" name="car_ui_toolbar_menu_items_container"/>
+      <item type="id" name="car_ui_toolbar_nav_icon"/>
+      <item type="id" name="car_ui_toolbar_nav_icon_container"/>
+      <item type="id" name="car_ui_toolbar_progress_bar"/>
+      <item type="id" name="car_ui_toolbar_row_separator"/>
+      <item type="id" name="car_ui_toolbar_row_separator_guideline"/>
+      <item type="id" name="car_ui_toolbar_search_bar"/>
+      <item type="id" name="car_ui_toolbar_search_close"/>
+      <item type="id" name="car_ui_toolbar_search_icon"/>
+      <item type="id" name="car_ui_toolbar_search_view_container"/>
+      <item type="id" name="car_ui_toolbar_start_guideline"/>
+      <item type="id" name="car_ui_toolbar_subtitle"/>
+      <item type="id" name="car_ui_toolbar_tab_item_icon"/>
+      <item type="id" name="car_ui_toolbar_tab_item_text"/>
+      <item type="id" name="car_ui_toolbar_tabs"/>
+      <item type="id" name="car_ui_toolbar_title"/>
+      <item type="id" name="car_ui_toolbar_title_container"/>
+      <item type="id" name="car_ui_toolbar_title_logo"/>
+      <item type="id" name="car_ui_toolbar_title_logo_container"/>
+      <item type="id" name="car_ui_toolbar_top_guideline"/>
+      <item type="id" name="check_box_container"/>
+      <item type="id" name="checkbox"/>
+      <item type="id" name="checkbox_widget"/>
+      <item type="id" name="container"/>
+      <item type="id" name="content_icon"/>
+      <item type="id" name="icon"/>
+      <item type="id" name="icon_container"/>
+      <item type="id" name="list"/>
+      <item type="id" name="nested_recycler_view_layout"/>
+      <item type="id" name="radio_button_widget"/>
+      <item type="id" name="recycler_view"/>
+      <item type="id" name="reduced_touch_interceptor"/>
+      <item type="id" name="search"/>
+      <item type="id" name="seekbar"/>
+      <item type="id" name="seekbar_value"/>
+      <item type="id" name="spinner"/>
+      <item type="id" name="supplemental_icon"/>
+      <item type="id" name="switch_widget"/>
+      <item type="id" name="text"/>
+      <item type="id" name="textbox"/>
+      <item type="id" name="title"/>
+      <item type="id" name="title_template"/>
+      <item type="id" name="toolbar"/>
+      <item type="id" name="touch_interceptor"/>
+      <item type="integer" name="car_ui_default_max_string_length"/>
+      <item type="integer" name="car_ui_scrollbar_longpress_initial_delay"/>
+      <item type="integer" name="car_ui_scrollbar_longpress_repeat_interval"/>
+      <item type="layout" name="car_ui_alert_dialog_edit_text"/>
+      <item type="layout" name="car_ui_alert_dialog_list"/>
+      <item type="layout" name="car_ui_alert_dialog_title_with_subtitle"/>
+      <item type="layout" name="car_ui_base_layout"/>
+      <item type="layout" name="car_ui_base_layout_toolbar"/>
+      <item type="layout" name="car_ui_base_layout_toolbar_legacy"/>
+      <item type="layout" name="car_ui_check_box_list_item"/>
+      <item type="layout" name="car_ui_header_list_item"/>
+      <item type="layout" name="car_ui_list_item"/>
+      <item type="layout" name="car_ui_list_limiting_message"/>
+      <item type="layout" name="car_ui_list_preference"/>
+      <item type="layout" name="car_ui_preference"/>
+      <item type="layout" name="car_ui_preference_category"/>
+      <item type="layout" name="car_ui_preference_chevron"/>
+      <item type="layout" name="car_ui_preference_dialog_edittext"/>
+      <item type="layout" name="car_ui_preference_dropdown"/>
+      <item type="layout" name="car_ui_preference_fragment"/>
+      <item type="layout" name="car_ui_preference_fragment_with_toolbar"/>
+      <item type="layout" name="car_ui_preference_widget_checkbox"/>
+      <item type="layout" name="car_ui_preference_widget_seekbar"/>
+      <item type="layout" name="car_ui_preference_widget_switch"/>
+      <item type="layout" name="car_ui_recycler_view"/>
+      <item type="layout" name="car_ui_recycler_view_item"/>
+      <item type="layout" name="car_ui_recyclerview_scrollbar"/>
+      <item type="layout" name="car_ui_toolbar"/>
+      <item type="layout" name="car_ui_toolbar_menu_item"/>
+      <item type="layout" name="car_ui_toolbar_search_view"/>
+      <item type="layout" name="car_ui_toolbar_tab_item"/>
+      <item type="layout" name="car_ui_toolbar_tab_item_flexible"/>
+      <item type="layout" name="car_ui_toolbar_tab_item_layout"/>
+      <item type="layout" name="car_ui_toolbar_tab_item_layout_flexible"/>
+      <item type="layout" name="car_ui_toolbar_two_row"/>
+      <item type="string" name="car_ui_alert_dialog_default_button"/>
+      <item type="string" name="car_ui_dialog_preference_negative"/>
+      <item type="string" name="car_ui_dialog_preference_positive"/>
+      <item type="string" name="car_ui_ellipsis"/>
+      <item type="string" name="car_ui_list_item_header_font_family"/>
+      <item type="string" name="car_ui_preference_category_title_font_family"/>
+      <item type="string" name="car_ui_preference_switch_off"/>
+      <item type="string" name="car_ui_preference_switch_on"/>
+      <item type="string" name="car_ui_restricted_while_driving"/>
+      <item type="string" name="car_ui_scrollbar_component"/>
+      <item type="string" name="car_ui_scrollbar_page_down_button"/>
+      <item type="string" name="car_ui_scrollbar_page_up_button"/>
+      <item type="string" name="car_ui_scrolling_limited_message"/>
+      <item type="string" name="car_ui_toolbar_default_search_hint"/>
+      <item type="string" name="car_ui_toolbar_menu_item_overflow_title"/>
+      <item type="string" name="car_ui_toolbar_menu_item_search_title"/>
+      <item type="string" name="car_ui_toolbar_menu_item_settings_title"/>
+      <item type="string" name="car_ui_toolbar_nav_icon_content_description"/>
+      <item type="style" name="CarUiPreferenceTheme"/>
+      <item type="style" name="CarUiPreferenceTheme.WithToolbar"/>
+      <item type="style" name="Preference.CarUi"/>
+      <item type="style" name="Preference.CarUi.Category"/>
+      <item type="style" name="Preference.CarUi.CheckBoxPreference"/>
+      <item type="style" name="Preference.CarUi.DialogPreference"/>
+      <item type="style" name="Preference.CarUi.DialogPreference.EditTextPreference"/>
+      <item type="style" name="Preference.CarUi.DropDown"/>
+      <item type="style" name="Preference.CarUi.Icon"/>
+      <item type="style" name="Preference.CarUi.Information"/>
+      <item type="style" name="Preference.CarUi.Preference"/>
+      <item type="style" name="Preference.CarUi.PreferenceScreen"/>
+      <item type="style" name="Preference.CarUi.SeekBarPreference"/>
+      <item type="style" name="Preference.CarUi.SwitchPreference"/>
+      <item type="style" name="PreferenceFragment.CarUi"/>
+      <item type="style" name="PreferenceFragment.CarUi.WithToolbar"/>
+      <item type="style" name="PreferenceFragmentList.CarUi"/>
+      <item type="style" name="TextAppearance.CarUi"/>
+      <item type="style" name="TextAppearance.CarUi.AlertDialog.Subtitle"/>
+      <item type="style" name="TextAppearance.CarUi.AlertDialog.Title"/>
+      <item type="style" name="TextAppearance.CarUi.Body1"/>
+      <item type="style" name="TextAppearance.CarUi.Body2"/>
+      <item type="style" name="TextAppearance.CarUi.Body3"/>
+      <item type="style" name="TextAppearance.CarUi.ListItem"/>
+      <item type="style" name="TextAppearance.CarUi.ListItem.Body"/>
+      <item type="style" name="TextAppearance.CarUi.ListItem.Header"/>
+      <item type="style" name="TextAppearance.CarUi.PreferenceCategoryTitle"/>
+      <item type="style" name="TextAppearance.CarUi.PreferenceEditTextDialogMessage"/>
+      <item type="style" name="TextAppearance.CarUi.PreferenceSummary"/>
+      <item type="style" name="TextAppearance.CarUi.PreferenceTitle"/>
+      <item type="style" name="TextAppearance.CarUi.Sub1"/>
+      <item type="style" name="TextAppearance.CarUi.Sub2"/>
+      <item type="style" name="TextAppearance.CarUi.Sub3"/>
+      <item type="style" name="TextAppearance.CarUi.Widget"/>
+      <item type="style" name="TextAppearance.CarUi.Widget.Toolbar"/>
+      <item type="style" name="TextAppearance.CarUi.Widget.Toolbar.Tab"/>
+      <item type="style" name="TextAppearance.CarUi.Widget.Toolbar.Tab.Selected"/>
+      <item type="style" name="TextAppearance.CarUi.Widget.Toolbar.Title"/>
+      <item type="style" name="Theme.CarUi"/>
+      <item type="style" name="Theme.CarUi.NoToolbar"/>
+      <item type="style" name="Theme.CarUi.WithToolbar"/>
+      <item type="style" name="Widget.CarUi"/>
+      <item type="style" name="Widget.CarUi.AlertDialog"/>
+      <item type="style" name="Widget.CarUi.AlertDialog.HeaderContainer"/>
+      <item type="style" name="Widget.CarUi.AlertDialog.Icon"/>
+      <item type="style" name="Widget.CarUi.AlertDialog.TitleContainer"/>
+      <item type="style" name="Widget.CarUi.Button"/>
+      <item type="style" name="Widget.CarUi.Button.Borderless.Colored"/>
+      <item type="style" name="Widget.CarUi.CarUiRecyclerView"/>
+      <item type="style" name="Widget.CarUi.SeekbarPreference"/>
+      <item type="style" name="Widget.CarUi.SeekbarPreference.Seekbar"/>
+      <item type="style" name="Widget.CarUi.Toolbar"/>
+      <item type="style" name="Widget.CarUi.Toolbar.BottomView"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Container"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Logo"/>
+      <item type="style" name="Widget.CarUi.Toolbar.LogoContainer"/>
+      <item type="style" name="Widget.CarUi.Toolbar.MenuItem"/>
+      <item type="style" name="Widget.CarUi.Toolbar.MenuItem.Container"/>
+      <item type="style" name="Widget.CarUi.Toolbar.MenuItem.IndividualContainer"/>
+      <item type="style" name="Widget.CarUi.Toolbar.NavIcon"/>
+      <item type="style" name="Widget.CarUi.Toolbar.NavIconContainer"/>
+      <item type="style" name="Widget.CarUi.Toolbar.ProgressBar"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Search.CloseIcon"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Search.EditText"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Search.SearchIcon"/>
+      <item type="style" name="Widget.CarUi.Toolbar.SeparatorView"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Subtitle"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Tab"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Tab.Container"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Tab.Icon"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Tab.Text"/>
+      <item type="style" name="Widget.CarUi.Toolbar.TextButton"/>
+      <item type="style" name="Widget.CarUi.Toolbar.TextButton.WithIcon"/>
+      <item type="style" name="Widget.CarUi.Toolbar.Title"/>
+    </policy>
+  </overlayable>
+</resources>
diff --git a/car-ui-lib/res/drawable/car_ui_icon_lock.xml b/car-ui-lib/res/drawable/car_ui_icon_lock.xml
new file mode 100644
index 0000000..d74b14a
--- /dev/null
+++ b/car-ui-lib/res/drawable/car_ui_icon_lock.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2018 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.
+-->
+
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="44dp"
+    android:height="44dp"
+    android:viewportHeight="48.0"
+    android:viewportWidth="48.0">
+    <path
+        android:fillColor="@color/car_ui_text_color_primary"
+        android:pathData="M36,16h-2v-4c0,-5.52 -4.48,-10 -10,-10S14,6.48 14,12v4h-2c-2.21,0 -4,1.79 -4,4v20c0,2.21 1.79,4 4,4h24c2.21,0 4,-1.79 4,-4L40,20c0,-2.21 -1.79,-4 -4,-4zM24,34c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4 4,1.79 4,4 -1.79,4 -4,4zM30.2,16L17.8,16v-4c0,-3.42 2.78,-6.2 6.2,-6.2 3.42,0 6.2,2.78 6.2,6.2v4z"/>
+</vector>
diff --git a/car-ui-lib/res/drawable/car_ui_list_limiting_message_background.xml b/car-ui-lib/res/drawable/car_ui_list_limiting_message_background.xml
new file mode 100644
index 0000000..02a8065
--- /dev/null
+++ b/car-ui-lib/res/drawable/car_ui_list_limiting_message_background.xml
@@ -0,0 +1,20 @@
+<!--
+  ~ Copyright (C) 2020 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.
+  -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+    <solid android:color="#282A2D"/>
+    <corners android:radius="96dp"/>
+</shape>
diff --git a/car-ui-lib/res/layout-port/car_ui_base_layout_toolbar.xml b/car-ui-lib/res/layout-port/car_ui_base_layout_toolbar.xml
deleted file mode 100644
index 57d08ce..0000000
--- a/car-ui-lib/res/layout-port/car_ui_base_layout_toolbar.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2020 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.
-  -->
-<!-- This is for the two-row version of the toolbar -->
-<androidx.constraintlayout.widget.ConstraintLayout
-    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">
-
-    <!-- When the user finishes searching, we call clearFocus() on the editText in the search bar.
-     clearFocus() will actually send the focus to the first focusable thing in the layout.
-     If that focusable thing is still the search bar it will just reselect it, and the user won't
-     be able to deselect. So make a focusable view here to guarantee that we can clear the focus -->
-    <View
-        android:layout_width="1dp"
-        android:layout_height="1dp"
-        android:focusable="true"
-        android:focusableInTouchMode="true" />
-
-    <FrameLayout
-        android:id="@+id/content"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/car_ui_toolbar_background"
-        style="@style/Widget.CarUi.Toolbar.Container"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:tag="car_ui_top_inset"
-        app:layout_constraintTop_toTopOf="parent">
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_start_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_start_inset" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_top_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_top_inset" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_end_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintGuide_end="@dimen/car_ui_toolbar_end_inset" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_bottom_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            app:layout_constraintGuide_end="@dimen/car_ui_toolbar_bottom_inset" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_row_separator_guideline"
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            android:orientation="horizontal"
-            app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_first_row_height" />
-
-        <View
-            android:id="@+id/car_ui_toolbar_row_separator"
-            style="@style/Widget.CarUi.Toolbar.SeparatorView"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/car_ui_toolbar_separator_height"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/car_ui_toolbar_row_separator_guideline" />
-
-        <FrameLayout
-            android:id="@+id/car_ui_toolbar_nav_icon_container"
-            style="@style/Widget.CarUi.Toolbar.NavIconContainer"
-            android:layout_width="@dimen/car_ui_toolbar_margin"
-            android:layout_height="0dp"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-            app:layout_constraintStart_toStartOf="@id/car_ui_toolbar_start_guideline"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline">
-
-            <ImageView
-                android:id="@+id/car_ui_toolbar_nav_icon"
-                style="@style/Widget.CarUi.Toolbar.NavIcon"
-                android:layout_width="@dimen/car_ui_toolbar_nav_icon_size"
-                android:layout_height="@dimen/car_ui_toolbar_nav_icon_size"
-                android:layout_gravity="center"
-                android:scaleType="fitXY" />
-
-            <ImageView
-                android:id="@+id/car_ui_toolbar_logo"
-                android:layout_width="@dimen/car_ui_toolbar_logo_size"
-                android:layout_height="@dimen/car_ui_toolbar_logo_size"
-                android:layout_gravity="center"
-                android:scaleType="fitXY" />
-        </FrameLayout>
-
-        <FrameLayout
-            android:id="@+id/car_ui_toolbar_title_logo_container"
-            style="@style/Widget.CarUi.Toolbar.LogoContainer"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-            app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_nav_icon_container"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline">
-
-            <ImageView
-                android:id="@+id/car_ui_toolbar_title_logo"
-                style="@style/Widget.CarUi.Toolbar.Logo"
-                android:layout_width="@dimen/car_ui_toolbar_logo_size"
-                android:layout_height="@dimen/car_ui_toolbar_logo_size"
-                android:layout_gravity="center"
-                android:scaleType="fitXY" />
-        </FrameLayout>
-
-        <TextView
-            android:id="@+id/car_ui_toolbar_title"
-            style="@style/Widget.CarUi.Toolbar.Title"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-            app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_menu_items_container"
-            app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_title_logo_container"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline" />
-
-        <FrameLayout
-            android:id="@+id/car_ui_toolbar_search_view_container"
-            android:layout_width="0dp"
-            android:layout_height="@dimen/car_ui_toolbar_search_height"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-            app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container"
-            app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_nav_icon_container"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline" />
-
-        <LinearLayout
-            android:id="@+id/car_ui_toolbar_menu_items_container"
-            style="@style/Widget.CarUi.Toolbar.MenuItem.Container"
-            android:layout_width="wrap_content"
-            android:layout_height="0dp"
-            android:orientation="horizontal"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-            app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_end_guideline"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline" />
-
-        <com.android.car.ui.toolbar.TabLayout
-            android:id="@+id/car_ui_toolbar_tabs"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/car_ui_toolbar_second_row_height"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
-            app:layout_constraintTop_toBottomOf="@id/car_ui_toolbar_row_separator" />
-
-        <View
-            android:id="@+id/car_ui_toolbar_bottom_styleable"
-            style="@style/Widget.CarUi.Toolbar.BottomView"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/car_ui_toolbar_bottom_view_height"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent" />
-
-        <ProgressBar
-            android:id="@+id/car_ui_toolbar_progress_bar"
-            style="@style/Widget.CarUi.Toolbar.ProgressBar"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:indeterminate="true"
-            android:visibility="gone"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_styleable"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
-
diff --git a/car-ui-lib/res/layout/car_ui_alert_dialog_title_with_subtitle.xml b/car-ui-lib/res/layout/car_ui_alert_dialog_title_with_subtitle.xml
index 271280d..f8d73c3 100644
--- a/car-ui-lib/res/layout/car_ui_alert_dialog_title_with_subtitle.xml
+++ b/car-ui-lib/res/layout/car_ui_alert_dialog_title_with_subtitle.xml
@@ -23,7 +23,7 @@
     style="@style/Widget.CarUi.AlertDialog.HeaderContainer">
 
     <ImageView
-        android:id="@+id/icon"
+        android:id="@+id/car_ui_alert_icon"
         android:layout_width="@dimen/car_ui_dialog_icon_size"
         android:layout_height="@dimen/car_ui_dialog_icon_size"
         style="@style/Widget.CarUi.AlertDialog.Icon"/>
@@ -33,17 +33,15 @@
         android:layout_height="wrap_content"
         style="@style/Widget.CarUi.AlertDialog.TitleContainer">
         <TextView
-            android:id="@+id/alertTitle"
-            android:singleLine="true"
+            android:id="@+id/car_ui_alert_title"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:textAlignment="viewStart"
-            style="?android:attr/windowTitleStyle" />
+            android:textAppearance="@style/TextAppearance.CarUi.AlertDialog.Title" />
 
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:id="@+id/alertSubtitle"
+            android:id="@+id/car_ui_alert_subtitle"
             android:textAppearance="@style/TextAppearance.CarUi.AlertDialog.Subtitle"/>
     </LinearLayout>
 
diff --git a/car-ui-lib/res/layout/car_ui_base_layout.xml b/car-ui-lib/res/layout/car_ui_base_layout.xml
index 4cf7e8d..fdc8b53 100644
--- a/car-ui-lib/res/layout/car_ui_base_layout.xml
+++ b/car-ui-lib/res/layout/car_ui_base_layout.xml
@@ -16,7 +16,8 @@
   -->
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/car_ui_base_layout_content_container"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:id="@+id/content">
-</FrameLayout>
\ No newline at end of file
+    android:layout_height="match_parent">
+
+</FrameLayout>
diff --git a/car-ui-lib/res/layout/car_ui_base_layout_toolbar.xml b/car-ui-lib/res/layout/car_ui_base_layout_toolbar.xml
index 90b083a..374dc4b 100644
--- a/car-ui-lib/res/layout/car_ui_base_layout_toolbar.xml
+++ b/car-ui-lib/res/layout/car_ui_base_layout_toolbar.xml
@@ -31,7 +31,7 @@
         android:focusableInTouchMode="true" />
 
     <FrameLayout
-        android:id="@+id/content"
+        android:id="@+id/car_ui_base_layout_content_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         app:layout_constraintBottom_toBottomOf="parent"
@@ -44,34 +44,13 @@
         android:layout_height="@dimen/car_ui_toolbar_first_row_height"
         android:tag="car_ui_top_inset"
         app:layout_constraintTop_toTopOf="parent">
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_start_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_start_inset" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_top_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_top_inset" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_end_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintGuide_end="@dimen/car_ui_toolbar_end_inset" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/car_ui_toolbar_bottom_guideline"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            app:layout_constraintGuide_end="@dimen/car_ui_toolbar_bottom_inset" />
+        <com.android.car.ui.baselayout.ClickBlockingView
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"/>
 
         <!-- The horizontal bias set to 0.0 here is so that when you set this view as GONE, it will
              be treated as if it's all the way to the left instead of centered in the margin -->
@@ -80,10 +59,10 @@
             style="@style/Widget.CarUi.Toolbar.NavIconContainer"
             android:layout_width="@dimen/car_ui_toolbar_margin"
             android:layout_height="0dp"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintHorizontal_bias="0.0"
-            app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_start_guideline"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline">
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
 
             <ImageView
                 android:id="@+id/car_ui_toolbar_nav_icon"
@@ -106,9 +85,9 @@
             style="@style/Widget.CarUi.Toolbar.LogoContainer"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_nav_icon_container"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline">
+            app:layout_constraintTop_toTopOf="parent">
 
             <ImageView
                 android:id="@+id/car_ui_toolbar_title_logo"
@@ -119,26 +98,37 @@
                 android:scaleType="fitXY" />
         </FrameLayout>
 
-        <TextView
-            android:id="@+id/car_ui_toolbar_title"
-            style="@style/Widget.CarUi.Toolbar.Title"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
-            app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container"
-            app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_title_logo_container"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline" />
+        <LinearLayout android:layout_height="wrap_content"
+                      android:layout_width="0dp"
+                      android:id="@+id/car_ui_toolbar_title_container"
+                      android:orientation="vertical"
+                      android:layout_marginStart="@dimen/car_ui_toolbar_title_margin_start"
+                      app:layout_goneMarginStart="@dimen/car_ui_toolbar_title_no_logo_margin_start"
+                      app:layout_constraintBottom_toBottomOf="parent"
+                      app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container"
+                      app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_title_logo_container"
+                      app:layout_constraintTop_toTopOf="parent">
+            <TextView android:id="@+id/car_ui_toolbar_title"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:singleLine="true"
+                      style="@style/Widget.CarUi.Toolbar.Title"/>
+            <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:visibility="gone"
+                      style="@style/Widget.CarUi.Toolbar.Subtitle"/>
+        </LinearLayout>
 
         <com.android.car.ui.toolbar.TabLayout
             android:id="@+id/car_ui_toolbar_tabs"
             android:layout_width="wrap_content"
             android:layout_height="0dp"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container"
             app:layout_constraintHorizontal_bias="0.0"
             app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_title_logo_container"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline" />
+            app:layout_constraintTop_toTopOf="parent" />
 
         <LinearLayout
             android:id="@+id/car_ui_toolbar_menu_items_container"
@@ -146,27 +136,18 @@
             android:layout_width="wrap_content"
             android:layout_height="0dp"
             android:orientation="horizontal"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
-            app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_end_guideline"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline" />
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
         <FrameLayout
             android:id="@+id/car_ui_toolbar_search_view_container"
             android:layout_width="0dp"
             android:layout_height="@dimen/car_ui_toolbar_search_height"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container"
             app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_nav_icon_container"
-            app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline" />
-
-        <View
-            android:id="@+id/car_ui_toolbar_row_separator"
-            style="@style/Widget.CarUi.Toolbar.SeparatorView"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/car_ui_toolbar_separator_height"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent" />
+            app:layout_constraintTop_toTopOf="parent" />
 
         <ProgressBar
             android:id="@+id/car_ui_toolbar_progress_bar"
@@ -175,16 +156,7 @@
             android:layout_height="wrap_content"
             android:indeterminate="true"
             android:visibility="gone"
-            app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent" />
-
-        <View
-            android:id="@+id/car_ui_toolbar_bottom_styleable"
-            style="@style/Widget.CarUi.Toolbar.BottomView"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/car_ui_toolbar_bottom_view_height"
-            app:layout_constraintBottom_toTopOf="@+id/car_ui_toolbar_progress_bar"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent" />
 
diff --git a/car-ui-lib/res/layout/car_ui_base_layout_toolbar_legacy.xml b/car-ui-lib/res/layout/car_ui_base_layout_toolbar_legacy.xml
new file mode 100644
index 0000000..263cc8a
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_base_layout_toolbar_legacy.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 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.
+  -->
+<!-- This layout is used on Q or earlier, to support OEMs that shipped
+     on Q and only customized the non-baselayout version of the toolbar -->
+<androidx.constraintlayout.widget.ConstraintLayout
+    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">
+
+    <!-- When the user finishes searching, we call clearFocus() on the editText in the search bar.
+         clearFocus() will actually send the focus to the first focusable thing in the layout.
+         If that focusable thing is still the search bar it will just reselect it, and the user won't
+         be able to deselect. So make a focusable view here to guarantee that we can clear the focus -->
+    <View
+        android:layout_width="1dp"
+        android:layout_height="1dp"
+        android:focusable="true"
+        android:focusableInTouchMode="true"/>
+
+    <FrameLayout
+        android:id="@+id/car_ui_base_layout_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <com.android.car.ui.toolbar.Toolbar
+        android:id="@+id/car_ui_toolbar"
+        android:tag="car_ui_top_inset"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/res/layout/car_ui_header_list_item.xml b/car-ui-lib/res/layout/car_ui_header_list_item.xml
index 8f07636..e1196cf 100644
--- a/car-ui-lib/res/layout/car_ui_header_list_item.xml
+++ b/car-ui-lib/res/layout/car_ui_header_list_item.xml
@@ -33,7 +33,7 @@
         android:id="@+id/title"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/car_ui_list_item_text_no_icon_start_margin"
+        android:layout_marginStart="@dimen/car_ui_header_list_item_text_start_margin"
         android:textAppearance="@style/TextAppearance.CarUi.ListItem.Header"
         app:layout_constraintBottom_toTopOf="@+id/body"
         app:layout_constraintEnd_toEndOf="parent"
diff --git a/car-ui-lib/res/layout/car_ui_list_limiting_message.xml b/car-ui-lib/res/layout/car_ui_list_limiting_message.xml
new file mode 100644
index 0000000..0b06575
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_list_limiting_message.xml
@@ -0,0 +1,39 @@
+<!--
+  ~ Copyright (C) 2020 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.
+  -->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="144dp"
+    android:gravity="center"
+    android:paddingTop="16dp"
+    android:paddingBottom="32dp"
+>
+    <TextView
+        android:id="@+id/car_ui_list_limiting_message"
+        android:layout_width="wrap_content"
+        android:layout_height="96dp"
+        android:layout_gravity="center_horizontal"
+        android:gravity="center"
+        android:paddingStart="48dp"
+        android:paddingEnd="48dp"
+        android:drawableStart="@drawable/car_ui_icon_lock"
+        android:drawablePadding="24dp"
+        android:textColor="?android:attr/textColorPrimary"
+        android:textAllCaps="false"
+        android:singleLine="true"
+        android:background="@drawable/car_ui_list_limiting_message_background"
+    />
+</FrameLayout>
\ No newline at end of file
diff --git a/car-ui-lib/res/layout/car_ui_recycler_view.xml b/car-ui-lib/res/layout/car_ui_recycler_view.xml
index 29150d7..50600c1 100644
--- a/car-ui-lib/res/layout/car_ui_recycler_view.xml
+++ b/car-ui-lib/res/layout/car_ui_recycler_view.xml
@@ -16,12 +16,13 @@
   -->
 <merge xmlns:android="http://schemas.android.com/apk/res/android">
 
-  <include layout="@layout/car_ui_recyclerview_scrollbar"/>
+    <include layout="@layout/car_ui_recyclerview_scrollbar"/>
 
-  <FrameLayout
-      android:id="@+id/car_ui_recycler_view"
-      android:layout_width="0dp"
-      android:layout_height="match_parent"
-      android:layout_marginEnd="@dimen/car_ui_scrollbar_margin"
-      android:layout_weight="1"/>
+    <com.android.car.ui.recyclerview.CarUiRecyclerViewContainer
+        android:id="@+id/car_ui_recycler_view"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_marginEnd="@dimen/car_ui_scrollbar_margin"
+        android:tag="carUiRecyclerView"
+        android:layout_weight="1"/>
 </merge>
\ No newline at end of file
diff --git a/car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml b/car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml
index ceadfaf..1c7097a 100644
--- a/car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml
+++ b/car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml
@@ -15,16 +15,16 @@
   ~ limitations under the License.
   -->
 
-<LinearLayout
+<androidx.constraintlayout.widget.ConstraintLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="@dimen/car_ui_scrollbar_container_width"
     android:layout_height="match_parent"
     android:id="@+id/car_ui_scroll_bar"
     android:gravity="center">
 
-    <ImageButton
-        android:id="@+id/page_up"
+    <ImageView
+        android:id="@+id/car_ui_scrollbar_page_up"
         android:layout_width="@dimen/car_ui_scrollbar_button_size"
         android:layout_height="@dimen/car_ui_scrollbar_button_size"
         android:background="@drawable/car_ui_recyclerview_button_ripple_background"
@@ -32,18 +32,35 @@
         android:focusable="false"
         android:hapticFeedbackEnabled="false"
         android:src="@drawable/car_ui_recyclerview_ic_up"
-        android:scaleType="centerInside" />
+        android:scaleType="centerInside"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"/>
 
     <!-- View height is dynamically calculated during layout. -->
     <View
-        android:id="@+id/scrollbar_thumb"
+        android:id="@+id/car_ui_scrollbar_thumb"
         android:layout_width="@dimen/car_ui_scrollbar_thumb_width"
         android:layout_height="0dp"
         android:layout_gravity="center_horizontal"
-        android:background="@drawable/car_ui_recyclerview_scrollbar_thumb" />
+        android:background="@drawable/car_ui_recyclerview_scrollbar_thumb"
+        app:layout_constraintTop_toBottomOf="@+id/car_ui_scrollbar_page_up"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"/>
 
-    <ImageButton
-        android:id="@+id/page_down"
+    <View
+        android:id="@+id/car_ui_scrollbar_track"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginTop="@dimen/car_ui_scrollbar_separator_margin"
+        android:layout_marginBottom="@dimen/car_ui_scrollbar_separator_margin"
+        app:layout_constraintTop_toBottomOf="@+id/car_ui_scrollbar_page_up"
+        app:layout_constraintBottom_toTopOf="@+id/car_ui_scrollbar_page_down"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
+
+    <ImageView
+        android:id="@+id/car_ui_scrollbar_page_down"
         android:layout_width="@dimen/car_ui_scrollbar_button_size"
         android:layout_height="@dimen/car_ui_scrollbar_button_size"
         android:background="@drawable/car_ui_recyclerview_button_ripple_background"
@@ -51,5 +68,8 @@
         android:focusable="false"
         android:hapticFeedbackEnabled="false"
         android:src="@drawable/car_ui_recyclerview_ic_down"
-        android:scaleType="centerInside" />
-</LinearLayout>
+        android:scaleType="centerInside"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"/>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/res/layout/car_ui_toolbar.xml b/car-ui-lib/res/layout/car_ui_toolbar.xml
index f6ba021..b0716a7 100644
--- a/car-ui-lib/res/layout/car_ui_toolbar.xml
+++ b/car-ui-lib/res/layout/car_ui_toolbar.xml
@@ -104,16 +104,27 @@
             style="@style/Widget.CarUi.Toolbar.Logo"/>
     </FrameLayout>
 
-    <TextView
-        android:id="@+id/car_ui_toolbar_title"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:singleLine="true"
-        style="@style/Widget.CarUi.Toolbar.Title"
-        app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
-        app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
-        app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_title_logo_container"
-        app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container"/>
+    <LinearLayout android:layout_height="wrap_content"
+                  android:layout_width="0dp"
+                  android:id="@+id/car_ui_toolbar_title_container"
+                  android:orientation="vertical"
+                  android:layout_marginStart="@dimen/car_ui_toolbar_title_margin_start"
+                  app:layout_goneMarginStart="@dimen/car_ui_toolbar_title_no_logo_margin_start"
+                  app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
+                  app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_bottom_guideline"
+                  app:layout_constraintStart_toEndOf="@+id/car_ui_toolbar_title_logo_container"
+                  app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_menu_items_container">
+        <TextView android:id="@+id/car_ui_toolbar_title"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:singleLine="true"
+                  style="@style/Widget.CarUi.Toolbar.Title"/>
+        <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:visibility="gone"
+                  style="@style/Widget.CarUi.Toolbar.Subtitle"/>
+    </LinearLayout>
 
     <com.android.car.ui.toolbar.TabLayout
         android:id="@+id/car_ui_toolbar_tabs"
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml b/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml
index 428a2b6..ea93323 100644
--- a/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml
+++ b/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml
@@ -117,16 +117,27 @@
             style="@style/Widget.CarUi.Toolbar.Logo"/>
     </FrameLayout>
 
-    <TextView
-        android:id="@+id/car_ui_toolbar_title"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:singleLine="true"
-        style="@style/Widget.CarUi.Toolbar.Title"
-        app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
-        app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
-        app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_title_logo_container"
-        app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_menu_items_container"/>
+    <LinearLayout android:layout_height="wrap_content"
+                  android:layout_width="0dp"
+                  android:id="@+id/car_ui_toolbar_title_container"
+                  android:orientation="vertical"
+                  android:layout_marginStart="@dimen/car_ui_toolbar_title_margin_start"
+                  app:layout_goneMarginStart="@dimen/car_ui_toolbar_title_no_logo_margin_start"
+                  app:layout_constraintTop_toTopOf="@id/car_ui_toolbar_top_guideline"
+                  app:layout_constraintBottom_toTopOf="@id/car_ui_toolbar_row_separator"
+                  app:layout_constraintStart_toEndOf="@id/car_ui_toolbar_title_logo_container"
+                  app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_menu_items_container">
+        <TextView android:id="@+id/car_ui_toolbar_title"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:singleLine="true"
+                  style="@style/Widget.CarUi.Toolbar.Title"/>
+        <TextView android:id="@+id/car_ui_toolbar_subtitle"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:visibility="gone"
+                  style="@style/Widget.CarUi.Toolbar.Subtitle"/>
+    </LinearLayout>
 
     <FrameLayout
         android:id="@+id/car_ui_toolbar_search_view_container"
diff --git a/car-ui-lib/res/values-af/strings.xml b/car-ui-lib/res/values-af/strings.xml
new file mode 100644
index 0000000..8404aca
--- /dev/null
+++ b/car-ui-lib/res/values-af/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Soek …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Rollees af"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Rollees op"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Terug"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Soek"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Instellings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Oorloop"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Kanselleer"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Aan"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Af"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Maak toe"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Rollees word beperk terwyl jy bestuur"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Kenmerk is nie beskikbaar terwyl jy bestuur nie"</string>
+</resources>
diff --git a/car-ui-lib/res/values-am/strings.xml b/car-ui-lib/res/values-am/strings.xml
new file mode 100644
index 0000000..55c7fc8
--- /dev/null
+++ b/car-ui-lib/res/values-am/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ይፈልጉ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"ወደ ታች ይሸብልሉ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ወደ ላይ ይሸብልሉ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ተመለስ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"ፈልግ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ቅንብሮች"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ትርፍ ፍሰት"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"እሺ"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ይቅር"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"አብራ"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ቅናሽ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"ዝጋ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"እየነዱ ማሸብለል ተገድቧል"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"እየነዱ ሳለ ባህሪው አይገኝም"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ar/strings.xml b/car-ui-lib/res/values-ar/strings.xml
new file mode 100644
index 0000000..9bfe85f
--- /dev/null
+++ b/car-ui-lib/res/values-ar/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"بحث…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"التمرير للأسفل"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"التمرير للأعلى"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"رجوع"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"بحث"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"إعدادات"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"القائمة الكاملة"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"حسنًا"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"إلغاء"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"مفعّل"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"غير مفعَّل"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"إغلاق"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"هناك حد أقصى للتمرير على الشاشة أثناء القيادة."</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"لا تتوفَّر هذه الميزة أثناء القيادة."</string>
+</resources>
diff --git a/car-ui-lib/res/values-as/strings.xml b/car-ui-lib/res/values-as/strings.xml
new file mode 100644
index 0000000..2fa5db9
--- /dev/null
+++ b/car-ui-lib/res/values-as/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"সন্ধান কৰক…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"তললৈ স্ক্ৰ’ল কৰক"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ওপৰলৈ স্ক্ৰ’ল কৰক"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"উভতি যাওক"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ছেটিংসমূহ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"অভাৰফ্ল’"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ঠিক আছে"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"বাতিল কৰক"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"অন আছে"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"অফ আছে"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"বন্ধ কৰক"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"গাড়ী চলাই থকা সময়ত স্ক্ৰ’ল কৰাটো সীমিত কৰা হৈছে"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"গাড়ী চলাই থকা সময়ত এই সুবিধাটো উপলব্ধ নহয়"</string>
+</resources>
diff --git a/car-ui-lib/res/values-az/strings.xml b/car-ui-lib/res/values-az/strings.xml
new file mode 100644
index 0000000..63cb2bc
--- /dev/null
+++ b/car-ui-lib/res/values-az/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Axtarış…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Aşağı sürüşdürün"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Yuxarı sürüşdürün"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Geri"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Axtarış"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Ayarlar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Kənara çıxma"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ok"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Ləğv edin"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Aktiv"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Deaktiv"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Qapadın"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Sürüşdürmə avtomobil idarə edərkən məhdudlaşdırılır"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funksiya avtomobil idarə edərkən əlçatan deyil"</string>
+</resources>
diff --git a/car-ui-lib/res/values-b+sr+Latn/strings.xml b/car-ui-lib/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..104095f
--- /dev/null
+++ b/car-ui-lib/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Pretražite…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Pomerite nadole"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Pomerite nagore"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Nazad"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Pretraži"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Podešavanja"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Preklopni meni"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Potvrdi"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Otkaži"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Uključeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Isključeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Zatvori"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Pomeranje je ograničeno tokom vožnje"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkcija nije dostupna tokom vožnje"</string>
+</resources>
diff --git a/car-ui-lib/res/values-be/strings.xml b/car-ui-lib/res/values-be/strings.xml
new file mode 100644
index 0000000..643faa7
--- /dev/null
+++ b/car-ui-lib/res/values-be/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Пошук…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Прагартаць уніз"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Прагартаць уверх"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Пошук"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Налады"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Дадатковае меню"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ОК"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Скасаваць"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Уключана"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Выключана"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Закрыць"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Функцыя прагортвання абмежаваная, калі аўтамабіль рухаецца"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Функцыя недаступная, калі аўтамабіль рухаецца"</string>
+</resources>
diff --git a/car-ui-lib/res/values-bg/strings.xml b/car-ui-lib/res/values-bg/strings.xml
new file mode 100644
index 0000000..714b410
--- /dev/null
+++ b/car-ui-lib/res/values-bg/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Търсете…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Превъртане надолу"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Превъртане нагоре"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Търсене"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Настройки"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Препълване"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Отказ"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Вкл."</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Изкл."</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Затваряне"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Превъртането е ограничено при шофиране"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Функцията не е налице по време на шофиране"</string>
+</resources>
diff --git a/car-ui-lib/res/values-bn/strings.xml b/car-ui-lib/res/values-bn/strings.xml
new file mode 100644
index 0000000..333887b
--- /dev/null
+++ b/car-ui-lib/res/values-bn/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"সার্চ করুন…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"নিচের দিকে স্ক্রল করুন"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"উপরের দিকে স্ক্রল করুন"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ফিরুন"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"সেটিংস"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ওভারফ্লো মেনু"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"আচ্ছা"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"বাতিল করুন"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"চালু"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"বন্ধ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"বন্ধ করুন"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"গাড়ি চালানোর সময় স্ক্রলিং ফিচার সীমিতভাবে ব্যবহার করা যাবে"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"গাড়ি চালানোর সময় এই ফিচার কাজ করবে না"</string>
+</resources>
diff --git a/car-ui-lib/res/values-bs/strings.xml b/car-ui-lib/res/values-bs/strings.xml
new file mode 100644
index 0000000..c08deb5
--- /dev/null
+++ b/car-ui-lib/res/values-bs/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Pretražite…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Klizanje prema dolje"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Klizanje prema gore"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Nazad"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Pretraživanje"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Postavke"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Preklopni meni"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Uredu"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Otkaži"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Uključeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Isključeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Zatvori"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Klizanje je ograničeno tokom vožnje"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkcija nije dostupna tokom vožnje"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ca/strings.xml b/car-ui-lib/res/values-ca/strings.xml
new file mode 100644
index 0000000..db00c39
--- /dev/null
+++ b/car-ui-lib/res/values-ca/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Cerca…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Desplaça cap avall"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Desplaça cap amunt"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Enrere"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Cerca"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Configuració"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Menú addicional"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"D\'acord"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancel·la"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Activat"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desactivat"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Tanca"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"El desplaçament està limitat mentre condueixes"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Aquesta funció no està disponible mentre condueixes"</string>
+</resources>
diff --git a/car-ui-lib/res/values-cs/strings.xml b/car-ui-lib/res/values-cs/strings.xml
new file mode 100644
index 0000000..50e7191
--- /dev/null
+++ b/car-ui-lib/res/values-cs/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Vyhledat…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Posunout dolů"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Posunout nahoru"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Zpět"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Hledat"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Nastavení"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Rozbalovací nabídka"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Zrušit"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Zap"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Vyp"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Zavřít"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Posouvání zobrazení je při řízení omezeno"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkce při řízení není dostupná"</string>
+</resources>
diff --git a/car-ui-lib/res/values-da/strings.xml b/car-ui-lib/res/values-da/strings.xml
new file mode 100644
index 0000000..2b01661
--- /dev/null
+++ b/car-ui-lib/res/values-da/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Søg…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Rul ned"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Rul op"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Tilbage"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Søg"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Indstillinger"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overløb"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Luk"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Til"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Fra"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Luk"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Rullefunktionen er begrænset under kørsel"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funktionen er ikke tilgængelig, mens du kører"</string>
+</resources>
diff --git a/car-ui-lib/res/values-de/strings.xml b/car-ui-lib/res/values-de/strings.xml
new file mode 100644
index 0000000..14502c8
--- /dev/null
+++ b/car-ui-lib/res/values-de/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Suchen…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Nach unten scrollen"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Nach oben scrollen"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Zurück"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Suchen"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Einstellungen"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Dreipunkt-Menü"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Abbrechen"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"An"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Aus"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Schließen"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scrollen während der Fahrt eingeschränkt"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funktion während der Fahrt nicht verfügbar"</string>
+</resources>
diff --git a/car-ui-lib/res/values-el/strings.xml b/car-ui-lib/res/values-el/strings.xml
new file mode 100644
index 0000000..90f9e5c
--- /dev/null
+++ b/car-ui-lib/res/values-el/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Αναζήτηση…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Κύλιση προς τα κάτω"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Κύλιση προς τα επάνω"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Πίσω"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Αναζήτηση"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Ρυθμίσεις"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Υπερχείλιση"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Άκυρο"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Ενεργό"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Ανενεργή"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Κλείσιμο"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Η κύλιση είναι περιορισμένη κατά τη διάρκεια της οδήγησης."</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Η λειτουργία δεν διατίθεται κατά τη διάρκεια της οδήγησης."</string>
+</resources>
diff --git a/car-ui-lib/res/values-en-rAU/strings.xml b/car-ui-lib/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..14455e4
--- /dev/null
+++ b/car-ui-lib/res/values-en-rAU/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overflow"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancel"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/res/values-en-rCA/strings.xml b/car-ui-lib/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..14455e4
--- /dev/null
+++ b/car-ui-lib/res/values-en-rCA/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overflow"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancel"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/res/values-en-rGB/strings.xml b/car-ui-lib/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..14455e4
--- /dev/null
+++ b/car-ui-lib/res/values-en-rGB/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overflow"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancel"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/res/values-en-rIN/strings.xml b/car-ui-lib/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..14455e4
--- /dev/null
+++ b/car-ui-lib/res/values-en-rIN/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overflow"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancel"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/res/values-en-rXC/strings.xml b/car-ui-lib/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..cc754fd
--- /dev/null
+++ b/car-ui-lib/res/values-en-rXC/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎Search…‎‏‎‎‏‎"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎Scroll down‎‏‎‎‏‎"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎Scroll up‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‎Back‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎Search‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎Settings‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎Overflow‎‏‎‎‏‎"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎‎‎Ok‎‏‎‎‏‎"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎Cancel‎‏‎‎‏‎"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎On‎‏‎‎‏‎"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎Off‎‏‎‎‏‎"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‎Close‎‏‎‎‏‎"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎Scrolling limited while driving‎‏‎‎‏‎"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‎Feature not available while driving‎‏‎‎‏‎"</string>
+</resources>
diff --git a/car-ui-lib/res/values-es-rUS/strings.xml b/car-ui-lib/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..31c5bd1
--- /dev/null
+++ b/car-ui-lib/res/values-es-rUS/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Buscar…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Desplazamiento hacia abajo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Desplazamiento hacia arriba"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Atrás"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Buscar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Configuración"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Ampliado"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Aceptar"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancelar"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Sí"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"No"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Cerrar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"La función de desplazamiento se limita al conducir"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Esta función no está disponible mientras conduces"</string>
+</resources>
diff --git a/car-ui-lib/res/values-es/strings.xml b/car-ui-lib/res/values-es/strings.xml
new file mode 100644
index 0000000..145d73e
--- /dev/null
+++ b/car-ui-lib/res/values-es/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Realiza una búsqueda…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Desplazarse hacia abajo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Desplazarse hacia arriba"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Atrás"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Buscar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Ajustes"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Menú adicional"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Aceptar"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancelar"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Activado"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desactivado"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Cerrar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Desplazamiento limitado mientras conduces"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Función no disponible mientras conduces"</string>
+</resources>
diff --git a/car-ui-lib/res/values-et/strings.xml b/car-ui-lib/res/values-et/strings.xml
new file mode 100644
index 0000000..0d494d1
--- /dev/null
+++ b/car-ui-lib/res/values-et/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Otsing …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Keri alla"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Keri üles"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Tagasi"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Otsi"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Seaded"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Ületäide"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Tühista"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Sees"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Väljas"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Sule"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Kerimine on sõitmise ajal piiratud"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funktsioon pole sõidu ajal saadaval"</string>
+</resources>
diff --git a/car-ui-lib/res/values-eu/strings.xml b/car-ui-lib/res/values-eu/strings.xml
new file mode 100644
index 0000000..3935830
--- /dev/null
+++ b/car-ui-lib/res/values-eu/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Bilatu…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Egin behera"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Egin gora"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Atzera"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Bilaketa"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Ezarpenak"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Luzapena"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ados"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Utzi"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Aktibatuta"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desaktibatuta"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Itxi"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Gora edo behera egiteko eginbidea mugatuta dago gidatu bitartean"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Eginbide hau ezin da erabili gidatu bitartean"</string>
+</resources>
diff --git a/car-ui-lib/res/values-fa/strings.xml b/car-ui-lib/res/values-fa/strings.xml
new file mode 100644
index 0000000..9d8b9f6
--- /dev/null
+++ b/car-ui-lib/res/values-fa/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"جستجو…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"پیمایش به پایین"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"پیمایش به بالا"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"برگشت"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"جستجو"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"تنظیمات"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"لبریزشده"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"تأیید"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"لغو"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"روشن"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"خاموش"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"بستن"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"پیمایش درحین رانندگی محدود شده است"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"این ویژگی هنگام رانندگی در دسترس نیست"</string>
+</resources>
diff --git a/car-ui-lib/res/values-fi/strings.xml b/car-ui-lib/res/values-fi/strings.xml
new file mode 100644
index 0000000..78aa846
--- /dev/null
+++ b/car-ui-lib/res/values-fi/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Hae…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Vieritä alas"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Vieritä ylös"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Takaisin"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Haku"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Asetukset"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Ylivuoto"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Peruuta"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Päällä"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Pois"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Sulje"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Vierittämistä rajoitettu ajon aikana"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Ominaisuus ei ole käytettävissä ajon aikana"</string>
+</resources>
diff --git a/car-ui-lib/res/values-fr-rCA/strings.xml b/car-ui-lib/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..e5a7c6f
--- /dev/null
+++ b/car-ui-lib/res/values-fr-rCA/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Rechercher…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Faire défiler vers le bas"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Faire défiler vers le haut"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Retour"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Rechercher"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Paramètres"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Menu déroulant"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Annuler"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Activé"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Désactivé"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Fermer"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Le défilement de l\'écran est limité durant la conduite"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Cette fonctionnalité n\'est pas accessible durant la conduite"</string>
+</resources>
diff --git a/car-ui-lib/res/values-fr/strings.xml b/car-ui-lib/res/values-fr/strings.xml
new file mode 100644
index 0000000..cd58390
--- /dev/null
+++ b/car-ui-lib/res/values-fr/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Rechercher…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Défiler vers le bas"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Défiler vers le haut"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Retour"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Rechercher"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Paramètres"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Menu à développer"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Annuler"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Activé"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Désactivé"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Fermer"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Défilement limité lorsque vous conduisez"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Fonctionnalité non disponible lorsque vous conduisez"</string>
+</resources>
diff --git a/car-ui-lib/res/values-gl/strings.xml b/car-ui-lib/res/values-gl/strings.xml
new file mode 100644
index 0000000..7b7356c
--- /dev/null
+++ b/car-ui-lib/res/values-gl/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Busca…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Desprazarse cara abaixo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Desprazarse cara arriba"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Atrás"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Buscar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Configuración"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Elemento do menú adicional"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Aceptar"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancelar"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Si"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Non"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Pechar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"O desprazamento está limitado mentres conduces"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Esta función non está dispoñible mentres conduces"</string>
+</resources>
diff --git a/car-ui-lib/res/values-gu/strings.xml b/car-ui-lib/res/values-gu/strings.xml
new file mode 100644
index 0000000..081510c
--- /dev/null
+++ b/car-ui-lib/res/values-gu/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"શોધો…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"નીચે સ્ક્રોલ કરો"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ઉપર સ્ક્રોલ કરો"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"પાછળ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"સેટિંગ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ઓવરફ્લો"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ઓકે"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"રદ કરો"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ચાલુ"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"બંધ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"બંધ કરો"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ડ્રાઇવિંગ કરતી વખતે સ્ક્રોલ કરવું મર્યાદિત છે"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ડ્રાઇવિંગ કરતી વખતે આ સુવિધા ઉપલબ્ધ રહેશે નહીં"</string>
+</resources>
diff --git a/car-ui-lib/res/values-hi/strings.xml b/car-ui-lib/res/values-hi/strings.xml
new file mode 100644
index 0000000..4900774
--- /dev/null
+++ b/car-ui-lib/res/values-hi/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"खोजें…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"नीचे की ओर स्क्रोल करें"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ऊपर की ओर स्क्रोल करें"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"वापस जाएं"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"खोजें"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"सेटिंग"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ओवरफ़्लो मेन्यू"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ठीक है"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"अभी नहीं"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"चालू है"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"बंद है"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"बंद करें"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"गाड़ी चलाते समय इससे ज़्यादा स्क्रोल नहीं कर सकते"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"गाड़ी चलाते समय इस सुविधा का इस्तेमाल नहीं किया जा सकता"</string>
+</resources>
diff --git a/car-ui-lib/res/values-hr/strings.xml b/car-ui-lib/res/values-hr/strings.xml
new file mode 100644
index 0000000..2f64956
--- /dev/null
+++ b/car-ui-lib/res/values-hr/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Pretražite…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Pomak prema dolje"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Pomak prema gore"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Natrag"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Pretraži"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Postavke"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Dodatno"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"U redu"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Odustani"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Uključeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Isključeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Zatvori"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Pomicanje je ograničeno tijekom vožnje"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Značajka nije dostupna tijekom vožnje"</string>
+</resources>
diff --git a/car-ui-lib/res/values-hu/strings.xml b/car-ui-lib/res/values-hu/strings.xml
new file mode 100644
index 0000000..3f8233a
--- /dev/null
+++ b/car-ui-lib/res/values-hu/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Keresés…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Görgetés lefelé"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Görgetés felfelé"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Vissza"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Keresés"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Beállítások"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"További elemeket tartalmazó menü"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Mégse"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Be"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Ki"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Bezárás"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Vezetés közben a görgetés korlátozott"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Vezetés közben nem áll rendelkezésre a funkció"</string>
+</resources>
diff --git a/car-ui-lib/res/values-hy/strings.xml b/car-ui-lib/res/values-hy/strings.xml
new file mode 100644
index 0000000..ff952ea
--- /dev/null
+++ b/car-ui-lib/res/values-hy/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Որոնում…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Ոլորել վար"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Ոլորել վեր"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Հետ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Որոնել"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Կարգավորումներ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Լրացուցիչ ընտրացանկ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Եղավ"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Չեղարկել"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Միացված է"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Անջատված է"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Փակել"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Վարելու ընթացքում ոլորումը սահմանափակված է"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Վարելու ընթացքում գործառույթը հասանելի չէ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-in/strings.xml b/car-ui-lib/res/values-in/strings.xml
new file mode 100644
index 0000000..daf9e0f
--- /dev/null
+++ b/car-ui-lib/res/values-in/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Telusuri…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Scroll ke bawah"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Scroll ke atas"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Kembali"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Penelusuran"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Setelan"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Tambahan"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Oke"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Batal"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Aktif"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Nonaktif"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Tutup"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Men-scroll dibatasi saat mengemudi"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Fitur tidak tersedia saat mengemudi"</string>
+</resources>
diff --git a/car-ui-lib/res/values-is/strings.xml b/car-ui-lib/res/values-is/strings.xml
new file mode 100644
index 0000000..5cc3463
--- /dev/null
+++ b/car-ui-lib/res/values-is/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Leita…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Fletta niður"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Fletta upp"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Til baka"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Leit"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Stillingar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Yfirflæði"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Í lagi"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Hætta"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Kveikt"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Slökkt"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Loka"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Fletting er takmörkuð meðan á akstri stendur"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Þessi eiginleiki er ekki í boði meðan á akstri stendur"</string>
+</resources>
diff --git a/car-ui-lib/res/values-it/strings.xml b/car-ui-lib/res/values-it/strings.xml
new file mode 100644
index 0000000..2386303
--- /dev/null
+++ b/car-ui-lib/res/values-it/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Cerca…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Scorri verso il basso"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Scorri verso l\'alto"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Indietro"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Cerca"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Impostazioni"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Extra"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Annulla"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Chiudi"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scorrimento limitato durante la guida"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funzionalità non disponibile durante la guida"</string>
+</resources>
diff --git a/car-ui-lib/res/values-iw/strings.xml b/car-ui-lib/res/values-iw/strings.xml
new file mode 100644
index 0000000..543da53
--- /dev/null
+++ b/car-ui-lib/res/values-iw/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"חיפוש…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"גלילה למטה"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"גלילה למעלה"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"חזרה"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"חיפוש"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"הגדרות"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"אפשרויות נוספות"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"אישור"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ביטול"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"פועל"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"כבוי"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"סגירה"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"הגלילה מוגבלת בזמן הנהיגה"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"התכונה לא זמינה בזמן הנהיגה"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ja/strings.xml b/car-ui-lib/res/values-ja/strings.xml
new file mode 100644
index 0000000..7db4ad8
--- /dev/null
+++ b/car-ui-lib/res/values-ja/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"検索…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"下にスクロール"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"上にスクロール"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"戻る"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"検索"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"設定"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"オーバーフロー"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"キャンセル"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ON"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"OFF"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"閉じる"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"運転中のスクロール操作は制限されています"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"この機能は運転中は利用できません"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ka/strings.xml b/car-ui-lib/res/values-ka/strings.xml
new file mode 100644
index 0000000..2e6a0da
--- /dev/null
+++ b/car-ui-lib/res/values-ka/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ძიება…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"ქვემოთ გადაადგილება"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ზემოთ გადაადგილება"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"უკან"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"ძიება"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"პარამეტრები"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"გადავსება"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"კარგი"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"გაუქმება"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ჩართულია"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"გამორთულია"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"დახურვა"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"გადაადგილება შეზღუდულია მანქანის მართვისას"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ფუნქცია მიუწვდომელია მანქანის მართვისას"</string>
+</resources>
diff --git a/car-ui-lib/res/values-kk/strings.xml b/car-ui-lib/res/values-kk/strings.xml
new file mode 100644
index 0000000..3d32de3
--- /dev/null
+++ b/car-ui-lib/res/values-kk/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Іздеу…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Төмен айналдыру"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Жоғары айналдыру"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Артқа"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Іздеу"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Параметрлер"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Қосымша мәзір"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Жарайды"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Бас тарту"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Қосулы"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Өшірулі"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Жабу"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Көлік жүргізу кезінде айналдыру мүмкіндігі шектеледі."</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Көлік жүргізу кезінде бұл функция жұмыс істемейді."</string>
+</resources>
diff --git a/car-ui-lib/res/values-km/strings.xml b/car-ui-lib/res/values-km/strings.xml
new file mode 100644
index 0000000..65aa214
--- /dev/null
+++ b/car-ui-lib/res/values-km/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ស្វែងរក…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"រំកិលចុះក្រោម"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"រំកិល​​ឡើង​លើ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ថយក្រោយ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"ស្វែងរក"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ការកំណត់"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ម៉ឺនុយបន្ថែម"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"យល់ព្រម"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"បោះបង់"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"បើក"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"បិទ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"បិទ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ការរំកិលបានកំណត់ ខណៈពេលកំពុង​បើកបរ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"មិនអាច​ប្រើមុខងារ​នេះបានទេ ខណៈពេល​កំពុង​បើកបរ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-kn/strings.xml b/car-ui-lib/res/values-kn/strings.xml
new file mode 100644
index 0000000..a0e7a85
--- /dev/null
+++ b/car-ui-lib/res/values-kn/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ಹುಡುಕಿ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"ಕೆಳಗೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ಮೇಲೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ಹಿಂದಕ್ಕೆ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ಓವರ್‌ಫ್ಲೋ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ಸರಿ"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ರದ್ದುಮಾಡಿ"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ಆನ್ ಆಗಿದೆ"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"ಮುಚ್ಚಿ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ಸ್ಕ್ರಾಲ್ ಮಾಡುವಿಕೆ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸೀಮಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ಈ ವೈಶಿಷ್ಟ್ಯ ಲಭ್ಯವಿಲ್ಲ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ko/strings.xml b/car-ui-lib/res/values-ko/strings.xml
new file mode 100644
index 0000000..bf84fb9
--- /dev/null
+++ b/car-ui-lib/res/values-ko/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"검색…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"아래로 스크롤"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"위로 스크롤"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"뒤로"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"검색"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"설정"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"더보기"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"확인"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"취소"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"사용 설정됨"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"사용 중지됨"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"닫기"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"운전 중에는 스크롤이 제한됨"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"운전 중에 사용할 수 없는 기능입니다."</string>
+</resources>
diff --git a/car-ui-lib/res/values-ky/strings.xml b/car-ui-lib/res/values-ky/strings.xml
new file mode 100644
index 0000000..5d55581
--- /dev/null
+++ b/car-ui-lib/res/values-ky/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Издөө…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Төмөн сыдыруу"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Жогору сыдыруу"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Артка"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Издөө"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Жөндөөлөр"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Кошумча меню"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Жарайт"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Жок"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Күйүк"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Өчүк"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Жабуу"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Унаа айдаганда сыдыруу чектелет"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Унаа айдаганда бул функция жеткиликтүү эмес"</string>
+</resources>
diff --git a/car-ui-lib/res/values-lo/strings.xml b/car-ui-lib/res/values-lo/strings.xml
new file mode 100644
index 0000000..e17fae2
--- /dev/null
+++ b/car-ui-lib/res/values-lo/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ຊອກຫາ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"ເລື່ອນລົງ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ເລື່ອນຂຶ້ນ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ກັບຄືນ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"ຊອກຫາ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ການຕັ້ງຄ່າ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ລົ້ນ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ຕົກລົງ"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ຍົກເລີກ"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ເປີດ"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ປິດ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"ປິດ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ຈຳກັດການເລື່ອນໃນຂະນະທີ່ຂັບລົດ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ຄຸນສົມບັດບໍ່ສາມາດໃຊ້ໄດ້ໃນເວລາຂັບລົດ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-lt/strings.xml b/car-ui-lib/res/values-lt/strings.xml
new file mode 100644
index 0000000..2946f72
--- /dev/null
+++ b/car-ui-lib/res/values-lt/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Ieškoti…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Slinkti žemyn"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Slinkti aukštyn"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Atgal"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Paieška"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Nustatymai"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Perpildymas"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Gerai"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Atšaukti"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Įjungta"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Išjungta"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Uždaryti"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Slinkimas apribotas vairuojant"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkcija nepasiekiama vairuojant"</string>
+</resources>
diff --git a/car-ui-lib/res/values-lv/strings.xml b/car-ui-lib/res/values-lv/strings.xml
new file mode 100644
index 0000000..4f658c7
--- /dev/null
+++ b/car-ui-lib/res/values-lv/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Meklēt…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Ritināt uz leju"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Ritināt uz augšu"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Atpakaļ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Meklēšana"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Iestatījumi"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Pārpilde"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Labi"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Atcelt"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Ieslēgta"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Izslēgta"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Aizvērt"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Ritināšana ir ierobežota braukšanas laikā."</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkcija nav pieejama braukšanas laikā."</string>
+</resources>
diff --git a/car-ui-lib/res/values-mk/strings.xml b/car-ui-lib/res/values-mk/strings.xml
new file mode 100644
index 0000000..1470f8d
--- /dev/null
+++ b/car-ui-lib/res/values-mk/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Пребарувајте…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Оди надолу"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Оди нагоре"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Пребарување"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Поставки"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Прелевање"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Во ред"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Откажи"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Вклучено"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Исклучено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Затвори"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Лизгањето е ограничено при возење"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Функцијата не е достапна при возење"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ml/strings.xml b/car-ui-lib/res/values-ml/strings.xml
new file mode 100644
index 0000000..e324e7c
--- /dev/null
+++ b/car-ui-lib/res/values-ml/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"തിരയുക…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"താഴോട്ട് സ്‌ക്രോൾ ചെയ്യുക"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"മുകളിലോട്ട് സ്‌ക്രോൾ ചെയ്യുക"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"മടങ്ങുക"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ക്രമീകരണം"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ഓവർഫ്ലോ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ശരി"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"റദ്ദാക്കുക"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ഓണാണ്"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ഓഫാണ്"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"അടയ്‌ക്കുക"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ഡ്രൈവ് ചെയ്യുമ്പോൾ സ്ക്രോൾ ചെയ്യൽ പരിമിതപ്പെടുത്തിയിരിക്കുന്നു"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ഡ്രൈവ് ചെയ്യുമ്പോൾ ഫീച്ചർ ലഭ്യമല്ല"</string>
+</resources>
diff --git a/car-ui-lib/res/values-mn/strings.xml b/car-ui-lib/res/values-mn/strings.xml
new file mode 100644
index 0000000..7c62426
--- /dev/null
+++ b/car-ui-lib/res/values-mn/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Хайх..."</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Доош гүйлгэх"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Дээш гүйлгэх"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Буцах"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Хайлт"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Тохиргоо"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Халих"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ок"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Болих"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Асаалттай"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Унтраалттай"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Хаах"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Жолоо барьж байх үед гүйлгэхийг хязгаарласан"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Жолоо барьж байх үед онцлог боломжгүй"</string>
+</resources>
diff --git a/car-ui-lib/res/values-mr/strings.xml b/car-ui-lib/res/values-mr/strings.xml
new file mode 100644
index 0000000..339a363
--- /dev/null
+++ b/car-ui-lib/res/values-mr/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"शोधा…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"खाली स्क्रोल करा"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"वर स्क्रोल करा"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"मागे जा"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"सेटिंग्ज"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ओव्हरफ्लो"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ओके"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"रद्द करा"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"सुरू आहे"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"बंद आहे"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"बंद करा"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ड्राइव्ह करताना स्क्रोलिंग मर्यादित केली आहे"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ड्राइव्ह करताना वैशिष्ट्य उपलब्ध नाही"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ms/strings.xml b/car-ui-lib/res/values-ms/strings.xml
new file mode 100644
index 0000000..d31613e
--- /dev/null
+++ b/car-ui-lib/res/values-ms/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Cari…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Tatal ke bawah"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Tatal ke atas"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Kembali"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Cari"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Tetapan"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Limpahan"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ok"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Batal"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Hidup"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Mati"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Tutup"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Penatalan terhad semasa memandu"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Ciri tidak tersedia semasa anda memandu"</string>
+</resources>
diff --git a/car-ui-lib/res/values-my/strings.xml b/car-ui-lib/res/values-my/strings.xml
new file mode 100644
index 0000000..adada08
--- /dev/null
+++ b/car-ui-lib/res/values-my/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ရှာဖွေရန်…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"အောက်သို့ လှိမ့်ရန်"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"အပေါ်သို့ လှိမ့်ရန်"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"နောက်သို့"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"ရှာဖွေခြင်း"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ဆက်တင်များ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"အပို"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"မလုပ်တော့"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ဖွင့်ထားသည်"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ပိတ်ထားသည်"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"ပိတ်ရန်"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ယာဉ်မောင်းနေစဉ် အပေါ်အောက်ရွှေ့ခြင်းကို ကန့်သတ်ထားသည်"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ကားမောင်းနေစဉ် ဝန်ဆောင်မှု မရနိုင်ပါ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-nb/strings.xml b/car-ui-lib/res/values-nb/strings.xml
new file mode 100644
index 0000000..21160c8
--- /dev/null
+++ b/car-ui-lib/res/values-nb/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Søk"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Rull ned"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Rull opp"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Tilbake"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Søk"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Innstillinger"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overflyt"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Avbryt"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"På"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Av"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Lukk"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Rullefunksjonen er begrenset mens du kjører"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funksjonen er ikke tilgjengelig når du kjører"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ne/strings.xml b/car-ui-lib/res/values-ne/strings.xml
new file mode 100644
index 0000000..f33ac72
--- /dev/null
+++ b/car-ui-lib/res/values-ne/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"खोज्नुहोस्…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"तलतिर स्क्रोल गर्नुहोस्"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"माथितिर स्क्रोल गर्नु…"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"पछाडि"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"खोज्नुहोस्"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"सेटिङ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ओभरफ्लो"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ठिक छ"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"रद्द गर्नुहोस्"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"सुचारू छ"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"बन्द छ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"बन्द गर्नुहोस्"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"सवारी साधन चलाइरहेका बेला योभन्दा बढी स्क्रोल गर्न पाइँदैन"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"सवारी साधन चलाइरहेका बेला यो सुविधा उपलब्ध हुँदैन"</string>
+</resources>
diff --git a/car-ui-lib/res/values-nl/strings.xml b/car-ui-lib/res/values-nl/strings.xml
new file mode 100644
index 0000000..da110d5
--- /dev/null
+++ b/car-ui-lib/res/values-nl/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Zoeken…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Omlaag scrollen"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Omhoog scrollen"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Terug"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Zoeken"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Instellingen"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overloop"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Annuleren"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Aan"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Uit"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Sluiten"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scrollen is beperkt tijdens het rijden"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Functie niet beschikbaar tijdens het rijden"</string>
+</resources>
diff --git a/car-ui-lib/res/values-or/strings.xml b/car-ui-lib/res/values-or/strings.xml
new file mode 100644
index 0000000..2533631
--- /dev/null
+++ b/car-ui-lib/res/values-or/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ସନ୍ଧାନ କରନ୍ତୁ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"ତଳକୁ ସ୍କ୍ରୋଲ୍ କରନ୍ତୁ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ଉପରକୁ ସ୍କ୍ରୋଲ୍ କରନ୍ତୁ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ସେଟିଂସ୍"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ଓଭରଫ୍ଲୋ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ଠିକ୍ ଅଛି"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ଚାଲୁ ଅଛି"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ବନ୍ଦ ଅଛି"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"ବନ୍ଦ କରନ୍ତୁ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ଗାଡ଼ି ଚଲାଇବା ସମୟରେ ସ୍କ୍ରୋଲିଂ ସୀମିତ ଅଟେ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ଗାଡ଼ି ଚଲାଇବା ସମୟରେ ଫିଚର୍ ଉପଲବ୍ଧ ହେବ ନାହିଁ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-pa/strings.xml b/car-ui-lib/res/values-pa/strings.xml
new file mode 100644
index 0000000..9910e95
--- /dev/null
+++ b/car-ui-lib/res/values-pa/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ਖੋਜ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"ਹੇਠਾਂ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ਉੱਪਰ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ਪਿੱਛੇ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"ਖੋਜ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ਸੈਟਿੰਗਾਂ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ਓਵਰਫ਼ਲੋ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ਠੀਕ ਹੈ"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ਰੱਦ ਕਰੋ"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ਚਾਲੂ"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ਬੰਦ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"ਬੰਦ ਕਰੋ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ਚਲਦੀ ਗੱਡੀ ਵਿੱਚ ਸਕ੍ਰੋਲ ਕਰਨ ਨੂੰ ਸੀਮਤ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ਚੱਲਦੀ ਗੱਡੀ ਵਿੱਚ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-pl/strings.xml b/car-ui-lib/res/values-pl/strings.xml
new file mode 100644
index 0000000..8feefdb
--- /dev/null
+++ b/car-ui-lib/res/values-pl/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Szukaj…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Przewiń w dół"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Przewiń w górę"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Wstecz"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Szukaj"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Ustawienia"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Rozszerzone menu"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Anuluj"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Wł."</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Wył."</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Zamknij"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Podczas jazdy można przewijać tylko w ograniczonym zakresie"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkcja niedostępna podczas jazdy"</string>
+</resources>
diff --git a/car-ui-lib/res/values-port/bools.xml b/car-ui-lib/res/values-port/bools.xml
index 16f3724..ed7d502 100644
--- a/car-ui-lib/res/values-port/bools.xml
+++ b/car-ui-lib/res/values-port/bools.xml
@@ -17,10 +17,9 @@
 
 <resources>
     <!-- Toolbar -->
-
+    <!-- Normally no resources should live in any other resource folder than default configuration. -->
+    <!-- Because OEMs will have to always add them to their RROs. -->
+    <!-- But we can't remove this resource from -port folder, because it was used as part of an earlier release -->
     <!-- Whether tabs should use flex layout or not -->
     <bool name="car_ui_toolbar_tab_flexible_layout">true</bool>
-    <!-- Whether tabs should be displayed on a second row, or they should be placed in the first
-         row, replacing the title -->
-    <bool name="car_ui_toolbar_tabs_on_second_row">true</bool>
-</resources>
+</resources>
\ No newline at end of file
diff --git a/car-ui-lib/res/values-pt-rPT/strings.xml b/car-ui-lib/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..e2c6caa
--- /dev/null
+++ b/car-ui-lib/res/values-pt-rPT/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Pesquisar…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Deslocar para baixo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Deslocar para cima"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Anterior"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Pesquisar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Definições"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Menu adicional"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancelar"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Ativado"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desativado"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Fechar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Deslocamento limitado durante a condução"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funcionalidade não disponível durante a condução."</string>
+</resources>
diff --git a/car-ui-lib/res/values-pt/strings.xml b/car-ui-lib/res/values-pt/strings.xml
new file mode 100644
index 0000000..6b47812
--- /dev/null
+++ b/car-ui-lib/res/values-pt/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Pesquisar…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Rolar para baixo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Rolar para cima"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Voltar"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Pesquisa"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Configurações"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Menu flutuante"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ok"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Cancelar"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Ativada"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desativada"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Fechar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"O recurso de rolagem fica limitado enquanto você dirige"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Recurso indisponível enquanto você dirige"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ro/strings.xml b/car-ui-lib/res/values-ro/strings.xml
new file mode 100644
index 0000000..8d8e771
--- /dev/null
+++ b/car-ui-lib/res/values-ro/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Căutați…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Derulați în jos"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Derulați în sus"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Înapoi"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Căutați"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Setări"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Suplimentar"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Anulați"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Activat"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Dezactivat"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Închideți"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Derularea este restricționată în timp ce conduceți"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funcția nu este disponibilă când conduceți"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ru/strings.xml b/car-ui-lib/res/values-ru/strings.xml
new file mode 100644
index 0000000..9db229e
--- /dev/null
+++ b/car-ui-lib/res/values-ru/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Поиск…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Прокрутить вниз"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Прокрутить вверх"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Поиск"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Настройки"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Дополнительное меню"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ОК"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Отмена"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Включено"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Выключено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Закрыть"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Функция прокручивания ограничена во время вождения."</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Функция недоступна во время вождения."</string>
+</resources>
diff --git a/car-ui-lib/res/values-si/strings.xml b/car-ui-lib/res/values-si/strings.xml
new file mode 100644
index 0000000..0f18f5e
--- /dev/null
+++ b/car-ui-lib/res/values-si/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"සොයන්න…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"පහළට අනුචලනය කරන්න"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"ඉහළට අනුචලනය කරන්න"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"ආපසු"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"සෙවීම"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"සැකසීම්"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ඉතිරියනය"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"හරි"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"අවලංගු කරන්න"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ක්‍රියාත්මකයි"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ක්‍රියාවිරහිතයි"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"වසන්න"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"රිය පදවන අතරතුර සීමිත අනුචලනය"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"රිය පදවන අතරේ විශේෂාංගය නොමැත"</string>
+</resources>
diff --git a/car-ui-lib/res/values-sk/strings.xml b/car-ui-lib/res/values-sk/strings.xml
new file mode 100644
index 0000000..34891ea
--- /dev/null
+++ b/car-ui-lib/res/values-sk/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Vyhľadať…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Posunúť nadol"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Posunúť nahor"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Späť"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Hľadať"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Nastavenia"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Rozšírená ponuka"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ok"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Zrušiť"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Zap."</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Vyp."</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Zavrieť"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Posúvanie zobrazenia je počas jazdy obmedzené"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkcia nie je k dispozícii počas jazdy"</string>
+</resources>
diff --git a/car-ui-lib/res/values-sl/strings.xml b/car-ui-lib/res/values-sl/strings.xml
new file mode 100644
index 0000000..330494d
--- /dev/null
+++ b/car-ui-lib/res/values-sl/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Iskanje …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Pomik navzdol"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Pomik navzgor"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Nazaj"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Išči"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Nastavitve"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Element menija z dodatnimi elementi"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"V redu"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Prekliči"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Vklopljeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Izklopljeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Zapri"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Pomikanje je med vožnjo omejeno"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funkcija med vožnjo ni na voljo"</string>
+</resources>
diff --git a/car-ui-lib/res/values-sq/strings.xml b/car-ui-lib/res/values-sq/strings.xml
new file mode 100644
index 0000000..e7cae6b
--- /dev/null
+++ b/car-ui-lib/res/values-sq/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Kërko…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Lëviz poshtë"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Lëviz lart"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Pas"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Kërko"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Cilësimet"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Tejkalo"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Në rregull"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Anulo"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Aktiv"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Joaktiv"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Mbyll"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Lëvizja është e kufizuar gjatë drejtimit të makinës"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Veçoria nuk ofrohet gjatë drejtimit të makinës"</string>
+</resources>
diff --git a/car-ui-lib/res/values-sr/strings.xml b/car-ui-lib/res/values-sr/strings.xml
new file mode 100644
index 0000000..0b63d3f
--- /dev/null
+++ b/car-ui-lib/res/values-sr/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Претражите…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Померите надоле"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Померите нагоре"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Претражи"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Подешавања"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Преклопни мени"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Потврди"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Откажи"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Укључено"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Искључено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Затвори"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Померање је ограничено током вожње"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Функција није доступна током вожње"</string>
+</resources>
diff --git a/car-ui-lib/res/values-sv/strings.xml b/car-ui-lib/res/values-sv/strings.xml
new file mode 100644
index 0000000..375ac74
--- /dev/null
+++ b/car-ui-lib/res/values-sv/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Sök …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Scrolla nedåt"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Scrolla uppåt"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Tillbaka"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Sök"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Inställningar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Fler menyalternativ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Avbryt"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"På"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Av"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Stäng"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Scrollning begränsas när du kör"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Funktionen är inte tillgänglig när du kör"</string>
+</resources>
diff --git a/car-ui-lib/res/values-sw/strings.xml b/car-ui-lib/res/values-sw/strings.xml
new file mode 100644
index 0000000..a2b549f
--- /dev/null
+++ b/car-ui-lib/res/values-sw/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Tafuta…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Sogeza chini"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Sogeza juu"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Nyuma"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Tafuta"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Mipangilio"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Vipengee vya ziada"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Sawa"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Ghairi"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Imewashwa"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Imezimwa"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Funga"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Umedhibitiwa kusogeza unapoendesha gari"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Kipengele hakipatikani unapoendesha gari"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ta/strings.xml b/car-ui-lib/res/values-ta/strings.xml
new file mode 100644
index 0000000..4ca575a
--- /dev/null
+++ b/car-ui-lib/res/values-ta/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"தேடுக…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"கீழே செல்லும்"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"மேலே செல்லும்"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"பின்செல்வதற்கான பட்டன்"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"அமைப்புகள்"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"ஓவர்ஃப்லோ"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"சரி"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ரத்துசெய்"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ஆன்"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ஆஃப்"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"மூடுக"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"வாகனம் ஓட்டிக் கொண்டிருப்பதனால் இதற்குமேல் ஸ்க்ரோல் செய்ய முடியாது"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"வாகனம் ஓட்டும்போது இந்த அம்சத்தைப் பயன்படுத்த இயலாது"</string>
+</resources>
diff --git a/car-ui-lib/res/values-te/strings.xml b/car-ui-lib/res/values-te/strings.xml
new file mode 100644
index 0000000..39e4c3e
--- /dev/null
+++ b/car-ui-lib/res/values-te/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"వెతకండి…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"కిందికి స్క్రోల్ చేయండి"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"పైకి స్క్రోల్ చేయండి"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"వెనుకకు"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"సెట్టింగ్‌లు"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"అతివ్యాప్తి అంశాలు"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"సరే"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"రద్దు చేయండి"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"ఆన్‌లో ఉంది"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ఆఫ్‌లో ఉంది"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"మూసివేయండి"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"డ్రైవింగ్ చేస్తున్నప్పుడు స్క్రోలింగ్ పరిమితంగా ఉంటుంది"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"డ్రైవింగ్ చేస్తున్నప్పుడు ఈ ఫీచర్ అందుబాటులో ఉండదు"</string>
+</resources>
diff --git a/car-ui-lib/res/values-th/strings.xml b/car-ui-lib/res/values-th/strings.xml
new file mode 100644
index 0000000..fa43930
--- /dev/null
+++ b/car-ui-lib/res/values-th/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"ค้นหา…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"เลื่อนลง"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"เลื่อนขึ้น"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"กลับ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"ค้นหา"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"การตั้งค่า"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"รายการเพิ่มเติม"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ตกลง"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"ยกเลิก"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"เปิด"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ปิด"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"ปิด"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"การเลื่อนถูกจำกัดไม่ให้ใช้งานขณะขับรถ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ฟีเจอร์ไม่พร้อมใช้งานขณะขับรถ"</string>
+</resources>
diff --git a/car-ui-lib/res/values-tl/strings.xml b/car-ui-lib/res/values-tl/strings.xml
new file mode 100644
index 0000000..7a95e0e
--- /dev/null
+++ b/car-ui-lib/res/values-tl/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Maghanap…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Mag-scroll pababa"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Mag-scroll pataas"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Bumalik"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Paghahanap"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Mga Setting"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Overflow"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ok"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Kanselahin"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"I-on"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"I-off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Isara"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Limitado ang pag-scroll habang nagmamaneho"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Hindi available ang feature habang nagmamaneho"</string>
+</resources>
diff --git a/car-ui-lib/res/values-tr/strings.xml b/car-ui-lib/res/values-tr/strings.xml
new file mode 100644
index 0000000..3a56e11
--- /dev/null
+++ b/car-ui-lib/res/values-tr/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Ara…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Aşağı kaydır"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Yukarı kaydır"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Geri"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Ara"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Ayarlar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Taşma"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Tamam"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"İptal"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Açık"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Kapalı"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Kapat"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Sürüş sırasında ekran kaydırma işlevi sınırlandırılmıştır"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Sürüş sırasında bu özellik kullanılamaz"</string>
+</resources>
diff --git a/car-ui-lib/res/values-uk/strings.xml b/car-ui-lib/res/values-uk/strings.xml
new file mode 100644
index 0000000..4188f47
--- /dev/null
+++ b/car-ui-lib/res/values-uk/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Пошук…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Прокрутити вниз"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Прокрутити вгору"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Пошук"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Налаштування"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Додаткове меню"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Скасувати"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Увімкнено"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Вимкнено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Закрити"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Прокручування обмежено під час водіння"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Функція недоступна під час руху автомобіля"</string>
+</resources>
diff --git a/car-ui-lib/res/values-ur/strings.xml b/car-ui-lib/res/values-ur/strings.xml
new file mode 100644
index 0000000..feecf75
--- /dev/null
+++ b/car-ui-lib/res/values-ur/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"تلاش کریں…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"نیچے اسکرول کریں"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"اوپر اسکرول کریں"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"پیچھے"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"تلاش کریں"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"ترتیبات"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"اوورفلو"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"ٹھیک ہے"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"منسوخ کریں"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"آن ہے"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"آف ہے"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"بند کریں"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"ڈرائیونگ کے دوران اسکرولنگ محدود ہے"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"ڈرائیونگ کے دوران یہ خصوصیت دستیاب نہیں ہے"</string>
+</resources>
diff --git a/car-ui-lib/res/values-uz/strings.xml b/car-ui-lib/res/values-uz/strings.xml
new file mode 100644
index 0000000..2cda4e9
--- /dev/null
+++ b/car-ui-lib/res/values-uz/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Qidirish…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Pastga surish"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Tepaga surish"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Orqaga"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Qidiruv"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Sozlamalar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Kengaytirilgan"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"OK"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Bekor qilish"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Yoniq"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Yoqilmagan"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Yopish"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Avtomobilda harakatlanayotganda aylantirish funksiyasi cheklangan"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Avtomobilda harakatlanayotganda bu funksiya ishlamaydi"</string>
+</resources>
diff --git a/car-ui-lib/res/values-vi/strings.xml b/car-ui-lib/res/values-vi/strings.xml
new file mode 100644
index 0000000..2950aac
--- /dev/null
+++ b/car-ui-lib/res/values-vi/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Tìm kiếm…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Cuộn xuống"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Cuộn lên"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Quay lại"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Tìm kiếm"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Cài đặt"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Trình đơn mục bổ sung"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Ok"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Hủy"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Đang bật"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Đang tắt"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Đóng"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Tính năng cuộn bị hạn chế khi đang lái xe"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Bạn không sử dụng được tính năng này khi đang lái xe"</string>
+</resources>
diff --git a/car-ui-lib/res/values-w1280dp/dimens.xml b/car-ui-lib/res/values-w1280dp/dimens.xml
deleted file mode 100644
index a06df2b..0000000
--- a/car-ui-lib/res/values-w1280dp/dimens.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019 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.
--->
-<resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <!-- Keylines -->
-    <dimen name="car_ui_keyline_1">32dp</dimen>
-    <dimen name="car_ui_keyline_2">108dp</dimen>
-    <dimen name="car_ui_keyline_3">128dp</dimen>
-    <dimen name="car_ui_keyline_4">168dp</dimen>
-</resources>
diff --git a/car-ui-lib/res/values-zh-rCN/strings.xml b/car-ui-lib/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..883d637
--- /dev/null
+++ b/car-ui-lib/res/values-zh-rCN/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"搜索…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"向下滚动"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"向上滚动"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"返回"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"搜索"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"设置"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"溢出菜单"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"确定"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"取消"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"开启"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"关闭"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"关闭"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"驾车时滚动操作受限"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"驾车时无法使用此功能"</string>
+</resources>
diff --git a/car-ui-lib/res/values-zh-rHK/strings.xml b/car-ui-lib/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..f215fa5
--- /dev/null
+++ b/car-ui-lib/res/values-zh-rHK/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"搜尋…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"向下捲動"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"向上捲動"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"返回"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"搜尋"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"設定"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"展開式選單"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"確定"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"取消"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"已開啟"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"已關閉"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"關閉"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"捲動功能在駕駛時受限制"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"無法在駕駛時使用此功能"</string>
+</resources>
diff --git a/car-ui-lib/res/values-zh-rTW/strings.xml b/car-ui-lib/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..20fb010
--- /dev/null
+++ b/car-ui-lib/res/values-zh-rTW/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"搜尋…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"向下捲動"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"向上捲動"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"返回"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"搜尋"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"設定"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"溢位"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"確定"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"取消"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"開啟"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"關閉"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"關閉"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"系統會限制開車時的捲動操作"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"開車時無法使用這項功能"</string>
+</resources>
diff --git a/car-ui-lib/res/values-zu/strings.xml b/car-ui-lib/res/values-zu/strings.xml
new file mode 100644
index 0000000..15aefff
--- /dev/null
+++ b/car-ui-lib/res/values-zu/strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2019 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="car_ui_toolbar_default_search_hint" msgid="7807151740020494659">"Sesha…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="2419547312871553905">"Skrolela phansi"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="4152120100101092092">"Skrolela phezulu"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="2689756063478650269">"Emuva"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="8705757227447034030">"Sesha"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="6694060516340354337">"Izilungiselelo"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="771643815366812499">"Ukuphuphuma"</string>
+    <string name="car_ui_dialog_preference_positive" msgid="1918267574135176336">"Kulungile"</string>
+    <string name="car_ui_dialog_preference_negative" msgid="4156315694902086271">"Khansela"</string>
+    <string name="car_ui_preference_switch_on" msgid="5512335363135043642">"Vuliwe"</string>
+    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Valiwe"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="1775326289021319685">"Vala"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="1036509082539078267">"Ukuskrola kukhawulelwe uma ushayela"</string>
+    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Isici asitholakali ngenkathi ushayela"</string>
+</resources>
diff --git a/car-ui-lib/res/values/attrs.xml b/car-ui-lib/res/values/attrs.xml
index 8f7b3e0..5698d25 100644
--- a/car-ui-lib/res/values/attrs.xml
+++ b/car-ui-lib/res/values/attrs.xml
@@ -104,12 +104,14 @@
     <attr name="CarUiToolbarStyle" format="reference"/>
 
     <declare-styleable name="CarUiRecyclerView">
-        <!-- Whether to enable the car_ui_recyclerview_divider for linear layout or not. -->
+        <!-- Whether to enable the dividers or not. Linear and grid layout uses
+        car_ui_recyclerview_divider.xml and car_ui_divider.xml drawables
+        respectively for styling dividers. -->
         <attr name="enableDivider" format="boolean" />
         <!-- Top offset for car ui recycler view. -->
-        <attr name="startOffset" format="integer" />
+        <attr name="topOffset" format="integer" />
         <!-- Bottom offset for car ui recycler view for linear layout. -->
-        <attr name="endOffset" format="integer" />
+        <attr name="bottomOffset" format="integer" />
 
         <!-- Number of columns in a grid layout. -->
         <attr name="numOfColumns" format="integer" />
@@ -126,6 +128,8 @@
     <declare-styleable name="CarUiPreference">
         <!-- Toggle for showing chevron -->
         <attr name="showChevron" format="boolean" />
+        <!-- Show ripple when disabled preference is clicked -->
+        <attr name="showRippleOnDisabledPreference" format="boolean" />
     </declare-styleable>
 
     <!-- Theme attribute to specify a default style for all CarUiPreferences -->
diff --git a/car-ui-lib/res/values/dimens.xml b/car-ui-lib/res/values/dimens.xml
index 3a77194..95a15ff 100644
--- a/car-ui-lib/res/values/dimens.xml
+++ b/car-ui-lib/res/values/dimens.xml
@@ -39,12 +39,9 @@
     <dimen name="car_ui_body1_size">32sp</dimen>
     <dimen name="car_ui_body2_size">28sp</dimen>
     <dimen name="car_ui_body3_size">24sp</dimen>
-
-    <!-- Keylines -->
-    <dimen name="car_ui_keyline_1">24dp</dimen>
-    <dimen name="car_ui_keyline_2">96dp</dimen>
-    <dimen name="car_ui_keyline_3">112dp</dimen>
-    <dimen name="car_ui_keyline_4">148dp</dimen>
+    <dimen name="car_ui_sub1_size">22sp</dimen>
+    <dimen name="car_ui_sub2_size">20sp</dimen>
+    <dimen name="car_ui_sub3_size">18sp</dimen>
 
     <!-- Tabs -->
 
@@ -86,6 +83,8 @@
     <dimen name="car_ui_toolbar_title_logo_padding">0dp</dimen>
     <!-- Margin at the start of the title -->
     <dimen name="car_ui_toolbar_title_margin_start">@dimen/car_ui_padding_2</dimen>
+    <!-- Margin at the start of the title when there is no logo present -->
+    <dimen name="car_ui_toolbar_title_no_logo_margin_start">0dp</dimen>
     <!-- Space at the end and in between menu items -->
     <dimen name="car_ui_toolbar_menu_item_margin">@dimen/car_ui_padding_2</dimen>
     <!-- Ripple effect radius for icon menu items -->
@@ -128,6 +127,7 @@
     <dimen name="car_ui_scrollbar_container_width">@dimen/car_ui_margin</dimen>
     <dimen name="car_ui_scrollbar_button_size">@dimen/car_ui_touch_target_width</dimen>
     <dimen name="car_ui_scrollbar_thumb_width">7dp</dimen>
+    <dimen name="car_ui_scrollbar_min_thumb_height">56dp</dimen>
     <dimen name="car_ui_scrollbar_separator_margin">16dp</dimen>
     <dimen name="car_ui_scrollbar_margin">@dimen/car_ui_margin</dimen>
     <dimen name="car_ui_scrollbar_thumb_radius">100dp</dimen>
@@ -137,8 +137,8 @@
     <item name="car_ui_scrollbar_deceleration_times_divisor" format="float" type="dimen">0.45</item>
     <item name="car_ui_scrollbar_decelerate_interpolator_factor" format="float" type="dimen">1.8</item>
 
-    <dimen name="car_ui_scrollbar_padding_start">0dp</dimen>
-    <dimen name="car_ui_scrollbar_padding_end">0dp</dimen>
+    <dimen name="car_ui_scrollbar_padding_top">0dp</dimen>
+    <dimen name="car_ui_scrollbar_padding_bottom">0dp</dimen>
 
     <!-- Preferences -->
 
@@ -179,7 +179,7 @@
     <dimen name="car_ui_dialog_edittext_margin_start">22dp</dimen>
     <dimen name="car_ui_dialog_edittext_margin_end">22dp</dimen>
     <dimen name="car_ui_dialog_icon_size">56dp</dimen>
-    <dimen name="car_ui_dialog_title_margin">@dimen/car_ui_keyline_1</dimen>
+    <dimen name="car_ui_dialog_title_margin">24dp</dimen>
 
     <!-- List item  -->
 
@@ -191,6 +191,7 @@
     <dimen name="car_ui_list_item_header_start_inset">0dp</dimen>
     <dimen name="car_ui_list_item_start_inset">0dp</dimen>
     <dimen name="car_ui_list_item_end_inset">0dp</dimen>
+    <dimen name="car_ui_header_list_item_text_start_margin">0dp</dimen>
     <dimen name="car_ui_list_item_text_start_margin">24dp</dimen>
     <dimen name="car_ui_list_item_text_no_icon_start_margin">24dp</dimen>
 
diff --git a/car-ui-lib/res/values/integers.xml b/car-ui-lib/res/values/integers.xml
index 623ef00..1ffe098 100644
--- a/car-ui-lib/res/values/integers.xml
+++ b/car-ui-lib/res/values/integers.xml
@@ -17,4 +17,6 @@
 <resources>
     <!-- Default max string length -->
     <integer name="car_ui_default_max_string_length">120</integer>
-</resources>
\ No newline at end of file
+    <integer name="car_ui_scrollbar_longpress_initial_delay">1000</integer>
+    <integer name="car_ui_scrollbar_longpress_repeat_interval">100</integer>
+</resources>
diff --git a/car-ui-lib/res/values/strings.xml b/car-ui-lib/res/values/strings.xml
index a42068f..627c542 100644
--- a/car-ui-lib/res/values/strings.xml
+++ b/car-ui-lib/res/values/strings.xml
@@ -29,6 +29,8 @@
     <string name="car_ui_scrollbar_page_down_button">Scroll down</string>
     <!-- Content description for car ui recycler view scroll bar up arrow [CHAR LIMIT=30] -->
     <string name="car_ui_scrollbar_page_up_button">Scroll up</string>
+    <!-- The content description on the toolbar back button -->
+    <string name="car_ui_toolbar_nav_icon_content_description">Back</string>
     <!-- Title of the search menu item. Will be displayed if the button is in the overflow menu. [CHAR_LIMIT=50] -->
     <string name="car_ui_toolbar_menu_item_search_title">Search</string>
     <!-- Title of the settings menu item. Will be displayed if the button is in the overflow menu. [CHAR_LIMIT=50] -->
@@ -51,7 +53,10 @@
     <string name="car_ui_list_item_header_font_family" translatable="false">sans-serif-medium</string>
 
     <!-- Text to show when no button is provided and a default button is used. -->
-    <string name="car_ui_alert_dialog_default_button" translatable="false">Close</string>
+    <string name="car_ui_alert_dialog_default_button">Close</string>
+
+    <!-- Shown at the bottom of a content limited list when user has scrolled past the limit while driving -->
+    <string name="car_ui_scrolling_limited_message">Scrolling limited while driving</string>
 
     <!-- Shown in a toast when the user attempts to do something distracting while driving [CHAR_LIMIT=200] -->
     <string name="car_ui_restricted_while_driving">Feature not available while driving</string>
diff --git a/car-ui-lib/res/values/styles.xml b/car-ui-lib/res/values/styles.xml
index 9cbf41e..77dd80c 100644
--- a/car-ui-lib/res/values/styles.xml
+++ b/car-ui-lib/res/values/styles.xml
@@ -49,14 +49,19 @@
     </style>
 
     <style name="Widget.CarUi.Toolbar.Title">
-        <item name="android:layout_marginStart">@dimen/car_ui_toolbar_title_margin_start</item>
         <item name="android:textAppearance">@style/TextAppearance.CarUi.Widget.Toolbar.Title</item>
-        <item name="android:textDirection">locale</item>
+        <item name="android:textAlignment">viewStart</item>
+    </style>
+
+    <style name="Widget.CarUi.Toolbar.Subtitle">
+        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
+        <item name="android:textAlignment">viewStart</item>
     </style>
 
     <style name="Widget.CarUi.Toolbar.TextButton" parent="Widget.CarUi.Button.Borderless.Colored">
         <item name="android:drawableTint">@color/car_ui_toolbar_menu_item_icon_color</item>
         <item name="android:drawablePadding">10dp</item>
+        <item name="android:maxWidth">350dp</item>
     </style>
 
     <style name="Widget.CarUi.Toolbar.TextButton.WithIcon">
@@ -230,6 +235,7 @@
 
     <style name="TextAppearance.CarUi" parent="android:TextAppearance.DeviceDefault">
         <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:textAlignment">viewStart</item>
     </style>
 
     <style name="TextAppearance.CarUi.Body1">
@@ -244,6 +250,18 @@
         <item name="android:textSize">@dimen/car_ui_body3_size</item>
     </style>
 
+    <style name="TextAppearance.CarUi.Sub1">
+        <item name="android:textSize">@dimen/car_ui_sub1_size</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.Sub2">
+        <item name="android:textSize">@dimen/car_ui_sub2_size</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.Sub3">
+        <item name="android:textSize">@dimen/car_ui_sub3_size</item>
+    </style>
+
     <style name="TextAppearance.CarUi.PreferenceCategoryTitle">
         <item name="android:fontFamily">@string/car_ui_preference_category_title_font_family</item>
         <item name="android:textColor">@color/car_ui_preference_category_title_text_color</item>
@@ -265,9 +283,12 @@
         <item name="android:textSize">@dimen/car_ui_preference_edit_text_dialog_message_text_size</item>
     </style>
 
-    <style name="TextAppearance.CarUi.AlertDialog.Subtitle" parent="android:TextAppearance.DeviceDefault"/>
+    <style name="TextAppearance.CarUi.AlertDialog.Title" parent="TextAppearance.CarUi.Body3"/>
+    <style name="TextAppearance.CarUi.AlertDialog.Subtitle" parent="TextAppearance.CarUi.Sub3"/>
 
-    <style name="TextAppearance.CarUi.Widget" parent="android:TextAppearance.DeviceDefault.Widget"/>
+    <style name="TextAppearance.CarUi.Widget" parent="android:TextAppearance.DeviceDefault.Widget">
+        <item name="android:textAlignment">viewStart</item>
+    </style>
 
     <style name="TextAppearance.CarUi.Widget.Toolbar"/>
 
diff --git a/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java b/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java
index 4803b45..bb301e3 100644
--- a/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java
+++ b/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java
@@ -22,6 +22,7 @@
 import android.database.Cursor;
 import android.graphics.drawable.Drawable;
 import android.text.InputFilter;
+import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -41,6 +42,7 @@
 
 import com.android.car.ui.recyclerview.CarUiListItemAdapter;
 import com.android.car.ui.recyclerview.CarUiRadioButtonListItemAdapter;
+import com.android.car.ui.utils.CarUiUtils;
 
 /**
  * Wrapper for AlertDialog.Builder
@@ -354,7 +356,7 @@
     private void setCustomList(@NonNull CarUiListItemAdapter adapter) {
         View customList = LayoutInflater.from(mContext).inflate(
                 R.layout.car_ui_alert_dialog_list, null);
-        RecyclerView mList = customList.requireViewById(R.id.list);
+        RecyclerView mList = CarUiUtils.requireViewByRefId(customList, R.id.list);
         mList.setLayoutManager(new LinearLayoutManager(mContext));
         mList.setAdapter(adapter);
         mBuilder.setView(customList);
@@ -587,7 +589,7 @@
         View contentView = LayoutInflater.from(mContext).inflate(
                 R.layout.car_ui_alert_dialog_edit_text, null);
 
-        EditText editText = contentView.requireViewById(R.id.textbox);
+        EditText editText = CarUiUtils.requireViewByRefId(contentView, R.id.textbox);
         editText.setText(prompt);
 
         if (textChangedListener != null) {
@@ -623,21 +625,23 @@
 
     /** Final steps common to both {@link #create()} and {@link #show()} */
     private void prepareDialog() {
-        if (mSubtitle != null) {
+        View customTitle = LayoutInflater.from(mContext).inflate(
+                R.layout.car_ui_alert_dialog_title_with_subtitle, null);
 
-            View customTitle = LayoutInflater.from(mContext).inflate(
-                    R.layout.car_ui_alert_dialog_title_with_subtitle, null);
+        TextView mTitleView =
+                CarUiUtils.requireViewByRefId(customTitle, R.id.car_ui_alert_title);
+        TextView mSubtitleView =
+                CarUiUtils.requireViewByRefId(customTitle, R.id.car_ui_alert_subtitle);
+        ImageView mIconView =
+                CarUiUtils.requireViewByRefId(customTitle, R.id.car_ui_alert_icon);
 
-            TextView mTitleView = customTitle.requireViewById(R.id.alertTitle);
-            TextView mSubtitleView = customTitle.requireViewById(R.id.alertSubtitle);
-            ImageView mIconView = customTitle.requireViewById(R.id.icon);
-
-            mTitleView.setText(mTitle);
-            mSubtitleView.setText(mSubtitle);
-            mIconView.setImageDrawable(mIcon);
-            mIconView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE);
-            mBuilder.setCustomTitle(customTitle);
-        }
+        mTitleView.setText(mTitle);
+        mTitleView.setVisibility(TextUtils.isEmpty(mTitle) ? View.GONE : View.VISIBLE);
+        mSubtitleView.setText(mSubtitle);
+        mSubtitleView.setVisibility(TextUtils.isEmpty(mSubtitle) ? View.GONE : View.VISIBLE);
+        mIconView.setImageDrawable(mIcon);
+        mIconView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE);
+        mBuilder.setCustomTitle(customTitle);
 
         if (!mNeutralButtonSet && !mNegativeButtonSet && !mPositiveButtonSet) {
             String mDefaultButtonText = mContext.getString(
diff --git a/car-ui-lib/src/com/android/car/ui/baselayout/ClickBlockingView.java b/car-ui-lib/src/com/android/car/ui/baselayout/ClickBlockingView.java
new file mode 100644
index 0000000..181495c
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/baselayout/ClickBlockingView.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+package com.android.car.ui.baselayout;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+
+/**
+ * A view that doesn't allow any touches to pass through it to views below.
+ *
+ * <p>Used in baselayouts to prevent clicking through the toolbar.
+ */
+public class ClickBlockingView extends View {
+
+    private boolean mEatingTouch = false;
+    private boolean mEatingHover = false;
+
+    public ClickBlockingView(Context context) {
+        super(context);
+    }
+
+    public ClickBlockingView(Context context,
+            @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public ClickBlockingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public ClickBlockingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        // Copied from androidx.appcompat.widget.Toolbar
+
+        // We always eat touch events, but should still respect the touch event dispatch
+        // contract. If the normal View implementation doesn't want the events, we'll just silently
+        // eat the rest of the gesture without reporting the events to the default implementation
+        // since that's what it expects.
+
+        final int action = ev.getActionMasked();
+        if (action == MotionEvent.ACTION_DOWN) {
+            mEatingTouch = false;
+        }
+
+        if (!mEatingTouch) {
+            final boolean handled = super.onTouchEvent(ev);
+            if (action == MotionEvent.ACTION_DOWN && !handled) {
+                mEatingTouch = true;
+            }
+        }
+
+        if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+            mEatingTouch = false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public boolean onHoverEvent(MotionEvent ev) {
+        // Copied from androidx.appcompat.widget.Toolbar
+
+        // Same deal as onTouchEvent() above. Eat all hover events, but still
+        // respect the touch event dispatch contract.
+
+        final int action = ev.getActionMasked();
+        if (action == MotionEvent.ACTION_HOVER_ENTER) {
+            mEatingHover = false;
+        }
+
+        if (!mEatingHover) {
+            final boolean handled = super.onHoverEvent(ev);
+            if (action == MotionEvent.ACTION_HOVER_ENTER && !handled) {
+                mEatingHover = true;
+            }
+        }
+
+        if (action == MotionEvent.ACTION_HOVER_EXIT || action == MotionEvent.ACTION_CANCEL) {
+            mEatingHover = false;
+        }
+
+        return true;
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/baselayout/InsetsChangedListener.java b/car-ui-lib/src/com/android/car/ui/baselayout/InsetsChangedListener.java
index 595ad06..8902e1e 100644
--- a/car-ui-lib/src/com/android/car/ui/baselayout/InsetsChangedListener.java
+++ b/car-ui-lib/src/com/android/car/ui/baselayout/InsetsChangedListener.java
@@ -16,6 +16,8 @@
 
 package com.android.car.ui.baselayout;
 
+import androidx.annotation.NonNull;
+
 /**
  * Interface for receiving changes to {@link Insets}.
  *
@@ -27,5 +29,5 @@
  */
 public interface InsetsChangedListener {
     /** Called when the insets change */
-    void onCarUiInsetsChanged(Insets insets);
+    void onCarUiInsetsChanged(@NonNull Insets insets);
 }
diff --git a/car-ui-lib/src/com/android/car/ui/core/BaseLayoutController.java b/car-ui-lib/src/com/android/car/ui/core/BaseLayoutController.java
index f488e9c..e1209d9 100644
--- a/car-ui-lib/src/com/android/car/ui/core/BaseLayoutController.java
+++ b/car-ui-lib/src/com/android/car/ui/core/BaseLayoutController.java
@@ -15,10 +15,9 @@
  */
 package com.android.car.ui.core;
 
-import static com.android.car.ui.utils.CarUiUtils.requireViewByRefId;
-
 import android.app.Activity;
 import android.content.res.TypedArray;
+import android.os.Build;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -36,9 +35,10 @@
 import com.android.car.ui.baselayout.InsetsChangedListener;
 import com.android.car.ui.toolbar.ToolbarController;
 import com.android.car.ui.toolbar.ToolbarControllerImpl;
+import com.android.car.ui.utils.CarUiUtils;
 
-import java.util.HashMap;
 import java.util.Map;
+import java.util.WeakHashMap;
 
 /**
  * BaseLayoutController accepts an {@link Activity} and sets up the base layout inside of it.
@@ -47,7 +47,7 @@
  */
 class BaseLayoutController {
 
-    private static Map<Activity, BaseLayoutController> sBaseLayoutMap = new HashMap<>();
+    private static final Map<Activity, BaseLayoutController> sBaseLayoutMap = new WeakHashMap<>();
 
     private InsetsUpdater mInsetsUpdater;
 
@@ -72,14 +72,18 @@
      *
      * <p>You can get a reference to it by calling {@link #getBaseLayout(Activity)}.
      */
-    /* package */ static void build(Activity activity) {
-        sBaseLayoutMap.put(activity, new BaseLayoutController(activity));
+    /* package */
+    static void build(Activity activity) {
+        if (getThemeBoolean(activity, R.attr.carUiBaseLayout)) {
+            sBaseLayoutMap.put(activity, new BaseLayoutController(activity));
+        }
     }
 
     /**
      * Destroy the BaseLayoutController for the given {@link Activity}.
      */
-    /* package */ static void destroy(Activity activity) {
+    /* package */
+    static void destroy(Activity activity) {
         sBaseLayoutMap.remove(activity);
     }
 
@@ -96,6 +100,14 @@
         return mInsetsUpdater.getInsets();
     }
 
+    /* package */ void dispatchNewInsets(Insets insets) {
+        mInsetsUpdater.dispatchNewInsets(insets);
+    }
+
+    /* package */ void replaceInsetsChangedListenerWith(InsetsChangedListener listener) {
+        mInsetsUpdater.replaceInsetsChangedListenerWith(listener);
+    }
+
     /**
      * Installs the base layout into an activity, moving its content view under the base layout.
      *
@@ -104,34 +116,42 @@
      * @param activity The {@link Activity} to install a base layout in.
      */
     private void installBaseLayout(Activity activity) {
-        boolean baseLayoutEnabled = getThemeBoolean(activity, R.attr.carUiBaseLayout);
         boolean toolbarEnabled = getThemeBoolean(activity, R.attr.carUiToolbar);
-        if (!baseLayoutEnabled) {
-            return;
-        }
+        boolean legacyToolbar = Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q;
+        @LayoutRes final int baseLayoutRes;
 
-        @LayoutRes final int baseLayoutRes = toolbarEnabled
-                ? R.layout.car_ui_base_layout_toolbar
-                : R.layout.car_ui_base_layout;
+        if (toolbarEnabled) {
+            baseLayoutRes = legacyToolbar
+                    ? R.layout.car_ui_base_layout_toolbar_legacy
+                    : R.layout.car_ui_base_layout_toolbar;
+        } else {
+            baseLayoutRes = R.layout.car_ui_base_layout;
+        }
 
         View baseLayout = LayoutInflater.from(activity)
                 .inflate(baseLayoutRes, null, false);
 
         // Replace windowContentView with baseLayout
-        ViewGroup windowContentView = activity.getWindow().findViewById(android.R.id.content);
+        ViewGroup windowContentView = CarUiUtils.findViewByRefId(
+                activity.getWindow().getDecorView(), android.R.id.content);
         ViewGroup contentViewParent = (ViewGroup) windowContentView.getParent();
         int contentIndex = contentViewParent.indexOfChild(windowContentView);
         contentViewParent.removeView(windowContentView);
         contentViewParent.addView(baseLayout, contentIndex, windowContentView.getLayoutParams());
 
         // Add windowContentView to the baseLayout's content view
-        FrameLayout contentView = requireViewByRefId(baseLayout, R.id.content);
+        FrameLayout contentView = CarUiUtils.requireViewByRefId(baseLayout,
+                R.id.car_ui_base_layout_content_container);
         contentView.addView(windowContentView, new FrameLayout.LayoutParams(
                 ViewGroup.LayoutParams.MATCH_PARENT,
                 ViewGroup.LayoutParams.MATCH_PARENT));
 
         if (toolbarEnabled) {
-            mToolbarController = new ToolbarControllerImpl(baseLayout);
+            if (legacyToolbar) {
+                mToolbarController = CarUiUtils.requireViewByRefId(baseLayout, R.id.car_ui_toolbar);
+            } else {
+                mToolbarController = new ToolbarControllerImpl(baseLayout);
+            }
         }
 
         mInsetsUpdater = new InsetsUpdater(activity, baseLayout, windowContentView);
@@ -142,8 +162,8 @@
      * Gets the boolean value of an Attribute from an {@link Activity Activity's}
      * {@link android.content.res.Resources.Theme}.
      */
-    private boolean getThemeBoolean(Activity activity, int attr) {
-        TypedArray a = activity.getTheme().obtainStyledAttributes(new int[] { attr });
+    private static boolean getThemeBoolean(Activity activity, int attr) {
+        TypedArray a = activity.getTheme().obtainStyledAttributes(new int[]{attr});
 
         try {
             return a.getBoolean(0, false);
@@ -176,6 +196,7 @@
         private final View mRightInsetView;
         private final View mTopInsetView;
         private final View mBottomInsetView;
+        private InsetsChangedListener mInsetsChangedListenerDelegate;
 
         private boolean mInsetsDirty = true;
         @NonNull
@@ -184,8 +205,8 @@
         /**
          * Constructs an InsetsUpdater that calculates and dispatches insets to an {@link Activity}.
          *
-         * @param activity The activity that is using base layouts
-         * @param baseLayout The root view of the base layout
+         * @param activity    The activity that is using base layouts
+         * @param baseLayout  The root view of the base layout
          * @param contentView The android.R.id.content View
          */
         InsetsUpdater(Activity activity, View baseLayout, View contentView) {
@@ -236,6 +257,10 @@
             return mInsets;
         }
 
+        public void replaceInsetsChangedListenerWith(InsetsChangedListener listener) {
+            mInsetsChangedListenerDelegate = listener;
+        }
+
         /**
          * onGlobalLayout() should recalculate the amount of insets we need, and then dispatch them.
          */
@@ -245,11 +270,14 @@
                 return;
             }
 
-            View content = mActivity.requireViewById(android.R.id.content);
+            View content = CarUiUtils.requireViewByRefId(mActivity.getWindow().getDecorView(),
+                    android.R.id.content);
 
             // Calculate how much each inset view overlays the content view
-            int top, bottom, left, right;
-            top = bottom = left = right = 0;
+            int top = 0;
+            int left = 0;
+            int right = 0;
+            int bottom = 0;
             if (mTopInsetView != null) {
                 top = Math.max(0, getBottomOfView(mTopInsetView) - getTopOfView(content));
             }
@@ -278,26 +306,37 @@
          *
          * @param insets The newly-changed insets.
          */
-        private void dispatchNewInsets(Insets insets) {
-            boolean handled = false;
-            if (mActivity instanceof InsetsChangedListener) {
-                ((InsetsChangedListener) mActivity).onCarUiInsetsChanged(insets);
-                handled = true;
-            }
+        /* package */ void dispatchNewInsets(Insets insets) {
+            mInsets = insets;
 
-            if (mActivity instanceof FragmentActivity) {
-                for (Fragment fragment : ((FragmentActivity) mActivity).getSupportFragmentManager()
-                        .getFragments()) {
-                    if (fragment instanceof InsetsChangedListener) {
-                        ((InsetsChangedListener) fragment).onCarUiInsetsChanged(insets);
-                        handled = true;
+            boolean handled = false;
+
+            if (mInsetsChangedListenerDelegate != null) {
+                mInsetsChangedListenerDelegate.onCarUiInsetsChanged(insets);
+                handled = true;
+            } else {
+                // If an explicit InsetsChangedListener is not provided,
+                // pass the insets to activities and fragments
+                if (mActivity instanceof InsetsChangedListener) {
+                    ((InsetsChangedListener) mActivity).onCarUiInsetsChanged(insets);
+                    handled = true;
+                }
+
+                if (mActivity instanceof FragmentActivity) {
+                    for (Fragment fragment : ((FragmentActivity) mActivity)
+                            .getSupportFragmentManager().getFragments()) {
+                        if (fragment instanceof InsetsChangedListener) {
+                            ((InsetsChangedListener) fragment).onCarUiInsetsChanged(insets);
+                            handled = true;
+                        }
                     }
                 }
             }
 
             if (!handled) {
-                mActivity.requireViewById(android.R.id.content).setPadding(
-                        insets.getLeft(), insets.getTop(), insets.getRight(), insets.getBottom());
+                CarUiUtils.requireViewByRefId(mActivity.getWindow().getDecorView(),
+                        android.R.id.content).setPadding(insets.getLeft(), insets.getTop(),
+                        insets.getRight(), insets.getBottom());
             }
         }
 
diff --git a/car-ui-lib/src/com/android/car/ui/core/CarUi.java b/car-ui-lib/src/com/android/car/ui/core/CarUi.java
index 21050be..ad67121 100644
--- a/car-ui-lib/src/com/android/car/ui/core/CarUi.java
+++ b/car-ui-lib/src/com/android/car/ui/core/CarUi.java
@@ -21,13 +21,19 @@
 import androidx.annotation.Nullable;
 
 import com.android.car.ui.baselayout.Insets;
+import com.android.car.ui.baselayout.InsetsChangedListener;
 import com.android.car.ui.toolbar.ToolbarController;
 
+import java.lang.reflect.Method;
+
 /**
  * Public interface for general CarUi static functions.
  */
 public class CarUi {
 
+    /** Prevent instantiating this class */
+    private CarUi() {}
+
     /**
      * Gets the {@link ToolbarController} for an activity. Requires that the Activity uses
      * Theme.CarUi.WithToolbar, or otherwise sets carUiBaseLayout and carUiToolbar to true.
@@ -36,7 +42,7 @@
      */
     @Nullable
     public static ToolbarController getToolbar(Activity activity) {
-        BaseLayoutController controller = BaseLayoutController.getBaseLayout(activity);
+        BaseLayoutController controller = getBaseLayoutController(activity);
         if (controller != null) {
             return controller.getToolbarController();
         }
@@ -55,14 +61,26 @@
     public static ToolbarController requireToolbar(Activity activity) {
         ToolbarController result = getToolbar(activity);
         if (result == null) {
-            throw new IllegalArgumentException("Activity does not have a CarUi Toolbar! "
-                    + "Are you using Theme.CarUi.WithToolbar?");
+            throw new IllegalArgumentException("Activity " + activity
+                    + " does not have a CarUi Toolbar!"
+                    + " Are you using Theme.CarUi.WithToolbar?");
         }
 
         return result;
     }
 
     /**
+     * Registering a listener to receive the InsetsChanged updates instead of the Activity.
+     */
+    public static void replaceInsetsChangedListenerWith(Activity activity,
+            InsetsChangedListener listener) {
+        BaseLayoutController controller = getBaseLayoutController(activity);
+        if (controller != null) {
+            controller.replaceInsetsChangedListenerWith(listener);
+        }
+    }
+
+    /**
      * Gets the current {@link Insets} of the given {@link Activity}. Only applies to Activities
      * using the base layout, ie have the theme attribute "carUiBaseLayout" set to true.
      *
@@ -72,7 +90,7 @@
      */
     @Nullable
     public static Insets getInsets(Activity activity) {
-        BaseLayoutController controller = BaseLayoutController.getBaseLayout(activity);
+        BaseLayoutController controller = getBaseLayoutController(activity);
         if (controller != null) {
             return controller.getInsets();
         }
@@ -93,10 +111,30 @@
     public static Insets requireInsets(Activity activity) {
         Insets result = getInsets(activity);
         if (result == null) {
-            throw new IllegalArgumentException("Activity does not have a base layout! "
-                    + "Are you using Theme.CarUi.WithToolbar or Theme.CarUi.NoToolbar?");
+            throw new IllegalArgumentException("Activity " + activity
+                    + " does not have a base layout!"
+                    + " Are you using Theme.CarUi.WithToolbar or Theme.CarUi.NoToolbar?");
         }
 
         return result;
     }
+
+    /* package */ static BaseLayoutController getBaseLayoutController(Activity activity) {
+        if (activity.getClassLoader().equals(CarUi.class.getClassLoader())) {
+            return BaseLayoutController.getBaseLayout(activity);
+        } else {
+            // Note: (b/156532465)
+            // The usage of the alternate classloader is to accommodate GMSCore.
+            // Some activities are loaded dynamically from external modules.
+            try {
+                Class baseLayoutControllerClass = activity.getClassLoader()
+                        .loadClass(BaseLayoutController.class.getName());
+                Method method = baseLayoutControllerClass
+                        .getDeclaredMethod("getBaseLayout", Activity.class);
+                return (BaseLayoutController) method.invoke(null, activity);
+            } catch (ReflectiveOperationException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
 }
diff --git a/car-ui-lib/src/com/android/car/ui/core/CarUiInstaller.java b/car-ui-lib/src/com/android/car/ui/core/CarUiInstaller.java
index 1aaa375..7e725ae 100644
--- a/car-ui-lib/src/com/android/car/ui/core/CarUiInstaller.java
+++ b/car-ui-lib/src/com/android/car/ui/core/CarUiInstaller.java
@@ -15,17 +15,25 @@
  */
 package com.android.car.ui.core;
 
+import static com.android.car.ui.core.CarUi.getBaseLayoutController;
+
 import android.app.Activity;
 import android.app.Application;
 import android.content.ContentProvider;
 import android.content.ContentValues;
+import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.car.ui.baselayout.Insets;
+
+import java.lang.reflect.Method;
+
 /**
  * {@link ContentProvider ContentProvider's} onCreate() methods are "called for all registered
  * content providers on the application main thread at application launch time." This means we
@@ -34,14 +42,55 @@
  */
 public class CarUiInstaller extends ContentProvider {
 
+    private static final String TAG = "CarUiInstaller";
+    private static final String CAR_UI_INSET_LEFT = "CAR_UI_INSET_LEFT";
+    private static final String CAR_UI_INSET_RIGHT = "CAR_UI_INSET_RIGHT";
+    private static final String CAR_UI_INSET_TOP = "CAR_UI_INSET_TOP";
+    private static final String CAR_UI_INSET_BOTTOM = "CAR_UI_INSET_BOTTOM";
+
     @Override
     public boolean onCreate() {
-        Application application = (Application) getContext().getApplicationContext();
+        Context context = getContext();
+        if (context == null) {
+            Log.e(TAG, "CarUiInstaller had a null context!");
+            return false;
+        }
+        Log.i(TAG, "CarUiInstaller started for " + context.getPackageName());
+
+        Application application = (Application) context.getApplicationContext();
         application.registerActivityLifecycleCallbacks(
                 new Application.ActivityLifecycleCallbacks() {
+                    private Insets mInsets = null;
+                    private boolean mIsActivityStartedForFirstTime = false;
+
                     @Override
                     public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
-                        BaseLayoutController.build(activity);
+                        if (activity.getClassLoader()
+                                .equals(CarUiInstaller.class.getClassLoader())) {
+                            BaseLayoutController.build(activity);
+                        } else {
+                            callBaseLayoutControllerMethod("build", activity);
+                        }
+
+                        if (savedInstanceState != null) {
+                            int inset_left = savedInstanceState.getInt(CAR_UI_INSET_LEFT);
+                            int inset_top = savedInstanceState.getInt(CAR_UI_INSET_TOP);
+                            int inset_right = savedInstanceState.getInt(CAR_UI_INSET_RIGHT);
+                            int inset_bottom = savedInstanceState.getInt(CAR_UI_INSET_BOTTOM);
+                            mInsets = new Insets(inset_left, inset_top, inset_right, inset_bottom);
+                        }
+
+                        mIsActivityStartedForFirstTime = true;
+                    }
+
+                    @Override
+                    public void onActivityPostStarted(Activity activity) {
+                        BaseLayoutController controller = getBaseLayoutController(activity);
+                        if (mInsets != null && controller != null
+                                && mIsActivityStartedForFirstTime) {
+                            controller.dispatchNewInsets(mInsets);
+                            mIsActivityStartedForFirstTime = false;
+                        }
                     }
 
                     @Override
@@ -62,13 +111,27 @@
 
                     @Override
                     public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
+                        BaseLayoutController controller = getBaseLayoutController(activity);
+                        if (controller != null) {
+                            Insets insets = controller.getInsets();
+                            outState.putInt(CAR_UI_INSET_LEFT, insets.getLeft());
+                            outState.putInt(CAR_UI_INSET_TOP, insets.getTop());
+                            outState.putInt(CAR_UI_INSET_RIGHT, insets.getRight());
+                            outState.putInt(CAR_UI_INSET_BOTTOM, insets.getBottom());
+                        }
                     }
 
                     @Override
                     public void onActivityDestroyed(Activity activity) {
-                        BaseLayoutController.destroy(activity);
+                        if (activity.getClassLoader()
+                                .equals(CarUiInstaller.class.getClassLoader())) {
+                            BaseLayoutController.destroy(activity);
+                        } else {
+                            callBaseLayoutControllerMethod("destroy", activity);
+                        }
                     }
                 });
+
         return true;
     }
 
@@ -102,4 +165,20 @@
             @Nullable String[] selectionArgs) {
         return 0;
     }
+
+    private static void callBaseLayoutControllerMethod(String methodName, Activity activity) {
+        // Note: (b/156532465)
+        // The usage of the alternate classloader is to accommodate GMSCore.
+        // Some activities are loaded dynamically from external modules.
+        try {
+            Class baseLayoutControllerClass =
+                    activity.getClassLoader()
+                            .loadClass(BaseLayoutController.class.getName());
+            Method method = baseLayoutControllerClass
+                    .getDeclaredMethod(methodName, Activity.class);
+            method.invoke(null, activity);
+        } catch (ReflectiveOperationException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiDialogFragment.java b/car-ui-lib/src/com/android/car/ui/preference/CarUiDialogFragment.java
index 6a848b8..4a61b3f 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/CarUiDialogFragment.java
+++ b/car-ui-lib/src/com/android/car/ui/preference/CarUiDialogFragment.java
@@ -36,6 +36,8 @@
 import androidx.fragment.app.DialogFragment;
 import androidx.preference.DialogPreference;
 
+import com.android.car.ui.utils.CarUiUtils;
+
 /**
  * Abstract base class which presents a dialog associated with a {@link
  * androidx.preference.DialogPreference}. Since the preference object may not be available during
@@ -193,7 +195,7 @@
      */
     @CallSuper
     protected void onBindDialogView(View view) {
-        View dialogMessageView = view.findViewById(android.R.id.message);
+        View dialogMessageView = CarUiUtils.findViewByRefId(view, android.R.id.message);
 
         if (dialogMessageView != null) {
             CharSequence message = mDialogMessage;
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiPreference.java b/car-ui-lib/src/com/android/car/ui/preference/CarUiPreference.java
index 5db22cf..635cad9 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/CarUiPreference.java
+++ b/car-ui-lib/src/com/android/car/ui/preference/CarUiPreference.java
@@ -18,20 +18,30 @@
 
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Toast;
 
 import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
 
 import com.android.car.ui.R;
+import com.android.car.ui.utils.CarUiUtils;
 
 /**
  * This class extends the base {@link Preference} class. Adds the support to add a drawable icon to
  * the preference if there is one of fragment, intent or onPreferenceClickListener set.
  */
-public class CarUiPreference extends Preference {
+public class CarUiPreference extends Preference implements DisabledPreferenceCallback {
 
     private Context mContext;
     private boolean mShowChevron;
+    private String mMessageToShowWhenDisabledPreferenceClicked;
+
+    private boolean mShouldShowRippleOnDisabledPreference;
+    private Drawable mBackground;
+    private View mPreference;
 
     public CarUiPreference(Context context, AttributeSet attrs,
             int defStyleAttr, int defStyleRes) {
@@ -61,6 +71,18 @@
                 defStyleRes);
 
         mShowChevron = a.getBoolean(R.styleable.CarUiPreference_showChevron, true);
+        mShouldShowRippleOnDisabledPreference = a.getBoolean(
+                R.styleable.CarUiPreference_showRippleOnDisabledPreference, false);
+    }
+
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        boolean viewEnabled = isEnabled();
+        mPreference = holder.itemView;
+        mBackground = CarUiUtils.setPreferenceViewEnabled(viewEnabled, holder.itemView, mBackground,
+                mShouldShowRippleOnDisabledPreference);
     }
 
     @Override
@@ -80,7 +102,37 @@
         }
     }
 
+    /**
+     * This is similar to {@link Preference#performClick()} with the only difference that we do not
+     * return when view is not enabled.
+     */
+    @Override
+    public void performClick() {
+        if (isEnabled()) {
+            super.performClick();
+        } else if (mMessageToShowWhenDisabledPreferenceClicked != null
+                && !mMessageToShowWhenDisabledPreferenceClicked.isEmpty()) {
+            Toast.makeText(mContext, mMessageToShowWhenDisabledPreferenceClicked,
+                    Toast.LENGTH_LONG).show();
+        }
+    }
+
     public void setShowChevron(boolean showChevron) {
         mShowChevron = showChevron;
     }
+
+    /**
+     * Sets the ripple on the disabled preference.
+     */
+    @Override
+    public void setShouldShowRippleOnDisabledPreference(boolean showRipple) {
+        mShouldShowRippleOnDisabledPreference = showRipple;
+        CarUiUtils.updateRippleStateOnDisabledPreference(isEnabled(),
+                mShouldShowRippleOnDisabledPreference, mBackground, mPreference);
+    }
+
+    @Override
+    public void setMessageToShowWhenDisabledPreferenceClicked(String message) {
+        mMessageToShowWhenDisabledPreferenceClicked = message;
+    }
 }
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiSwitchPreference.java b/car-ui-lib/src/com/android/car/ui/preference/CarUiSwitchPreference.java
new file mode 100644
index 0000000..1ccadf8
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/preference/CarUiSwitchPreference.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2020 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.
+ */
+
+package com.android.car.ui.preference;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Toast;
+
+import androidx.preference.PreferenceViewHolder;
+import androidx.preference.SwitchPreference;
+
+import com.android.car.ui.R;
+import com.android.car.ui.utils.CarUiUtils;
+
+/**
+ * This class extends the base {@link SwitchPreference} class. Adds the functionality to show
+ * message when preference is disabled.
+ */
+public class CarUiSwitchPreference extends SwitchPreference implements DisabledPreferenceCallback {
+
+    private String mMessageToShowWhenDisabledPreferenceClicked;
+
+    private boolean mShouldShowRippleOnDisabledPreference;
+    private Drawable mBackground;
+    private View mPreference;
+    private Context mContext;
+
+    public CarUiSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        init(context, attrs);
+    }
+
+    public CarUiSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init(context, attrs);
+    }
+
+    public CarUiSwitchPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init(context, attrs);
+    }
+
+    public CarUiSwitchPreference(Context context) {
+        super(context);
+        init(context, null);
+    }
+
+    private void init(Context context, AttributeSet attrs) {
+        mContext = context;
+        TypedArray preferenceAttributes = getContext().obtainStyledAttributes(attrs,
+                R.styleable.CarUiPreference);
+        mShouldShowRippleOnDisabledPreference = preferenceAttributes.getBoolean(
+                R.styleable.CarUiPreference_showRippleOnDisabledPreference, false);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+        mPreference = holder.itemView;
+        mBackground = CarUiUtils.setPreferenceViewEnabled(isEnabled(), holder.itemView, mBackground,
+                mShouldShowRippleOnDisabledPreference);
+    }
+
+    /**
+     * This is similar to {@link Preference#performClick()} with the only difference that we do not
+     * return when view is not enabled.
+     */
+    @Override
+    public void performClick() {
+        if (isEnabled()) {
+            super.performClick();
+        } else if (mMessageToShowWhenDisabledPreferenceClicked != null
+                && !mMessageToShowWhenDisabledPreferenceClicked.isEmpty()) {
+            Toast.makeText(mContext, mMessageToShowWhenDisabledPreferenceClicked,
+                    Toast.LENGTH_LONG).show();
+        }
+    }
+
+    /**
+     * Sets the ripple on the disabled preference.
+     */
+    @Override
+    public void setShouldShowRippleOnDisabledPreference(boolean showRipple) {
+        mShouldShowRippleOnDisabledPreference = showRipple;
+        CarUiUtils.updateRippleStateOnDisabledPreference(isEnabled(),
+                mShouldShowRippleOnDisabledPreference, mBackground, mPreference);
+    }
+
+    @Override
+    public void setMessageToShowWhenDisabledPreferenceClicked(String message) {
+        mMessageToShowWhenDisabledPreferenceClicked = message;
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/preference/DisabledPreferenceCallback.java b/car-ui-lib/src/com/android/car/ui/preference/DisabledPreferenceCallback.java
new file mode 100644
index 0000000..b7a12bc
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/preference/DisabledPreferenceCallback.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2020 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.
+ */
+
+package com.android.car.ui.preference;
+
+/**
+ * Interface for preferences to handle clicks when its disabled.
+ */
+public interface DisabledPreferenceCallback {
+
+    /**
+     * Sets if the ripple effect should be shown on disabled preference.
+     */
+    default void setShouldShowRippleOnDisabledPreference(boolean showRipple) {}
+
+    /**
+     * Sets the message to be displayed when the disabled preference is clicked.
+     */
+    default void setMessageToShowWhenDisabledPreferenceClicked(String message) {}
+}
diff --git a/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java b/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
index 97a58d2..7df5228 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
+++ b/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
@@ -28,6 +28,8 @@
 import androidx.annotation.NonNull;
 import androidx.preference.EditTextPreference;
 
+import com.android.car.ui.utils.CarUiUtils;
+
 /**
  * Presents a dialog with an {@link EditText} associated with an {@link EditTextPreference}.
  *
@@ -78,7 +80,7 @@
     protected void onBindDialogView(View view) {
         super.onBindDialogView(view);
 
-        mEditText = view.findViewById(android.R.id.edit);
+        mEditText = CarUiUtils.findViewByRefId(view, android.R.id.edit);
 
         if (mEditText == null) {
             throw new IllegalStateException(
diff --git a/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceFragment.java b/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceFragment.java
index 2543fb5..0a4ddde 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceFragment.java
+++ b/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceFragment.java
@@ -36,6 +36,7 @@
 import com.android.car.ui.recyclerview.CarUiListItemAdapter;
 import com.android.car.ui.recyclerview.CarUiRecyclerView;
 import com.android.car.ui.toolbar.Toolbar;
+import com.android.car.ui.utils.CarUiUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -48,6 +49,8 @@
 
     private ListPreference mPreference;
     private CarUiContentListItem mSelectedItem;
+    private List<CarUiListItem> mListItems;
+    private CharSequence[] mEntryValues;
 
     /**
      * Returns a new instance of {@link ListPreferenceFragment} for the {@link ListPreference} with
@@ -72,8 +75,8 @@
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-        final CarUiRecyclerView carUiRecyclerView = view.requireViewById(R.id.list);
-        final Toolbar toolbar = view.requireViewById(R.id.toolbar);
+        final CarUiRecyclerView carUiRecyclerView = CarUiUtils.requireViewByRefId(view, R.id.list);
+        final Toolbar toolbar = CarUiUtils.requireViewByRefId(view, R.id.toolbar);
 
         carUiRecyclerView.setPadding(0, toolbar.getHeight(), 0, 0);
         toolbar.registerToolbarHeightChangeListener(newHeight -> {
@@ -91,21 +94,21 @@
         toolbar.setTitle(mPreference.getTitle());
 
         CharSequence[] entries = mPreference.getEntries();
-        CharSequence[] entryValues = mPreference.getEntryValues();
+        mEntryValues = mPreference.getEntryValues();
 
-        if (entries == null || entryValues == null) {
+        if (entries == null || mEntryValues == null) {
             throw new IllegalStateException(
                     "ListPreference requires an entries array and an entryValues array.");
         }
 
-        if (entries.length != entryValues.length) {
+        if (entries.length != mEntryValues.length) {
             throw new IllegalStateException(
                     "ListPreference entries array length does not match entryValues array length.");
         }
 
         int selectedEntryIndex = mPreference.findIndexOfValue(mPreference.getValue());
-        List<CarUiListItem> listItems = new ArrayList<>();
-        CarUiListItemAdapter adapter = new CarUiListItemAdapter(listItems);
+        mListItems = new ArrayList<>();
+        CarUiListItemAdapter adapter = new CarUiListItemAdapter(mListItems);
 
         for (int i = 0; i < entries.length; i++) {
             String entry = entries[i].toString();
@@ -121,30 +124,34 @@
             item.setOnCheckedChangeListener((listItem, isChecked) -> {
                 if (mSelectedItem != null) {
                     mSelectedItem.setChecked(false);
-                    adapter.notifyItemChanged(listItems.indexOf(mSelectedItem));
+                    adapter.notifyItemChanged(mListItems.indexOf(mSelectedItem));
                 }
                 mSelectedItem = listItem;
             });
 
-            listItems.add(item);
+            mListItems.add(item);
         }
 
-        toolbar.registerOnBackListener(() -> {
-            if (mSelectedItem != null) {
-                int selectedIndex = listItems.indexOf(mSelectedItem);
-                String entryValue = entryValues[selectedIndex].toString();
-
-                if (mPreference.callChangeListener(entryValue)) {
-                    mPreference.setValue(entryValue);
-                }
-            }
-
-            return false;
-        });
-
         carUiRecyclerView.setAdapter(adapter);
     }
 
+    @Override
+    public void onStop() {
+        super.onStop();
+        updatePreference();
+    }
+
+    private void updatePreference() {
+        if (mSelectedItem != null) {
+            int selectedIndex = mListItems.indexOf(mSelectedItem);
+            String entryValue = mEntryValues[selectedIndex].toString();
+
+            if (mPreference.callChangeListener(entryValue)) {
+                mPreference.setValue(entryValue);
+            }
+        }
+    }
+
     private ListPreference getListPreference() {
         if (getArguments() == null) {
             throw new IllegalStateException("Preference arguments cannot be null");
diff --git a/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java b/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
index c445142..8427c5f 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
+++ b/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
@@ -35,6 +35,7 @@
 import com.android.car.ui.recyclerview.CarUiListItemAdapter;
 import com.android.car.ui.recyclerview.CarUiRecyclerView;
 import com.android.car.ui.toolbar.Toolbar;
+import com.android.car.ui.utils.CarUiUtils;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -73,8 +74,8 @@
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-        final CarUiRecyclerView recyclerView = view.requireViewById(R.id.list);
-        final Toolbar toolbar = view.requireViewById(R.id.toolbar);
+        final CarUiRecyclerView recyclerView = CarUiUtils.requireViewByRefId(view, R.id.list);
+        final Toolbar toolbar = CarUiUtils.requireViewByRefId(view, R.id.toolbar);
 
         recyclerView.setPadding(0, toolbar.getHeight(), 0, 0);
         toolbar.registerToolbarHeightChangeListener(newHeight -> {
@@ -131,14 +132,18 @@
 
         CarUiListItemAdapter adapter = new CarUiListItemAdapter(listItems);
         recyclerView.setAdapter(adapter);
+    }
 
-        toolbar.registerOnBackListener(() -> {
-            if (mPreference.callChangeListener(mNewValues)) {
-                mPreference.setValues(mNewValues);
-            }
+    @Override
+    public void onStop() {
+        super.onStop();
+        updatePreference();
+    }
 
-            return false;
-        });
+    private void updatePreference() {
+        if (mPreference.callChangeListener(mNewValues)) {
+            mPreference.setValues(mNewValues);
+        }
     }
 
     private CarUiMultiSelectListPreference getPreference() {
diff --git a/car-ui-lib/src/com/android/car/ui/preference/PreferenceFragment.java b/car-ui-lib/src/com/android/car/ui/preference/PreferenceFragment.java
index bff6c13..260cf6f 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/PreferenceFragment.java
+++ b/car-ui-lib/src/com/android/car/ui/preference/PreferenceFragment.java
@@ -36,6 +36,7 @@
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.car.ui.R;
@@ -82,8 +83,8 @@
         }
 
         // TODO(b/150230923) remove the code for the old toolbar height change when apps are ready
-        final RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
-        final Toolbar toolbar = view.findViewById(R.id.toolbar);
+        final RecyclerView recyclerView = CarUiUtils.findViewByRefId(view, R.id.recycler_view);
+        final Toolbar toolbar = CarUiUtils.findViewByRefId(view, R.id.toolbar);
         if (recyclerView == null || toolbar == null) {
             return;
         }
@@ -108,9 +109,9 @@
     @Override
     public void onCarUiInsetsChanged(Insets insets) {
         View view = requireView();
-        view.requireViewById(R.id.recycler_view)
+        CarUiUtils.requireViewByRefId(view, R.id.recycler_view)
                 .setPadding(0, insets.getTop(), 0, insets.getBottom());
-        view.getRootView().requireViewById(android.R.id.content)
+        CarUiUtils.requireViewByRefId(view.getRootView(), android.R.id.content)
                 .setPadding(insets.getLeft(), 0, insets.getRight(), 0);
     }
 
@@ -241,6 +242,7 @@
             new Pair<>(ListPreference.class, CarUiListPreference.class),
             new Pair<>(MultiSelectListPreference.class, CarUiMultiSelectListPreference.class),
             new Pair<>(EditTextPreference.class, CarUiEditTextPreference.class),
+            new Pair<>(SwitchPreference.class, CarUiSwitchPreference.class),
             new Pair<>(Preference.class, CarUiPreference.class)
     );
 
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerView.java b/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerView.java
index dec9080..36ed154 100644
--- a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerView.java
+++ b/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerView.java
@@ -22,12 +22,15 @@
 import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.graphics.Rect;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
+import android.view.ViewTreeObserver;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 
@@ -48,38 +51,67 @@
 import com.android.car.ui.utils.CarUxRestrictionsUtil;
 
 import java.lang.annotation.Retention;
+import java.util.Objects;
 
 /**
- * View that extends a {@link RecyclerView} and wraps itself into a {@link LinearLayout} which
- * could potentially include a scrollbar that has page up and down arrows. Interaction with this
- * view is similar to a {@code RecyclerView} as it takes the same adapter and the layout manager.
+ * View that extends a {@link RecyclerView} and wraps itself into a {@link LinearLayout} which could
+ * potentially include a scrollbar that has page up and down arrows. Interaction with this view is
+ * similar to a {@code RecyclerView} as it takes the same adapter and the layout manager.
  */
 public final class CarUiRecyclerView extends RecyclerView implements
         Toolbar.OnHeightChangedListener {
 
     private static final String TAG = "CarUiRecyclerView";
 
-    private final UxRestrictionChangedListener mListener = new UxRestrictionChangedListener();
+    private final CarUxRestrictionsUtil.OnUxRestrictionsChangedListener mListener =
+            new UxRestrictionChangedListener();
 
     private CarUxRestrictionsUtil mCarUxRestrictionsUtil;
     private boolean mScrollBarEnabled;
     private String mScrollBarClass;
     private boolean mFullyInitialized;
-    private float mScrollBarPaddingStart;
-    private float mScrollBarPaddingEnd;
+    private int mScrollBarPaddingTop;
+    private int mScrollBarPaddingBottom;
+    private boolean mHasScrolledToTop = false;
 
     private ScrollBar mScrollBar;
     private int mInitialTopPadding;
 
-    private GridOffsetItemDecoration mOffsetItemDecoration;
-    private GridDividerItemDecoration mDividerItemDecoration;
     @CarUiRecyclerViewLayout
     private int mCarUiRecyclerViewLayout;
+
+    @Nullable
+    private GridOffsetItemDecoration mTopOffsetItemDecorationGrid;
+    @Nullable
+    private GridOffsetItemDecoration mBottomOffsetItemDecorationGrid;
+    @Nullable
+    private RecyclerView.ItemDecoration mTopOffsetItemDecorationLinear;
+    @Nullable
+    private RecyclerView.ItemDecoration mBottomOffsetItemDecorationLinear;
+    @Nullable
+    private GridDividerItemDecoration mDividerItemDecorationGrid;
+    @Nullable
+    private RecyclerView.ItemDecoration mDividerItemDecorationLinear;
     private int mNumOfColumns;
     private boolean mInstallingExtScrollBar = false;
     private int mContainerVisibility = View.VISIBLE;
+    private Rect mContainerPadding;
+    private Rect mContainerPaddingRelative;
     private LinearLayout mContainer;
 
+    // Set to true when when styled attributes are read and initialized.
+    private boolean mIsInitialized;
+    private boolean mEnableDividers;
+    private int mTopOffset;
+    private int mBottomOffset;
+
+    private ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener = () -> {
+        if (mInitialTopPadding == 0) {
+            mInitialTopPadding = getPaddingTop();
+        }
+        mFullyInitialized = true;
+    };
+
     /**
      * The possible values for setScrollBarPosition. The default value is actually {@link
      * CarUiRecyclerViewLayout#LINEAR}.
@@ -91,13 +123,15 @@
     @Retention(SOURCE)
     public @interface CarUiRecyclerViewLayout {
         /**
-         * Arranges items either horizontally in a single row or vertically in a single column.
-         * This is default.
+         * Arranges items either horizontally in a single row or vertically in a single column. This
+         * is default.
          */
         int LINEAR = 0;
 
-        /** Arranges items in a Grid. */
-        int GRID = 2;
+        /**
+         * Arranges items in a Grid.
+         */
+        int GRID = 1;
     }
 
     /**
@@ -124,8 +158,7 @@
 
         /**
          * Sets the maximum number of items available in the adapter. A value less than '0' means
-         * the
-         * list should not be capped.
+         * the list should not be capped.
          */
         void setMaxItems(int maxItems);
     }
@@ -155,83 +188,100 @@
         mScrollBarEnabled = context.getResources().getBoolean(R.bool.car_ui_scrollbar_enable);
         mFullyInitialized = false;
 
-        mScrollBarPaddingStart =
-                context.getResources().getDimension(R.dimen.car_ui_scrollbar_padding_start);
-        mScrollBarPaddingEnd =
-                context.getResources().getDimension(R.dimen.car_ui_scrollbar_padding_end);
+        mScrollBarPaddingTop = context.getResources()
+                .getDimensionPixelSize(R.dimen.car_ui_scrollbar_padding_top);
+        mScrollBarPaddingBottom = context.getResources()
+                .getDimensionPixelSize(R.dimen.car_ui_scrollbar_padding_bottom);
 
         mCarUiRecyclerViewLayout =
                 a.getInt(R.styleable.CarUiRecyclerView_layoutStyle, CarUiRecyclerViewLayout.LINEAR);
         mNumOfColumns = a.getInt(R.styleable.CarUiRecyclerView_numOfColumns, /* defValue= */ 2);
-        boolean enableDivider =
+        mEnableDividers =
                 a.getBoolean(R.styleable.CarUiRecyclerView_enableDivider, /* defValue= */ false);
 
-        if (mCarUiRecyclerViewLayout == CarUiRecyclerViewLayout.LINEAR) {
+        mDividerItemDecorationLinear = new LinearDividerItemDecoration(
+                context.getDrawable(R.drawable.car_ui_recyclerview_divider));
 
-            int linearTopOffset =
-                    a.getInteger(R.styleable.CarUiRecyclerView_startOffset, /* defValue= */ 0);
-            int linearBottomOffset =
-                    a.getInteger(R.styleable.CarUiRecyclerView_endOffset, /* defValue= */ 0);
+        mDividerItemDecorationGrid =
+                new GridDividerItemDecoration(
+                        context.getDrawable(R.drawable.car_ui_divider),
+                        context.getDrawable(R.drawable.car_ui_divider),
+                        mNumOfColumns);
 
-            if (enableDivider) {
-                RecyclerView.ItemDecoration dividerItemDecoration =
-                        new LinearDividerItemDecoration(
-                                context.getDrawable(R.drawable.car_ui_recyclerview_divider));
-                addItemDecoration(dividerItemDecoration);
-            }
-            RecyclerView.ItemDecoration topOffsetItemDecoration =
-                    new LinearOffsetItemDecoration(linearTopOffset, OffsetPosition.START);
+        mTopOffset = a.getInteger(R.styleable.CarUiRecyclerView_topOffset, /* defValue= */0);
+        mBottomOffset = a.getInteger(
+                R.styleable.CarUiRecyclerView_bottomOffset, /* defValue= */0);
 
-            RecyclerView.ItemDecoration bottomOffsetItemDecoration =
-                    new LinearOffsetItemDecoration(linearBottomOffset, OffsetPosition.END);
+        mTopOffsetItemDecorationLinear =
+                new LinearOffsetItemDecoration(mTopOffset, OffsetPosition.START);
+        mBottomOffsetItemDecorationLinear =
+                new LinearOffsetItemDecoration(mBottomOffset, OffsetPosition.END);
+        mTopOffsetItemDecorationGrid =
+                new GridOffsetItemDecoration(mTopOffset, mNumOfColumns,
+                        OffsetPosition.START);
+        mBottomOffsetItemDecorationGrid =
+                new GridOffsetItemDecoration(mBottomOffset, mNumOfColumns,
+                        OffsetPosition.END);
 
-            addItemDecoration(topOffsetItemDecoration);
-            addItemDecoration(bottomOffsetItemDecoration);
+        mIsInitialized = true;
+
+        // Check if a layout manager has already been set via XML
+        boolean isLayoutMangerSet = getLayoutManager() != null;
+        if (!isLayoutMangerSet && mCarUiRecyclerViewLayout == CarUiRecyclerViewLayout.LINEAR) {
             setLayoutManager(new LinearLayoutManager(getContext()));
-        } else {
-            int gridTopOffset =
-                    a.getInteger(R.styleable.CarUiRecyclerView_startOffset, /* defValue= */ 0);
-            int gridBottomOffset =
-                    a.getInteger(R.styleable.CarUiRecyclerView_endOffset, /* defValue= */ 0);
-
-            if (enableDivider) {
-                mDividerItemDecoration =
-                        new GridDividerItemDecoration(
-                                context.getDrawable(R.drawable.car_ui_divider),
-                                context.getDrawable(R.drawable.car_ui_divider),
-                                mNumOfColumns);
-                addItemDecoration(mDividerItemDecoration);
-            }
-
-            mOffsetItemDecoration =
-                    new GridOffsetItemDecoration(gridTopOffset, mNumOfColumns,
-                            OffsetPosition.START);
-
-            GridOffsetItemDecoration bottomOffsetItemDecoration =
-                    new GridOffsetItemDecoration(gridBottomOffset, mNumOfColumns,
-                            OffsetPosition.END);
-
-            addItemDecoration(mOffsetItemDecoration);
-            addItemDecoration(bottomOffsetItemDecoration);
+        } else if (!isLayoutMangerSet && mCarUiRecyclerViewLayout == CarUiRecyclerViewLayout.GRID) {
             setLayoutManager(new GridLayoutManager(getContext(), mNumOfColumns));
-            setNumOfColumns(mNumOfColumns);
         }
 
+        a.recycle();
+
         if (!mScrollBarEnabled) {
-            a.recycle();
             mFullyInitialized = true;
             return;
         }
 
+        mContainer = new LinearLayout(getContext());
+
+        setVerticalScrollBarEnabled(false);
+        setHorizontalScrollBarEnabled(false);
+
         mScrollBarClass = context.getResources().getString(R.string.car_ui_scrollbar_component);
-        a.recycle();
-        this.getViewTreeObserver()
-                .addOnGlobalLayoutListener(() -> {
-                    if (mInitialTopPadding == 0) {
-                        mInitialTopPadding = getPaddingTop();
-                    }
-                    mFullyInitialized = true;
-                });
+    }
+
+    @Override
+    public void setLayoutManager(@Nullable LayoutManager layoutManager) {
+        // Cannot setup item decorations before stylized attributes have been read.
+        if (mIsInitialized) {
+            addItemDecorations(layoutManager);
+        }
+        super.setLayoutManager(layoutManager);
+    }
+
+    // This method should not be invoked before item decorations are initialized by the #init()
+    // method.
+    private void addItemDecorations(LayoutManager layoutManager) {
+        // remove existing Item decorations.
+        removeItemDecoration(Objects.requireNonNull(mDividerItemDecorationGrid));
+        removeItemDecoration(Objects.requireNonNull(mTopOffsetItemDecorationGrid));
+        removeItemDecoration(Objects.requireNonNull(mBottomOffsetItemDecorationGrid));
+        removeItemDecoration(Objects.requireNonNull(mDividerItemDecorationLinear));
+        removeItemDecoration(Objects.requireNonNull(mTopOffsetItemDecorationLinear));
+        removeItemDecoration(Objects.requireNonNull(mBottomOffsetItemDecorationLinear));
+
+        if (layoutManager instanceof GridLayoutManager) {
+            if (mEnableDividers) {
+                addItemDecoration(Objects.requireNonNull(mDividerItemDecorationGrid));
+            }
+            addItemDecoration(Objects.requireNonNull(mTopOffsetItemDecorationGrid));
+            addItemDecoration(Objects.requireNonNull(mBottomOffsetItemDecorationGrid));
+            setNumOfColumns(((GridLayoutManager) layoutManager).getSpanCount());
+        } else {
+            if (mEnableDividers) {
+                addItemDecoration(Objects.requireNonNull(mDividerItemDecorationLinear));
+            }
+            addItemDecoration(Objects.requireNonNull(mTopOffsetItemDecorationLinear));
+            addItemDecoration(Objects.requireNonNull(mBottomOffsetItemDecorationLinear));
+        }
     }
 
     @Override
@@ -254,11 +304,11 @@
      */
     public void setNumOfColumns(int numberOfColumns) {
         mNumOfColumns = numberOfColumns;
-        if (mOffsetItemDecoration != null) {
-            mOffsetItemDecoration.setNumOfColumns(mNumOfColumns);
+        if (mTopOffsetItemDecorationGrid != null) {
+            mTopOffsetItemDecorationGrid.setNumOfColumns(mNumOfColumns);
         }
-        if (mDividerItemDecoration != null) {
-            mDividerItemDecoration.setNumOfColumns(mNumOfColumns);
+        if (mDividerItemDecorationGrid != null) {
+            mDividerItemDecorationGrid.setNumOfColumns(mNumOfColumns);
         }
     }
 
@@ -275,6 +325,10 @@
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
         mCarUxRestrictionsUtil.register(mListener);
+
+        this.getViewTreeObserver()
+                .addOnGlobalLayoutListener(mOnGlobalLayoutListener);
+
         if (mInstallingExtScrollBar || !mScrollBarEnabled) {
             return;
         }
@@ -290,26 +344,37 @@
 
     /**
      * This method will detach the current recycler view from its parent and attach it to the
-     * container which is a LinearLayout. Later the entire container is attached to the
-     * parent where the recycler view was set with the same layout params.
+     * container which is a LinearLayout. Later the entire container is attached to the parent where
+     * the recycler view was set with the same layout params.
      */
     private void installExternalScrollBar() {
-        ViewGroup parent = (ViewGroup) getParent();
-        mContainer = new LinearLayout(getContext());
         LayoutInflater inflater = LayoutInflater.from(getContext());
         inflater.inflate(R.layout.car_ui_recycler_view, mContainer, true);
+        mContainer.setVisibility(mContainerVisibility);
+        if (mContainerPadding != null) {
+            mContainer.setPadding(mContainerPadding.left, mContainerPadding.top,
+                    mContainerPadding.right, mContainerPadding.bottom);
+        } else if (mContainerPaddingRelative != null) {
+            mContainer.setPaddingRelative(mContainerPaddingRelative.left,
+                    mContainerPaddingRelative.top, mContainerPaddingRelative.right,
+                    mContainerPaddingRelative.bottom);
+        } else {
+            mContainer.setPadding(getPaddingLeft(), /* Top = */ 0,
+                    getPaddingRight(), /* Bottom = */ 0);
+            setPadding(/* Left = */ 0, getPaddingTop(),
+                    /* Right = */ 0, getPaddingBottom());
+        }
 
         mContainer.setLayoutParams(getLayoutParams());
-        mContainer.setVisibility(mContainerVisibility);
+        ViewGroup parent = (ViewGroup) getParent();
         int index = parent.indexOfChild(this);
-        parent.removeView(this);
-        ((FrameLayout) requireViewByRefId(mContainer, R.id.car_ui_recycler_view))
-                .addView(this,
-                        new FrameLayout.LayoutParams(
-                                ViewGroup.LayoutParams.MATCH_PARENT,
-                                ViewGroup.LayoutParams.MATCH_PARENT));
-        setVerticalScrollBarEnabled(false);
-        setHorizontalScrollBarEnabled(false);
+
+        parent.removeViewInLayout(this);
+
+        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
+                ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+        ((CarUiRecyclerViewContainer) requireViewByRefId(mContainer, R.id.car_ui_recycler_view))
+                .addRecyclerView(this, params);
         parent.addView(mContainer, index);
 
         createScrollBarFromConfig(requireViewByRefId(mContainer, R.id.car_ui_scroll_bar));
@@ -332,26 +397,64 @@
 
         mScrollBar.initialize(this, scrollView);
 
-        mScrollBar.setPadding((int) mScrollBarPaddingStart, (int) mScrollBarPaddingEnd);
+        setScrollBarPadding(mScrollBarPaddingTop, mScrollBarPaddingBottom);
     }
 
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
         mCarUxRestrictionsUtil.unregister(mListener);
+        this.getViewTreeObserver().removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
+    }
+
+    @Override
+    public void setAlpha(float value) {
+        if (mScrollBarEnabled) {
+            mContainer.setAlpha(value);
+        } else {
+            super.setAlpha(value);
+        }
+    }
+
+    @Override
+    public ViewPropertyAnimator animate() {
+        return mScrollBarEnabled ? mContainer.animate() : super.animate();
+    }
+
+    @Override
+    public void setPadding(int left, int top, int right, int bottom) {
+        super.setPadding(0, top, 0, bottom);
+        mContainerPaddingRelative = null;
+        mContainerPadding = new Rect(left, 0, right, 0);
+        if (mContainer != null) {
+            mContainer.setPadding(left, 0, right, 0);
+        }
+        setScrollBarPadding(mScrollBarPaddingTop, mScrollBarPaddingBottom);
+    }
+
+    @Override
+    public void setPaddingRelative(int start, int top, int end, int bottom) {
+        super.setPaddingRelative(0, top, 0, bottom);
+        mContainerPadding = null;
+        mContainerPaddingRelative = new Rect(start, 0, end, 0);
+        if (mContainer != null) {
+            mContainer.setPaddingRelative(start, 0, end, 0);
+        }
+        setScrollBarPadding(mScrollBarPaddingTop, mScrollBarPaddingBottom);
     }
 
     /**
-     * Sets the scrollbar's padding start (top) and end (bottom).
-     * This padding is applied in addition to the padding of the inner RecyclerView.
+     * Sets the scrollbar's padding top and bottom. This padding is applied in addition to the
+     * padding of the RecyclerView.
      */
-    public void setScrollBarPadding(int paddingStart, int paddingEnd) {
+    public void setScrollBarPadding(int paddingTop, int paddingBottom) {
         if (mScrollBarEnabled) {
-            mScrollBarPaddingStart = paddingStart;
-            mScrollBarPaddingEnd = paddingEnd;
+            mScrollBarPaddingTop = paddingTop;
+            mScrollBarPaddingBottom = paddingBottom;
 
             if (mScrollBar != null) {
-                mScrollBar.setPadding(paddingStart, paddingEnd);
+                mScrollBar.setPadding(paddingTop + getPaddingTop(),
+                        paddingBottom + getPaddingBottom());
             }
         }
     }
@@ -365,6 +468,28 @@
         return super.getLayoutManager();
     }
 
+    /**
+     * Sets divider item decoration for linear layout.
+     */
+    public void setLinearDividerItemDecoration(boolean enableDividers) {
+        if (enableDividers) {
+            addItemDecoration(mDividerItemDecorationLinear);
+            return;
+        }
+        removeItemDecoration(mDividerItemDecorationLinear);
+    }
+