diff --git a/car-apps-common/Android.bp b/car-apps-common/Android.bp
index ef94de8..4f9ef51 100644
--- a/car-apps-common/Android.bp
+++ b/car-apps-common/Android.bp
@@ -25,8 +25,10 @@
         enabled: false,
     },
 
-    libs: ["android.car-stubs"],
+    libs: ["android.car-stubs",],
+
     sdk_version: "system_current",
+    min_sdk_version: "28",
 
     static_libs: [
         "androidx.annotation_annotation",
diff --git a/car-ui-lib/res/color/car_ui_text_color_primary.xml b/car-apps-common/res/color/primary_text_color.xml
similarity index 100%
copy from car-ui-lib/res/color/car_ui_text_color_primary.xml
copy to car-apps-common/res/color/primary_text_color.xml
diff --git a/car-ui-lib/res/color/car_ui_text_color_secondary.xml b/car-apps-common/res/color/secondary_text_color.xml
similarity index 100%
copy from car-ui-lib/res/color/car_ui_text_color_secondary.xml
copy to car-apps-common/res/color/secondary_text_color.xml
diff --git a/car-apps-common/res/color/uxr_button_text_color_selector.xml b/car-apps-common/res/color/uxr_button_text_color_selector.xml
deleted file mode 100644
index 08b64e1..0000000
--- a/car-apps-common/res/color/uxr_button_text_color_selector.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.
-  -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:app="http://schemas.android.com/apk/res-auto">
-    <item app:state_ux_restricted="true" android:color="@color/uxr_button_text_disabled_color"/>
-    <item app:state_ux_restricted="false" android:color="@color/uxr_button_text_color"/>
-</selector>
diff --git a/car-apps-common/res/drawable/control_bar_button_background.xml b/car-apps-common/res/drawable/control_bar_button_background.xml
index 7009ecd..2c6e1f2 100644
--- a/car-apps-common/res/drawable/control_bar_button_background.xml
+++ b/car-apps-common/res/drawable/control_bar_button_background.xml
@@ -18,9 +18,13 @@
  -->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_focused="true">
-        <ripple android:color="@color/car_ui_rotary_focus_color"
-                android:radius="@dimen/control_bar_button_background_radius">
-        </ripple>
+        <shape android:shape="oval">
+            <solid android:color="@color/car_ui_rotary_focus_fill_color"/>
+            <stroke android:width="@dimen/car_ui_rotary_focus_stroke_width"
+                    android:color="@color/car_ui_rotary_focus_stroke_color" />
+            <size android:width="@dimen/control_bar_button_background_radius"
+                  android:height="@dimen/control_bar_button_background_radius"/>
+        </shape>
     </item>
     <item>
         <ripple android:color="@color/control_bar_button_background_color"
diff --git a/car-apps-common/res/drawable/hero_button_background.xml b/car-apps-common/res/drawable/hero_button_background.xml
index 88177cd..e036f4a 100644
--- a/car-apps-common/res/drawable/hero_button_background.xml
+++ b/car-apps-common/res/drawable/hero_button_background.xml
@@ -13,12 +13,23 @@
 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_card_ripple_background">
-    <item>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_focused="true">
         <shape android:shape="rectangle">
-            <solid android:color="@color/hero_button_background_color" />
+            <solid android:color="@color/car_ui_rotary_focus_fill_color"/>
+            <stroke android:width="@dimen/car_ui_rotary_focus_stroke_width"
+                    android:color="@color/car_ui_rotary_focus_stroke_color" />
             <corners android:radius="@dimen/hero_button_corner_radius"/>
         </shape>
     </item>
-</ripple>
+    <item>
+        <ripple android:color="@color/car_card_ripple_background">
+            <item>
+                <shape android:shape="rectangle">
+                    <solid android:color="@color/hero_button_background_color" />
+                    <corners android:radius="@dimen/hero_button_corner_radius"/>
+                </shape>
+            </item>
+        </ripple>
+    </item>
+</selector>
diff --git a/car-apps-common/res/values-h600dp/dimens.xml b/car-apps-common/res/values-h600dp/dimens.xml
deleted file mode 100644
index dcbea47..0000000
--- a/car-apps-common/res/values-h600dp/dimens.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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.
--->
-<resources>
-    <dimen name="control_bar_button_background_radius">48dp</dimen>
-    <dimen name="control_bar_button_size">96dp</dimen>
-    <dimen name="control_bar_button_padding">26dp</dimen>
-    <dimen name="minimized_control_bar_button_size">96dp</dimen>
-</resources>
diff --git a/car-apps-common/res/values-night/colors.xml b/car-apps-common/res/values-night/colors.xml
index 6a2f4cf..a0a9c3a 100644
--- a/car-apps-common/res/values-night/colors.xml
+++ b/car-apps-common/res/values-night/colors.xml
@@ -21,9 +21,6 @@
     <color name="scrim_overlay_color">#D6000000</color>
     <color name="minimized_control_bar_background_color">#E00E1013</color>
 
-    <color name="primary_text_color">#E0FFFFFF</color>
-    <color name="secondary_text_color">#99FFFFFF</color>
-
     <color name="primary_app_icon_color">#E0FFFFFF</color>
     <color name="secondary_app_icon_color">#99FFFFFF</color>
 
diff --git a/car-apps-common/res/values-w1280dp/styles.xml b/car-apps-common/res/values-w1280dp/styles.xml
index c810097..71af982 100644
--- a/car-apps-common/res/values-w1280dp/styles.xml
+++ b/car-apps-common/res/values-w1280dp/styles.xml
@@ -20,4 +20,9 @@
         <item name="android:layout_width">@dimen/control_bar_width</item>
         <item name="android:layout_height">wrap_content</item>
     </style>
+
+    <style name="MinimizedControlBar">
+        <item name="android:layout_width">@dimen/control_bar_width</item>
+        <item name="android:layout_height">@dimen/minimized_control_bar_height</item>
+    </style>
 </resources>
diff --git a/car-apps-common/res/values/colors.xml b/car-apps-common/res/values/colors.xml
index 6cf7ba7..45a0a18 100644
--- a/car-apps-common/res/values/colors.xml
+++ b/car-apps-common/res/values/colors.xml
@@ -38,7 +38,7 @@
     <color name="improper_image_refs_tint_color">#C8FF0000</color>
 
     <color name="control_bar_background_color">@android:color/transparent</color>
-    <color name="minimized_control_bar_background_color">#F50E1013</color>
+    <color name="minimized_control_bar_background_color">#D60E1013</color>
     <color name="scrim_overlay_color">#C7000000</color>
     <color name="app_bar_background_color">#E0000000</color>
     <color name="icon_tint">@color/car_grey_50</color>
@@ -50,9 +50,6 @@
     <color name="car_tab_unselected_color_dark">#80FFFFFF</color>
     <color name="car_tab_unselected_color_light">#90FFFFFF</color>
 
-    <color name="primary_text_color">#FFFFFFFF</color>
-    <color name="secondary_text_color">#B8FFFFFF</color>
-
     <color name="primary_app_icon_color">#FFFFFFFF</color>
     <color name="secondary_app_icon_color">#B8FFFFFF</color>
     <color name="car_card_ripple_background">#17000000</color>
@@ -60,14 +57,12 @@
     <color name="background_image_30p_black">#4D000000</color>
 
     <color name="uxr_button_image_color">@color/primary_app_icon_color</color>
-    <color name="uxr_button_text_color">@color/primary_text_color</color>
     <color name="uxr_button_image_disabled_color">#80FFFFFF</color>
-    <color name="uxr_button_text_disabled_color">#80FFFFFF</color>
 
     <color name="control_bar_button_background_color">#66ffffff</color>
 
     <color name="hero_button_background_color">@color/car_grey_868</color>
-    <color name="hero_button_text_color">@color/uxr_button_text_color_selector</color>
+    <color name="hero_button_text_color">@color/primary_text_color</color>
 
 
 
diff --git a/car-apps-common/res/values/dimens.xml b/car-apps-common/res/values/dimens.xml
index 85f6d90..c87fa6b 100644
--- a/car-apps-common/res/values/dimens.xml
+++ b/car-apps-common/res/values/dimens.xml
@@ -26,12 +26,12 @@
     <dimen name="control_bar_height">128dp</dimen>
     <dimen name="control_bar_margin_x">@dimen/car_ui_margin</dimen>
     <dimen name="control_bar_margin_bottom">@dimen/car_ui_padding_2</dimen>
-    <dimen name="control_bar_button_size">76dp</dimen>
+    <dimen name="control_bar_button_size">104dp</dimen>
     <dimen name="control_bar_button_slot_height">@dimen/control_bar_height</dimen>
     <dimen name="control_bar_button_slot_width">@dimen/control_bar_button_size</dimen>
     <dimen name="control_bar_elevation">0dp</dimen>
-    <dimen name="control_bar_button_padding">16dp</dimen>
-    <dimen name="control_bar_button_background_radius">38dp</dimen>
+    <dimen name="control_bar_button_padding">30dp</dimen>
+    <dimen name="control_bar_button_background_radius">52dp</dimen>
 
     <!-- Overflow button in control Bar -->
     <dimen name="overflow_button_icon_size">44dp</dimen>
@@ -46,7 +46,7 @@
     <dimen name="minimized_control_bar_edge_padding">@dimen/car_ui_padding_4</dimen>
     <dimen name="minimized_control_bar_text_padding">@dimen/car_ui_padding_3</dimen>
     <dimen name="minimized_control_bar_button_padding">@dimen/car_ui_padding_5</dimen>
-    <dimen name="minimized_control_bar_button_size">76dp</dimen>
+    <dimen name="minimized_control_bar_button_size">104dp</dimen>
 
     <!-- Tabs -->
     <dimen name="car_tab_width">135dp</dimen>
diff --git a/car-apps-common/src/com/android/car/apps/common/ControlBar.java b/car-apps-common/src/com/android/car/apps/common/ControlBar.java
index 5d6d76c..88d4dae 100644
--- a/car-apps-common/src/com/android/car/apps/common/ControlBar.java
+++ b/car-apps-common/src/com/android/car/apps/common/ControlBar.java
@@ -41,6 +41,8 @@
 import androidx.core.util.Preconditions;
 import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
 
+import com.android.car.apps.common.util.ViewUtils;
+
 import java.util.Locale;
 
 
@@ -258,7 +260,7 @@
                 viewToUse = mViews[viewsIndex];
                 viewsIndex++;
             }
-            setView(viewToUse, mSlots[i]);
+            ViewUtils.setView(viewToUse, mSlots[i]);
             if (viewToUse != null) {
                 lastUsedIndex = i;
             }
@@ -290,31 +292,6 @@
         }
     }
 
-    private void setView(@Nullable View view, FrameLayout container) {
-        if (view != null) {
-            // Don't set the view if it stays the same.
-            if (container.getChildCount() == 1 && container.getChildAt(0) == view) {
-                return;
-            }
-
-            ViewGroup parent = (ViewGroup) view.getParent();
-            // As we are removing views (on BT disconnect, for example), some items will be
-            // shifting from expanded to collapsed (like Queue item) - remove those from the
-            // group before adding to the new slot
-            if (view.getParent() != null) {
-                parent.removeView(view);
-            }
-            container.removeAllViews();
-            container.addView(view);
-            container.setVisibility(VISIBLE);
-        } else {
-            if (container.getChildCount() != 0) {
-                container.removeAllViews();
-            }
-            container.setVisibility(INVISIBLE);
-        }
-    }
-
     private void onExpandCollapse() {
         mIsExpanded = !mIsExpanded;
         if (mExpandCollapseView != null) {
diff --git a/car-apps-common/src/com/android/car/apps/common/MinimizedControlBar.java b/car-apps-common/src/com/android/car/apps/common/MinimizedControlBar.java
index 7158f44..2eeb1b8 100644
--- a/car-apps-common/src/com/android/car/apps/common/MinimizedControlBar.java
+++ b/car-apps-common/src/com/android/car/apps/common/MinimizedControlBar.java
@@ -21,7 +21,6 @@
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
 import android.widget.ImageView;
@@ -30,6 +29,8 @@
 import androidx.annotation.Nullable;
 import androidx.constraintlayout.widget.ConstraintLayout;
 
+import com.android.car.apps.common.util.ViewUtils;
+
 /**
  * This is a compact CarControlBar that provides a fixed number of controls (with no overflow),
  * along with some metadata (title, subtitle, icon)
@@ -122,25 +123,7 @@
                 viewToUse = mViews[viewIndex];
                 viewIndex++;
             }
-            setView(viewToUse, mSlots[CarControlBar.getSlotIndex(i, NUM_COLUMNS)]);
+            ViewUtils.setView(viewToUse, mSlots[CarControlBar.getSlotIndex(i, NUM_COLUMNS)]);
         }
     }
-
-    private void setView(@Nullable View view, FrameLayout container) {
-        container.removeAllViews();
-        if (view != null) {
-            ViewGroup parent = (ViewGroup) view.getParent();
-            // As we are removing views (on BT disconnect, for example), some items will be
-            // shifting from expanded to collapsed - remove those from the group before adding to
-            // the new slot
-            if (view.getParent() != null) {
-                parent.removeView(view);
-            }
-            container.addView(view);
-            container.setVisibility(VISIBLE);
-        } else {
-            container.setVisibility(INVISIBLE);
-        }
-    }
-
 }
diff --git a/car-apps-common/src/com/android/car/apps/common/util/ViewUtils.java b/car-apps-common/src/com/android/car/apps/common/util/ViewUtils.java
index e067573..a6cc870 100644
--- a/car-apps-common/src/com/android/car/apps/common/util/ViewUtils.java
+++ b/car-apps-common/src/com/android/car/apps/common/util/ViewUtils.java
@@ -16,11 +16,16 @@
 
 package com.android.car.apps.common.util;
 
+import static android.view.View.INVISIBLE;
+import static android.view.View.VISIBLE;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
@@ -100,7 +105,7 @@
                 .setListener(new AnimatorListenerAdapter() {
                     @Override
                     public void onAnimationStart(Animator animation) {
-                        view.setVisibility(View.VISIBLE);
+                        view.setVisibility(VISIBLE);
                     }
                 })
                 .alpha(1f);
@@ -123,7 +128,7 @@
     /** Sets the visibility of the (optional) view to {@link View#VISIBLE} or {@link View#GONE}. */
     public static void setVisible(@Nullable View view, boolean visible) {
         if (view != null) {
-            view.setVisibility(visible ? View.VISIBLE : View.GONE);
+            view.setVisibility(visible ? VISIBLE : View.GONE);
         }
     }
 
@@ -139,7 +144,7 @@
      */
     public static void setInvisible(@Nullable View view, boolean invisible) {
         if (view != null) {
-            view.setVisibility(invisible ? View.INVISIBLE : View.VISIBLE);
+            view.setVisibility(invisible ? INVISIBLE : VISIBLE);
         }
     }
 
@@ -201,4 +206,30 @@
         viewIds.recycle();
         return views;
     }
+
+    /** Adds the {@code view} into the {@code container}. */
+    public static void setView(@Nullable View view, FrameLayout container) {
+        if (view != null) {
+            // Don't set the view if it stays the same.
+            if (container.getChildCount() == 1 && container.getChildAt(0) == view) {
+                return;
+            }
+
+            ViewGroup parent = (ViewGroup) view.getParent();
+            // As we are removing views (on BT disconnect, for example), some items will be
+            // shifting from expanded to collapsed (like Queue item) - remove those from the
+            // group before adding to the new slot
+            if (view.getParent() != null) {
+                parent.removeView(view);
+            }
+            container.removeAllViews();
+            container.addView(view);
+            container.setVisibility(VISIBLE);
+        } else {
+            if (container.getChildCount() != 0) {
+                container.removeAllViews();
+            }
+            container.setVisibility(INVISIBLE);
+        }
+    }
 }
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-broadcastradio-support/res/values-bs/strings.xml b/car-broadcastradio-support/res/values-bs/strings.xml
index 42ff388..e29e90e 100644
--- a/car-broadcastradio-support/res/values-bs/strings.xml
+++ b/car-broadcastradio-support/res/values-bs/strings.xml
@@ -20,5 +20,5 @@
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
     <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
     <string name="program_list_text" msgid="4414150317304422313">"Stanice"</string>
-    <string name="favorites_list_text" msgid="7829827713977109155">"Omiljeni"</string>
+    <string name="favorites_list_text" msgid="7829827713977109155">"Omiljeno"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-is/strings.xml b/car-broadcastradio-support/res/values-is/strings.xml
index 1a2074a..b7e9135 100644
--- a/car-broadcastradio-support/res/values-is/strings.xml
+++ b/car-broadcastradio-support/res/values-is/strings.xml
@@ -20,5 +20,5 @@
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
     <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
     <string name="program_list_text" msgid="4414150317304422313">"Stöðvar"</string>
-    <string name="favorites_list_text" msgid="7829827713977109155">"Eftirlæti"</string>
+    <string name="favorites_list_text" msgid="7829827713977109155">"Uppáhald"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ky/strings.xml b/car-broadcastradio-support/res/values-ky/strings.xml
index 4640491..ee67f46 100644
--- a/car-broadcastradio-support/res/values-ky/strings.xml
+++ b/car-broadcastradio-support/res/values-ky/strings.xml
@@ -20,5 +20,5 @@
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
     <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
     <string name="program_list_text" msgid="4414150317304422313">"Станциялар"</string>
-    <string name="favorites_list_text" msgid="7829827713977109155">"Сүйүктүүлөр"</string>
+    <string name="favorites_list_text" msgid="7829827713977109155">"Тандалмалар"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-uz/strings.xml b/car-broadcastradio-support/res/values-uz/strings.xml
index 5ff7a60..bfb89d7 100644
--- a/car-broadcastradio-support/res/values-uz/strings.xml
+++ b/car-broadcastradio-support/res/values-uz/strings.xml
@@ -20,5 +20,5 @@
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
     <string name="radio_dab_text" msgid="8456449462266648979">"Raqamli radio"</string>
     <string name="program_list_text" msgid="4414150317304422313">"Radiostansiyalar"</string>
-    <string name="favorites_list_text" msgid="7829827713977109155">"Saralanganlar"</string>
+    <string name="favorites_list_text" msgid="7829827713977109155">"Saralangan"</string>
 </resources>
diff --git a/car-media-common/res/drawable/seekbar_background.xml b/car-media-common/res/drawable/seekbar_background.xml
deleted file mode 100644
index fcd06a2..0000000
--- a/car-media-common/res/drawable/seekbar_background.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:id="@android:id/background"
-        android:drawable="@android:color/transparent" />
-
-    <item android:id="@android:id/secondaryProgress">
-        <scale android:scaleWidth="100%"
-            android:drawable="@android:color/transparent" />
-    </item>
-
-    <item android:id="@android:id/progress">
-        <scale android:scaleWidth="100%"
-            android:drawable="@drawable/progressbar" />
-    </item>
-
-</layer-list>
diff --git a/car-media-common/res/layout/minimized_play_pause_stop_button_layout.xml b/car-media-common/res/layout/minimized_play_pause_stop_button_layout.xml
new file mode 100644
index 0000000..38389b0
--- /dev/null
+++ b/car-media-common/res/layout/minimized_play_pause_stop_button_layout.xml
@@ -0,0 +1,42 @@
+<?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.
+  -->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/play_pause_container"
+    android:focusable="false"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+    <!-- The invisible foreground ripple stops Android O from drawing an ugly square over the play button -->
+    <com.android.car.media.common.PlayPauseStopImageView
+        android:id="@+id/play_pause_stop"
+        style="@style/Widget.ActionButton"
+        android:foreground="@drawable/fab_empty_foreground"
+        android:src="@drawable/ic_play_pause_stop_animated"/>
+    <ProgressBar
+        android:id="@+id/circular_progress_bar"
+        android:layout_width="@dimen/fab_spinner_size"
+        android:layout_height="@dimen/fab_spinner_size"
+        android:layout_gravity="center"
+        android:padding="9dp"
+        android:indeterminateDrawable="@drawable/music_buffering"
+        android:indeterminateTint="@color/fab_spinner_indeterminate_color"
+        android:progressDrawable="@drawable/circular_progress_bar"
+        android:progressTint="@color/minimized_progress_bar_highlight"
+        android:progressBackgroundTint="@color/minimized_progress_bar_background"
+        android:focusable="false"
+        android:indeterminateOnly="false"/>
+</FrameLayout>
diff --git a/car-media-common/res/layout/playback_fragment.xml b/car-media-common/res/layout/playback_fragment.xml
index 5575087..bd77f74 100644
--- a/car-media-common/res/layout/playback_fragment.xml
+++ b/car-media-common/res/layout/playback_fragment.xml
@@ -14,32 +14,33 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<androidx.cardview.widget.CardView
+<com.android.car.ui.FocusArea
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_height="match_parent"
     android:layout_width="match_parent"
-    app:cardElevation="0dp"
-    app:cardCornerRadius="6dp">
+    android:layout_height="match_parent">
 
-    <com.android.car.apps.common.CrossfadeImageView
-        android:id="@+id/album_background"
-        android:foreground="?android:attr/selectableItemBackground"
-        android:layout_width="match_parent"
+    <androidx.cardview.widget.CardView
         android:layout_height="match_parent"
-        android:focusable="false"
-        android:scaleType="fitStart"/>
-
-    <View
-        android:id="@+id/playback_scrim"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="@color/album_art_scrim"
-        android:alpha="@dimen/album_art_scrim_alpha"/>
+        app:cardElevation="0dp"
+        app:cardCornerRadius="6dp">
 
-    <com.android.car.ui.FocusArea
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        <com.android.car.apps.common.CrossfadeImageView
+            android:id="@+id/album_background"
+            android:foreground="?android:attr/selectableItemBackground"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:focusable="false"
+            android:scaleType="fitStart"/>
+
+        <View
+            android:id="@+id/playback_scrim"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@color/album_art_scrim"
+            android:focusable="true"
+            android:alpha="@dimen/album_art_scrim_alpha"/>
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/playback_container"
@@ -96,6 +97,29 @@
                 app:layout_constraintEnd_toStartOf="@+id/app_selector_container"
                 app:layout_constraintTop_toBottomOf="@+id/title"/>
 
+            <com.android.car.apps.common.UxrTextView
+                android:id="@+id/error_message"
+                style="@style/FullScreenErrorMessageStyle"
+                android:layout_marginHorizontal="@dimen/playback_fragment_text_margin_x"
+                android:maxLines="@integer/widget_error_text_max_lines"
+                app:layout_constraintVertical_chainStyle="packed"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/app_name"
+                app:layout_constraintBottom_toTopOf="@+id/error_button"
+            />
+
+            <com.android.car.apps.common.UxrButton
+                android:id="@+id/error_button"
+                style="@style/FullScreenErrorButtonStyle"
+                android:layout_marginTop="@dimen/playback_fragment_error_button_margin_top"
+                android:layout_marginBottom="@dimen/playback_fragment_error_button_margin_bottom"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/error_message"
+                app:layout_constraintBottom_toBottomOf="parent"
+            />
+
             <FrameLayout
                 android:id="@+id/app_selector_container"
                 xmlns:android="http://schemas.android.com/apk/res/android"
@@ -129,6 +153,6 @@
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 
-    </com.android.car.ui.FocusArea>
+    </androidx.cardview.widget.CardView>
 
-</androidx.cardview.widget.CardView>
\ No newline at end of file
+</com.android.car.ui.FocusArea>
diff --git a/car-media-common/res/values-af/strings.xml b/car-media-common/res/values-af/strings.xml
index c4efced..81dc44c 100644
--- a/car-media-common/res/values-af/strings.xml
+++ b/car-media-common/res/values-af/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumkunswerk"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Titelloos"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Iets is fout. Probeer later."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Kan dit nie op die oomblik doen nie"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Hierdie program kan dit nie doen nie"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Meld aan om hierdie program te gebruik"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premiumtoegang word vereis"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Luister tans op te veel toestelle"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Daardie inhoud word geblokkeer"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Kan nie daardie inhoud hier kry nie"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Speel reeds daardie inhoud"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Kan nie meer snitte oorslaan nie"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Kon nie voltooi word nie. Probeer weer."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Daar is niks anders op die waglys nie"</string>
 </resources>
diff --git a/car-media-common/res/values-am/strings.xml b/car-media-common/res/values-am/strings.xml
index 9888274..1d89404 100644
--- a/car-media-common/res/values-am/strings.xml
+++ b/car-media-common/res/values-am/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"የአልበም ስነ ጥበብ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"ርዕስ የለም"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"የሆነ ችግር አለ። በኋላ ይሞክሩ።"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"አሁን ይህን ማድረግ አይቻልም"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ይህ መተግበሪያ ይህን ማድረግ አይችልም"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ይህን መተግበሪያ ለመጠቀም በመለያ ይግቡ"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ፕሪሚየም መዳረሻ ያስፈልጋል"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"ከልክ በላይ ብዙ በሆኑ መሣሪያዎች ላይ በማዳመጥ ላይ"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ይዘቱ ታግዷል"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ይዘቱን እዚህ ማግኘት አልተቻለም"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ይዘቱ አስቀድሞ በመጫወት ላይ"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ተጨማሪ ትራኮችን መዝለል አይቻልም"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"መጨረስ አልተቻለም። እንደገና ይሞክሩ።"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"ሌላ ምንም ነገር ወረፋ አልያዘም"</string>
 </resources>
diff --git a/car-media-common/res/values-ar/strings.xml b/car-media-common/res/values-ar/strings.xml
index 609709e..ca21255 100644
--- a/car-media-common/res/values-ar/strings.xml
+++ b/car-media-common/res/values-ar/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"صورة الألبوم"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"بلا عنوان"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"حدث خطأ. يُرجى المحاولة لاحقًا."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"يتعذّر على التطبيق تنفيذ هذا الإجراء في الوقت الحالي."</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"يتعذّر على التطبيق تنفيذ هذا الإجراء."</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"سجِّل دخولك لاستخدام هذا التطبيق."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"مطلوب الحصول على إذن وصول بحساب مدفوع."</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"يتم الآن الاستماع على أجهزة أكثر من الحدّ المسموح به."</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"تم حظر هذا المحتوى."</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"لا يمكن الحصول على هذا المحتوى من هنا."</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"جارٍ تشغيل هذا المحتوى."</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"لا يمكن تخطّي المزيد من المقاطع الصوتية."</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"تعذَّر الإنهاء. يُرجى إعادة المحاولة."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"لم يتم وضع أي مقطع صوتي آخر في قائمة الانتظار."</string>
 </resources>
diff --git a/car-media-common/res/values-as/strings.xml b/car-media-common/res/values-as/strings.xml
index 1513a5e..6bf03a7 100644
--- a/car-media-common/res/values-as/strings.xml
+++ b/car-media-common/res/values-as/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"এলবাম আৰ্ট"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"কোনো শিৰোনাম নাই"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"কিবা ভুল হ’ল। পাছত চেষ্টা কৰক।"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"সেইটো এই মুহূৰ্তত কৰিব নোৱাৰি"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"এই এপ্‌টোৱে সেইটো কৰিব নোৱাৰে"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"এই এপ্‌টো ব্যৱহাৰ কৰিবলৈ ছাইন ইন কৰক"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium এক্সেছৰ আৱশ্যক"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"বহুকেইটা ডিভাইচত শুনি আছে"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"সেই সমলটো অৱৰোধ কৰা আছে"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"সেই সমলটো ইয়াত পাব নোৱাৰি"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"সেই সমলটো ইতিমধ্যে প্লে’ হৈ আছে"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"আৰু ট্ৰেক এৰি যাব নোৱাৰি"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"সম্পূর্ণ কৰিব পৰা নগ’ল। পুনৰ চেষ্টা কৰক।"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"শাৰীত অন্য একো নাই"</string>
 </resources>
diff --git a/car-media-common/res/values-az/strings.xml b/car-media-common/res/values-az/strings.xml
index 9e8a836..80509ae 100644
--- a/car-media-common/res/values-az/strings.xml
+++ b/car-media-common/res/values-az/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albom təsviri"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Başlıq yoxdur"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Xəta baş verdi. Sonra cəhd edin."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Hazırda onu etmək olmur"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Bu tətbiq onu edə bilmir"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Bu tətbiqi istifadə etmək üçün daxil olun"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium giriş tələb olunur"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Çox cihazda dinləmə aşkarlanıb"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Bu məzmun bloklanıb"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Bu məzmunu əldə etmək mümkün deyil"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Hazırda bu məzmun oxudulur"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Başqa treki keçmək mümkün deyil"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Bitirmək mümkün olmadı. Yenidən cəhd edin."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Növbədə başqa heç nə yoxdur"</string>
 </resources>
diff --git a/car-media-common/res/values-b+sr+Latn/strings.xml b/car-media-common/res/values-b+sr+Latn/strings.xml
index 60ea824..26310be 100644
--- a/car-media-common/res/values-b+sr+Latn/strings.xml
+++ b/car-media-common/res/values-b+sr+Latn/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Omot albuma"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Bez naslova"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Došlo je do greške. Probajte kasnije."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Trenutno ne može to da uradi"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ova aplikacija ne može to da uradi"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Prijavite se da biste koristili ovu aplikaciju"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Potreban je premijum pristup"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Slušate na previše uređaja"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Taj sadržaj je blokiran"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Ne možete da dobijete taj sadržaj ovde"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Taj sadržaj se već reprodukuje"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Ne možete više da preskačete pesme"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nismo uspeli da dovršimo radnju. Probajte opet."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ništa drugo nije stavljeno u redosled"</string>
 </resources>
diff --git a/car-media-common/res/values-be/strings.xml b/car-media-common/res/values-be/strings.xml
index 4a98eab..d782e53 100644
--- a/car-media-common/res/values-be/strings.xml
+++ b/car-media-common/res/values-be/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Вокладка альбома"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Без назвы"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Узнікла памылка. Паўтарыце спробу пазней."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Не ўдаецца выканаць гэты запыт"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Дзеянне недаступна ў гэтай праграме"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Каб выкарыстоўваць гэту праграму, увайдзіце"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Патрабуецца платны доступ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Праслухоўванне адбываецца на занадта вялікай колькасці прылад"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Гэта змесціва заблакіравана"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"У вашым рэгіёне загрузіць гэта змесціва нельга"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Гэта змесціва ўжо прайграецца"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Прапускаць трэкі больш нельга"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Не ўдалося завяршыць. Паўтарыце спробу."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"У чарзе пуста"</string>
 </resources>
diff --git a/car-media-common/res/values-bg/strings.xml b/car-media-common/res/values-bg/strings.xml
index f595ed8..980e0fb 100644
--- a/car-media-common/res/values-bg/strings.xml
+++ b/car-media-common/res/values-bg/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Обложка на албума"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Няма заглавие"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Нещо не е наред. Опитайте по-късно."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Понастоящем тази заявка не може да се изпълни"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Приложението не може да изпълни тази заявка"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Влезте в профила си, за да използвате това приложение"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"За достъп се изисква платен профил"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Слуша се на твърде много устройства"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Това съдържание е блокирано"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Това съдържание не е налице за региона ви"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Това съдържание вече се възпроизвежда"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Не могат да се пропускат повече записи"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Не можа да завърши. Опитайте отново."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Няма нищо друго в опашката"</string>
 </resources>
diff --git a/car-media-common/res/values-bn/strings.xml b/car-media-common/res/values-bn/strings.xml
index c7366d7..d02e247 100644
--- a/car-media-common/res/values-bn/strings.xml
+++ b/car-media-common/res/values-bn/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"অ্যালবাম আর্ট"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"কোনও শীর্ষক নেই"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"কোনও সমস্যা হয়েছে। পরে চেষ্টা করুন।"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"এই কাজটি এখন করা যাবে না"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"এই অ্যাপে এই কাজটি করা যাবে না"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"এই অ্যাপ ব্যবহার করতে সাইন-ইন করুন"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium অ্যাক্সেস থাকতে হবে"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"একাধিক ডিভাইসে শোনা হচ্ছে"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ওই কন্টেন্টটি ব্লক করা আছে"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ওই কন্টেন্টটি এখানে পাওয়া যাবে না"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"কন্টেন্টটি আগে থেকেই চলছে"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"আর কোনও ট্র্যাক এড়িয়ে যেতে পারবেন না"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"সম্পূর্ণ করা যায়নি। আবার চেষ্টা করুন।"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"সারিতে আর কিছু নেই"</string>
 </resources>
diff --git a/car-media-common/res/values-bs/strings.xml b/car-media-common/res/values-bs/strings.xml
index 60ea824..4f1df52 100644
--- a/car-media-common/res/values-bs/strings.xml
+++ b/car-media-common/res/values-bs/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Omot albuma"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Bez naslova"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Nešto nije uredu. Pokušajte kasnije."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Taj zahtjev trenutno nije moguće izvršiti"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ova aplikacija ne može izvršiti taj zahtjev"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Prijavite se da koristite ovu aplikaciju"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Potreban je premijum pristup"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Previše je uređaja na kojima se sluša"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Sadržaj je blokiran"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Nije moguće preuzeti taj sadržaj ovdje"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Reproduciranje tog sadržaja je već u toku"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Ne možete više preskakati numere"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Dovršavanje nije uspjelo. Pokušajte ponovo."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ništa više nije postavljeno u red čekanja"</string>
 </resources>
diff --git a/car-media-common/res/values-ca/strings.xml b/car-media-common/res/values-ca/strings.xml
index c672d9b..7a44b13 100644
--- a/car-media-common/res/values-ca/strings.xml
+++ b/car-media-common/res/values-ca/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Imatge de l\'àlbum"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Sense títol"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"S\'ha produït un error. Prova-ho més tard."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Ara mateix aquesta acció no es pot dur a terme"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"L\'aplicació no pot dur a terme aquesta acció"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Inicia la sessió per utilitzar aquesta aplicació"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Es requereix accés Premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"S\'està escoltant contingut en massa dispositius"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Aquest contingut està bloquejat"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"El contingut no està disponible en aquesta regió"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Aquest contingut ja s\'està reproduint"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"No es poden saltar més cançons"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"No s\'ha pogut acabar. Torna-ho a provar."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"No hi ha res més a la cua"</string>
 </resources>
diff --git a/car-media-common/res/values-cs/strings.xml b/car-media-common/res/values-cs/strings.xml
index dfcffe0..0a45e6d 100644
--- a/car-media-common/res/values-cs/strings.xml
+++ b/car-media-common/res/values-cs/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Obal alba"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Bez názvu"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Někde se stala chyba. Zkuste to později."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Tuto akci teď nelze provést"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Tuto akci aplikace nedokáže provést"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Chcete-li aplikaci použít, přihlaste se"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Je vyžadován prémiový přístup"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Poslech je aktivován v příliš mnoha zařízeních"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Obsah je blokován"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Tento obsah tu nelze načíst"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Tento obsah se už přehrává"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Další skladby nelze přeskočit"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nelze dokončit. Zkuste to znovu."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ve frontě není nic dalšího"</string>
 </resources>
diff --git a/car-media-common/res/values-da/strings.xml b/car-media-common/res/values-da/strings.xml
index 1640516..a875184 100644
--- a/car-media-common/res/values-da/strings.xml
+++ b/car-media-common/res/values-da/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumgrafik"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Ingen titel"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Der er noget galt. Prøv senere."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Det er ikke muligt lige nu"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Det kan denne app ikke gøre"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Log ind for at bruge denne app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Dette kræver en Premium-konto"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Du lytter på for mange enheder"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Indholdet er blokeret"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Der er ikke adgang til indholdet her"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Indholdet afspilles allerede"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Du kan ikke springe flere numre over"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Handlingen kunne ikke afsluttes. Prøv igen."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Der er ikke mere i køen"</string>
 </resources>
diff --git a/car-media-common/res/values-de/strings.xml b/car-media-common/res/values-de/strings.xml
index 7bafae6..b5894cb 100644
--- a/car-media-common/res/values-de/strings.xml
+++ b/car-media-common/res/values-de/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumcover"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Kein Titel"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Ein Fehler ist aufgetreten. Versuch es später noch mal."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Das ist gerade nicht möglich"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Diese App kann das nicht"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Damit du diese App verwenden kannst, musst du dich zuerst anmelden"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premiumzugriff erforderlich"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Es wird auf zu vielen Geräten gleichzeitig gestreamt"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Der Inhalt ist gesperrt"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Der Inhalt kann hier nicht abgerufen werden"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Der Inhalt wird bereits wiedergegeben"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Du kannst keine weiteren Titel überspringen"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Die Aktion konnte nicht abgeschlossen werden. Versuch es noch einmal."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Es ist sonst nichts in der Warteschlange"</string>
 </resources>
diff --git a/car-media-common/res/values-el/strings.xml b/car-media-common/res/values-el/strings.xml
index 0b5de6d..9bc13cd 100644
--- a/car-media-common/res/values-el/strings.xml
+++ b/car-media-common/res/values-el/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Εξώφυλλο άλμπουμ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Χωρίς τίτλο"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Παρουσιάστηκε κάποιο πρόβλημα. Δοκιμάστε αργότερα."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Δεν είναι δυνατή η εκτέλεση του αιτήματος αυτήν τη στιγμή."</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Δεν είναι δυνατή η εκτέλεση του αιτήματος από αυτήν την εφαρμογή."</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Συνδεθείτε, για να χρησιμοποιήσετε αυτήν την εφαρμογή."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Απαιτείται premium πρόσβαση."</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Ακρόαση πάρα πολλών συσκευών"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Αυτό το περιεχόμενο είναι αποκλεισμένο."</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Δεν είναι δυνατή η λήψη αυτού του περιεχομένου εδώ."</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Γίνεται ήδη αναπαραγωγή αυτού του περιεχομένου."</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Δεν είναι δυνατή η παράβλεψη περισσότερων κομματιών."</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Δεν ήταν δυνατή η ολοκλήρωση. Δοκιμάστε ξανά."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Δεν υπάρχει κάτι άλλο στην ουρά."</string>
 </resources>
diff --git a/car-media-common/res/values-en-rAU/strings.xml b/car-media-common/res/values-en-rAU/strings.xml
index 98e3148..b9c3337 100644
--- a/car-media-common/res/values-en-rAU/strings.xml
+++ b/car-media-common/res/values-en-rAU/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Album Art"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"No title"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Something’s wrong. Try later."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Can’t do that at the moment"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"This app can’t do that"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Sign in to use this app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium access required"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Listening on too many devices"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"That content is blocked"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Can’t get that content here"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Already playing that content"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Can’t skip any more tracks"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Couldn’t finish. Try again."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nothing else is queued up"</string>
 </resources>
diff --git a/car-media-common/res/values-en-rCA/strings.xml b/car-media-common/res/values-en-rCA/strings.xml
index 98e3148..b9c3337 100644
--- a/car-media-common/res/values-en-rCA/strings.xml
+++ b/car-media-common/res/values-en-rCA/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Album Art"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"No title"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Something’s wrong. Try later."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Can’t do that at the moment"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"This app can’t do that"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Sign in to use this app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium access required"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Listening on too many devices"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"That content is blocked"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Can’t get that content here"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Already playing that content"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Can’t skip any more tracks"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Couldn’t finish. Try again."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nothing else is queued up"</string>
 </resources>
diff --git a/car-media-common/res/values-en-rGB/strings.xml b/car-media-common/res/values-en-rGB/strings.xml
index 98e3148..b9c3337 100644
--- a/car-media-common/res/values-en-rGB/strings.xml
+++ b/car-media-common/res/values-en-rGB/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Album Art"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"No title"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Something’s wrong. Try later."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Can’t do that at the moment"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"This app can’t do that"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Sign in to use this app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium access required"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Listening on too many devices"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"That content is blocked"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Can’t get that content here"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Already playing that content"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Can’t skip any more tracks"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Couldn’t finish. Try again."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nothing else is queued up"</string>
 </resources>
diff --git a/car-media-common/res/values-en-rIN/strings.xml b/car-media-common/res/values-en-rIN/strings.xml
index 98e3148..b9c3337 100644
--- a/car-media-common/res/values-en-rIN/strings.xml
+++ b/car-media-common/res/values-en-rIN/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Album Art"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"No title"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Something’s wrong. Try later."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Can’t do that at the moment"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"This app can’t do that"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Sign in to use this app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium access required"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Listening on too many devices"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"That content is blocked"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Can’t get that content here"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Already playing that content"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Can’t skip any more tracks"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Couldn’t finish. Try again."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nothing else is queued up"</string>
 </resources>
diff --git a/car-media-common/res/values-en-rXC/strings.xml b/car-media-common/res/values-en-rXC/strings.xml
index ecdf930..326c0ff 100644
--- a/car-media-common/res/values-en-rXC/strings.xml
+++ b/car-media-common/res/values-en-rXC/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎Album Art‎‏‎‎‏‎"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‏‎No Title‎‏‎‎‏‎"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎Something’s wrong. Try later.‎‏‎‎‏‎"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎Can’t do that right now‎‏‎‎‏‎"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎This app can’t do that‎‏‎‎‏‎"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‎‎Sign in to use this app‎‏‎‎‏‎"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎Premium access required‎‏‎‎‏‎"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎Listening on too many devices‎‏‎‎‏‎"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎That content is blocked‎‏‎‎‏‎"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎Can’t get that content here‎‏‎‎‏‎"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎Already playing that content‎‏‎‎‏‎"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎Can’t skip any more tracks‎‏‎‎‏‎"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎Couldn’t finish. Try again.‎‏‎‎‏‎"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎Nothing else is queued up‎‏‎‎‏‎"</string>
 </resources>
diff --git a/car-media-common/res/values-es-rUS/strings.xml b/car-media-common/res/values-es-rUS/strings.xml
index 18ba657..48d6213 100644
--- a/car-media-common/res/values-es-rUS/strings.xml
+++ b/car-media-common/res/values-es-rUS/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Imagen del álbum"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Sin título"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Se produjo un error. Vuelve a intentarlo más tarde."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"No se puede realizar esa acción en este momento"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Esta app no puede realizar esa acción"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Accede para usar esta app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Se requiere acceso Premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Se está escuchando contenido en demasiados dispositivos"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Ese contenido está bloqueado"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"No se puede acceder a ese contenido en esta región"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Ya se está reproduciendo ese contenido"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"No se pueden omitir más pistas"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"No se pudo completar la acción. Vuelve a intentarlo."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"No hay más contenido en la cola"</string>
 </resources>
diff --git a/car-media-common/res/values-es/strings.xml b/car-media-common/res/values-es/strings.xml
index 18ba657..f70760a 100644
--- a/car-media-common/res/values-es/strings.xml
+++ b/car-media-common/res/values-es/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Imagen del álbum"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Sin título"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Se ha producido un error. Inténtalo más tarde."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"No se puede hacer en estos momentos"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"No se puede hacer con esta aplicación"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Inicia sesión para utilizar esta aplicación"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Se necesita acceso premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Se está escuchando en demasiados dispositivos"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Ese contenido está bloqueado"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Aquí no se puede reproducir ese contenido"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Ya se está reproduciendo ese contenido"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"No se pueden saltar más pistas"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"No se ha podido finalizar. Inténtalo de nuevo."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"No hay nada más en la cola"</string>
 </resources>
diff --git a/car-media-common/res/values-et/strings.xml b/car-media-common/res/values-et/strings.xml
index 8ca4cf2..a5d7fc3 100644
--- a/car-media-common/res/values-et/strings.xml
+++ b/car-media-common/res/values-et/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumi kujundus"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Pealkiri puudub"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Midagi on valesti. Proovige hiljem."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Seda ei saa praegu teha"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"See rakendus ei saa seda teha"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Rakenduse kasutamiseks logige sisse"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Vaja on Premium-tasemel juurdepääsu"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Kuulatakse liiga paljudes seadmetes"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"See sisu on blokeeritud"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Seda sisu ei saa siin esitada"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Seda sisu juba esitatakse"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Rohkem lugusid ei saa vahele jätta"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Ei saanud lõpetada. Proovige uuesti."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Midagi muud pole järjekorras"</string>
 </resources>
diff --git a/car-media-common/res/values-eu/strings.xml b/car-media-common/res/values-eu/strings.xml
index 896aa2c..c989683 100644
--- a/car-media-common/res/values-eu/strings.xml
+++ b/car-media-common/res/values-eu/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumaren azala"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Izenik gabea"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Arazoren bat izan da. Saiatu geroago."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Ezin da egin halakorik une honetan"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Aplikazio honek ezin du egin halakorik"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Aplikazioa erabiltzeko, hasi saioa"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium-eko sarbidea behar da"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Gailu gehiegitatik jasotzen ari da soinua"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Eduki hori blokeatuta dago"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Ezin da eskuratu eduki hori lurralde honetan"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Dagoeneko ari da erreproduzitzen eduki hori"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Ezin da saltatu pista gehiagorik"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Ezin izan da amaitu ekintza. Saiatu berriro."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ez dago beste ezer ilaran"</string>
 </resources>
diff --git a/car-media-common/res/values-fa/strings.xml b/car-media-common/res/values-fa/strings.xml
index 24bac8e..b3168a0 100644
--- a/car-media-common/res/values-fa/strings.xml
+++ b/car-media-common/res/values-fa/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"عکس روی جلد آلبوم"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"بدون عنوان"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"مشکلی رخ داد. بعداً امتحان کنید."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"درحال‌حاضر انجام نمی‌شود"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"این برنامه نمی‌تواند این کار را انجام دهد"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"برای استفاده از این برنامه، به سیستم وارد شوید"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"دسترسی ممتاز لازم است"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"درحال گوش کردن به تعداد زیادی دستگاه"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"این محتوا مسدود شده است"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"نمی‌توان این محتوا را در اینجا دریافت کرد"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"این محتوا از قبل درحال پخش است"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"از هیچ آهنگ دیگری نمی‌توان رد شد"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"تکمیل نشد. دوباره امتحان کنید."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"هیچ مورد دیگری در صف پخش نیست"</string>
 </resources>
diff --git a/car-media-common/res/values-fi/strings.xml b/car-media-common/res/values-fi/strings.xml
index 0fcaaf5..c558794 100644
--- a/car-media-common/res/values-fi/strings.xml
+++ b/car-media-common/res/values-fi/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumin kansitaide"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Ei nimeä"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Jotain meni pieleen. Yritä myöhemmin."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Tämä ei juuri nyt onnistu"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Sovellus ei tue pyyntöä"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Kirjaudu sisään käyttääksesi tätä sovellusta"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Edellyttää premium-tilausta"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Kuuntelu käynnissä liian monella laitteella"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Tämä sisältö on estetty"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Sisältö ei ole saatavilla täällä"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Sisältöä toistetaan jo"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Enimmäismäärä kappaleita ohitettu"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Ei onnistunut. Yritä uudelleen."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ei muuta jonossa"</string>
 </resources>
diff --git a/car-media-common/res/values-fr-rCA/strings.xml b/car-media-common/res/values-fr-rCA/strings.xml
index 66e06e1..eb784b4 100644
--- a/car-media-common/res/values-fr-rCA/strings.xml
+++ b/car-media-common/res/values-fr-rCA/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Image de l\'album"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Aucun titre"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Une erreur s\'est produite. Réessayez plus tard."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Impossible d\'effectuer cette action pour le moment"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Cette application ne peut pas effectuer cette action"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Connectez-vous pour utiliser cette application"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Un accès payant est requis"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Écoute en cours sur trop d\'appareils"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Ce contenu est bloqué"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Impossible d\'obtenir ce contenu ici"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Ce contenu est déjà en cours de lecture"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Impossible de passer à d\'autres chansons"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Impossible de terminer l\'action. Réessayez."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Rien d\'autre n\'est dans la file d\'attente"</string>
 </resources>
diff --git a/car-media-common/res/values-fr/strings.xml b/car-media-common/res/values-fr/strings.xml
index dfbc082..8a86806 100644
--- a/car-media-common/res/values-fr/strings.xml
+++ b/car-media-common/res/values-fr/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Image de l\'album"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Sans titre"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Une erreur s\'est produite. Réessayez plus tard."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Impossible d\'effectuer cette opération pour le moment"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Cette application ne peut pas effectuer cette opération"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Connectez-vous pour utiliser cette application"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Accès Premium requis"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Écoute en cours sur trop d\'appareils"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Ce contenu est bloqué"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Impossible d\'accéder à ce contenu ici"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Ce contenu est déjà en cours de lecture"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Impossible de passer d\'autres titres"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Impossible de terminer l\'opération. Veuillez réessayer."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Aucun autre titre dans la file d\'attente"</string>
 </resources>
diff --git a/car-media-common/res/values-gl/strings.xml b/car-media-common/res/values-gl/strings.xml
index 6971016..a1a8fc5 100644
--- a/car-media-common/res/values-gl/strings.xml
+++ b/car-media-common/res/values-gl/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Portada de álbum"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Sen título"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Produciuse un problema. Téntao máis tarde."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Nestes momentos non se pode realizar a acción"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Esta aplicación non pode realizar a acción"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Inicia sesión para utilizar esta aplicación"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Requírese acceso premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Estase escoitando contido en demasiados dispositivos"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Ese contido está bloqueado"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Aquí non se pode acceder a ese contido"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Xa se está reproducindo ese contido"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Non se poden saltar máis pistas"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Non se puido completar a acción. Téntao de novo."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Non hai nada máis na cola"</string>
 </resources>
diff --git a/car-media-common/res/values-gu/strings.xml b/car-media-common/res/values-gu/strings.xml
index 569394f..b59fa2a 100644
--- a/car-media-common/res/values-gu/strings.xml
+++ b/car-media-common/res/values-gu/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"આલ્બમ આર્ટ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"કોઈ શીર્ષક નથી"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"કંઈક ખોટું થયું. થોડા સમય પછી પ્રયાસ કરો."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"તે અત્યારે કરી શકતા નથી"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"આ ઍપ તે કરી શકતી નથી"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"આ ઍપનો ઉપયોગ કરવા માટે સાઇન ઇન કરો"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"પ્રીમિયમ ઍક્સેસ જરૂરી છે"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"ઘણા બધા ડિવાઇસ પર સાંભળી રહ્યાં છે"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"તે કન્ટેન્ટ બ્લૉક કર્યું છે"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"તે કન્ટેન્ટ અહીં મેળવી શકાતું નથી"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"તે કન્ટેન્ટ પહેલાંથી ચલાવી રહ્યાં છે"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"કોઈ વધુ ટ્રૅક છોડી શકાતા નથી"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"સમાપ્ત કરી શક્યાં નથી. ફરી પ્રયાસ કરો."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"બીજું કંઈ કતારમાં નથી"</string>
 </resources>
diff --git a/car-media-common/res/values-hi/strings.xml b/car-media-common/res/values-hi/strings.xml
index f13088f..58fed76 100644
--- a/car-media-common/res/values-hi/strings.xml
+++ b/car-media-common/res/values-hi/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"एल्‍बम आर्ट"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"कोई शीर्षक नहीं"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"कोई गड़बड़ी हुई. बाद में कोशिश करें."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"अभी नहीं किया जा सकता"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"इस ऐप्लिकेशन पर यह काम नहीं किया जा सकता"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"इस ऐप्लिकेशन का इस्तेमाल करने के लिए साइन इन करें"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"इसके लिए Premium का ऐक्सेस ज़रूरी है"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"आप इसे बहुत सारे डिवाइस पर चला रहे/रही हैं"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"कॉन्टेंट पर रोक लगा दी गई है"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"यह कॉन्टेंट यहां नहीं चलाया जा सकता"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"यह कॉन्टेंट पहले से ही चल रहा है"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"इससे ज़्यादा गाने नहीं छोड़े जा सकते"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"कार्रवाई पूरी नहीं हो सकी. फिर से कोशिश करें."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"सूची में और कुछ नहीं है"</string>
 </resources>
diff --git a/car-media-common/res/values-hr/strings.xml b/car-media-common/res/values-hr/strings.xml
index 00e19d1..007109e 100644
--- a/car-media-common/res/values-hr/strings.xml
+++ b/car-media-common/res/values-hr/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Slika naslovnice albuma"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Bez naslova"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Nešto nije u redu. Pokušajte kasnije."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Trenutačno to ne možemo učiniti"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ova aplikacija nema tu mogućnost"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Prijavite se za upotrebu te aplikacije."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Potreban je pristup uz dodatnu naplatu"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Slušate na previše uređaja"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Taj je sadržaj blokiran"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Taj sadržaj nije dostupan ovdje"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Taj se sadržaj već reproducira"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Ne možete više preskakati pjesme"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Završavanje nije uspjelo. Pokušajte ponovo."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nema više ničeg u redu čekanja"</string>
 </resources>
diff --git a/car-media-common/res/values-hu/strings.xml b/car-media-common/res/values-hu/strings.xml
index 8631465..a56ebba 100644
--- a/car-media-common/res/values-hu/strings.xml
+++ b/car-media-common/res/values-hu/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Lemezborító"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Nincs cím"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Hiba történt. Próbálja újra később."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Jelenleg nem lehetséges"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ez az alkalmazás nem képes erre"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Az alkalmazás használatához jelentkezzen be"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Prémium hozzáférés szükséges"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Túl sok eszköz van használatban"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"A tartalom le van tiltva"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Nem lehet betölteni a tartalmat"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"A tartalom lejátszása már folyamatban van"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Nem lehet több számot átugrani"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nem sikerült befejezni. Próbálkozzon újra."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Semmi más nincs a sorban"</string>
 </resources>
diff --git a/car-media-common/res/values-hy/strings.xml b/car-media-common/res/values-hy/strings.xml
index 197a067..5fd71be 100644
--- a/car-media-common/res/values-hy/strings.xml
+++ b/car-media-common/res/values-hy/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Ալբոմի շապիկ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Անանուն"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Սխալ առաջացավ։ Փորձեք ավելի ուշ։"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Այս պահին հնարավոր չէ անել դա"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Հավելվածը չի աջակցում այդ գործողությունը"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Մուտք գործեք՝ հավելվածն օգտագործելու համար"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Անհրաժեշտ է պրեմիում հաշիվ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Չափից շատ սարքերում է բովանդակություն նվագարկվում"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Բովանդակությունն արգելափակված է"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Բովանդակությունն անհասանելի է այս տարածաշրջանում"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Բովանդակությունն արդեն նվագարկվում է"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Այլևս հնարավոր չէ կատարումներ բաց թողնել"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Չհաջողվեց ավարտել։ Նորից փորձեք։"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Հերթացանկը դատարկ է"</string>
 </resources>
diff --git a/car-media-common/res/values-in/strings.xml b/car-media-common/res/values-in/strings.xml
index e331c0a..3c287f2 100644
--- a/car-media-common/res/values-in/strings.xml
+++ b/car-media-common/res/values-in/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Sampul Album"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Tanpa Judul"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Terjadi masalah. Coba nanti."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Tidak dapat melakukannya saat ini"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Aplikasi ini tidak dapat melakukannya"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Login untuk menggunakan aplikasi ini"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Perlu akses premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Terlalu banyak perangkat digunakan untuk mendengarkan"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Konten tersebut diblokir"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Tidak dapat memuat konten tersebut di sini"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Sedang memutar konten tersebut"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Tidak dapat melewati lagu lagi"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Tidak dapat diselesaikan. Coba lagi."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Tidak ada antrean lagi"</string>
 </resources>
diff --git a/car-media-common/res/values-is/strings.xml b/car-media-common/res/values-is/strings.xml
index b26c4c6..34102e5 100644
--- a/car-media-common/res/values-is/strings.xml
+++ b/car-media-common/res/values-is/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Plötuumslag"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Enginn titill"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Eitthvað er ekki í lagi. Reyndu síðar."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Ekki er hægt að framkvæma þetta eins og er"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Forritið getur ekki framkvæmt þetta"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Skráðu þig inn til að nota þetta forrit"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium-aðgangur er nauðsynlegur"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Hlustað í of mörgum tækjum"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Þetta efni er á bannlista"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Efnið er ekki tiltækt hér"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Þegar að spila þetta efni"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Ekki er hægt að sleppa fleiri lögum"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Ekki tókst að ljúka aðgerð. Reyndu aftur."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ekkert annað er í röð"</string>
 </resources>
diff --git a/car-media-common/res/values-it/strings.xml b/car-media-common/res/values-it/strings.xml
index bab7f0a..d0ef413 100644
--- a/car-media-common/res/values-it/strings.xml
+++ b/car-media-common/res/values-it/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Copertina dell\'album"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Nessun titolo"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Si è verificato un problema. Prova più tardi."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Al momento non è possibile svolgere l\'operazione"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Questa app non supporta l\'azione richiesta"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Accedi per usare questa app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"È necessario l\'accesso Premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Ascolto attivo su troppi dispositivi"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Contenuti bloccati"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Qui non è possibile scaricare questi contenuti"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Contenuti già in riproduzione"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Impossibile saltare altre tracce"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Impossibile completare. Riprova."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nient\'altro in coda"</string>
 </resources>
diff --git a/car-media-common/res/values-iw/strings.xml b/car-media-common/res/values-iw/strings.xml
index 9e12f85..a0118e1 100644
--- a/car-media-common/res/values-iw/strings.xml
+++ b/car-media-common/res/values-iw/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"עטיפת אלבום"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"ללא שם"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"משהו השתבש. יש לנסות מאוחר יותר."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"לא ניתן לבצע את הפעולה הזו כרגע"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"אי אפשר לבצע פעולה זו באפליקציה הזו"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"יש להיכנס לחשבון כדי להשתמש באפליקציה הזו"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"נדרשת גישה ל-Premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"מתבצעת האזנה ביותר מדי מכשירים"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"התוכן הזה חסום"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"לא ניתן לקבל את התוכן הזה כאן"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"התוכן הזה כבר פועל"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"לא ניתן לדלג יותר על טראקים"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"לא ניתן היה לסיים. יש לנסות שוב."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"אין עוד שירים ברשימת השירים"</string>
 </resources>
diff --git a/car-media-common/res/values-ja/strings.xml b/car-media-common/res/values-ja/strings.xml
index 8d46866..b1a0da3 100644
--- a/car-media-common/res/values-ja/strings.xml
+++ b/car-media-common/res/values-ja/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"アルバムアート"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"タイトルなし"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"エラーが発生しました。しばらくしてからお試しください。"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"現在、利用できません"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"このアプリではサポートされていません"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"このアプリを使用するにはログインしてください"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"プレミアム アカウントが必要です"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"再生しているデバイスが多すぎます"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"このコンテンツはブロックされています"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"このコンテンツはこの地域では利用できません"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"このコンテンツはすでに再生中です"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"これ以上トラックをスキップできません"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"完了できません。もう一度お試しください。"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"キューが一杯で追加できません"</string>
 </resources>
diff --git a/car-media-common/res/values-ka/strings.xml b/car-media-common/res/values-ka/strings.xml
index 1e467fe..39b2549 100644
--- a/car-media-common/res/values-ka/strings.xml
+++ b/car-media-common/res/values-ka/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ალბომის გარეკანი"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"უსათაურო"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"წარმოიქმნა შეფერხება. ცადეთ მოგვიანებით."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ამჟამად ამის გაკეთება შეუძლებელია"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ეს აპი ამას ვერ გააკეთებს"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ამ აპით სარგებლობისთვის შედით სისტემაში"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"საჭიროა პრემიუმ ტიპის წვდომა"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"მოსმენა მიმდინარეობს მეტისმეტად ბევრ მოწყობილობაზე"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ეს კონტენტი დაბლოკილია"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ამ კონტენტს აქ ვერ მიიღებთ"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ეს კონტენტი უკვე იკვრება"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"მეტ ჩანაწერს ვერ გამოტოვებთ"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"დასრულება ვერ მოხერხდა. ცადეთ ხელახლა."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"რიგში აღარაფერია"</string>
 </resources>
diff --git a/car-media-common/res/values-kk/strings.xml b/car-media-common/res/values-kk/strings.xml
index ec84f1a..0225852 100644
--- a/car-media-common/res/values-kk/strings.xml
+++ b/car-media-common/res/values-kk/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Альбом мұқабасы"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Атауы жоқ"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Бірдеңе дұрыс емес. Кейінірек қайталап көріңіз."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Мұны дәл қазір істеу мүмкін емес."</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Бұл қолданба мұны істей алмайды."</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Бұл қолданбаны пайдалану үшін есептік жазбаға кіріңіз."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Премиум рұқсат қажет."</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Тым көп құрылғыларда тыңдалып жатыр."</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Бұл мазмұнға тыйым салынған."</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Мазмұнды алу мүмкін емес."</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Әлдеқашан ойнатылып жатыр."</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Басқа тректерді өткізіп жіберу мүмкін емес."</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Аяқталмады. Қайталап көріңіз."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Кезекке басқа ештеңе қойылмаған."</string>
 </resources>
diff --git a/car-media-common/res/values-km/strings.xml b/car-media-common/res/values-km/strings.xml
index a9320b1..95399ff 100644
--- a/car-media-common/res/values-km/strings.xml
+++ b/car-media-common/res/values-km/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"​ក្រប​អាល់ប៊ុម"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"គ្មាន​ចំណងជើងទេ"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"មានអ្វីមួយ​ខុស​ប្រក្រតី។ សូមព្យាយាម​នៅពេលក្រោយ។"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"មិនអាច​ធ្វើតាមសំណើនោះ​ឥឡូវនេះ​បានទេ"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"កម្មវិធីនេះ​មិនអាចធ្វើ​តាមសំណើនោះ​បានទេ"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ចូលគណនី ដើម្បីប្រើកម្មវិធីនេះ"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"តម្រូវឱ្យមាន​ការចូលប្រើ​លំដាប់ខ្ពស់"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"កំពុងស្ដាប់​នៅលើ​ឧបករណ៍​ច្រើនពេក"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ខ្លឹមសារនោះ​ត្រូវបានទប់ស្កាត់"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"មិនអាច​យក​ខ្លឹមសារនោះ​នៅទីនេះ​បានទេ"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"កំពុងចាក់​ខ្លឹមសារនោះ​ស្រាប់ហើយ"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"មិនអាច​រំលងចម្រៀង​បានទៀតទេ"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"មិនអាច​បញ្ចប់បានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"មិនមានអ្វី​ផ្សេងទៀត​នៅក្នុង​ជួរទេ"</string>
 </resources>
diff --git a/car-media-common/res/values-kn/strings.xml b/car-media-common/res/values-kn/strings.xml
index 4a02cfd..e690790 100644
--- a/car-media-common/res/values-kn/strings.xml
+++ b/car-media-common/res/values-kn/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ಆಲ್ಬಮ್ ಕಲೆ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"ಯಾವುದೇ ಶೀರ್ಷಿಕೆಯಿಲ್ಲ"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"ಏನೋ ತಪ್ಪಾಗಿದೆ. ನಂತರ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ಸದ್ಯಕ್ಕೆ ಅದನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ಈ ಆ್ಯಪ್‌ನಿಂದ ಅದನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ಈ ಆ್ಯಪ್ ಬಳಸಲು ಸೈನ್ ಇನ್ ಮಾಡಿ"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ಪ್ರೀಮಿಯಂ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"ಹಲವಾರು ಸಾಧನಗಳಲ್ಲಿ ಆಲಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ವಿಷಯವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ಆ ವಿಷಯವನ್ನು ಇಲ್ಲಿ ಪಡೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ಈಗಾಗಲೇ ಆ ವಿಷಯವನ್ನು ಪ್ಲೇ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ಇನ್ನು ಮುಂದೆ ಟ್ರ್ಯಾಕ್‌ಗಳನ್ನು ಸ್ಕಿಪ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"ಸರದಿಯಲ್ಲಿ ಯಾವುದು ಬಾಕಿ ಉಳಿದಿಲ್ಲ"</string>
 </resources>
diff --git a/car-media-common/res/values-ko/strings.xml b/car-media-common/res/values-ko/strings.xml
index 568f6de..d50fd0f 100644
--- a/car-media-common/res/values-ko/strings.xml
+++ b/car-media-common/res/values-ko/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"앨범아트"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"제목 없음"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"문제가 발생했습니다. 나중에 다시 시도해 주세요."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"지금은 요청한 작업을 할 수 없습니다."</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"요청한 작업이 이 앱에서 지원되지 않습니다."</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"이 앱을 사용하려면 로그인하세요."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"프리미엄 액세스 권한이 필요합니다."</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"너무 많은 기기에서 스트리밍하고 있습니다."</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"차단된 콘텐츠입니다."</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"이 지역에서 재생할 수 없는 콘텐츠입니다."</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"요청한 콘텐츠가 이미 재생 중입니다."</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"트랙을 더 이상 건너뛸 수 없습니다."</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"완료할 수 없습니다. 다시 시도해 주세요."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"현재 재생목록이 비어있습니다."</string>
 </resources>
diff --git a/car-media-common/res/values-ky/strings.xml b/car-media-common/res/values-ky/strings.xml
index 5dd1ccc..8ca5ae0 100644
--- a/car-media-common/res/values-ky/strings.xml
+++ b/car-media-common/res/values-ky/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Альбом мукабасы"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Аталышы жок"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Бир жерден ката кетти. Бир аздан кийин кайталап көрүңүз."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Аны азыр аткаруу мүмкүн эмес"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Бул колдонмо аны аткара албайт"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Бул колдонмону пайдалануу үчүн аккаунтуңузга кириңиз"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Артыкчылыктуу кирүү мүмкүнчүлүгү талап кылынат"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Өтө көп түзмөк угулууда"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Ал мазмун бөгөттөлгөн"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Ал мазмунду алуу мүмкүн эмес"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Ал мазмун ойнотулууда"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Эми тректерди өткөрүп жиберүүгө болбойт"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Аягына чыккан жок. Кайталап көрүңүз."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Кезекте эч нерсе жок"</string>
 </resources>
diff --git a/car-media-common/res/values-lo/strings.xml b/car-media-common/res/values-lo/strings.xml
index aee4892..7e92949 100644
--- a/car-media-common/res/values-lo/strings.xml
+++ b/car-media-common/res/values-lo/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ໜ້າປົກອະລະບ້ຳ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"ບໍ່ມີຊື່"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"ມີບ່າງຢ່າງຜິດພາດ. ລອງໃໝ່ພາຍຫຼັງ."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ບໍ່ສາມາດເຮັດໄດ້ຕອນນີ້"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ແອັບນີ້ບໍ່ສາມາດເຮັດສິ່ງນັ້ນໄດ້"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ເຂົ້າສູ່ລະບົບເພື່ອໃຊ້ແອັບນີ້"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ຕ້ອງມີສິດເຂົ້າເຖິງລະດັບພຣີມຽມ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"ກຳລັງຟັງຢູ່ໃນຫຼາຍອຸປະກອນເກີນໄປ"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ເນື້ອຫານັ້ນຖືກບລັອກໄວ້"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ບໍ່ສາມາດຮັບເນື້ອຫານັ້ນຢູ່ບ່ອນນີ້"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ຫຼິ້ນເນື້ອຫານັ້ນແລ້ວ"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ຂ້າມເພງບໍ່ໄດ້ອີກແລ້ວ"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"ບໍ່ສາມາດສຳເລັດໄດ້. ລອງໃໝ່."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"ບໍ່ມີລາຍການອື່ນໃນຄິວ"</string>
 </resources>
diff --git a/car-media-common/res/values-lt/strings.xml b/car-media-common/res/values-lt/strings.xml
index b4f1926..be85d02 100644
--- a/car-media-common/res/values-lt/strings.xml
+++ b/car-media-common/res/values-lt/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumo viršelis"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Nėra pavadinimo"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Kažkas nepavyko. Bandykite vėliau."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Dabar negalima atlikti to veiksmo"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ši programa negali atlikti to veiksmo"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Prisijunkite, kad galėtumėte naudoti šią programą"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Būtina mokama prieiga"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Klausoma naudojant per daug įrenginių"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Tas turinys užblokuotas"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Negalima gauti to turinio čia"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Tas turinys jau leidžiamas"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Daugiau takelių praleisti nebegalima"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nepavyko užbaigti. Bandykite dar kartą."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Eilėje nieko nebėra"</string>
 </resources>
diff --git a/car-media-common/res/values-lv/strings.xml b/car-media-common/res/values-lv/strings.xml
index d4b6044..754a59d 100644
--- a/car-media-common/res/values-lv/strings.xml
+++ b/car-media-common/res/values-lv/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albuma noformējums"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Bez nosaukuma"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Radās problēma. Mēģiniet vēlāk."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Pašlaik nevar veikt šo darbību."</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Šo darbību nevar veikt šajā lietotnē."</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Pierakstieties, lai izmantotu šo lietotni."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Nepieciešama maksas piekļuve."</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Klausīšanās notiek pārāk daudz ierīcēs."</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Šis saturs ir bloķēts."</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Nevar šeit parādīt šo saturu."</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Šis saturs jau tiek atskaņots."</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Vairs nevar izlaist nevienu ierakstu."</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nevarēja pabeigt. Mēģiniet vēlreiz."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Rindā vairs nav nekā cita."</string>
 </resources>
diff --git a/car-media-common/res/values-mk/strings.xml b/car-media-common/res/values-mk/strings.xml
index d46c551..5e71b5a 100644
--- a/car-media-common/res/values-mk/strings.xml
+++ b/car-media-common/res/values-mk/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Корица на албум"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Без наслов"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Нешто не е во ред. Обидете се подоцна."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Не може да се направи тоа во моментов"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Апликацијава не може да го направи тоа"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Најавете се за да ја користите апликацијава"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Потребен е пристап со Premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Се слуша на премногу уреди"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Таа содржина е блокирана"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Не може да се добие таа содржина тука"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Веќе е пуштена таа содржина"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Не може да прескокне повеќе песни"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Не може да заврши. Обидете се повторно."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Веќе ништо не чека на ред"</string>
 </resources>
diff --git a/car-media-common/res/values-ml/strings.xml b/car-media-common/res/values-ml/strings.xml
index cd1743b..edcd0e1 100644
--- a/car-media-common/res/values-ml/strings.xml
+++ b/car-media-common/res/values-ml/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ആൽബം ആർട്ട്"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"പേരില്ല"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"എന്തോ കുഴപ്പമുണ്ട്. പിന്നീട് ശ്രമിക്കുക."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"അത് ഇപ്പോൾ ചെയ്യാനാകില്ല"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ഈ ആപ്പിന് അത് ചെയ്യാനാകില്ല"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ഈ ആപ്പ് ഉപയോഗിക്കാൻ സെെൻ ഇൻ ചെയ്യുക"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"പ്രീമിയം ആക്‌സസ് ആവശ്യമാണ്"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"നിരവധി ഉപകരണങ്ങളിൽ കേൾക്കുന്നു"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ആ ഉള്ളടക്കം ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ആ ഉള്ളടക്കം ഇവിടെ ലഭ്യമല്ല"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ആ ഉള്ളടക്കം നിലവിൽ പ്ലേ ചെയ്യുകയാണ്"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ഇനിയും ട്രാക്കുകൾ ഒഴിവാക്കാനാകില്ല"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"പൂർത്തിയാക്കാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"മറ്റൊന്നും ക്യൂവിലില്ല"</string>
 </resources>
diff --git a/car-media-common/res/values-mn/strings.xml b/car-media-common/res/values-mn/strings.xml
index 0cbec6a..b9cb37c 100644
--- a/car-media-common/res/values-mn/strings.xml
+++ b/car-media-common/res/values-mn/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Цомгийн зураг"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Гарчиг алга"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Алдаа гарлаа. Дараа оролдоно уу."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Яг одоо үүнийг хийх боломжгүй"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Энэ апп үүнийг хийх боломжгүй"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Энэ аппыг ашиглахын тулд нэвтэрнэ үү"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium хандалт шаардлагатай"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Хэт олон төхөөрөмж дээр сонсож байна"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Энэ контентыг блоклосон байна"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Энэ контентыг энд авах боломжгүй"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Энэ контентыг аль хэдийн тоглуулж байна"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Бичлэг дахин алгасах боломжгүй"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Дуусгаж чадсангүй. Дахин оролдоно уу."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Дараалалд өөр юу ч алга"</string>
 </resources>
diff --git a/car-media-common/res/values-mr/strings.xml b/car-media-common/res/values-mr/strings.xml
index 450fddd..27547ba 100644
--- a/car-media-common/res/values-mr/strings.xml
+++ b/car-media-common/res/values-mr/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"अल्बम कला"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"शीर्षक नाही"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"काहीतरी चूक झाली. नंतर प्रयत्न करा."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ते आता करू शकत नाही"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"हे ॲप ते करू शकत नाही"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"हे ॲप वापरण्यासाठी साइन इन करा"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"प्रीमियम ॲक्सेस आवश्यक आहे"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"खूप जास्‍त डिव्हाइसवर ऐकले जात आहे"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"तो आशय ब्लॉक केलेला आहे"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"तो आशय येथे मिळवू शकत नाही"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"तो आशय आधीपासून प्ले करत आहे"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"आणखी ट्रॅक वगळू शकत नाही"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"पूर्ण करता आले नाही. पुन्हा प्रयत्न करा."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"इतर काहीही क्यू केलेले नाही"</string>
 </resources>
diff --git a/car-media-common/res/values-ms/strings.xml b/car-media-common/res/values-ms/strings.xml
index f5660bf..3a16397 100644
--- a/car-media-common/res/values-ms/strings.xml
+++ b/car-media-common/res/values-ms/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Seni Album"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Tiada Tajuk"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Ada yang tidak kena. Cuba nanti."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Tidak dapat berbuat demikian sekarang"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Apl ini tidak dapat berbuat demikian"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Log masuk untuk menggunakan apl ini"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Akses premium diperlukan"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Mendengar pada terlalu banyak peranti"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Kandungan itu disekat"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Tidak boleh mendapatkan kandungan itu di sini"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Sudah pun memainkan kandungan itu"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Tidak boleh melangkau apa-apa lagu lagi"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Tidak dapat diselesaikan. Cuba lagi."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Tiada lagu lain dalam baris gilir"</string>
 </resources>
diff --git a/car-media-common/res/values-my/strings.xml b/car-media-common/res/values-my/strings.xml
index e717f45..f4723b0 100644
--- a/car-media-common/res/values-my/strings.xml
+++ b/car-media-common/res/values-my/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"အယ်လ်ဘမ်ပုံ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"ခေါင်းစဉ် မရှိပါ"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"တစ်ခုခု မှားနေသည်။ နောက်မှ စမ်းကြည့်ပါ။"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"၎င်းကို ယခု မပြုလုပ်နိုင်ပါ"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ဤအက်ပ်က ၎င်းကို မပြုလုပ်နိုင်ပါ"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ဤအက်ပ်အသုံးပြုရန် လက်မှတ်ထိုးဝင်ပါ"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ပရီမီယံ အသုံးပြုခွင့် လိုအပ်သည်"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"စက်ပစ္စည်းအများအပြားတွင် နားထောင်နေသည်"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ထိုအကြောင်းအရာကို ပိတ်ထားသည်"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ထိုအကြောင်းအရာကို ဤနေရာတွင် မရရှိနိုင်ပါ"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ထိုအကြောင်းအရာကို ဖွင့်နေပြီဖြစ်သည်"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"နောက်ထပ်သီချင်းပုဒ်များ ကျော်၍မရတော့ပါ"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"အပြီးသတ်၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"အခြားစီထားသည်များ မရှိပါ"</string>
 </resources>
diff --git a/car-media-common/res/values-nb/strings.xml b/car-media-common/res/values-nb/strings.xml
index b01654e..878beb2 100644
--- a/car-media-common/res/values-nb/strings.xml
+++ b/car-media-common/res/values-nb/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumgrafikk"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Ingen tittel"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Noe gikk galt. Prøv senere."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Kan ikke gjøre det akkurat nå"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Denne appen kan ikke gjøre det"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Logg på for å bruke denne appen"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premiumtilgang kreves"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Du lytter på for mange enheter"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Innholdet er blokkert"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Innholdet er ikke tilgjengelig her"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Du spiller allerede av innholdet"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Kan ikke hoppe over flere spor"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Kunne ikke fullføre. Prøv på nytt."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ingenting annet står i køen"</string>
 </resources>
diff --git a/car-media-common/res/values-ne/strings.xml b/car-media-common/res/values-ne/strings.xml
index 8e2bf79..5eed37d 100644
--- a/car-media-common/res/values-ne/strings.xml
+++ b/car-media-common/res/values-ne/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"एल्बम आर्ट"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"शीर्षक छैन"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"केही चिज गडबड छ। पछि प्रयास गर्नुहोस्।"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"त्यो कार्य अहिले नै गर्न सकिँदैन"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"यस अनुप्रयोगले उक्त कार्य गर्न सक्दैन"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"यो एप प्रयोग गर्न साइन इन गर्नुहोस्"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"यसका लागि प्रिमियम खातामाथिको पहुँच आवश्यक हुन्छ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"अत्यधिक यन्त्रहरूबाट सुनिँदै छ"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"उक्त सामग्री ब्लक गरिएको छ"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"उक्त सामग्री यहाँ प्राप्त गर्न सकिँदैन"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"उक्त सामग्री प्ले भइरहेको छ"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"योभन्दा धेरै गीतहरू स्किप गर्न सकिँदैन"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"कार्य पूरा गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"सूचीमा अरू केही पनि छैन"</string>
 </resources>
diff --git a/car-media-common/res/values-nl/strings.xml b/car-media-common/res/values-nl/strings.xml
index 8259676..e8acdbc 100644
--- a/car-media-common/res/values-nl/strings.xml
+++ b/car-media-common/res/values-nl/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albumhoes"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Geen titel"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Er is iets misgegaan. Probeer het later opnieuw."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Kan dat nu niet doen"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Deze app kan dat niet doen"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Log in om deze app te gebruiken"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium toegang vereist"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Er wordt op te veel apparaten geluisterd"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Die content is geblokkeerd"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Kan die content hier niet krijgen"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Die content wordt al afgespeeld"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Kan geen nummers meer overslaan"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Kan niet voltooien. Probeer het opnieuw."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Er staat niets anders in de wachtrij"</string>
 </resources>
diff --git a/car-media-common/res/values-or/strings.xml b/car-media-common/res/values-or/strings.xml
index a714293..e503cd8 100644
--- a/car-media-common/res/values-or/strings.xml
+++ b/car-media-common/res/values-or/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ଆଲବମ୍ ଆର୍ଟ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"କୌଣସି ଟାଇଟେଲ୍ ନାହିଁ"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"କିଛି ସମସ୍ୟା ଅଛି। ପରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ବର୍ତ୍ତମାନ ତାହା କରାଯାଇପାରିବ ନାହିଁ"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ଏହି ଆପ୍ ତାହା କରିପାରିବ ନାହିଁ"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ଏହି ଆପ୍ ବ୍ୟବହାର କରିବାକୁ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ପ୍ରିମିୟମ୍ ଆକ୍ସେସ୍ ଆବଶ୍ୟକ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"ଅନେକ ଡିଭାଇସରେ ଶୁଣାଯାଉଛି"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ସେହି ବିଷୟବସ୍ତୁକୁ ବ୍ଲକ୍ କରାଯାଇଛି"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ଏଠାରେ ସେହି ବିଷୟବସ୍ତୁ ପାଇପାରିବେ ନାହିଁ"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ପୂର୍ବରୁ ସେହି ବିଷୟବସ୍ତୁ ଚଲାଯାଉଛି"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ଆଉ ଅଧିକ ଟ୍ରାକକୁ ବାଦ୍ ଦିଆଯାଇପାରିବ ନାହିଁ"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"ସମାପ୍ତ କରାଯାଇପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"ଧାଡ଼ିରେ ଆଉ କିଛି ନାହିଁ"</string>
 </resources>
diff --git a/car-media-common/res/values-pa/strings.xml b/car-media-common/res/values-pa/strings.xml
index e3a607b..5d02f20 100644
--- a/car-media-common/res/values-pa/strings.xml
+++ b/car-media-common/res/values-pa/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ਐਲਬਮ ਕਲਾ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"ਕੋਈ ਸਿਰਲੇਖ ਨਹੀਂ"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"ਕੋਈ ਗੜਬੜ ਹੈ। ਬਾਅਦ ਵਿੱਚ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ਫਿਲਹਾਲ ਇਹ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ਇਹ ਐਪ ਇਹ ਨਹੀਂ ਕਰ ਸਕਦੀ"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਲਈ ਸਾਈਨ-ਇਨ ਕਰੋ"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ਪ੍ਰੀਮੀਅਮ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"ਬਹੁਤ ਜ਼ਿਆਦਾ ਡੀਵਾਈਸਾਂ \'ਤੇ ਸੁਣਿਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ਇੱਥੇ ਇਹ ਸਮੱਗਰੀ ਨਹੀਂ ਮਿਲ ਸਕਦੀ"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ਇਹ ਸਮੱਗਰੀ ਪਹਿਲਾਂ ਹੀ ਚੱਲ ਰਹੀ ਹੈ"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ਕਿਸੇ ਹੋਰ ਟਰੈਕ ਨੂੰ ਛੱਡਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"ਪੂਰਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"ਹੋਰ ਕੁਝ ਵੀ ਕਤਾਰਬੱਧ ਨਹੀਂ ਹੈ"</string>
 </resources>
diff --git a/car-media-common/res/values-pl/strings.xml b/car-media-common/res/values-pl/strings.xml
index fd00ae5..1bdcf9a 100644
--- a/car-media-common/res/values-pl/strings.xml
+++ b/car-media-common/res/values-pl/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Okładka albumu"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Bez tytułu"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Coś poszło nie tak. Spróbuj później."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Teraz nie można tego zrobić"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ta aplikacja nie ma takiej funkcji"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Zaloguj się, by używać tej aplikacji"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Wymagany jest dostęp na poziomie premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Słuchasz na zbyt wielu urządzeniach"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Te materiały są zablokowane"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Te materiały są niedostępne w tym regionie"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Te materiały są już odtwarzane"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Nie można pominąć większej liczby utworów"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nie udało się dokończyć. Spróbuj ponownie."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nie ma już nic w kolejce"</string>
 </resources>
diff --git a/car-media-common/res/values-pt-rPT/strings.xml b/car-media-common/res/values-pt-rPT/strings.xml
index 2ae65bf..ab6e0ff 100644
--- a/car-media-common/res/values-pt-rPT/strings.xml
+++ b/car-media-common/res/values-pt-rPT/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Imagem do álbum"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Sem título"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Ocorreu um problema. Tente mais tarde."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Não é possível responder a esse pedido neste momento."</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Esta app não consegue responder a esse pedido."</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Inicie sessão para utilizar esta app."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Acesso premium necessário."</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"A ouvir em demasiados dispositivos."</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Esse conteúdo está bloqueado."</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Não é possível obter esse conteúdo aqui."</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Esse conteúdo já está em reprodução."</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Não é possível ignorar mais faixas."</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Não foi possível terminar. Tente novamente."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Não existem mais elementos em fila."</string>
 </resources>
diff --git a/car-media-common/res/values-pt/strings.xml b/car-media-common/res/values-pt/strings.xml
index 1b39a7b..2a295f8 100644
--- a/car-media-common/res/values-pt/strings.xml
+++ b/car-media-common/res/values-pt/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Arte do álbum"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Sem título"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Algo deu errado. Tente mais tarde."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Não é possível fazer isso no momento"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Não é possível fazer isso com este app"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Faça login para usar este app"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"É necessário ter acesso Premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Ouvindo em muitos dispositivos"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Esse conteúdo está bloqueado"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Não é possível usar esse conteúdo aqui"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Esse conteúdo já está tocando"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Não é possível pular mais faixas"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Não foi possível concluir esta ação. Tente novamente."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Não há mais nada na fila"</string>
 </resources>
diff --git a/car-media-common/res/values-ro/strings.xml b/car-media-common/res/values-ro/strings.xml
index 38c53cc..3bcb08d 100644
--- a/car-media-common/res/values-ro/strings.xml
+++ b/car-media-common/res/values-ro/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Grafica albumului"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Fără titlu"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"A apărut o problemă. Încercați mai târziu."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Acțiunea nu poate fi realizată momentan"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Aplicația nu poate realiza această acțiune"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Conectați-vă pentru a folosi aplicația"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Este necesar accesul premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Se ascultă pe prea multe dispozitive"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Conținutul este blocat"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Conținutul nu poate fi descărcat aici"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Conținutul se redă deja"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Nu mai pot fi omise melodii"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nu s-a putut finaliza. Încercați din nou."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Nu mai există elemente în coadă"</string>
 </resources>
diff --git a/car-media-common/res/values-ru/strings.xml b/car-media-common/res/values-ru/strings.xml
index 990650f..6f4a6ba 100644
--- a/car-media-common/res/values-ru/strings.xml
+++ b/car-media-common/res/values-ru/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Обложка альбома"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Без названия"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Ошибка. Повторите попытку позже."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Сейчас это действие недоступно."</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Действие недоступно в этом приложении."</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Чтобы использовать это приложение, войдите в аккаунт."</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Требуется премиум-доступ."</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Слишком много устройств, на которых воспроизводится аудио."</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Контент заблокирован."</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Контент недоступен в вашем регионе."</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Этот контент уже воспроизводится."</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Пропускать треки больше нельзя."</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Произошла ошибка. Повторите попытку."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"В очереди воспроизведения нет других файлов."</string>
 </resources>
diff --git a/car-media-common/res/values-si/strings.xml b/car-media-common/res/values-si/strings.xml
index 7da552b..f748730 100644
--- a/car-media-common/res/values-si/strings.xml
+++ b/car-media-common/res/values-si/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ඇල්බම කලාව"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"මාතෘකාවක් නැත"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"යම් දෙයක් වැරදියි. පසුව උත්සාහ කරන්න."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"මේ දැන් එය කළ නොහැක"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"මෙම යෙදුමට එය කළ නොහැක"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"මෙම යෙදුම භාවිත කිරීමට පුරන්න"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"පාරිතෝෂික ප්‍රවේශය අවශ්‍යයි"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"ඕනෑවට වඩා උපාංග මත සවන් දීම"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"එම අන්තර්ගතය අවහිර කර ඇත"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"එම අන්තර්ගතය මෙතැනින් ලබා ගත නොහැක"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"දැනටමත් එම අන්තර්ගතය වාදනය කරයි"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"තවත් ගීත මඟ හැරිය නොහැක"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"අවසන් කිරීමට නොහැකි විය. නැවත උත්සාහ කරන්න."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"වෙන කිසිවක් පෝලිමේ නැත"</string>
 </resources>
diff --git a/car-media-common/res/values-sk/strings.xml b/car-media-common/res/values-sk/strings.xml
index d94bac4..7a12c96 100644
--- a/car-media-common/res/values-sk/strings.xml
+++ b/car-media-common/res/values-sk/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Obrázok albumu"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Bez názvu"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Vyskytol sa problém. Skúste to znova."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Teraz to nie je možné"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Táto aplikácia to nedokáže"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Ak chcete použiť túto aplikáciu, prihláste sa"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Vyžaduje sa prémiový prístup"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Počúva sa na príliš veľa zariadeniach"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Daný obsah je blokovaný"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Daný obsah tu nie je k dispozícii"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Tento obsah sa už prehráva"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Nie je možné preskočiť žiadne ďalšie skladby"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Akciu sa nepodarilo dokončiť. Skúste to znova."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Poradie je prázdne"</string>
 </resources>
diff --git a/car-media-common/res/values-sl/strings.xml b/car-media-common/res/values-sl/strings.xml
index 683507c..aec70f5 100644
--- a/car-media-common/res/values-sl/strings.xml
+++ b/car-media-common/res/values-sl/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Slika albuma"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Brez naslova"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Prišlo je do težave. Poskusite pozneje."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Trenutno to ni izvedljivo"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ta aplikacija ne more izvesti tega"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Prijavite se, če želite uporabljati to aplikacijo"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Potrebujete plačljiv dostop"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Poslušanje v preveč napravah"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Ta vsebina je blokirana"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Te vsebine tukaj ni mogoče pridobiti"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Ta vsebina se že predvaja"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Dosegli ste omejitev preskakovanja skladb"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Ni bilo mogoče dokončati. Poskusite znova."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Čakalna vrsta je prazna"</string>
 </resources>
diff --git a/car-media-common/res/values-sq/strings.xml b/car-media-common/res/values-sq/strings.xml
index 354b5ed..d4d02e1 100644
--- a/car-media-common/res/values-sq/strings.xml
+++ b/car-media-common/res/values-sq/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Kopertina e albumit"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Pa titull"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Ndodhi një gabim. Provo më vonë."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Këtë nuk mund ta bësh në këtë moment"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ky aplikacion nuk mund ta bëjë këtë"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Identifikohu për të përdorur këtë aplikacion"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Kërkohet qasje Premium"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Po dëgjon në shumë pajisje"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Kjo përmbajtje është bllokuar"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Ajo përmbajtje nuk mund të merret këtu"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Ajo përmbajtje po luhet tashmë"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Nuk mund të kapërcejë këngë të tjera"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Nuk mundi të përfundojë. Provo sërish."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Asgjë tjetër nuk është në radhë"</string>
 </resources>
diff --git a/car-media-common/res/values-sr/strings.xml b/car-media-common/res/values-sr/strings.xml
index e6173ba..69c898d 100644
--- a/car-media-common/res/values-sr/strings.xml
+++ b/car-media-common/res/values-sr/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Омот албума"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Без наслова"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Дошло је до грешке. Пробајте касније."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Тренутно не може то да уради"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ова апликација не може то да уради"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Пријавите се да бисте користили ову апликацију"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Потребан је премијум приступ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Слушате на превише уређаја"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Тај садржај је блокиран"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Не можете да добијете тај садржај овде"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Тај садржај се већ репродукује"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Не можете више да прескачете песме"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Нисмо успели да довршимо радњу. Пробајте опет."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ништа друго није стављено у редослед"</string>
 </resources>
diff --git a/car-media-common/res/values-sv/strings.xml b/car-media-common/res/values-sv/strings.xml
index ce52ecf..05a0d28 100644
--- a/car-media-common/res/values-sv/strings.xml
+++ b/car-media-common/res/values-sv/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Skivomslag"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Ingen titel"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Något är fel. Försök igen senare."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Det går inte just nu"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Det går inte med den här appen"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Logga in om du vill använda appen"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium-konto krävs"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"För många enheter streamas"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Det innehållet har blockerats"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Det innehållet är inte tillgängligt här"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Det innehållet spelas redan"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Det går inte att hoppa över fler låtar"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Det gick inte att slutföra. Försök igen."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Inget annat har lagts i uppspelningskön"</string>
 </resources>
diff --git a/car-media-common/res/values-sw/strings.xml b/car-media-common/res/values-sw/strings.xml
index 282555c..30937ac 100644
--- a/car-media-common/res/values-sw/strings.xml
+++ b/car-media-common/res/values-sw/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Sanaa ya Albamu"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Hakuna Jina"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Hitilafu fulani imetokea. Jaribu baadaye."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Imeshindwa kutekeleza ombi kwa sasa"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Programu hii imeshindwa kutekeleza ombi lako"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Ingia katika akaunti ili utumie programu hii"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Unahitaji kutumia akaunti ya kulipia"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Unasikiliza kwenye vifaa vingi mno"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Maudhui hayo yamezuiwa"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Imeshindwa kupata maudhui haya hapa"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Tayari inacheza wimbo huo"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Imeshindwa kuruka nyimbo zaidi"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Imeshindwa kumaliza. Jaribu tena."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Hakuna wimbo mwingine kwenye foleni"</string>
 </resources>
diff --git a/car-media-common/res/values-ta/strings.xml b/car-media-common/res/values-ta/strings.xml
index dd522b8..6fc14ba 100644
--- a/car-media-common/res/values-ta/strings.xml
+++ b/car-media-common/res/values-ta/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ஆல்பம் ஆர்ட்"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"தலைப்பு இல்லை"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"ஏதோ தவறாகிவிட்டது. பிறகு முயலவும்."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"தற்சமயம் இதைச் செய்ய இயலாது"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"இந்த ஆப்ஸால் அதைச் செய்ய இயலாது"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"இந்த ஆப்ஸை உபயோகிக்க உள்நுழைய வேண்டும்"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium அணுகல் தேவை"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"நிறைய சாதனங்களைக் கவனிக்கிறது"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"அந்த உள்ளடக்கம் தடுக்கப்பட்டுள்ளது"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"அந்த உள்ளடக்கத்தை இங்கே பெற முடியவில்லை"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"அந்த உள்ளடக்கம் ஏற்கெனவே பிளே செய்யப்பட்டுக் கொண்டிருக்கிறது"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"இதற்கு மேல் டிராக்குகளைத் தவிர்க்க முடியாது"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"நிறைவடையவில்லை. மீண்டும் முயலவும்."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"வேறு எதுவும் வரிசையில் இல்லை"</string>
 </resources>
diff --git a/car-media-common/res/values-te/strings.xml b/car-media-common/res/values-te/strings.xml
index 62a7464..f3dec11 100644
--- a/car-media-common/res/values-te/strings.xml
+++ b/car-media-common/res/values-te/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ఆల్బమ్ ఆర్ట్"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"శీర్షిక లేదు"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"ఏదో తప్పు జరిగింది. తర్వాత ట్రై చేయండి."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"దానిని ఇప్పుడు చేయడం సాధ్యపడదు"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"ఈ యాప్ దానిని చేయలేదు"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ఈ యాప్‌ను ఉపయోగించడానికి సైన్ ఇన్ చేయండి"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ప్రీమియం యాక్సెస్ అవసరం"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"అనేక పరికరాలలో వింటున్నారు"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"ఆ కంటెంట్ బ్లాక్ చేయబడింది"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"ఆ కంటెంట్‌ను ఇక్కడ పొందడం సాధ్యపడదు"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"ఇప్పటికే ఆ కంటెంట్ ప్లే అవుతోంది"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ఇంక ఏ ట్రాక్‌లనూ స్కిప్ చేయడం సాధ్యపడదు"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"పూర్తి చేయడం సాధ్యపడలేదు. మళ్లీ ట్రై చేయండి."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"క్రమ వరుసలో ఏమీ లేదు"</string>
 </resources>
diff --git a/car-media-common/res/values-th/strings.xml b/car-media-common/res/values-th/strings.xml
index f642719..3e3aa59 100644
--- a/car-media-common/res/values-th/strings.xml
+++ b/car-media-common/res/values-th/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"ปกอัลบั้ม"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"ไม่มีชื่อ"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"มีข้อผิดพลาดเกิดขึ้น ลองอีกครั้งในภายหลัง"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ดำเนินการดังกล่าวไม่ได้ในขณะนี้"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"แอปนี้ดำเนินการดังกล่าวไม่ได้"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"ลงชื่อเข้าใช้เพื่อใช้แอปนี้"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"ต้องมีสิทธิ์เข้าถึงระดับพรีเมียม"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"กำลังเปิดฟังจากหลายอุปกรณ์เกินไป"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"เนื้อหาดังกล่าวถูกบล็อก"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"เปิดเนื้อหาดังกล่าวไม่ได้ที่นี่"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"กำลังเล่นเนื้อหาดังกล่าวอยู่แล้ว"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"ข้ามแทร็กอื่นอีกไม่ได้แล้ว"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"ดำเนินการไม่สำเร็จ ลองใหม่"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"ไม่มีรายการอื่นในคิว"</string>
 </resources>
diff --git a/car-media-common/res/values-tl/strings.xml b/car-media-common/res/values-tl/strings.xml
index a2da896..39bc081 100644
--- a/car-media-common/res/values-tl/strings.xml
+++ b/car-media-common/res/values-tl/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Album Art"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Walang Pamagat"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"May problema. Subukan sa ibang pagkakataon."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Hindi iyon magagawa ngayon"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Hindi iyon magagawa ng app na ito"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Mag-sign in para gamitin ang app na ito"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Kailangan ng premium na access"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Nakikinig sa masyadong maraming device"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Naka-block ang content na iyon"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Hindi makukuha ang content na iyon dito"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Pine-play na ang content na iyon"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Hindi na makakalaktaw pa ng track"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Hindi matapos. Subukan ulit."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Wala nang naka-queue"</string>
 </resources>
diff --git a/car-media-common/res/values-tr/strings.xml b/car-media-common/res/values-tr/strings.xml
index 6f717ac..7fc645e 100644
--- a/car-media-common/res/values-tr/strings.xml
+++ b/car-media-common/res/values-tr/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albüm Kapağı"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Başlıksız"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Bir şeyler ters gitti. Daha sonra tekrar deneyin."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"İşlem şu anda gerçekleştirilemiyor"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Uygulama bu işlemi gerçekleştiremiyor"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Bu uygulamayı kullanmak için oturum açın"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Premium erişim gerekli"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Çok fazla cihazda dinleme yapılıyor"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Bu içerik engellendi"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"İçeriğe buradan erişilemiyor"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Bu içerik zaten oynatılıyor"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Daha fazla parça atlanamıyor"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Tamamlanamadı. Tekrar deneyin."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Sıraya eklenmiş başka bir şey yok"</string>
 </resources>
diff --git a/car-media-common/res/values-uk/strings.xml b/car-media-common/res/values-uk/strings.xml
index 0661490..e377c98 100644
--- a/car-media-common/res/values-uk/strings.xml
+++ b/car-media-common/res/values-uk/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Обкладинка альбому"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Без назви"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Сталася помилка. Повторіть спробу пізніше."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Наразі ця дія недоступна"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Додаток не підтримує цю дію"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Увійдіть, щоб використовувати цей додаток"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Потрібен преміум-доступ"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Забагато пристроїв, на яких відтворюється контент"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Цей контент заблоковано"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Цей контент недоступний у вашому регіоні"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Цей контент уже відтворюється"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Більше не можна пропускати композиції"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Не вдалося закінчити. Повторіть спробу."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Черга порожня"</string>
 </resources>
diff --git a/car-media-common/res/values-ur/strings.xml b/car-media-common/res/values-ur/strings.xml
index ccf505c..19dfce7 100644
--- a/car-media-common/res/values-ur/strings.xml
+++ b/car-media-common/res/values-ur/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"البم آرٹ"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"کوئی عنوان نہیں ہے"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"کچھ غلط ہو گیا۔ بعد میں کوشش کریں۔"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"ابھی وہ ایسا نہیں کر سکتا"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"یہ ایپ ایسا نہیں کر سکتی"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"اس ایپ کا استعمال کرنے کے لیے سائن ان کریں"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"پریمیم رسائی درکار ہے"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"بہت سے آلات پر سنا جا رہا ہے"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"وہ مواد مسدود ہے"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"یہاں وہ مواد حاصل نہیں کر سکتے"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"وہ مواد پہلے سے ہی چلایا جا رہا ہے"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"مزید کسی اور ٹریکس کو نظر انداز نہیں کر سکتے"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"پورا نہیں ہو سکا۔ پھر آزمائيں۔"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"مزید کچھ اور کی قطار نہیں ہے"</string>
 </resources>
diff --git a/car-media-common/res/values-uz/strings.xml b/car-media-common/res/values-uz/strings.xml
index f3e8826..b2bfd1e 100644
--- a/car-media-common/res/values-uz/strings.xml
+++ b/car-media-common/res/values-uz/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Albom muqovasi"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Nomsiz"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Nimadir xato ketdi Keyinroq qayta urining."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Buni hozir amalga oshira olmaydi"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Bu ilova bu amalni bajara olmaydi"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Bu ilovadan foydalanish uchun hisobingizga kiring"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Ishonchli ruxsat kerak"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Koʻplab qurilmalar tinglanmoqda"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Bu kontent bloklangan"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Bu kontentni bu yerga olish imkonsiz"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Bu kontent allaqachon ijro etilmoqda"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Boshqa treklarni qoldirib ketish imkonsiz"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Tugallanmadi. Qayta urining."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Ijro navbatida boshqa fayllar mavjud emas"</string>
 </resources>
diff --git a/car-media-common/res/values-vi/strings.xml b/car-media-common/res/values-vi/strings.xml
index 2a99840..f75fe5a 100644
--- a/car-media-common/res/values-vi/strings.xml
+++ b/car-media-common/res/values-vi/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Ảnh bìa album"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Không có tiêu đề"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Đã xảy ra lỗi. Hãy thử lại sau."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Không thể thực hiện yêu cầu đó ngay bây giờ"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Ứng dụng này không thể thực hiện yêu cầu đó"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Hãy đăng nhập để dùng ứng dụng này"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Yêu cầu quyền truy cập đặc biệt"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Đang nghe trên quá nhiều thiết bị"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Nội dung đó đã bị chặn"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Không thể xem nội dung đó tại đây"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Đang phát nội dung đó rồi"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Không thể bỏ qua bản nhạc nào nữa"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Không thể hoàn tất. Hãy thử lại."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Không có nội dung nào khác trong hàng đợi"</string>
 </resources>
diff --git a/car-media-common/res/values-zh-rCN/strings.xml b/car-media-common/res/values-zh-rCN/strings.xml
index b3ddef1..9688f0e 100644
--- a/car-media-common/res/values-zh-rCN/strings.xml
+++ b/car-media-common/res/values-zh-rCN/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"专辑封面"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"无标题"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"出了点问题。请稍后重试。"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"目前无法执行该操作"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"此应用无法执行该操作"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"登录才能使用此应用"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"需要有付费帐号才能访问"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"同时使用太多设备聆听"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"该内容已遭到屏蔽"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"所在地区不提供这项内容"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"系统已在播放这项内容"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"无法再跳过更多曲目"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"无法完成操作。请重试。"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"队列中没有任何其他内容"</string>
 </resources>
diff --git a/car-media-common/res/values-zh-rHK/strings.xml b/car-media-common/res/values-zh-rHK/strings.xml
index 6ce371a..1e84ca7 100644
--- a/car-media-common/res/values-zh-rHK/strings.xml
+++ b/car-media-common/res/values-zh-rHK/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"專輯封面"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"無標題"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"發生錯誤，請稍後再試。"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"目前無法執行此操作"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"應用程式不支援此操作"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"登入帳戶才能使用此應用程式"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"必須付費才能存取"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"同時使用太多裝置聆聽音樂"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"內容已被封鎖"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"所在地區不提供該內容"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"系統已開始播放該內容"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"無法再略過曲目"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"無法完成此操作，請再試一次。"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"序列上沒有其他項目"</string>
 </resources>
diff --git a/car-media-common/res/values-zh-rTW/strings.xml b/car-media-common/res/values-zh-rTW/strings.xml
index 6ce371a..1b50b13 100644
--- a/car-media-common/res/values-zh-rTW/strings.xml
+++ b/car-media-common/res/values-zh-rTW/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"專輯封面"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"無標題"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"發生錯誤，請稍後再試。"</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"目前無法執行這項操作"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"應用程式不支援這項操作"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"必須登入帳戶，才能使用這個應用程式"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"必須付費才能存取"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"同時使用太多裝置聆聽音樂"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"內容已遭到封鎖"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"所在地區不提供該內容"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"系統已開始播放該內容"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"無法再略過曲目"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"無法完成這項操作，請再試一次。"</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"待播清單上沒有其他項目"</string>
 </resources>
diff --git a/car-media-common/res/values-zu/strings.xml b/car-media-common/res/values-zu/strings.xml
index cde3b48..6f06f6d 100644
--- a/car-media-common/res/values-zu/strings.xml
+++ b/car-media-common/res/values-zu/strings.xml
@@ -19,4 +19,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="album_art" msgid="3392647029019061691">"Ubuciko be-albhamu"</string>
     <string name="metadata_default_title" msgid="5902775732281325081">"Asikho isihloko"</string>
+    <string name="default_error_message" msgid="4044331619453864482">"Kukhona okungalungile. Zama emuva kwesikhathi."</string>
+    <string name="error_code_app_error" msgid="3608680401453743688">"Ayikwazi ukwenza lokho khona manje"</string>
+    <string name="error_code_not_supported" msgid="8004310657548193089">"Lolu hlelo lokusebenza alukwazi ukwenza lokho"</string>
+    <string name="error_code_authentication_expired" msgid="1727285213286610186">"Ngena ngemvume ukuze usebenzise lolu hlelo lokusebenza"</string>
+    <string name="error_code_premium_account_required" msgid="2328664287270814966">"Ukufinyelela kwe-premium kuyadingeka"</string>
+    <string name="error_code_concurrent_stream_limit" msgid="493048763425570552">"Ilalele kumadivayisi amaningi kakhulu"</string>
+    <string name="error_code_parental_control_restricted" msgid="325145513462419399">"Lokho okuqukethwe kuvinjelwe"</string>
+    <string name="error_code_not_available_in_region" msgid="5840935836875073145">"Ayikwazi ukuletha lokho okuqukethwe lapha"</string>
+    <string name="error_code_content_already_playing" msgid="1306236349553004461">"Isivele idlala lokho okuqukethwe"</string>
+    <string name="error_code_skip_limit_reached" msgid="4203743406433151146">"Ayikwazi ukweqa amanye amathrekhi amaningi"</string>
+    <string name="error_code_action_aborted" msgid="8611777981356536501">"Ayikwazanga ukuqeda. Zama futhi."</string>
+    <string name="error_code_end_of_queue" msgid="6935022448319288887">"Akukho okunye okufakwe kulayini"</string>
 </resources>
diff --git a/car-media-common/res/values/dimens.xml b/car-media-common/res/values/dimens.xml
index d888e4b..058ec8e 100644
--- a/car-media-common/res/values/dimens.xml
+++ b/car-media-common/res/values/dimens.xml
@@ -24,6 +24,8 @@
     <!-- playback_fragment.xml -->
     <dimen name="playback_fragment_text_margin_top">@dimen/car_ui_padding_4</dimen>
     <dimen name="playback_fragment_text_margin_x">@dimen/car_ui_padding_4</dimen>
+    <dimen name="playback_fragment_error_button_margin_top">@dimen/car_ui_padding_5</dimen>
+    <dimen name="playback_fragment_error_button_margin_bottom">@dimen/car_ui_padding_4</dimen>
 
     <dimen name="playback_fragment_app_icon_margin_right">@dimen/car_ui_padding_4</dimen>
     <dimen name="playback_fragment_controls_margin_bottom">@dimen/car_ui_padding_4</dimen>
diff --git a/car-media-common/res/values/integers.xml b/car-media-common/res/values/integers.xml
index 2c6177d..cda2e06 100644
--- a/car-media-common/res/values/integers.xml
+++ b/car-media-common/res/values/integers.xml
@@ -36,4 +36,7 @@
     -->
     <integer name="media_items_bitmap_max_size_px">256</integer>
 
+    <!-- The maximum number of lines for the error message in the media widget. -->
+    <integer name="widget_error_text_max_lines">3</integer>
+
 </resources>
diff --git a/car-media-common/res/values/strings.xml b/car-media-common/res/values/strings.xml
index e5831bc..424e9f7 100644
--- a/car-media-common/res/values/strings.xml
+++ b/car-media-common/res/values/strings.xml
@@ -19,4 +19,29 @@
     <string name="album_art">Album Art</string>
     <!-- Default title of current track's metadata. [CHAR LIMIT=50] -->
     <string name="metadata_default_title">No Title</string>
+
+    <!-- Default error message [CHAR LIMIT=100] -->
+    <string name="default_error_message">Something’s wrong. Try later.</string>
+    <!-- Error message set when the application state is invalid to fulfill the request. [CHAR LIMIT=100] -->
+    <string name="error_code_app_error">Can’t do that right now</string>
+    <!-- Error message set when the request is not supported by the application. [CHAR LIMIT=100] -->
+    <string name="error_code_not_supported">This app can’t do that</string>
+    <!-- Error message set when the request cannot be performed because authentication has expired. [CHAR LIMIT=100] -->
+    <string name="error_code_authentication_expired">Sign in to use this app</string>
+    <!-- Error message set when a premium account is required for the request to succeed. [CHAR LIMIT=100] -->
+    <string name="error_code_premium_account_required">Premium access required</string>
+    <!-- Error message set when too many concurrent streams are detected. [CHAR LIMIT=100] -->
+    <string name="error_code_concurrent_stream_limit">Listening on too many devices</string>
+    <!-- Error message set when the content is blocked due to parental controls. [CHAR LIMIT=100] -->
+    <string name="error_code_parental_control_restricted">That content is blocked</string>
+    <!-- Error message set when the content is blocked due to being regionally unavailable. [CHAR LIMIT=100] -->
+    <string name="error_code_not_available_in_region">Can’t get that content here</string>
+    <!-- Error message set when the requested content is already playing. [CHAR LIMIT=100] -->
+    <string name="error_code_content_already_playing">Already playing that content</string>
+    <!-- Error message set when the application cannot skip any more songs because skip limit is reached. [CHAR LIMIT=100] -->
+    <string name="error_code_skip_limit_reached">Can’t skip any more tracks</string>
+    <!-- Error message set when the action is interrupted due to some external event. [CHAR LIMIT=100] -->
+    <string name="error_code_action_aborted">Couldn’t finish. Try again.</string>
+    <!-- Error message set when the playback navigation (previous, next) is not possible because the queue was exhausted. [CHAR LIMIT=100] -->
+    <string name="error_code_end_of_queue">Nothing else is queued up</string>
 </resources>
diff --git a/car-media-common/src/com/android/car/media/common/MediaButtonController.java b/car-media-common/src/com/android/car/media/common/MediaButtonController.java
index 48e0406..c399089 100644
--- a/car-media-common/src/com/android/car/media/common/MediaButtonController.java
+++ b/car-media-common/src/com/android/car/media/common/MediaButtonController.java
@@ -41,7 +41,9 @@
 import com.android.car.media.common.source.MediaSourceColors;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -54,6 +56,8 @@
 
     private static final String TAG = "MediaButton";
 
+    private final Map<String, ImageButton> mImageButtons = new HashMap<>();
+
     private Context mContext;
     private PlayPauseStopImageView mPlayPauseStopImageView;
     private View mPlayPauseStopImageContainer;
@@ -134,6 +138,7 @@
         mControlBar.setView(null, ControlBar.SLOT_RIGHT);
         mSkipNextAdded = false;
         mSkipPrevAdded = false;
+        mImageButtons.clear();
     }
 
     private ImageButton createIconButton(Drawable icon) {
@@ -228,12 +233,7 @@
             imageButtons.addAll(state.getCustomActions()
                     .stream()
                     .map(rawAction -> rawAction.fetchDrawable(mContext))
-                    .map(action -> {
-                        ImageButton button = createIconButton(action.mIcon);
-                        button.setOnClickListener(view ->
-                                mController.doCustomAction(action.mAction, action.mExtras));
-                        return button;
-                    })
+                    .map(action -> getOrCreateIconButton(action))
                     .collect(Collectors.toList()));
         }
         if (!mSkipPrevAdded && !imageButtons.isEmpty()) {
@@ -245,6 +245,21 @@
         mControlBar.setViews(imageButtons.toArray(new ImageButton[0]));
     }
 
+    private ImageButton getOrCreateIconButton(CustomPlaybackAction action) {
+        // Reuse the ImageButton with the same action identifier if it exists, because if the
+        // ImageButton is focused, replacing it with a new one will make it lose focus.
+        ImageButton button = mImageButtons.get(action.mAction);
+        if (button != null) {
+            button.setImageDrawable(action.mIcon);
+        } else {
+            button = createIconButton(action.mIcon);
+            mImageButtons.put(action.mAction, button);
+        }
+        button.setOnClickListener(view ->
+                mController.doCustomAction(action.mAction, action.mExtras));
+        return button;
+    }
+
     private void onPlayPauseStopClicked(View view) {
         if (mController == null) {
             return;
diff --git a/car-media-common/src/com/android/car/media/common/MinimizedPlaybackControlBar.java b/car-media-common/src/com/android/car/media/common/MinimizedPlaybackControlBar.java
index 9cfda34..17a37b2 100644
--- a/car-media-common/src/com/android/car/media/common/MinimizedPlaybackControlBar.java
+++ b/car-media-common/src/com/android/car/media/common/MinimizedPlaybackControlBar.java
@@ -62,7 +62,7 @@
 
     private void init(Context context) {
         mMediaButtonController = new MediaButtonController(context, this,
-                R.color.playback_control_color, R.layout.play_pause_stop_button_layout,
+                R.color.playback_control_color, R.layout.minimized_play_pause_stop_button_layout,
                 R.drawable.ic_skip_previous, R.drawable.ic_skip_next);
 
         mShowLinearProgressBar = context.getResources().getBoolean(R.bool.show_linear_progress_bar);
diff --git a/car-media-common/src/com/android/car/media/common/PlaybackErrorViewController.java b/car-media-common/src/com/android/car/media/common/PlaybackErrorViewController.java
new file mode 100644
index 0000000..2d4c7c8
--- /dev/null
+++ b/car-media-common/src/com/android/car/media/common/PlaybackErrorViewController.java
@@ -0,0 +1,93 @@
+/*
+ * 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.media.common;
+
+import android.app.PendingIntent;
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.res.Resources;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+
+import com.android.car.apps.common.UxrButton;
+import com.android.car.apps.common.UxrTextView;
+import com.android.car.apps.common.util.ViewUtils;
+
+
+/** Simple controller for the error message and the error button. */
+public class PlaybackErrorViewController {
+
+    private static final String TAG = "PlaybckErrViewCtrlr";
+
+    // mErrorMessageView is defined explicitly as a UxrTextView instead of a TextView to
+    // provide clarity as it may be misleading to assume that mErrorMessageView extends all TextView
+    // methods. In addition, it increases discoverability of runtime issues that may occur.
+    private final UxrTextView mErrorMessageView;
+    private final UxrButton mErrorButton;
+
+    private final int mFadeDuration;
+
+    public PlaybackErrorViewController(View content) {
+        mErrorMessageView = content.findViewById(R.id.error_message);
+        mErrorButton = content.findViewById(R.id.error_button);
+
+        Resources res = content.getContext().getResources();
+        mFadeDuration = res.getInteger(R.integer.new_album_art_fade_in_duration);
+    }
+
+    /** Animates away the error views. */
+    public void hideError() {
+        ViewUtils.hideViewAnimated(mErrorMessageView, mFadeDuration);
+        ViewUtils.hideViewAnimated(mErrorButton, mFadeDuration);
+    }
+
+    /** Hides the error views without animation. */
+    public void hideErrorNoAnim() {
+        ViewUtils.hideViewAnimated(mErrorMessageView, 0);
+        ViewUtils.hideViewAnimated(mErrorButton, 0);
+    }
+
+    /** Sets the error message and optionally the error button. */
+    public void setError(String message, @Nullable String label,
+            @Nullable PendingIntent pendingIntent, boolean isDistractionOptimized) {
+        mErrorMessageView.setText(message);
+        ViewUtils.showViewAnimated(mErrorMessageView, mFadeDuration);
+
+        // Only show the error button if the error is actionable.
+        if (label != null && pendingIntent != null) {
+            mErrorButton.setText(label);
+
+            mErrorButton.setUxRestrictions(isDistractionOptimized
+                    ? CarUxRestrictions.UX_RESTRICTIONS_BASELINE
+                    : CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP);
+
+            mErrorButton.setOnClickListener(v -> {
+                try {
+                    pendingIntent.send();
+                } catch (PendingIntent.CanceledException e) {
+                    if (Log.isLoggable(TAG, Log.ERROR)) {
+                        Log.e(TAG, "Pending intent canceled");
+                    }
+                }
+            });
+            ViewUtils.showViewAnimated(mErrorButton, mFadeDuration);
+        } else {
+            ViewUtils.hideViewAnimated(mErrorButton, mFadeDuration);
+        }
+    }
+}
diff --git a/car-media-common/src/com/android/car/media/common/PlaybackErrorsHelper.java b/car-media-common/src/com/android/car/media/common/PlaybackErrorsHelper.java
new file mode 100644
index 0000000..475346d
--- /dev/null
+++ b/car-media-common/src/com/android/car/media/common/PlaybackErrorsHelper.java
@@ -0,0 +1,150 @@
+/*
+ * 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.media.common;
+
+import android.app.PendingIntent;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.media.session.PlaybackStateCompat;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.car.media.common.playback.PlaybackViewModel.PlaybackStateWrapper;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Abstract class to factorize most of the error handling logic.
+ */
+public abstract class PlaybackErrorsHelper {
+
+    private static final Map<Integer, Integer> ERROR_CODE_MESSAGES_MAP;
+
+    static {
+        Map<Integer, Integer> map = new HashMap<>();
+        map.put(PlaybackStateCompat.ERROR_CODE_APP_ERROR, R.string.error_code_app_error);
+        map.put(PlaybackStateCompat.ERROR_CODE_NOT_SUPPORTED, R.string.error_code_not_supported);
+        map.put(PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
+                R.string.error_code_authentication_expired);
+        map.put(PlaybackStateCompat.ERROR_CODE_PREMIUM_ACCOUNT_REQUIRED,
+                R.string.error_code_premium_account_required);
+        map.put(PlaybackStateCompat.ERROR_CODE_CONCURRENT_STREAM_LIMIT,
+                R.string.error_code_concurrent_stream_limit);
+        map.put(PlaybackStateCompat.ERROR_CODE_PARENTAL_CONTROL_RESTRICTED,
+                R.string.error_code_parental_control_restricted);
+        map.put(PlaybackStateCompat.ERROR_CODE_NOT_AVAILABLE_IN_REGION,
+                R.string.error_code_not_available_in_region);
+        map.put(PlaybackStateCompat.ERROR_CODE_CONTENT_ALREADY_PLAYING,
+                R.string.error_code_content_already_playing);
+        map.put(PlaybackStateCompat.ERROR_CODE_SKIP_LIMIT_REACHED,
+                R.string.error_code_skip_limit_reached);
+        map.put(PlaybackStateCompat.ERROR_CODE_ACTION_ABORTED, R.string.error_code_action_aborted);
+        map.put(PlaybackStateCompat.ERROR_CODE_END_OF_QUEUE, R.string.error_code_end_of_queue);
+        ERROR_CODE_MESSAGES_MAP = Collections.unmodifiableMap(map);
+    }
+
+    private final Context mContext;
+    private PlaybackStateWrapper mCurrentPlaybackStateWrapper;
+
+    public PlaybackErrorsHelper(Context context) {
+        mContext = context;
+    }
+
+    protected abstract void handleNewPlaybackState(String displayedMessage, PendingIntent intent,
+            String label);
+
+    /**
+     * Triggers updates of the error state.
+     * Must be called when the children list of the root of the browse tree changes AND when
+     * the playback state changes.
+     */
+    public void handlePlaybackState(@NonNull String tag, PlaybackStateWrapper state,
+            boolean ignoreSameState) {
+        if (Log.isLoggable(tag, Log.DEBUG)) {
+            Log.d(tag,
+                    "handlePlaybackState(); state change: " + (mCurrentPlaybackStateWrapper != null
+                            ? mCurrentPlaybackStateWrapper.getState() : null) + " -> " + (
+                            state != null ? state.getState() : null));
+        }
+
+        if (state == null) {
+            mCurrentPlaybackStateWrapper = null;
+            return;
+        }
+
+        String displayedMessage = getDisplayedMessage(mContext, state);
+        if (Log.isLoggable(tag, Log.DEBUG)) {
+            Log.d(tag, "Displayed error message: [" + displayedMessage + "]");
+        }
+        if (ignoreSameState && mCurrentPlaybackStateWrapper != null
+                && mCurrentPlaybackStateWrapper.getState() == state.getState()
+                && TextUtils.equals(displayedMessage,
+                getDisplayedMessage(mContext, mCurrentPlaybackStateWrapper))) {
+            if (Log.isLoggable(tag, Log.DEBUG)) {
+                Log.d(tag, "Ignore same playback state.");
+            }
+            return;
+        }
+
+        mCurrentPlaybackStateWrapper = state;
+
+        PendingIntent intent = getErrorResolutionIntent(state);
+        String label = getErrorResolutionLabel(state);
+        handleNewPlaybackState(displayedMessage, intent, label);
+    }
+
+
+    @Nullable
+    private String getDisplayedMessage(Context ctx, @Nullable PlaybackStateWrapper state) {
+        if (state == null) {
+            return null;
+        }
+        if (!TextUtils.isEmpty(state.getErrorMessage())) {
+            return state.getErrorMessage().toString();
+        }
+        // ERROR_CODE_UNKNOWN_ERROR means there is no error in PlaybackState.
+        if (state.getErrorCode() != PlaybackStateCompat.ERROR_CODE_UNKNOWN_ERROR) {
+            Integer messageId = ERROR_CODE_MESSAGES_MAP.get(state.getErrorCode());
+            return messageId != null ? ctx.getString(messageId) : ctx.getString(
+                    R.string.default_error_message);
+        }
+        if (state.getState() == PlaybackStateCompat.STATE_ERROR) {
+            return ctx.getString(R.string.default_error_message);
+        }
+        return null;
+    }
+
+    @Nullable
+    private PendingIntent getErrorResolutionIntent(@NonNull PlaybackStateWrapper state) {
+        Bundle extras = state.getExtras();
+        return extras == null ? null : extras.getParcelable(
+                MediaConstants.ERROR_RESOLUTION_ACTION_INTENT);
+    }
+
+    @Nullable
+    private String getErrorResolutionLabel(@NonNull PlaybackStateWrapper state) {
+        Bundle extras = state.getExtras();
+        return extras == null ? null : extras.getString(
+                MediaConstants.ERROR_RESOLUTION_ACTION_LABEL);
+    }
+
+}
diff --git a/car-media-common/src/com/android/car/media/common/PlaybackFragment.java b/car-media-common/src/com/android/car/media/common/PlaybackFragment.java
index a9285ba..60f4d18 100644
--- a/car-media-common/src/com/android/car/media/common/PlaybackFragment.java
+++ b/car-media-common/src/com/android/car/media/common/PlaybackFragment.java
@@ -21,10 +21,13 @@
 import static com.android.car.arch.common.LiveDataFunctions.mapNonNull;
 
 import android.app.Application;
+import android.app.PendingIntent;
 import android.car.Car;
+import android.car.content.pm.CarPackageManager;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.util.Size;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -38,66 +41,105 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.lifecycle.AndroidViewModel;
 import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.ViewModelProviders;
 
 import com.android.car.apps.common.BitmapUtils;
 import com.android.car.apps.common.CrossfadeImageView;
 import com.android.car.apps.common.imaging.ImageBinder;
 import com.android.car.apps.common.imaging.ImageBinder.PlaceholderType;
+import com.android.car.apps.common.util.CarPackageManagerUtils;
 import com.android.car.apps.common.util.ViewUtils;
+import com.android.car.arch.common.FutureData;
+import com.android.car.media.common.browse.BrowsedMediaItems;
+import com.android.car.media.common.browse.MediaBrowserViewModel;
 import com.android.car.media.common.playback.PlaybackViewModel;
+import com.android.car.media.common.playback.PlaybackViewModel.PlaybackStateWrapper;
 import com.android.car.media.common.source.MediaSource;
 import com.android.car.media.common.source.MediaSourceViewModel;
 
+import java.util.List;
+
 /**
  * {@link Fragment} that can be used to display and control the currently playing media item. Its
  * requires the android.Manifest.permission.MEDIA_CONTENT_CONTROL permission be held by the hosting
  * application.
  */
 public class PlaybackFragment extends Fragment {
+    private static final String TAG = "PlaybackFragmentWidget";
+
+    private Car mCar;
+    private CarPackageManager mCarPackageManager;
     private Intent mAppSelectorIntent;
     private MediaSourceViewModel mMediaSourceViewModel;
+    private PlaybackViewModel mPlaybackViewModel;
     private ImageBinder<MediaItemMetadata.ArtworkRef> mAlbumArtBinder;
+    private ViewModel mInnerViewModel;
+
+    private PlaybackErrorViewController mPlaybackErrorViewController;
+    private PlaybackErrorsHelper mErrorsHelper;
+    private boolean mIsFatalError;
 
     @Nullable
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
             Bundle savedInstanceState) {
         FragmentActivity activity = requireActivity();
-        PlaybackViewModel playbackViewModel = PlaybackViewModel.get(activity.getApplication(),
+        mCar = Car.createCar(activity);
+        mCarPackageManager = (CarPackageManager) mCar.getCarManager(Car.PACKAGE_SERVICE);
+
+        mPlaybackViewModel = PlaybackViewModel.get(activity.getApplication(),
                 MEDIA_SOURCE_MODE_PLAYBACK);
         mMediaSourceViewModel = MediaSourceViewModel.get(activity.getApplication(),
                 MEDIA_SOURCE_MODE_PLAYBACK);
         mAppSelectorIntent = MediaSource.getSourceSelectorIntent(getContext(), true);
 
-        ViewModel innerViewModel = ViewModelProviders.of(activity).get(ViewModel.class);
-        innerViewModel.init(mMediaSourceViewModel, playbackViewModel);
+        mInnerViewModel = ViewModelProviders.of(activity).get(ViewModel.class);
+        mInnerViewModel.init(activity, mMediaSourceViewModel, mPlaybackViewModel);
 
         View view = inflater.inflate(R.layout.playback_fragment, container, false);
 
+        mPlaybackErrorViewController = new PlaybackErrorViewController(view);
+
         PlaybackControlsActionBar playbackControls = view.findViewById(R.id.playback_controls);
-        playbackControls.setModel(playbackViewModel, getViewLifecycleOwner());
-        playbackViewModel.getPlaybackStateWrapper().observe(getViewLifecycleOwner(),
-                state -> ViewUtils.setVisible(playbackControls,
-                        (state != null) && state.shouldDisplay()));
+        playbackControls.setModel(mPlaybackViewModel, getViewLifecycleOwner());
+        mPlaybackViewModel.getPlaybackStateWrapper().observe(getViewLifecycleOwner(),
+                state -> {
+                    ViewUtils.setVisible(playbackControls,
+                            (state != null) && state.shouldDisplay());
+                    if (mErrorsHelper != null) {
+                        mErrorsHelper.handlePlaybackState(TAG, state, /*ignoreSameState*/ true);
+                    }
+                });
 
         TextView appName = view.findViewById(R.id.app_name);
-        innerViewModel.getAppName().observe(getViewLifecycleOwner(), appName::setText);
+        mInnerViewModel.getAppName().observe(getViewLifecycleOwner(), appName::setText);
 
         TextView title = view.findViewById(R.id.title);
-        innerViewModel.getTitle().observe(getViewLifecycleOwner(), title::setText);
+        mInnerViewModel.getTitle().observe(getViewLifecycleOwner(), title::setText);
 
         TextView subtitle = view.findViewById(R.id.subtitle);
-        innerViewModel.getSubtitle().observe(getViewLifecycleOwner(), subtitle::setText);
+        mInnerViewModel.getSubtitle().observe(getViewLifecycleOwner(), subtitle::setText);
 
         ImageView appIcon = view.findViewById(R.id.app_icon);
-        innerViewModel.getAppIcon().observe(getViewLifecycleOwner(), appIcon::setImageBitmap);
+        mInnerViewModel.getAppIcon().observe(getViewLifecycleOwner(), appIcon::setImageBitmap);
+
+        mInnerViewModel.getBrowseTreeHasChildren().observe(getViewLifecycleOwner(),
+                this::onBrowseTreeHasChildrenChanged);
+
+        mMediaSourceViewModel.getPrimaryMediaSource().observe(getViewLifecycleOwner(),
+                this::onMediaSourceChanged);
+
+        View playbackScrim = view.findViewById(R.id.playback_scrim);
+        playbackScrim.setOnClickListener(
+                // Let the Media center trampoline figure out what to open.
+                v -> {
+                    if (!mIsFatalError) {
+                        startActivity(new Intent(Car.CAR_INTENT_ACTION_MEDIA_TEMPLATE));
+                    }
+                });
 
         CrossfadeImageView albumBackground = view.findViewById(R.id.album_background);
-        albumBackground.setOnClickListener(
-                // Let the Media center trampoline figure out what to open.
-                v -> startActivity(new Intent(Car.CAR_INTENT_ACTION_MEDIA_TEMPLATE)));
-
         int max = activity.getResources().getInteger(R.integer.media_items_bitmap_max_size_px);
         Size maxArtSize = new Size(max, max);
         mAlbumArtBinder = new ImageBinder<>(PlaceholderType.FOREGROUND, maxArtSize,
@@ -107,16 +149,59 @@
                     albumBackground.setImageBitmap(bitmap, true);
                 });
 
-        playbackViewModel.getMetadata().observe(getViewLifecycleOwner(),
+        mPlaybackViewModel.getMetadata().observe(getViewLifecycleOwner(),
                 item -> mAlbumArtBinder.setImage(PlaybackFragment.this.getContext(),
                         item != null ? item.getArtworkKey() : null));
         View appSelector = view.findViewById(R.id.app_selector_container);
         appSelector.setVisibility(mAppSelectorIntent != null ? View.VISIBLE : View.GONE);
         appSelector.setOnClickListener(e -> getContext().startActivity(mAppSelectorIntent));
 
+
+        mErrorsHelper = new PlaybackErrorsHelper(activity) {
+
+            @Override
+            public void handleNewPlaybackState(String displayedMessage, PendingIntent intent,
+                    String label) {
+                mIsFatalError = false;
+                if (!TextUtils.isEmpty(displayedMessage)) {
+                    Boolean hasChildren = mInnerViewModel.getBrowseTreeHasChildren().getValue();
+                    if (hasChildren != null && !hasChildren) {
+                        boolean isDistractionOptimized =
+                                intent != null && CarPackageManagerUtils.isDistractionOptimized(
+                                        mCarPackageManager, intent);
+                        mPlaybackErrorViewController.setError(displayedMessage, label, intent,
+                                isDistractionOptimized);
+                        mIsFatalError = true;
+                    }
+                }
+
+                if (!mIsFatalError) {
+                    mPlaybackErrorViewController.hideError();
+                }
+            }
+        };
+
         return view;
     }
 
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        mCar.disconnect();
+        mErrorsHelper = null;
+    }
+
+    private void onBrowseTreeHasChildrenChanged(@Nullable Boolean hasChildren) {
+        if (hasChildren != null && mErrorsHelper != null) {
+            PlaybackStateWrapper state = mPlaybackViewModel.getPlaybackStateWrapper().getValue();
+            mErrorsHelper.handlePlaybackState(TAG, state, /*ignoreSameState*/ false);
+        }
+    }
+
+    private void onMediaSourceChanged(MediaSource source) {
+        mPlaybackErrorViewController.hideErrorNoAnim();
+    }
+
     /**
      * ViewModel for the PlaybackFragment
      */
@@ -127,15 +212,18 @@
         private LiveData<Bitmap> mAppIcon;
         private LiveData<CharSequence> mTitle;
         private LiveData<CharSequence> mSubtitle;
+        private MutableLiveData<Boolean> mBrowseTreeHasChildren = new MutableLiveData<>();
 
         private PlaybackViewModel mPlaybackViewModel;
         private MediaSourceViewModel mMediaSourceViewModel;
+        private MediaBrowserViewModel mRootMediaBrowserViewModel;
 
         public ViewModel(Application application) {
             super(application);
         }
 
-        void init(MediaSourceViewModel mediaSourceViewModel, PlaybackViewModel playbackViewModel) {
+        void init(FragmentActivity activity, MediaSourceViewModel mediaSourceViewModel,
+                PlaybackViewModel playbackViewModel) {
             if (mMediaSourceViewModel == mediaSourceViewModel
                     && mPlaybackViewModel == playbackViewModel) {
                 return;
@@ -147,6 +235,11 @@
             mAppIcon = mapNonNull(mMediaSource, MediaSource::getCroppedPackageIcon);
             mTitle = mapNonNull(playbackViewModel.getMetadata(), MediaItemMetadata::getTitle);
             mSubtitle = mapNonNull(playbackViewModel.getMetadata(), MediaItemMetadata::getArtist);
+
+            mRootMediaBrowserViewModel = MediaBrowserViewModel.Factory.getInstanceForBrowseRoot(
+                    mMediaSourceViewModel, ViewModelProviders.of(activity));
+            mRootMediaBrowserViewModel.getBrowsedMediaItems()
+                    .observe(activity, this::onItemsUpdate);
         }
 
         LiveData<CharSequence> getAppName() {
@@ -164,5 +257,22 @@
         LiveData<CharSequence> getSubtitle() {
             return mSubtitle;
         }
+
+        LiveData<Boolean> getBrowseTreeHasChildren() {
+            return mBrowseTreeHasChildren;
+        }
+
+        private void onItemsUpdate(FutureData<List<MediaItemMetadata>> futureData) {
+            if (futureData.isLoading()) {
+                mBrowseTreeHasChildren.setValue(null);
+                return;
+            }
+
+            List<MediaItemMetadata> items =
+                    BrowsedMediaItems.filterItems(/*forRoot*/ true, futureData.getData());
+
+            boolean browseTreeHasChildren = items != null && !items.isEmpty();
+            mBrowseTreeHasChildren.setValue(browseTreeHasChildren);
+        }
     }
 }
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 f93be0a..c9a5864 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
@@ -21,19 +21,21 @@
 import android.support.v4.media.MediaBrowserCompat;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.lifecycle.LiveData;
 
 import com.android.car.media.common.MediaItemMetadata;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 /**
  * A LiveData that provides access the a MediaBrowser's children
  */
 
-class BrowsedMediaItems extends LiveData<List<MediaItemMetadata>> {
+public class BrowsedMediaItems extends LiveData<List<MediaItemMetadata>> {
 
     /**
      * Number of times we will retry obtaining the list of children of a certain node
@@ -58,6 +60,19 @@
         mParentId = parentId;
     }
 
+    /**
+     * Filters the items that are valid for the root (tabs) or the current node. Returns null when
+     * the given list is null to preserve its error signal.
+     */
+    @Nullable
+    public static List<MediaItemMetadata> filterItems(boolean forRoot,
+            @Nullable List<MediaItemMetadata> items) {
+        if (items == null) return null;
+        Predicate<MediaItemMetadata> predicate = forRoot ? MediaItemMetadata::isBrowsable
+                : item -> (item.isPlayable() || item.isBrowsable());
+        return items.stream().filter(predicate).collect(Collectors.toList());
+    }
+
     @Override
     protected void onActive() {
         super.onActive();
diff --git a/car-media-common/src/com/android/car/media/common/source/MediaSourcesLiveData.java b/car-media-common/src/com/android/car/media/common/source/MediaSourcesProvider.java
similarity index 92%
rename from car-media-common/src/com/android/car/media/common/source/MediaSourcesLiveData.java
rename to car-media-common/src/com/android/car/media/common/source/MediaSourcesProvider.java
index 9f9cc26..7312589 100644
--- a/car-media-common/src/com/android/car/media/common/source/MediaSourcesLiveData.java
+++ b/car-media-common/src/com/android/car/media/common/source/MediaSourcesProvider.java
@@ -46,12 +46,11 @@
  * Singleton that provides access to the list of all possible media sources that can be selected
  * to be played.
  */
-// TODO(arnaudberry) rename to MediaSourcesProvider
-public class MediaSourcesLiveData {
+public class MediaSourcesProvider {
 
     private static final String TAG = "MediaSources";
 
-    private static MediaSourcesLiveData sInstance;
+    private static MediaSourcesProvider sInstance;
     private final Context mAppContext;
     @Nullable
     private List<MediaSource> mMediaSources;
@@ -64,17 +63,17 @@
     };
 
     /** Returns the singleton instance. */
-    public static MediaSourcesLiveData getInstance(@NonNull Context context) {
+    public static MediaSourcesProvider getInstance(@NonNull Context context) {
         if (sInstance == null) {
-            sInstance = new MediaSourcesLiveData(context);
+            sInstance = new MediaSourcesProvider(context);
         }
         return sInstance;
     }
 
     /** Returns a different instance every time (tests don't like statics) */
     @VisibleForTesting
-    public static MediaSourcesLiveData createForTesting(@NonNull Context context) {
-        return new MediaSourcesLiveData(context);
+    public static MediaSourcesProvider createForTesting(@NonNull Context context) {
+        return new MediaSourcesProvider(context);
     }
 
     @VisibleForTesting
@@ -82,7 +81,7 @@
         mMediaSources = null;
     }
 
-    private MediaSourcesLiveData(@NonNull Context context) {
+    private MediaSourcesProvider(@NonNull Context context) {
         mAppContext = context.getApplicationContext();
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_PACKAGE_ADDED);
diff --git a/car-media-common/tests/robotests/src/com/android/car/media/common/playback/PlaybackViewModelTest.java b/car-media-common/tests/robotests/src/com/android/car/media/common/playback/PlaybackViewModelTest.java
index df92529..1fb5dc1 100644
--- a/car-media-common/tests/robotests/src/com/android/car/media/common/playback/PlaybackViewModelTest.java
+++ b/car-media-common/tests/robotests/src/com/android/car/media/common/playback/PlaybackViewModelTest.java
@@ -51,6 +51,7 @@
 import org.mockito.junit.MockitoRule;
 import org.robolectric.RobolectricTestRunner;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -173,7 +174,7 @@
     @Test
     public void testGetHasQueue_true() {
         List<MediaSessionCompat.QueueItem> queue =
-                Collections.singletonList(createQueueItem("title", 1));
+                Arrays.asList(createQueueItem("title1", 1), createQueueItem("title2", 2));
         CaptureObserver<Boolean> observer = new CaptureObserver<>();
         mPlaybackViewModel.hasQueue().observe(mLifecycleOwner, observer);
         observer.reset();
diff --git a/car-media-common/tests/robotests/src/com/android/car/media/common/source/MediaSourcesLiveDataTest.java b/car-media-common/tests/robotests/src/com/android/car/media/common/source/MediaSourcesProviderTest.java
similarity index 98%
rename from car-media-common/tests/robotests/src/com/android/car/media/common/source/MediaSourcesLiveDataTest.java
rename to car-media-common/tests/robotests/src/com/android/car/media/common/source/MediaSourcesProviderTest.java
index f97b278..79dc196 100644
--- a/car-media-common/tests/robotests/src/com/android/car/media/common/source/MediaSourcesLiveDataTest.java
+++ b/car-media-common/tests/robotests/src/com/android/car/media/common/source/MediaSourcesProviderTest.java
@@ -50,7 +50,7 @@
 import java.util.stream.Collectors;
 
 @RunWith(RobolectricTestRunner.class)
-public class MediaSourcesLiveDataTest {
+public class MediaSourcesProviderTest {
 
     @Rule
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@@ -65,13 +65,13 @@
     private static final String TEST_SERVICE_PACKAGE_2 = "service_package2";
     private static final String TEST_SERVICE_PACKAGE_WITH_METADATA = "service_package3";
 
-    private MediaSourcesLiveData mMediaSources;
+    private MediaSourcesProvider mMediaSources;
     private Intent mActivityIntent;
     private Intent mServiceIntent;
 
     @Before
     public void setUp() {
-        mMediaSources = MediaSourcesLiveData.createForTesting(application);
+        mMediaSources = MediaSourcesProvider.createForTesting(application);
 
         mActivityIntent = new Intent(Intent.ACTION_MAIN, null);
         mActivityIntent.addCategory(Intent.CATEGORY_APP_MUSIC);
diff --git a/car-messenger-common/Android.bp b/car-messenger-common/Android.bp
index f826816..6c7a82f 100644
--- a/car-messenger-common/Android.bp
+++ b/car-messenger-common/Android.bp
@@ -23,13 +23,14 @@
         enabled: false,
     },
 
-    libs: ["android.car"],
+    sdk_version: "system_current",
+    min_sdk_version: "28",
+
+    libs: ["android.car-system-stubs",],
 
     resource_dirs: ["res"],
 
     static_libs: [
-        "android.car.userlib",
-        "androidx.legacy_legacy-support-v4",
         "car-apps-common",
         "car-messenger-protos",
         "car-telephony-common",
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 da48646..d5610a2 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
@@ -16,7 +16,6 @@
 
 package com.android.car.messenger.common;
 
-import android.annotation.Nullable;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -24,8 +23,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
 import android.os.Bundle;
 
+import androidx.annotation.Nullable;
 import androidx.core.app.NotificationCompat;
 import androidx.core.app.NotificationCompat.Action;
 import androidx.core.app.Person;
@@ -202,9 +203,11 @@
         if (avatarIcon != null) {
             builder.setLargeIcon(avatarIcon);
         } else if (mUseLetterTile) {
-            builder.setLargeIcon(TelecomUtils.createLetterTile(mContext,
+            BitmapDrawable drawable = (BitmapDrawable) TelecomUtils.createLetterTile(mContext,
                     Utils.getInitials(lastMessage.getSenderName(), ""),
-                    lastMessage.getSenderName(), mBitmapSize, mCornerRadiusPercent).getBitmap());
+                    lastMessage.getSenderName(), mBitmapSize, mCornerRadiusPercent)
+                    .loadDrawable(mContext);
+            builder.setLargeIcon(drawable.getBitmap());
         }
         // Else, no avatar icon will be shown.
 
@@ -235,9 +238,10 @@
             }
         });
         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.
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 3baf3fd..d563d12 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,14 +18,14 @@
 
 import static com.android.car.apps.common.util.SafeLog.logw;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.bluetooth.BluetoothDevice;
 import android.content.Intent;
 import android.graphics.drawable.Icon;
-import android.os.Build;
 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;
@@ -77,7 +77,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 {
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 a2c1d60..8e016dd 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
@@ -21,12 +21,12 @@
 import static com.android.car.messenger.common.Utils.BMC_EXTRA_MESSAGE_READ_STATUS;
 import static com.android.car.messenger.common.Utils.BMC_EXTRA_MESSAGE_TIMESTAMP;
 
-import android.annotation.Nullable;
 import android.bluetooth.BluetoothDevice;
 import android.content.Intent;
-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;
 
@@ -77,7 +77,7 @@
             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 {
@@ -103,7 +103,7 @@
      **/
     public static Message parseFromIntent(Intent intent) {
         if (!Utils.isValidMapClientIntent(intent)) {
-            if (Log.isLoggable(TAG, Log.DEBUG) || Build.IS_DEBUGGABLE) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
                 throw new IllegalArgumentException(
                         "BluetoothMapClient intent is missing required fields");
             } else {
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 282c1f5..68ed3aa 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
@@ -23,6 +23,8 @@
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
 
 import androidx.annotation.Nullable;
@@ -46,6 +48,7 @@
 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 {
@@ -282,7 +285,7 @@
     /** Returns whether the BluetoothMapClient intent represents a group conversation. **/
     public static boolean isGroupConversation(Intent intent) {
         return (intent.getStringArrayExtra(Intent.EXTRA_CC) != null
-                && intent.getStringArrayExtra(Intent.EXTRA_CC).length > 0);
+                && intent.getStringArrayExtra(Intent.EXTRA_CC).length > 1);
     }
 
     /**
@@ -318,11 +321,16 @@
     /** Returns the list of recipient uris for a BluetoothMapClient intent. **/
     public static List<String> getInclusiveRecipientsUrisList(Intent intent) {
         List<String> ccUris = new ArrayList<>();
-        ccUris.add(getSenderUri(intent));
+        String uri = getSenderUri(intent);
         if (isGroupConversation(intent)) {
             ccUris.addAll(Arrays.asList(intent.getStringArrayExtra(Intent.EXTRA_CC)));
-            Collections.sort(ccUris);
         }
+        if (!ccUris.contains(uri)) {
+            ccUris.add(uri);
+        }
+        // TODO (b/169183358): remove sorting.
+        Collections.sort(ccUris);
+
         return ccUris;
     }
 
@@ -332,12 +340,96 @@
     @Nullable
     public static String getPhoneNumberFromMapClient(@Nullable String senderContactUri) {
         if (senderContactUri == null || !senderContactUri.matches(MAP_CLIENT_URI_REGEX)) {
+            logw(TAG, " contactUri is malformed! " + senderContactUri);
             return null;
         }
 
         return senderContactUri.substring(MAP_CLIENT_URI_PHONE_NUMBER_SUBSTRING_INDEX);
     }
 
+    /**
+     * 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>() {
@@ -370,4 +462,5 @@
                     }
                 }
             };
+
 }
diff --git a/car-ui-lib/tests/unit/Android.bp b/car-messenger-common/tests/unit/Android.bp
similarity index 63%
rename from car-ui-lib/tests/unit/Android.bp
rename to car-messenger-common/tests/unit/Android.bp
index da5f41d..c5d29fa 100644
--- a/car-ui-lib/tests/unit/Android.bp
+++ b/car-messenger-common/tests/unit/Android.bp
@@ -12,37 +12,28 @@
 // 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: "CarUILibUnitTests",
-    certificate: "platform",
+    name: "car-messenger-common-lib-unit-tests",
+
+    srcs: ["src/**/*.java"],
+
     libs: [
         "android.test.runner",
         "android.test.base",
-        "android.car"
+        "android.test.mock",
     ],
-    resource_dirs: [
-        "res",
-    ],
+
     static_libs: [
+        "android.car",
+        "androidx.test.core",
+        "androidx.test.ext.junit",
         "androidx.test.rules",
-        "androidx.test.espresso.core",
-	"androidx.test.espresso.contrib",
-        "car-ui-lib",
-        "platform-test-annotations",
-        "mockito-target-inline-minus-junit4",
+        "car-messenger-common",
+        "mockito-target-extended-minus-junit4",
         "truth-prebuilt",
     ],
 
-    jni_libs: [
-        // For mockito extended
-        "libdexmakerjvmtiagent",
-        "libstaticjvmtiagent",
-    ],
-
-    // Include all test java files.
-    srcs: ["src/**/*.java"],
-
     platform_apis: true,
-    test_suites: ["device-tests"],
-}
+}
\ 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/Android.bp b/car-telephony-common/Android.bp
index 8f9318e..1e6a9b8 100644
--- a/car-telephony-common/Android.bp
+++ b/car-telephony-common/Android.bp
@@ -25,6 +25,9 @@
         enabled: false,
     },
 
+    sdk_version: "system_current",
+    min_sdk_version: "28",
+
     static_libs: [
         "androidx.legacy_legacy-support-v4",
         "car-apps-common",
diff --git a/car-telephony-common/res/values-bg/strings.xml b/car-telephony-common/res/values-bg/strings.xml
index f308b5e..99d16bd 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="8063542005458186874">"Задържане на обаждането"</string>
     <string name="call_state_call_ended" msgid="1432127342949555464">"Обаждането завърши"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Установена е връзка"</string>
diff --git a/car-telephony-common/res/values-et/strings.xml b/car-telephony-common/res/values-et/strings.xml
index 6707e93..9926364 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="1432127342949555464">"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 fe742e7..7450656 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="1432127342949555464">"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 aad5c48..67620e7 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="8063542005458186874">"בהמתנה"</string>
     <string name="call_state_call_ended" msgid="1432127342949555464">"השיחה הסתיימה"</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 98bcb58..038ac0c 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="1432127342949555464">"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 8c3f1ff..2283a98 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="8063542005458186874">"होल्डमा छ"</string>
     <string name="call_state_call_ended" msgid="1432127342949555464">"कल समाप्त भयो"</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 e97b569..c1f4c00 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="1432127342949555464">"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 9ac136b..f56f6ad 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="8063542005458186874">"Em espera"</string>
     <string name="call_state_call_ended" msgid="1432127342949555464">"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 6711f55..28a496b 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="8063542005458186874">"Imesitishwa"</string>
     <string name="call_state_call_ended" msgid="1432127342949555464">"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 0a8a28c..6b5a368 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="1432127342949555464">"วางสายแล้ว"</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/src/com/android/car/telephony/common/CallDetail.java b/car-telephony-common/src/com/android/car/telephony/common/CallDetail.java
index 828b7f7..04fc4bd 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/CallDetail.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/CallDetail.java
@@ -50,7 +50,7 @@
     public static CallDetail fromTelecomCallDetail(@Nullable Call.Details callDetail) {
         return new CallDetail(getNumber(callDetail), getDisconnectCause(callDetail),
                 getGatewayInfoOriginalAddress(callDetail), getConnectTimeMillis(callDetail),
-                callDetail.hasProperty(Call.Details.PROPERTY_CONFERENCE));
+                isConferenceCall(callDetail));
     }
 
     /**
@@ -126,4 +126,8 @@
             return 0;
         }
     }
+
+    private static boolean isConferenceCall(Call.Details callDetail) {
+        return callDetail != null && callDetail.hasProperty(Call.Details.PROPERTY_CONFERENCE);
+    }
 }
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 e700632..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
@@ -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 5d8e3eb..dac0aa3 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,10 +20,12 @@
 import android.database.Cursor;
 import android.provider.ContactsContract;
 import android.text.TextUtils;
+import android.util.ArrayMap;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.Observer;
 
 import com.android.car.apps.common.log.L;
@@ -55,6 +57,12 @@
      * key to contacts for one account.
      */
     private final Map<String, Map<String, Contact>> mLookupKeyContactMap = new HashMap<>();
+
+    /**
+     * A map which divides contacts LiveData by account.
+     */
+    private final Map<String, MutableLiveData<List<Contact>>> mAccountContactsLiveDataMap =
+            new ArrayMap<>();
     private boolean mIsLoaded = false;
 
     /**
@@ -136,12 +144,29 @@
 
     /**
      * 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) {
+        if (!mAccountContactsLiveDataMap.containsKey(accountName)) {
+            mAccountContactsLiveDataMap.put(accountName, new MutableLiveData<>());
+        }
+        return mAccountContactsLiveDataMap.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.
      */
@@ -227,8 +252,12 @@
             subMap.put(lookupKey, Contact.fromCursor(mContext, cursor, subMap.get(lookupKey)));
         }
 
-        for (Map<String, Contact> subMap : contactMap.values()) {
+        for (String accountName : contactMap.keySet()) {
+            Map<String, Contact> subMap = contactMap.get(accountName);
             contactList.addAll(subMap.values());
+            MutableLiveData<List<Contact>> accountContactsLiveData =
+                    (MutableLiveData<List<Contact>>) getContactsLiveDataByAccount(accountName);
+            accountContactsLiveData.postValue(new ArrayList<>(subMap.values()));
         }
 
         mLookupKeyContactMap.clear();
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 815e3d5..a1e25f2 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
@@ -70,6 +70,7 @@
     private long mId;
     private String mPhoneNumberString;
     private I18nPhoneNumberWrapper mI18nPhoneNumberWrapper;
+    private String mAccountName;
     private List<Record> mCallRecords = new ArrayList<>();
 
     /**
@@ -80,6 +81,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);
@@ -88,6 +90,7 @@
                 phoneCallLog.mPhoneNumberString);
         Record record = new Record(cursor.getLong(dateColumn), cursor.getInt(callTypeColumn));
         phoneCallLog.mCallRecords.add(record);
+        phoneCallLog.mAccountName = cursor.getString(accountNameColumn);
         return phoneCallLog;
     }
 
@@ -96,6 +99,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;
@@ -163,6 +174,8 @@
         sb.append(TelecomUtils.piiLog(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/PhoneNumber.java b/car-telephony-common/src/com/android/car/telephony/common/PhoneNumber.java
index 4e3eff6..255def0 100644
--- a/car-telephony-common/src/com/android/car/telephony/common/PhoneNumber.java
+++ b/car-telephony-common/src/com/android/car/telephony/common/PhoneNumber.java
@@ -23,7 +23,6 @@
 import android.os.Parcelable;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -107,8 +106,8 @@
         mLabel = label;
         mIsPrimary = isPrimary;
         mId = id;
-        mAccountName = TextUtils.emptyIfNull(accountName);
-        mAccountType = TextUtils.emptyIfNull(accountType);
+        mAccountName = accountName == null ? "" : accountName;
+        mAccountType = accountType == null ? "" : accountType;
         mDataVersion = dataVersion;
     }
 
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 0ad3d57..a790318 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
@@ -27,8 +27,6 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.drawable.Icon;
-import android.location.Country;
-import android.location.CountryDetector;
 import android.net.Uri;
 import android.provider.CallLog;
 import android.provider.ContactsContract;
@@ -69,6 +67,14 @@
     private static final String TAG = "CD.TelecomUtils";
     private static final int PII_STRING_LENGTH = 4;
     private static final String COUNTRY_US = "US";
+    /**
+     * 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;
@@ -138,22 +144,7 @@
      * @return The ISO 3166-1 two letters country code of the country the user is in.
      */
     private static String getCurrentCountryIso(Context context, Locale locale) {
-        String countryIso = null;
-        CountryDetector detector = (CountryDetector) context.getSystemService(
-                Context.COUNTRY_DETECTOR);
-        if (detector != null) {
-            Country country = detector.detectCountry();
-            if (country != null) {
-                countryIso = country.getCountryIso();
-            } else {
-                L.e(TAG, "CountryDetector.detectCountry() returned null.");
-            }
-        }
-        if (countryIso == null) {
-            countryIso = locale.getCountry();
-            L.w(TAG, "No CountryDetector; falling back to countryIso based on locale: "
-                    + countryIso);
-        }
+        String countryIso = locale.getCountry();
         if (countryIso == null || countryIso.length() != 2) {
             L.w(TAG, "Invalid locale, falling back to US");
             countryIso = COUNTRY_US;
@@ -391,26 +382,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();
 
@@ -589,7 +602,7 @@
     private static Uri makeResourceUri(Context context, int resourceId) {
         return new Uri.Builder()
                 .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
-                .encodedAuthority(context.getBasePackageName())
+                .encodedAuthority(context.getPackageName())
                 .appendEncodedPath(String.valueOf(resourceId))
                 .build();
     }
@@ -603,4 +616,12 @@
         return piiString.length() >= PII_STRING_LENGTH ? "*" + piiString.substring(
                 piiString.length() - PII_STRING_LENGTH) : piiString;
     }
+
+    /**
+     * 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/.gitignore b/car-ui-lib/.gitignore
index cedb234..a6be7ed 100644
--- a/car-ui-lib/.gitignore
+++ b/car-ui-lib/.gitignore
@@ -13,3 +13,6 @@
 
 # Python
 *.pyc
+
+# Android studio's layout inspector captures
+captures/
diff --git a/car-ui-lib/Android.bp b/car-ui-lib/Android.bp
index 3506a3e..4e59773 100644
--- a/car-ui-lib/Android.bp
+++ b/car-ui-lib/Android.bp
@@ -1,5 +1,4 @@
 
-//
 // Copyright (C) 2019 The Android Open Source Project
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,8 +17,9 @@
     name: "car-ui-lib",
     sdk_version: "system_current",
     min_sdk_version: "28",
-    srcs: ["src/**/*.java"],
-    resource_dirs: ["res"],
+    srcs: ["car-ui-lib/src/main/java/**/*.java"],
+    manifest: "car-ui-lib/AndroidManifest.xml",
+    resource_dirs: ["car-ui-lib/src/main/res"],
     optimize: {
         enabled: false,
     },
@@ -35,10 +35,46 @@
     ],
 }
 
+// User this if your project includes overlayable.xml
+android_library {
+    name: "car-ui-lib-overlayable",
+    sdk_version: "system_current",
+    min_sdk_version: "28",
+    manifest: "car-ui-lib/AndroidManifest.xml",
+    resource_dirs: [
+        "car-ui-lib/src/main/res-overlayable"
+    ],
+    static_libs: [
+        "car-ui-lib",
+    ],
+    // This is also needed for `car-ui-lib` build target.
+    // But it's not in explicitly added to the build rule,
+    // Because it's hardcoded in apex.go file under Soong.
+    apex_available: [
+        "com.android.permission"
+    ],
+}
+
+android_app {
+    name: "car-ui-lib-sharedlibrary",
+    srcs: ["sharedlibrary/src/main/java/**/*.java"],
+    manifest: "sharedlibrary/AndroidManifest.xml",
+    resource_dirs: ["sharedlibrary/src/main/res"],
+    visibility: [
+        "//visibility:private",
+    ],
+    platform_apis: true,
+    aaptflags: ["--shared-lib"],
+    optimize: {
+        enabled: false,
+    },
+}
+
 android_library {
     name: "car-ui-lib-testing-support",
     sdk_version: "system_current",
     min_sdk_version: "28",
+    manifest: "car-ui-lib/AndroidManifest.xml",
     srcs: [
         "tests/baselayouttests/src/**/*.java",
     ],
@@ -50,4 +86,68 @@
         "car-ui-lib",
         "Robolectric_all-target",
     ],
-}
\ No newline at end of file
+}
+
+android_test {
+    name: "CarUILibUnitTests",
+    certificate: "platform",
+    libs: [
+        "android.test.runner",
+        "android.test.base",
+        "android.car"
+    ],
+    manifest: "car-ui-lib/src/androidTest/AndroidManifest.xml",
+    resource_dirs: ["car-ui-lib/src/androidTest/res"],
+    // Include all test java files.
+    srcs: ["car-ui-lib/src/androidTest/java/**/*.java"],
+    static_libs: [
+        "androidx.test.rules",
+        "androidx.test.espresso.core",
+        "androidx.test.espresso.contrib",
+        "androidx.test.ext.junit",
+        "car-ui-lib",
+        "platform-test-annotations",
+        "mockito-target-inline-minus-junit4",
+        "truth-prebuilt",
+    ],
+    jni_libs: [
+        // For mockito extended
+        "libdexmakerjvmtiagent",
+        "libstaticjvmtiagent",
+    ],
+
+    platform_apis: true,
+    test_suites: ["device-tests"],
+}
+
+android_app {
+    name: "PaintBooth",
+    srcs: [
+    	"paintbooth/src/**/*.java",
+    	"paintbooth/src/**/*.kt",
+    ],
+    required: ["privapp_whitelist_com.android.car.ui.paintbooth"],
+    manifest: "paintbooth/AndroidManifest.xml",
+    resource_dirs: ["paintbooth/src/main/res", "paintbooth/src/main/res-public"],
+    platform_apis: true,
+    certificate: "platform",
+    privileged: true,
+    static_libs: [
+        "car-ui-lib",
+        "android.car.userlib",
+	"guava",
+	"gson-prebuilt-jar",
+    ],
+    optimize: {
+        enabled: false,
+    },
+    dex_preopt: {
+        enabled: false,
+    },
+    product_variables: {
+        pdk: {
+            enabled: false,
+        },
+    },
+    export_package_resources: true,
+}
diff --git a/car-ui-lib/OWNERS b/car-ui-lib/OWNERS
index aef5c65..9656c1f 100644
--- a/car-ui-lib/OWNERS
+++ b/car-ui-lib/OWNERS
@@ -1,9 +1,11 @@
 # People who can approve changes for submission.
+set noparent
+
+# TLs
+stenning@google.com
 
 # Engs
 colefaust@google.com
+farivar@google.com
 priyanksingh@google.com
 rampara@google.com
-ckoessler@google.com
-
-
diff --git a/car-ui-lib/README.md b/car-ui-lib/README.md
index 282f8e1..3be5f68 100644
--- a/car-ui-lib/README.md
+++ b/car-ui-lib/README.md
@@ -2,14 +2,48 @@
 Components and resources designed to increase Automotive UI consistency between
 GAS (Google Automotive Services) apps, system-apps and OEM developed apps.
 
-See: go/aae-carui
+See: go/aae-chassis-site
 
 ## Content
 
 Components and resources designed to be configured by means of RRO (Runtime
 Resource Overlays) by OEMs.
 
-## Updating
+## Developing
+
+Project layout:
+* __car-ui-lib__: The main library that is statically linked into applications
+* __paintbooth__: A test application that contains demos of all the car-ui components
+* __referencedesign__: An RRO applied to internal google targets that does some minor car-ui customizations. It's used to make changes to car-ui that would cause backwards compatability issues if we were to create them directly in the library. It can also serve as an example RRO for OEMs, and should be kept reasonably functional and up-to-date because we use it actively.
+
+### Building and running PaintBooth
+
+While car-ui-lib can be developed by using aidegen, it's probably easier to use Android Studio with the gradle build files. To do this, select "Open an existing Android Studio project", then navigating to the (outer) car-ui-lib folder:
+
+![Open an existing Android Studio project](documentation/images/open_existing_android_studio_project.png)
+![Navigating to car-ui-lib](documentation/images/navigating_to_car_ui_lib.png)
+
+If this is your first time using Android Studio, it may ask you to install an SDK. Go ahead and do that.
+
+It may ask if you want to generate the gradle wrapper files, select "Yes". Wait for it to finish indexing, and then you should see car-ui-lib and PaintBooth projects in the project pane on the left. Make sure your project view is set to "Android" mode, as opposed to the regular "Project" mode:
+
+![Android project view](documentation/images/android_project_view.png)
+
+To launch paintbooth, start a car emulator or connect a device, make sure the PaintBooth module and "Virtual Device" is selected in your Android Studio toolbar, then click the green arrow:
+
+![Launching Paintbooth](documentation/images/launch_paintbooth.png)
+
+If it launches a LeakCanary activity instead of PaintBooth, either exit LeakCanary and launch PaintBooth as normal through the car's launcher, or click on the PaintBooth module > Edit configurations > Change "Launch: Default Activity" to "Specified Activity", and enter `com.android.car.ui.paintbooth.MainActivity`.
+
+### Running tests
+
+Once you've set up paintbooth as described above, just open one of the test classes in car-ui-lib > java > com.android.car.ui (androidTest) and click the green arrow next to one of the tests to run it:
+
+![Running tests](documentation/images/running_tests.png)
+
+The tests can also be run from the command line via `atest CarUILibUnitTests`, but that's much slower than running them through Android Studio.
+
+## Updating Google3
 
 This library is developed in Gerrit and copied as source to Google3 using
 Copybara (go/copybara).
@@ -20,9 +54,13 @@
 Here is the process for updating this library:
 
 1. Develop, test and upload changes to Gerrit
-2. On Google3, run './update.sh review <cl>' (with <cl> being your Gerrit CL #) and test your changes
+2. On Google3, run `./update.sh review <cl>` (with <cl> being your Gerrit CL #) and test your changes
 3. Repeat #1 and #2 until your changes look okay on both places.
 4. Back on Gerrit, submit your CL.
-5. Back on Google3, run './update.sh manual' submit
+5. Back on Google3, run `./update.sh manual` submit
 
 TODO: Automate this process using CaaS (in progress)
+
+If you're just updating the current state of car-ui-lib, and not testing a review that has yet to be submitted, the process can be simplified to:
+
+`/google/data/ro/teams/copybara/copybara /google/src/head/depot/google3/third_party/java_src/android_libs/car_chassis_lib/copy.bara.sky default`
diff --git a/car-ui-lib/build.gradle b/car-ui-lib/build.gradle
index c230345..9744622 100644
--- a/car-ui-lib/build.gradle
+++ b/car-ui-lib/build.gradle
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -35,49 +35,8 @@
         google()
         jcenter()
     }
-    buildDir = "/tmp/car-ui-build/${rootProject.name}/${project.name}"
     tasks.withType(JavaCompile) {
         options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
     }
 }
 
-// Library-level build file
-
-apply plugin: 'com.android.library'
-
-android {
-    compileSdkVersion 29
-
-    defaultConfig {
-        minSdkVersion 28
-        targetSdkVersion 29
-        versionCode 1
-        versionName "1.0"
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
-    }
-
-    sourceSets {
-        main {
-            manifest.srcFile 'AndroidManifest-gradle.xml'
-            java.srcDirs = ['src']
-            res.srcDirs = ['res']
-        }
-    }
-}
-
-dependencies {
-    api 'androidx.annotation:annotation:1.1.0'
-    api 'androidx.appcompat:appcompat:1.1.0'
-    api 'androidx.constraintlayout:constraintlayout:1.1.3'
-    api 'androidx.preference:preference:1.1.0'
-    api 'androidx.recyclerview:recyclerview:1.0.0'
-    api 'androidx.core:core:1.2.0'
-    implementation 'com.android.support:support-annotations:28.0.0'
-
-    // This is the gradle equivalent of the libs: ["android.car"] in our Android.bp
-    implementation files('../../../../../out/target/common/obj/JAVA_LIBRARIES/android.car_intermediates/classes.jar')
-}
diff --git a/car-ui-lib/AndroidManifest-gradle.xml b/car-ui-lib/car-ui-lib/AndroidManifest-gradle.xml
similarity index 100%
rename from car-ui-lib/AndroidManifest-gradle.xml
rename to car-ui-lib/car-ui-lib/AndroidManifest-gradle.xml
diff --git a/car-ui-lib/AndroidManifest.xml b/car-ui-lib/car-ui-lib/AndroidManifest.xml
similarity index 100%
rename from car-ui-lib/AndroidManifest.xml
rename to car-ui-lib/car-ui-lib/AndroidManifest.xml
diff --git a/car-ui-lib/tests/unit/build.gradle b/car-ui-lib/car-ui-lib/build.gradle
similarity index 65%
rename from car-ui-lib/tests/unit/build.gradle
rename to car-ui-lib/car-ui-lib/build.gradle
index 2a80132..5c6ce32 100644
--- a/car-ui-lib/tests/unit/build.gradle
+++ b/car-ui-lib/car-ui-lib/build.gradle
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2020 The Android Open Source Project
+ * 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.
@@ -14,39 +14,16 @@
  * limitations under the License.
  */
 
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-    repositories {
-        google()
-        jcenter()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.3'
-
-        // NOTE: Do not place your application dependencies here; they belong
-        // in the individual module build.gradle files
-    }
-}
-
-allprojects {
-    repositories {
-        google()
-        jcenter()
-    }
-}
-
 // Library-level build file
 
 apply plugin: 'com.android.library'
 
 android {
-    compileSdkVersion 29
+    compileSdkVersion 30
 
     defaultConfig {
         minSdkVersion 28
-        targetSdkVersion 29
+        targetSdkVersion 30
         versionCode 1
         versionName "1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -59,12 +36,7 @@
 
     sourceSets {
         main {
-            manifest.srcFile 'AndroidManifest.xml'
-            res.srcDirs = ['res']
-        }
-
-        androidTest {
-            java.srcDirs = ['src']
+            manifest.srcFile 'AndroidManifest-gradle.xml'
         }
     }
 
@@ -73,10 +45,26 @@
             includeAndroidResources = true
         }
     }
+
+    // This is the gradle equivalent of the libs: ["android.car"] in the Android.bp
+    // Which will be in the SDK 30 R3+
+    useLibrary 'android.car'
 }
 
 dependencies {
-    implementation project(':')
+    api 'androidx.annotation:annotation:1.1.0'
+    api 'androidx.appcompat:appcompat:1.1.0'
+    api 'androidx.constraintlayout:constraintlayout:2.0.1'
+    api 'androidx.preference:preference:1.1.0'
+    api 'androidx.recyclerview:recyclerview:1.0.0'
+    api 'androidx.core:core:1.2.0'
+    implementation 'com.android.support:support-annotations:28.0.0'
+
+    testImplementation "androidx.test.ext:junit:1.1.1"
+    testImplementation 'org.robolectric:robolectric:4.4'
+    testImplementation "org.mockito:mockito-core:2.19.0"
+    testImplementation "com.google.truth:truth:0.29"
+    testImplementation "org.testng:testng:6.9.9"
 
     androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
@@ -86,11 +74,7 @@
     androidTestImplementation "org.mockito:mockito-core:2.19.0"
     androidTestImplementation 'androidx.test:runner:1.1.0'
     androidTestImplementation 'androidx.test:rules:1.1.0'
-
     // This is needed to be able to spy certain classes with Mockito
     // It's major/minor version must match Mockito's.
-    androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.19.0'
-
-    // This is the gradle equivalent of linking to android.car in our Android.mk
-    implementation files('../../../../../../../out/target/common/obj/JAVA_LIBRARIES/android.car_intermediates/classes.jar')
+    androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito-inline:2.19.0'
 }
diff --git a/car-ui-lib/tests/unit/AndroidManifest.xml b/car-ui-lib/car-ui-lib/src/androidTest/AndroidManifest.xml
similarity index 83%
rename from car-ui-lib/tests/unit/AndroidManifest.xml
rename to car-ui-lib/car-ui-lib/src/androidTest/AndroidManifest.xml
index e499db5..81df306 100644
--- a/car-ui-lib/tests/unit/AndroidManifest.xml
+++ b/car-ui-lib/car-ui-lib/src/androidTest/AndroidManifest.xml
@@ -15,19 +15,20 @@
     limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.car.ui.tests.unit">
-    <application android:debuggable="true">
+          package="com.android.car.ui.test">
+    <application android:debuggable="true" android:theme="@style/Theme.CarUi">
         <uses-library android:name="android.test.runner" />
         <activity android:name="com.android.car.ui.TestActivity" />
         <activity android:name="com.android.car.ui.recyclerview.CarUiRecyclerViewTestActivity" />
         <activity android:name="com.android.car.ui.FocusAreaTestActivity" />
         <activity android:name="com.android.car.ui.FocusParkingViewTestActivity" />
+        <activity android:name="com.android.car.ui.preference.PreferenceTestActivity" />
         <activity
             android:name="com.android.car.ui.toolbar.ToolbarTestActivity"
             android:theme="@style/Theme.CarUi.WithToolbar"/>
     </application>
     <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
-        android:targetPackage="com.android.car.ui.tests.unit"
+        android:targetPackage="com.android.car.ui.test"
         android:label="Chassis Test Cases">
     </instrumentation>
 </manifest>
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusAreaTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusAreaTest.java
new file mode 100644
index 0000000..9c1ce88
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusAreaTest.java
@@ -0,0 +1,220 @@
+/*
+ * 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;
+
+import static android.view.View.LAYOUT_DIRECTION_LTR;
+import static android.view.View.LAYOUT_DIRECTION_RTL;
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS;
+
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_BOTTOM_BOUND_OFFSET;
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_LEFT_BOUND_OFFSET;
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_RIGHT_BOUND_OFFSET;
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_TOP_BOUND_OFFSET;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Bundle;
+import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import androidx.annotation.NonNull;
+import androidx.test.rule.ActivityTestRule;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/** Unit tests for {@link FocusArea}. */
+public class FocusAreaTest {
+    private static final long WAIT_TIME_MS = 3000;
+
+    @Rule
+    public ActivityTestRule<FocusAreaTestActivity> mActivityRule =
+            new ActivityTestRule<>(FocusAreaTestActivity.class);
+
+    private FocusAreaTestActivity mActivity;
+    private TestFocusArea mFocusArea;
+    private TestFocusArea mFocusArea2;
+    private View mChild;
+    private View mDefaultFocus;
+    private View mNonChild;
+    private View mChild1;
+    private View mChild2;
+
+    @Before
+    public void setUp() {
+        mActivity = mActivityRule.getActivity();
+        mFocusArea = mActivity.findViewById(R.id.focus_area);
+        mFocusArea.enableForegroundHighlight();
+        mFocusArea2 = mActivity.findViewById(R.id.focus_area2);
+        mChild = mActivity.findViewById(R.id.child);
+        mDefaultFocus = mActivity.findViewById(R.id.default_focus);
+        mNonChild = mActivity.findViewById(R.id.non_child);
+        mChild1 = mActivity.findViewById(R.id.child1);
+        mChild2 = mActivity.findViewById(R.id.child2);
+    }
+
+    @Test
+    public void testLoseFocus() throws Exception {
+        mChild.post(() -> {
+            mChild.requestFocus();
+        });
+        mFocusArea.setOnDrawCalled(false);
+        mFocusArea.setDrawCalled(false);
+
+        // FocusArea lost focus.
+        CountDownLatch latch = new CountDownLatch(1);
+        mNonChild.post(() -> {
+            mNonChild.requestFocus();
+            mNonChild.post(() -> {
+                latch.countDown();
+            });
+        });
+        assertDrawMethodsCalled(latch);
+    }
+
+    @Test
+    public void testGetFocus() throws Exception {
+        mNonChild.post(() -> {
+            mNonChild.requestFocus();
+        });
+        mFocusArea.setOnDrawCalled(false);
+        mFocusArea.setDrawCalled(false);
+
+        // FocusArea got focus.
+        CountDownLatch latch = new CountDownLatch(1);
+        mChild.post(() -> {
+            mChild.requestFocus();
+            mChild.post(() -> {
+                latch.countDown();
+            });
+        });
+        assertDrawMethodsCalled(latch);
+    }
+
+    @Test
+    public void testFocusOnDefaultFocus() throws Exception {
+        assertThat(mDefaultFocus.isFocused()).isFalse();
+
+        Bundle bundle = new Bundle();
+        CountDownLatch latch = new CountDownLatch(1);
+        mFocusArea.post(() -> {
+            mFocusArea.performAccessibilityAction(ACTION_FOCUS, bundle);
+            latch.countDown();
+        });
+        latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS);
+        assertThat(mDefaultFocus.isFocused()).isTrue();
+    }
+
+    @Test
+    public void testBoundsOffset() {
+        assertThat(mFocusArea.getLayoutDirection()).isEqualTo(LAYOUT_DIRECTION_LTR);
+
+        // FocusArea's bounds offset specified in layout file:
+        // 10dp(start), 20dp(end), 30dp(top), 40dp(bottom).
+        int left = dp2Px(10);
+        int right = dp2Px(20);
+        int top = dp2Px(30);
+        int bottom = dp2Px(40);
+        AccessibilityNodeInfo node = mFocusArea.createAccessibilityNodeInfo();
+        assertBoundsOffset(node, left, top, right, bottom);
+        node.recycle();
+    }
+
+    @Test
+    public void testBoundsOffsetWithRtl() throws Exception {
+        CountDownLatch latch = new CountDownLatch(1);
+        mFocusArea.post(() -> {
+            mFocusArea.setLayoutDirection(LAYOUT_DIRECTION_RTL);
+            latch.countDown();
+        });
+        latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS);
+        assertThat(mFocusArea.getLayoutDirection()).isEqualTo(LAYOUT_DIRECTION_RTL);
+
+        // FocusArea highlight padding specified in layout file:
+        // 10dp(start), 20dp(end), 30dp(top), 40dp(bottom).
+        int left = dp2Px(20);
+        int right = dp2Px(10);
+        int top = dp2Px(30);
+        int bottom = dp2Px(40);
+        AccessibilityNodeInfo node = mFocusArea.createAccessibilityNodeInfo();
+        assertBoundsOffset(node, left, top, right, bottom);
+        node.recycle();
+    }
+
+    @Test
+    public void testSetBoundsOffset() {
+        mFocusArea.setBoundsOffset(50, 60, 70, 80);
+        AccessibilityNodeInfo node = mFocusArea.createAccessibilityNodeInfo();
+        assertBoundsOffset(node, 50, 60, 70, 80);
+        node.recycle();
+    }
+
+    @Test
+    public void testHighlightPadding() {
+        assertThat(mFocusArea2.getLayoutDirection()).isEqualTo(LAYOUT_DIRECTION_LTR);
+
+        int left = dp2Px(50);
+        int right = dp2Px(10);
+        int top = dp2Px(40);
+        int bottom = dp2Px(20);
+        AccessibilityNodeInfo node = mFocusArea2.createAccessibilityNodeInfo();
+        assertBoundsOffset(node, left, top, right, bottom);
+        node.recycle();
+    }
+
+    @Test
+    public void testLastFocusedViewRemoved() {
+        mChild1.post(() -> {
+            // Focus on mChild1 in mFocusArea2, then mChild in mFocusArea .
+            mChild1.requestFocus();
+            assertThat(mChild1.isFocused()).isTrue();
+            mChild.requestFocus();
+            assertThat(mChild.isFocused()).isTrue();
+
+            // Remove mChild1 in mFocusArea2, then Perform ACTION_FOCUS on mFocusArea2.
+            mFocusArea2.removeView(mChild1);
+            mFocusArea2.performAccessibilityAction(ACTION_FOCUS, null);
+
+            // mChild2 in mFocusArea2 should get focused.
+            assertThat(mChild2.isFocused()).isTrue();
+        });
+    }
+
+    private void assertBoundsOffset(
+            @NonNull AccessibilityNodeInfo node, int leftPx, int topPx, int rightPx, int bottomPx) {
+        Bundle extras = node.getExtras();
+        assertThat(extras.getInt(FOCUS_AREA_LEFT_BOUND_OFFSET)).isEqualTo(leftPx);
+        assertThat(extras.getInt(FOCUS_AREA_RIGHT_BOUND_OFFSET)).isEqualTo(rightPx);
+        assertThat(extras.getInt(FOCUS_AREA_TOP_BOUND_OFFSET)).isEqualTo(topPx);
+        assertThat(extras.getInt(FOCUS_AREA_BOTTOM_BOUND_OFFSET)).isEqualTo(bottomPx);
+    }
+
+    /** Converts dp unit to equivalent pixels. */
+    private int dp2Px(int dp) {
+        return (int) (dp * mActivity.getResources().getDisplayMetrics().density + 0.5f);
+    }
+
+    private void assertDrawMethodsCalled(CountDownLatch latch) throws Exception {
+        latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS);
+        assertThat(mFocusArea.onDrawCalled()).isTrue();
+        assertThat(mFocusArea.drawCalled()).isTrue();
+    }
+}
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusAreaTestActivity.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusAreaTestActivity.java
similarity index 95%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/FocusAreaTestActivity.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusAreaTestActivity.java
index f027db6..bd9716c 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusAreaTestActivity.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusAreaTestActivity.java
@@ -19,7 +19,7 @@
 import android.app.Activity;
 import android.os.Bundle;
 
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.test.R;
 
 /** An activity used for testing {@link FocusArea}. */
 public class FocusAreaTestActivity extends Activity {
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusParkingViewTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusParkingViewTest.java
similarity index 98%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/FocusParkingViewTest.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusParkingViewTest.java
index 52236bd..887ac8e 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusParkingViewTest.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusParkingViewTest.java
@@ -20,7 +20,7 @@
 
 import androidx.test.rule.ActivityTestRule;
 
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.test.R;
 
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusParkingViewTestActivity.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusParkingViewTestActivity.java
similarity index 95%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/FocusParkingViewTestActivity.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusParkingViewTestActivity.java
index 9357ca6..9ce37cc 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusParkingViewTestActivity.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/FocusParkingViewTestActivity.java
@@ -19,8 +19,7 @@
 import android.app.Activity;
 import android.os.Bundle;
 
-import com.android.car.ui.tests.unit.R;
-
+import com.android.car.ui.test.R;
 
 /** An Activity used for testing {@link FocusParkingView}. */
 public class FocusParkingViewTestActivity extends Activity {
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/TestActivity.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/TestActivity.java
similarity index 95%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/TestActivity.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/TestActivity.java
index db8c560..a5f20d5 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/TestActivity.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/TestActivity.java
@@ -19,7 +19,7 @@
 import android.app.Activity;
 import android.os.Bundle;
 
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.test.R;
 
 /**
  * An empty activity to be used for testing.
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/TestFocusArea.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/TestFocusArea.java
similarity index 78%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/TestFocusArea.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/TestFocusArea.java
index 092624f..444cbc5 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/TestFocusArea.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/TestFocusArea.java
@@ -31,6 +31,8 @@
     /** Whether {@link #draw(Canvas)} was called. */
     private boolean mDrawCalled;
 
+    private int mLayoutDirection = LAYOUT_DIRECTION_LTR;
+
     public TestFocusArea(Context context) {
         super(context);
     }
@@ -75,4 +77,20 @@
     public void setDrawCalled(boolean drawCalled) {
         mDrawCalled = drawCalled;
     }
+
+    @Override
+    public void setLayoutDirection(int layoutDirection) {
+        // The real setLayoutDirection doesn't work in the test, so let's mock it.
+        if (mLayoutDirection != layoutDirection) {
+            mLayoutDirection = layoutDirection;
+            // To trigger the highlight padding update, we need to call onLayout. Note: the
+            // parameters don't matter.
+            onLayout(false, 0, 0, 0, 0);
+        }
+    }
+
+    @Override
+    public int getLayoutDirection() {
+        return mLayoutDirection;
+    }
 }
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/actions/LowLevelActions.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/actions/LowLevelActions.java
similarity index 100%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/actions/LowLevelActions.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/actions/LowLevelActions.java
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/actions/ViewActions.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/actions/ViewActions.java
similarity index 100%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/actions/ViewActions.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/actions/ViewActions.java
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/actions/WaitForViewAction.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/actions/WaitForViewAction.java
similarity index 100%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/actions/WaitForViewAction.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/actions/WaitForViewAction.java
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/matchers/DrawableMatcher.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/DrawableMatcher.java
similarity index 100%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/matchers/DrawableMatcher.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/DrawableMatcher.java
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/IndexMatcher.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/IndexMatcher.java
new file mode 100644
index 0000000..8902b7d
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/IndexMatcher.java
@@ -0,0 +1,51 @@
+/*
+ * 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.matchers;
+
+import android.view.View;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
+
+/**
+ * A custom matcher that allows for the specification of an index when multiple views meet the
+ * criteria of a matcher.
+ */
+public class IndexMatcher extends TypeSafeMatcher<View> {
+
+    private final Matcher<View> mMatcher;
+    private final int mIndex;
+    int mCurrentIndex = 0;
+
+    public IndexMatcher(Matcher<View> matcher, int index) {
+        mMatcher = matcher;
+        mIndex = index;
+    }
+
+    @Override
+    public void describeTo(Description description) {
+        description.appendText("with index: ");
+        description.appendValue(mIndex);
+        mMatcher.describeTo(description);
+    }
+
+    @Override
+    public boolean matchesSafely(View view) {
+        return mMatcher.matches(view) && mCurrentIndex++ == mIndex;
+    }
+}
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/matchers/NthChildMatcher.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/NthChildMatcher.java
similarity index 100%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/matchers/NthChildMatcher.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/NthChildMatcher.java
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/matchers/ViewMatchers.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/ViewMatchers.java
similarity index 88%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/matchers/ViewMatchers.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/ViewMatchers.java
index 1bee2e0..74ce4fa 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/matchers/ViewMatchers.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/matchers/ViewMatchers.java
@@ -28,4 +28,8 @@
     public static Matcher<View> nthChildOfView(Matcher<View> parentMatcher, int n) {
         return new NthChildMatcher(parentMatcher, n);
     }
+
+    public static Matcher<View> withIndex(Matcher<View> matcher, int index) {
+        return new IndexMatcher(matcher, index);
+    }
 }
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTest.java
new file mode 100644
index 0000000..a955cfd
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTest.java
@@ -0,0 +1,326 @@
+/*
+ * 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.preference;
+
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.matcher.ViewMatchers.isChecked;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.isNotChecked;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+
+import static com.android.car.ui.matchers.ViewMatchers.withIndex;
+
+import static org.hamcrest.Matchers.not;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.res.Resources;
+
+import androidx.preference.CheckBoxPreference;
+import androidx.preference.DropDownPreference;
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
+import androidx.test.rule.ActivityTestRule;
+
+import com.android.car.ui.test.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/** Unit tests for {@link CarUiPreference}. */
+public class PreferenceTest {
+
+    private PreferenceTestActivity mActivity;
+    private String[] mEntries;
+    private String[] mEntriesValues;
+
+    @Rule
+    public ActivityTestRule<PreferenceTestActivity> mActivityRule =
+            new ActivityTestRule<>(PreferenceTestActivity.class);
+
+    @Before
+    public void setUp() {
+        mActivity = mActivityRule.getActivity();
+        Resources resources = mActivity.getResources();
+        mEntries = resources.getStringArray(R.array.entries);
+        mEntriesValues = resources.getStringArray(R.array.entry_values);
+    }
+
+    @Test
+    public void testListPreference() {
+        // Scroll until list preference is visible
+        mActivity.runOnUiThread(() -> mActivity.scrollToPreference("list"));
+
+        // Display full screen list preference.
+        onView(withText(R.string.title_list_preference)).perform(click());
+
+        Preference.OnPreferenceChangeListener mockListener = mock(
+                Preference.OnPreferenceChangeListener.class);
+        when(mockListener.onPreferenceChange(any(), any())).thenReturn(true);
+        mActivity.setOnPreferenceChangeListener("list", mockListener);
+
+        // Check that no option is initially selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isNotChecked()));
+
+        // Select first option.
+        onView(withText(mEntries[0])).perform(click());
+        // Check that first option is selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 0)).check(matches(isChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isNotChecked()));
+
+        // Press back to save selection.
+        onView(withId(R.id.car_ui_toolbar_nav_icon)).perform(click());
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(mEntriesValues[0]));
+
+        onView(withText(R.string.title_list_preference)).perform(click());
+
+        // Check that first option is selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 0)).check(matches(isChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isNotChecked()));
+
+        // Select second option.
+        onView(withText(mEntries[1])).perform(click());
+        // Check that second option is selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 0)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isNotChecked()));
+
+        // Press back to save selection.
+        onView(withId(R.id.car_ui_toolbar_nav_icon)).perform(click());
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(mEntriesValues[1]));
+        // Return to list preference screen.
+        onView(withText(R.string.title_list_preference)).perform(click());
+
+        // Check that second option is selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 0)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isNotChecked()));
+    }
+
+    @Test
+    public void testMultiSelectListPreference() {
+        // Scroll until multi-select preference is visible
+        mActivity.runOnUiThread(() -> mActivity.scrollToPreference("multi_select_list"));
+
+        // Display full screen list preference.
+        onView(withText(R.string.title_multi_list_preference)).perform(click());
+
+        Preference.OnPreferenceChangeListener mockListener = mock(
+                Preference.OnPreferenceChangeListener.class);
+        when(mockListener.onPreferenceChange(any(), any())).thenReturn(true);
+        mActivity.setOnPreferenceChangeListener("multi_select_list", mockListener);
+
+        // Check that no option is initially selected.
+        onView(withIndex(withId(R.id.checkbox_widget), 0)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.checkbox_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.checkbox_widget), 2)).check(matches(isNotChecked()));
+
+        // Select options 1 and 3.
+        onView(withText(mEntries[0])).perform(click());
+        onView(withText(mEntries[2])).perform(click());
+
+        // Check that selections are correctly reflected.
+        onView(withIndex(withId(R.id.checkbox_widget), 0)).check(matches(isChecked()));
+        onView(withIndex(withId(R.id.checkbox_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.checkbox_widget), 2)).check(matches(isChecked()));
+
+        // Press back to save selection.
+        onView(withId(R.id.car_ui_toolbar_nav_icon)).perform(click());
+        Set<String> expectedUpdate = new HashSet<>();
+        expectedUpdate.add(mEntriesValues[0]);
+        expectedUpdate.add(mEntriesValues[2]);
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(expectedUpdate));
+
+        // Return to multi-select list preference screen.
+        onView(withText(R.string.title_multi_list_preference)).perform(click());
+
+        // Check that selections are correctly reflected.
+        onView(withIndex(withId(R.id.checkbox_widget), 0)).check(matches(isChecked()));
+        onView(withIndex(withId(R.id.checkbox_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.checkbox_widget), 2)).check(matches(isChecked()));
+    }
+
+    @Test
+    public void testCheckboxPreference() {
+        // Create checkbox preference and add it to screen.
+        CheckBoxPreference preference = new CheckBoxPreference(mActivity);
+        preference.setOrder(0);
+        preference.setKey("checkbox");
+        preference.setTitle(R.string.title_checkbox_preference);
+        preference.setSummary(R.string.summary_checkbox_preference);
+        mActivity.addPreference(preference);
+
+        // Check title and summary are displayed as expected.
+        onView(withIndex(withId(android.R.id.title), 0)).check(matches(
+                withText(mActivity.getString(R.string.title_checkbox_preference))));
+        onView(withIndex(withId(android.R.id.summary), 0)).check(matches(
+                withText(mActivity.getString(R.string.summary_checkbox_preference))));
+
+        // Ensure checkbox preference is initially not selected.
+        onView(withId(android.R.id.checkbox)).check(matches(isNotChecked()));
+
+        Preference.OnPreferenceChangeListener mockListener = mock(
+                Preference.OnPreferenceChangeListener.class);
+        when(mockListener.onPreferenceChange(any(), any())).thenReturn(true);
+        mActivity.setOnPreferenceChangeListener("checkbox", mockListener);
+
+        // Select checkbox preference.
+        onView(withText(R.string.title_checkbox_preference)).perform(click());
+
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(true));
+
+        // Verify checkbox preference correctly indicates preference is selected.
+        onView(withId(android.R.id.checkbox)).check(matches(isChecked()));
+
+        // Un-select checkbox preference.
+        onView(withText(R.string.title_checkbox_preference)).perform(click());
+
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(false));
+
+        // Verify checkbox preference correctly indicates preference is selected.
+        onView(withId(android.R.id.checkbox)).check(matches(isNotChecked()));
+    }
+
+    @Test
+    public void testSwitchPreference() {
+        // Create switch preference and add it to screen.
+        SwitchPreference preference = new SwitchPreference(mActivity);
+        preference.setOrder(0);
+        preference.setKey("switch");
+        preference.setTitle(R.string.title_switch_preference);
+        preference.setSummary(R.string.summary_switch_preference);
+        mActivity.addPreference(preference);
+
+        // Check title and summary are displayed as expected.
+        onView(withIndex(withId(android.R.id.title), 0)).check(matches(
+                withText(mActivity.getString(R.string.title_switch_preference))));
+        onView(withIndex(withId(android.R.id.summary), 0)).check(matches(
+                withText(mActivity.getString(R.string.summary_switch_preference))));
+
+        // Ensure switch preference is initially not selected.
+        onView(withId(android.R.id.switch_widget)).check(matches(isNotChecked()));
+
+        Preference.OnPreferenceChangeListener mockListener = mock(
+                Preference.OnPreferenceChangeListener.class);
+        when(mockListener.onPreferenceChange(any(), any())).thenReturn(true);
+        mActivity.setOnPreferenceChangeListener("switch", mockListener);
+
+        // Select switch preference.
+        onView(withText(R.string.title_switch_preference)).perform(click());
+
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(true));
+
+        // Verify switch preference correctly indicates preference is selected.
+        onView(withId(android.R.id.switch_widget)).check(matches(isChecked()));
+
+        // Un-select switch preference.
+        onView(withText(R.string.title_switch_preference)).perform(click());
+
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(false));
+
+        // Verify switch preference correctly indicates preference is selected.
+        onView(withId(android.R.id.switch_widget)).check(matches(isNotChecked()));
+    }
+
+    @Test
+    public void testDropDownPreference() {
+        // Create drop-down preference and add it to screen.
+        DropDownPreference preference = new CarUiDropDownPreference(mActivity);
+        preference.setKey("dropdown");
+        preference.setTitle(R.string.title_dropdown_preference);
+        preference.setEntries(mEntries);
+        preference.setEntryValues(mEntriesValues);
+        preference.setOrder(0);
+        mActivity.addPreference(preference);
+
+        // Display full screen list preference.
+        onView(withText(R.string.title_dropdown_preference)).perform(click());
+
+        Preference.OnPreferenceChangeListener mockListener = mock(
+                Preference.OnPreferenceChangeListener.class);
+        when(mockListener.onPreferenceChange(any(), any())).thenReturn(true);
+        mActivity.setOnPreferenceChangeListener("dropdown", mockListener);
+
+        // Check that first option is initially selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 0)).check(matches(isChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isNotChecked()));
+
+        // Select third option.
+        onView(withText(mEntries[2])).perform(click());
+        // Check that first option is selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 0)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isChecked()));
+
+        // Press back to save selection.
+        onView(withId(R.id.car_ui_toolbar_nav_icon)).perform(click());
+        // Verify preference value was updated.
+        verify(mockListener, times(1)).onPreferenceChange(any(), eq(mEntriesValues[2]));
+
+        onView(withText(R.string.title_dropdown_preference)).perform(click());
+
+        // Check that first option is selected.
+        onView(withIndex(withId(R.id.radio_button_widget), 0)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 1)).check(matches(isNotChecked()));
+        onView(withIndex(withId(R.id.radio_button_widget), 2)).check(matches(isChecked()));
+    }
+
+    @Test
+    public void testTwoActionPreference() {
+        // Create drop-down preference and add it to screen.
+        CarUiTwoActionPreference preference = new CarUiTwoActionPreference(mActivity);
+        preference.setKey("twoaction");
+        preference.setTitle(R.string.title_twoaction_preference);
+        preference.setSummary(R.string.summary_twoaction_preference);
+        preference.setOrder(0);
+        preference.setWidgetLayoutResource(R.layout.details_preference_widget);
+        mActivity.addPreference(preference);
+
+        // Check that widget is displayed
+        onView(withIndex(withId(com.android.car.ui.R.id.action_widget_container), 0)).check(
+                matches(isDisplayed()));
+
+        // Hide second action.
+        mActivity.runOnUiThread(() -> preference.showAction(false));
+
+        // Ensure second action isn't displayed.
+        onView(withIndex(withId(com.android.car.ui.R.id.action_widget_container), 0)).check(
+                matches(not(isDisplayed())));
+    }
+}
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTestActivity.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTestActivity.java
new file mode 100644
index 0000000..0916f4b
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTestActivity.java
@@ -0,0 +1,55 @@
+/*
+ * 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.preference;
+
+import android.os.Bundle;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.preference.Preference;
+
+public class PreferenceTestActivity extends AppCompatActivity {
+
+    private PreferenceTestFragment mPreferenceFragment;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Display the fragment as the main content.
+        if (savedInstanceState == null) {
+            mPreferenceFragment = new PreferenceTestFragment();
+
+            getSupportFragmentManager()
+                    .beginTransaction()
+                    .replace(android.R.id.content, mPreferenceFragment)
+                    .commitNow();
+        }
+    }
+
+    public void setOnPreferenceChangeListener(
+            String key, Preference.OnPreferenceChangeListener listener) {
+        mPreferenceFragment.setOnPreferenceChangeListener(key, listener);
+    }
+
+    public void scrollToPreference(String key) {
+        mPreferenceFragment.scrollToPreference(key);
+    }
+
+    public void addPreference(Preference preference) {
+        mPreferenceFragment.addPreference(preference);
+    }
+}
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTestFragment.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTestFragment.java
new file mode 100644
index 0000000..cc3897b
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/preference/PreferenceTestFragment.java
@@ -0,0 +1,99 @@
+/*
+ * 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.preference;
+
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceDataStore;
+
+import com.android.car.ui.test.R;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Test Fragment to load test preferences.
+ */
+public class PreferenceTestFragment extends PreferenceFragment {
+
+    @Override
+    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        getPreferenceManager().setPreferenceDataStore(new TestDataStore());
+        // Load the preferences from an XML resource
+        setPreferencesFromResource(R.xml.test_preferences, rootKey);
+    }
+
+    public void setOnPreferenceChangeListener(
+            String key, Preference.OnPreferenceChangeListener listener) {
+        findPreference(key).setOnPreferenceChangeListener(listener);
+    }
+
+    public void addPreference(Preference preference) {
+        getPreferenceManager().getPreferenceScreen().addPreference(preference);
+    }
+
+    /**
+     * Custom data store to be used for testing as SharedPreferences for instrumentation tests
+     * are not initialized as expected.
+     */
+    public static class TestDataStore extends PreferenceDataStore {
+
+        private Map<String, String> mStringStore = new HashMap<>();
+        private Map<String, Boolean> mBooleanStore = new HashMap<>();
+        private Map<String, Set<String>> mStringSetStore = new HashMap<>();
+
+        @Override
+        public void putString(String key, @Nullable String value) {
+            mStringStore.put(key, value);
+        }
+
+        @Override
+        public void putStringSet(String key, @Nullable Set<String> values) {
+            mStringSetStore.put(key, values);
+        }
+
+        @Override
+        @Nullable
+        public String getString(String key, @Nullable String defValue) {
+            return mStringStore.getOrDefault(key, defValue);
+        }
+
+        @Override
+        @Nullable
+        public Set<String> getStringSet(String key, @Nullable Set<String> defValues) {
+            // Workaround for NullPointerException caused by null string set from custom data store.
+            if (defValues == null) {
+                defValues = new HashSet<>();
+            }
+            return mStringSetStore.getOrDefault(key, defValues);
+        }
+
+        @Override
+        public void putBoolean(String key, boolean value) {
+            mBooleanStore.put(key, value);
+        }
+
+        @Override
+        public boolean getBoolean(String key, boolean defValue) {
+            return mBooleanStore.getOrDefault(key, defValue);
+        }
+    }
+}
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiListItemTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiListItemTest.java
similarity index 83%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiListItemTest.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiListItemTest.java
index d5f5d13..bd21173 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiListItemTest.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiListItemTest.java
@@ -26,8 +26,10 @@
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
 
 import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -36,17 +38,19 @@
 
 import androidx.test.rule.ActivityTestRule;
 
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.R;
 
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.mockito.ArgumentMatchers;
+import org.mockito.ArgumentCaptor;
 
 import java.util.ArrayList;
 import java.util.List;
 
-/** Unit tests for {@link CarUiListItem}. */
+/**
+ * Unit tests for {@link CarUiListItem}.
+ */
 public class CarUiListItemTest {
 
     private CarUiRecyclerView mCarUiRecyclerView;
@@ -233,6 +237,46 @@
     }
 
     @Test
+    public void testItem_withListenerAndSupplementalIconListener() {
+        List<CarUiListItem> items = new ArrayList<>();
+
+        CarUiContentListItem.OnClickListener clickListener = mock(
+                CarUiContentListItem.OnClickListener.class);
+        View.OnClickListener supplementalIconClickListener = mock(View.OnClickListener.class);
+
+        CarUiContentListItem item = new CarUiContentListItem(
+                CarUiContentListItem.Action.ICON);
+        item.setTitle("Test item with two listeners");
+        item.setOnItemClickedListener(clickListener);
+        item.setSupplementalIcon(
+                mActivityRule.getActivity().getDrawable(R.drawable.car_ui_icon_close),
+                supplementalIconClickListener);
+        items.add(item);
+
+        mCarUiRecyclerView.post(
+                () -> mCarUiRecyclerView.setAdapter(new CarUiListItemAdapter(items)));
+
+        onView(withId(R.id.title)).check(matches(isDisplayed()));
+
+        // Clicks anywhere on the item (except supplemental icon) should trigger the item click
+        // listener.
+        onView(withId(R.id.title)).perform(click());
+        verify(clickListener, times(1)).onClick(item);
+        verify(supplementalIconClickListener, times(0)).onClick(any());
+
+        ArgumentCaptor<View> iconCaptor = ArgumentCaptor.forClass(View.class);
+        onView(withId(R.id.supplemental_icon)).perform(click());
+        // Check that icon is argument for single call to click listener.
+        verify(supplementalIconClickListener, times(1)).onClick(iconCaptor.capture());
+
+        // Verify that the standard click listener wasn't also fired.
+        verify(clickListener, times(1)).onClick(item);
+
+        View icon = mCarUiRecyclerView.findViewById(R.id.supplemental_icon);
+        assertEquals(icon, iconCaptor.getValue());
+    }
+
+    @Test
     public void testItem_withSupplementalIconAndIconOnClickListener() {
         List<CarUiListItem> items = new ArrayList<>();
 
@@ -261,8 +305,8 @@
 
         // Clicks anywhere on the icon should invoke both listeners.
         onView(withId(R.id.action_container)).perform(click());
-        verify(mockedItemOnClickListener, times(2)).onClick(item);
-        verify(mockedIconListener, times(1)).onClick(ArgumentMatchers.any(View.class));
+        verify(mockedItemOnClickListener, times(1)).onClick(item);
+        verify(mockedIconListener, times(1)).onClick(any(View.class));
     }
 
     @Test
@@ -284,8 +328,9 @@
         itemThree.setTitle(itemThreeTitle);
         items.add(itemThree);
 
+        CarUiRadioButtonListItemAdapter adapter = new CarUiRadioButtonListItemAdapter(items);
         mCarUiRecyclerView.post(
-                () -> mCarUiRecyclerView.setAdapter(new CarUiRadioButtonListItemAdapter(items)));
+                () -> mCarUiRecyclerView.setAdapter(adapter));
 
         onView(withText(itemOneTitle)).check(matches(isDisplayed()));
         onView(withText(itemTwoTitle)).check(matches(isDisplayed()));
@@ -295,23 +340,27 @@
         assertFalse(itemOne.isChecked());
         assertFalse(itemTwo.isChecked());
         assertFalse(itemThree.isChecked());
+        assertEquals(adapter.getSelectedItemPosition(), -1);
 
         // Select first item.
         onView(withText(itemOneTitle)).perform(click());
         assertTrue(itemOne.isChecked());
         assertFalse(itemTwo.isChecked());
         assertFalse(itemThree.isChecked());
+        assertEquals(adapter.getSelectedItemPosition(), 0);
 
         // Select second item.
         onView(withText(itemTwoTitle)).perform(click());
         assertFalse(itemOne.isChecked());
         assertTrue(itemTwo.isChecked());
         assertFalse(itemThree.isChecked());
+        assertEquals(adapter.getSelectedItemPosition(), 1);
 
         // Select third item.
         onView(withText(itemThreeTitle)).perform(click());
         assertFalse(itemOne.isChecked());
         assertFalse(itemTwo.isChecked());
         assertTrue(itemThree.isChecked());
+        assertEquals(adapter.getSelectedItemPosition(), 2);
     }
 }
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
similarity index 79%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
index 568395d..79a26f1 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
@@ -45,8 +45,10 @@
 import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
@@ -66,12 +68,14 @@
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.OrientationHelper;
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.test.core.app.ActivityScenario;
 import androidx.test.espresso.IdlingRegistry;
 import androidx.test.espresso.IdlingResource;
-import androidx.test.rule.ActivityTestRule;
+import androidx.test.ext.junit.rules.ActivityScenarioRule;
 
 import com.android.car.ui.TestActivity;
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.recyclerview.decorations.grid.GridDividerItemDecoration;
+import com.android.car.ui.test.R;
 
 import org.junit.After;
 import org.junit.Before;
@@ -87,8 +91,10 @@
 public class CarUiRecyclerViewTest {
 
     @Rule
-    public ActivityTestRule<TestActivity> mActivityRule =
-            new ActivityTestRule<>(TestActivity.class);
+    public ActivityScenarioRule<TestActivity> mActivityRule =
+            new ActivityScenarioRule<>(TestActivity.class);
+
+    ActivityScenario<TestActivity> mScenario = ActivityScenario.launch(TestActivity.class);
 
     private TestActivity mActivity;
     private Context mTestableContext;
@@ -96,9 +102,12 @@
 
     @Before
     public void setUp() {
-        mActivity = mActivityRule.getActivity();
-        mTestableContext = spy(mActivity);
-        mTestableResources = spy(mActivity.getResources());
+        mScenario.onActivity(activity -> {
+            mActivity = activity;
+            mTestableContext = spy(mActivity);
+            mTestableResources = spy(mActivity.getResources());
+        });
+
         when(mTestableContext.getResources()).thenReturn(mTestableResources);
     }
 
@@ -214,26 +223,39 @@
     }
 
     @Test
-    public void testOnHeightChanged_shouldAddTheValueToInitialTopValue() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+    public void testSetLayoutManager_shouldUpdateItemDecorations() {
+        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
+                null, R.styleable.CarUiRecyclerView));
 
-        onView(withId(R.id.list)).check(matches(isDisplayed()));
+        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
+                any(),
+                eq(R.styleable.CarUiRecyclerView),
+                anyInt(),
+                anyInt());
+        when(typedArray.getBoolean(eq(R.styleable.CarUiRecyclerView_enableDivider), anyBoolean()))
+                .thenReturn(true);
+        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
+                .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
+        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
+                .thenReturn(3);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.findViewById(R.id.list);
+        CarUiRecyclerView carUiRecyclerView = new CarUiRecyclerView(mTestableContext);
+        ViewGroup container = mActivity.findViewById(R.id.test_container);
+        TestAdapter adapter = new TestAdapter(4);
+        container.post(() -> {
+            container.addView(carUiRecyclerView);
+            carUiRecyclerView.setAdapter(adapter);
+        });
 
-        assertEquals(carUiRecyclerView.getPaddingBottom(), 0);
-        assertEquals(carUiRecyclerView.getPaddingTop(), 0);
-        assertEquals(carUiRecyclerView.getPaddingStart(), 0);
-        assertEquals(carUiRecyclerView.getPaddingEnd(), 0);
+        assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
+        assertEquals(carUiRecyclerView.getItemDecorationCount(), 3);
+        assertTrue(carUiRecyclerView.getItemDecorationAt(0) instanceof GridDividerItemDecoration);
 
-        mActivity.runOnUiThread(() -> carUiRecyclerView.onHeightChanged(10));
-        onView(withId(R.id.list)).check(matches(isDisplayed()));
+        carUiRecyclerView.setLayoutManager(new LinearLayoutManager(mTestableContext));
 
-        assertEquals(carUiRecyclerView.getPaddingTop(), 10);
-        assertEquals(carUiRecyclerView.getPaddingBottom(), 0);
-        assertEquals(carUiRecyclerView.getPaddingStart(), 0);
-        assertEquals(carUiRecyclerView.getPaddingEnd(), 0);
+        assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
+        assertEquals(carUiRecyclerView.getItemDecorationCount(), 3);
+        assertFalse(carUiRecyclerView.getItemDecorationAt(0) instanceof GridDividerItemDecoration);
     }
 
     @Test
@@ -306,10 +328,8 @@
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
         CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        TestAdapter adapter = new TestAdapter(50);
-        mActivity.runOnUiThread(() -> {
-            carUiRecyclerView.setAdapter(adapter);
-        });
+        FixedSizeTestAdapter adapter = new FixedSizeTestAdapter(50, carUiRecyclerView.getHeight());
+        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
 
         IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
@@ -405,7 +425,7 @@
 
         // scroll to the start
         onView(withId(R.id.car_ui_scrollbar_track)).perform(
-                touchDownAndUp(0f, (thumbView.getHeight() / 2f) + 1));
+                touchDownAndUp(0f, 1));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
     }
 
@@ -427,10 +447,12 @@
 
         View trackView = mActivity.requireViewById(R.id.car_ui_scrollbar_track);
         View thumbView = mActivity.requireViewById(R.id.car_ui_scrollbar_thumb);
-        // drag and scroll to the middle
+        // if you drag too far in a single step you'll stop selecting the thumb view. Hence, drag
+        // 5 units at a time for 200 intervals and stop at the center of the track by limitY.
+
         onView(withId(R.id.car_ui_scrollbar_track)).perform(
                 performDrag(0f, (thumbView.getHeight() / 2f), 0,
-                        (thumbView.getHeight() / 2f) - 1, 10, Float.MAX_VALUE,
+                        5, 200, Float.MAX_VALUE,
                         trackView.getHeight() / 2f));
         onView(withText(adapter.getItemText(25))).check(matches(isDisplayed()));
     }
@@ -443,7 +465,8 @@
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
         CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        TestAdapter adapter = new TestAdapter(15);
+        //  50, because needs to be big enough to make sure content is scrollable.
+        TestAdapter adapter = new TestAdapter(50);
         mActivity.runOnUiThread(() -> {
             carUiRecyclerView.setAdapter(adapter);
         });
@@ -454,6 +477,7 @@
         onView(withId(R.id.car_ui_scrollbar_page_up)).check(matches(not(isEnabled())));
 
         // Moving down, should enable the up bottom.
+        onView(withId(R.id.car_ui_scrollbar_page_down)).check(matches(isEnabled()));
         onView(withId(R.id.car_ui_scrollbar_page_down)).perform(click());
         onView(withId(R.id.car_ui_scrollbar_page_up)).check(matches(isEnabled()));
 
@@ -526,6 +550,51 @@
     }
 
     @Test
+    public void testPageDownScrollsOverLongItemAtTheEnd() {
+        mActivity.runOnUiThread(
+                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+
+        onView(withId(R.id.list)).check(matches(isDisplayed()));
+
+        int itemCount = 100;
+        // Position the long item at the end.
+        int longItemPosition = itemCount - 1;
+
+        Map<Integer, TestAdapter.ItemHeight> heightOverrides = new HashMap<>();
+        heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.TALL);
+        TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
+
+        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
+        mActivity.runOnUiThread(() -> {
+            // Setting top padding to any number greater than 0.
+            // Not having padding will make this test pass all the time.
+            // Also adding bottom padding to make sure the padding
+            // after the last content is considered in calculations.
+            carUiRecyclerView.setPadding(0, 1, 0, 1);
+            carUiRecyclerView.setAdapter(adapter);
+        });
+
+        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+
+        OrientationHelper orientationHelper =
+                OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+
+        // 20 is just an arbitrary number to make sure we reach the end of the recyclerview.
+        for (int i = 0; i < 20; i++) {
+            onView(withId(R.id.car_ui_scrollbar_page_down)).perform(click());
+        }
+
+        onView(withId(R.id.car_ui_scrollbar_page_down)).check(matches(not(isEnabled())));
+
+        View longItem = getLongItem(carUiRecyclerView);
+        // Making sure we've reached end of the recyclerview, after
+        // adding bottom padding
+        assertThat(orientationHelper.getDecoratedEnd(longItem)
+                        + carUiRecyclerView.getPaddingBottom(),
+                is(equalTo(carUiRecyclerView.getHeight())));
+    }
+
+    @Test
     public void testPageUpScrollsOverLongItem() {
         mActivity.runOnUiThread(
                 () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
@@ -632,6 +701,77 @@
                 not(equalTo(carUiRecyclerView.getHeight())));
     }
 
+    @Test
+    public void testPageDownScrollsOverVeryLongItemAtTheEnd() {
+        mActivity.runOnUiThread(
+                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+
+        onView(withId(R.id.list)).check(matches(isDisplayed()));
+
+        int itemCount = 100;
+        // Position the long item at the end.
+        int longItemPosition = itemCount - 1;
+
+        Map<Integer, TestAdapter.ItemHeight> heightOverrides = new HashMap<>();
+        heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.EXTRA_TALL);
+        TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
+
+        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
+        mActivity.runOnUiThread(() -> {
+            // Setting top padding to any number greater than 0.
+            // Not having padding will make this test pass all the time.
+            // Also adding bottom padding to make sure the padding
+            // after the last content is considered in calculations.
+            carUiRecyclerView.setPadding(0, 1, 0, 1);
+            carUiRecyclerView.setAdapter(adapter);
+        });
+
+        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+
+        OrientationHelper orientationHelper =
+                OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+
+        // 20 is just an arbitrary number to make sure we reach the end of the recyclerview.
+        for (int i = 0; i < 20; i++) {
+            onView(withId(R.id.car_ui_scrollbar_page_down)).perform(click());
+        }
+
+        onView(withId(R.id.car_ui_scrollbar_page_down)).check(matches(not(isEnabled())));
+
+        View longItem = getLongItem(carUiRecyclerView);
+        // Making sure we've reached end of the recyclerview, after
+        // adding bottom padding
+        assertThat(orientationHelper.getDecoratedEnd(longItem)
+                        + carUiRecyclerView.getPaddingBottom(),
+                is(equalTo(carUiRecyclerView.getHeight())));
+    }
+
+
+    @Test
+    public void testPageDownMaintainsMinimumScrollThumbTrackHeight() {
+        mActivity.runOnUiThread(
+                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+
+        onView(withId(R.id.list)).check(matches(isDisplayed()));
+
+        int itemCount = 25000;
+        TestAdapter adapter = new TestAdapter(itemCount);
+
+        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
+        mActivity.runOnUiThread(() -> {
+            carUiRecyclerView.setAdapter(adapter);
+        });
+        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        mActivity.runOnUiThread(() -> carUiRecyclerView.requestLayout());
+
+        onView(withId(R.id.car_ui_scrollbar_page_down)).perform(click());
+
+        // Check that thumb track maintains minimum height
+        int minThumbViewHeight = mActivity.getResources()
+                .getDimensionPixelOffset(R.dimen.car_ui_scrollbar_min_thumb_height);
+        View thumbView = mActivity.requireViewById(R.id.car_ui_scrollbar_thumb);
+        assertThat(thumbView.getHeight(), is(equalTo(minThumbViewHeight)));
+    }
 
     @Test
     public void testSetPaddingToRecyclerViewContainerWithScrollbar() {
@@ -801,6 +941,44 @@
         }
     }
 
+    private static class FixedSizeTestAdapter extends RecyclerView.Adapter<TestViewHolder> {
+
+        private static final int ITEMS_PER_PAGE = 5;
+        private final List<String> mData;
+        private final int mItemHeight;
+
+        FixedSizeTestAdapter(int itemCount, int recyclerViewHeight) {
+            mData = new ArrayList<>(itemCount);
+            mItemHeight = recyclerViewHeight / ITEMS_PER_PAGE;
+
+            for (int i = 0; i < itemCount; i++) {
+                mData.add(getItemText(i));
+            }
+        }
+
+        String getItemText(int position) {
+            return String.format("Sample item #%d", position);
+        }
+
+        @NonNull
+        @Override
+        public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+            return new TestViewHolder(inflater, parent);
+        }
+
+        @Override
+        public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
+            holder.itemView.setMinimumHeight(mItemHeight);
+            holder.bind(mData.get(position));
+        }
+
+        @Override
+        public int getItemCount() {
+            return mData.size();
+        }
+    }
+
     private static class TestViewHolder extends RecyclerView.ViewHolder {
         private TextView mTextView;
 
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTestActivity.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTestActivity.java
similarity index 96%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTestActivity.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTestActivity.java
index 6fb5746..64dd993 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTestActivity.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTestActivity.java
@@ -19,7 +19,7 @@
 import android.app.Activity;
 import android.os.Bundle;
 
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.test.R;
 
 /**
  * An {@link Activity} that contains only an empty {@link CarUiRecyclerView}.
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/ContentLimitingAdapterTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/ContentLimitingAdapterTest.java
new file mode 100644
index 0000000..288e839
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/ContentLimitingAdapterTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.recyclerview;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.widget.LinearLayout;
+
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.test.rule.ActivityTestRule;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class ContentLimitingAdapterTest {
+
+    @Rule
+    public ActivityTestRule<CarUiRecyclerViewTestActivity> mActivityRule =
+            new ActivityTestRule<>(CarUiRecyclerViewTestActivity.class);
+
+    private ContentLimitingAdapter<TestViewHolder> mContentLimitingAdapter;
+
+    @Before
+    public void setUp() {
+        mContentLimitingAdapter = new TestContentLimitingAdapter(50);
+    }
+
+    @Test
+    public void setMaxItem_toLowerThanTotalItems() {
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        RecyclerView.ViewHolder last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+
+        // Switch to limited
+        mContentLimitingAdapter.setMaxItems(20);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(21);
+        RecyclerView.ViewHolder secondToLast = getItemAtPosition(19);
+        isTestViewHolderWithText(secondToLast, "Item 19");
+
+        last = getItemAtPosition(20);
+        assertThat(last).isInstanceOf(ScrollingLimitedViewHolder.class);
+
+        // Switch back to unlimited
+        mContentLimitingAdapter.setMaxItems(-1);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+    }
+
+    @Test
+    public void setMaxItem_toOne() {
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        RecyclerView.ViewHolder last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+
+        mContentLimitingAdapter.setMaxItems(1);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(2);
+        RecyclerView.ViewHolder secondToLast = getItemAtPosition(0);
+        isTestViewHolderWithText(secondToLast, "Item 0");
+
+        last = getItemAtPosition(1);
+        assertThat(last).isInstanceOf(ScrollingLimitedViewHolder.class);
+
+        // Switch back to unlimited
+        mContentLimitingAdapter.setMaxItems(-1);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+    }
+
+    @Test
+    public void setMaxItem_toZero() {
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        RecyclerView.ViewHolder last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+
+        mContentLimitingAdapter.setMaxItems(0);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(1);
+        last = getItemAtPosition(0);
+        assertThat(last).isInstanceOf(ScrollingLimitedViewHolder.class);
+
+        // Switch back to unlimited
+        mContentLimitingAdapter.setMaxItems(-1);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+    }
+
+    @Test
+    public void setMaxItem_toHigherThanTotalItems() {
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        RecyclerView.ViewHolder last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+
+        mContentLimitingAdapter.setMaxItems(70);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        RecyclerView.ViewHolder secondToLast = getItemAtPosition(48);
+        isTestViewHolderWithText(secondToLast, "Item 48");
+
+        last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+
+        // Switch back to unlimited
+        mContentLimitingAdapter.setMaxItems(-1);
+
+        assertThat(mContentLimitingAdapter.getItemCount()).isEqualTo(50);
+        last = getItemAtPosition(49);
+        isTestViewHolderWithText(last, "Item 49");
+    }
+
+    private RecyclerView.ViewHolder getItemAtPosition(int position) {
+        int viewType = mContentLimitingAdapter.getItemViewType(position);
+        RecyclerView.ViewHolder viewHolder =
+                mContentLimitingAdapter.createViewHolder(
+                        new LinearLayout(mActivityRule.getActivity().getApplicationContext()),
+                        viewType);
+        mContentLimitingAdapter.bindViewHolder(viewHolder, position);
+        return viewHolder;
+    }
+
+    private void isTestViewHolderWithText(RecyclerView.ViewHolder secondToLast, String s) {
+        assertThat(secondToLast).isInstanceOf(TestViewHolder.class);
+        TestViewHolder testViewHolder = (TestViewHolder) secondToLast;
+        assertThat(testViewHolder.getText()).isEqualTo(s);
+    }
+}
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/ContentLimitingAdapterUiTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/ContentLimitingAdapterUiTest.java
new file mode 100644
index 0000000..eae42b8
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/ContentLimitingAdapterUiTest.java
@@ -0,0 +1,136 @@
+/*
+ * 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.recyclerview;
+
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
+import static androidx.test.espresso.assertion.ViewAssertions.matches;
+import static androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition;
+import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
+
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.test.rule.ActivityTestRule;
+
+import com.android.car.ui.test.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class ContentLimitingAdapterUiTest {
+
+    @Rule
+    public ActivityTestRule<CarUiRecyclerViewTestActivity> mActivityRule =
+            new ActivityTestRule<>(CarUiRecyclerViewTestActivity.class);
+
+    private ContentLimitingAdapter<TestViewHolder> mContentLimitingAdapter;
+    private RecyclerView mCarUiRecyclerView;
+
+    @Before
+    public void setUp() {
+        mContentLimitingAdapter = new TestContentLimitingAdapter(50);
+        mCarUiRecyclerView = mActivityRule.getActivity().requireViewById(R.id.list);
+        mActivityRule.getActivity().runOnUiThread(() -> {
+            mCarUiRecyclerView.setAdapter(mContentLimitingAdapter);
+        });
+    }
+
+    @Test
+    public void setMaxItem_toLowerThanTotalItems() throws Throwable {
+        onView(withId(R.id.list)).check(matches(isDisplayed()));
+
+        // Switch to limited
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(20);
+        });
+        Thread.sleep(300);
+        onView(withText("Item 0")).check(matches(isDisplayed()));
+        onView(withId(R.id.list)).perform(scrollToPosition(20));
+        onView(withText("Item 19")).check(matches(isDisplayed()));
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message))
+                .check(matches(isDisplayed()));
+
+        // Switch back to unlimited
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(-1);
+        });
+        Thread.sleep(300);
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message)).check(doesNotExist());
+    }
+
+    @Test
+    public void setMaxItem_toOne() throws Throwable {
+        onView(withId(R.id.list)).check(matches(isDisplayed()));
+
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(1);
+        });
+        Thread.sleep(300);
+        onView(withText("Item 0")).check(matches(isDisplayed()));
+        onView(withText("Item 1")).check(doesNotExist());
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message))
+                .check(matches(isDisplayed()));
+
+        // Switch back to unlimited
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(-1);
+        });
+        Thread.sleep(300);
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message)).check(doesNotExist());
+    }
+
+    @Test
+    public void setMaxItem_toZero() throws Throwable {
+        onView(withId(R.id.list)).check(matches(isDisplayed()));
+
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(0);
+        });
+        Thread.sleep(300);
+        onView(withText("Item 0")).check(doesNotExist());
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message))
+                .check(matches(isDisplayed()));
+
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(-1);
+        });
+        Thread.sleep(300);
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message)).check(doesNotExist());
+    }
+
+    @Test
+    public void setMaxItem_toHigherThanTotalItems() throws Throwable {
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(70);
+        });
+        Thread.sleep(300);
+        onView(withText("Item 0")).check(matches(isDisplayed()));
+        onView(withId(R.id.list)).perform(scrollToPosition(49));
+        onView(withText("Item 49")).check(matches(isDisplayed()));
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message))
+                .check(doesNotExist());
+
+        // Switch back to unlimited
+        mActivityRule.runOnUiThread(() -> {
+            mContentLimitingAdapter.setMaxItems(-1);
+        });
+        Thread.sleep(300);
+        onView(withId(com.android.car.ui.R.id.car_ui_list_limiting_message)).check(doesNotExist());
+    }
+}
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/RangeFilterImplTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/RangeFilterImplTest.java
new file mode 100644
index 0000000..ffb5c04
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/RangeFilterImplTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.recyclerview;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerView.Adapter;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class RangeFilterImplTest {
+    private static final int EVEN_MAX_ITEMS = 10;
+    private static final int ODD_MAX_ITEMS = 9;
+    private static final int UNRESTRICTED_COUNT = 80;
+    private static final int UNRESTRICTED_SMALL_COUNT = 6;
+
+    @Mock
+    RecyclerView.Adapter mMockAdapter;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testRecompute_contentSizeSmallerThanRange_noLimit() {
+        RangeFilterImpl rangeFilter = new RangeFilterImpl(mMockAdapter, EVEN_MAX_ITEMS);
+        int pivotPosition = 0;
+        rangeFilter.recompute(UNRESTRICTED_SMALL_COUNT, pivotPosition);
+        verifyNoClamps(rangeFilter, UNRESTRICTED_SMALL_COUNT);
+    }
+
+    @Test
+    public void testRecompute_pivotPointInTheMiddleWithEvenMaxItems_limitContent() {
+        RangeFilterImpl rangeFilter = new RangeFilterImpl(mMockAdapter, EVEN_MAX_ITEMS);
+        int pivotPosition = 30;
+        rangeFilter.recompute(UNRESTRICTED_COUNT, pivotPosition);
+        verifyClampedBothEnds(rangeFilter, pivotPosition, EVEN_MAX_ITEMS);
+        rangeFilter.applyFilter();
+        verifyFilterBothEnds(mMockAdapter, pivotPosition, EVEN_MAX_ITEMS, UNRESTRICTED_COUNT);
+        rangeFilter.removeFilter();
+        verifyRemoveFilterBothEnds(mMockAdapter, pivotPosition, EVEN_MAX_ITEMS, UNRESTRICTED_COUNT);
+    }
+
+    @Test
+    public void testRecompute_pivotPointInTheMiddleWithOddMaxItems_limitContent() {
+        RangeFilterImpl rangeFilter = new RangeFilterImpl(mMockAdapter, ODD_MAX_ITEMS);
+        int pivotPosition = 30;
+        rangeFilter.recompute(UNRESTRICTED_COUNT, pivotPosition);
+        verifyClampedBothEnds(rangeFilter, pivotPosition, ODD_MAX_ITEMS);
+        rangeFilter.applyFilter();
+        verifyFilterBothEnds(mMockAdapter, pivotPosition, ODD_MAX_ITEMS, UNRESTRICTED_COUNT);
+        rangeFilter.removeFilter();
+        verifyRemoveFilterBothEnds(mMockAdapter, pivotPosition, ODD_MAX_ITEMS, UNRESTRICTED_COUNT);
+    }
+
+    private void verifyClampedBothEnds(
+            RangeFilterImpl rangeFilter, int pivotPoint, int maxItemCount) {
+        RangeFilterImpl.ListRange range = rangeFilter.getRange();
+        int firstHalfCount = maxItemCount / 2;
+        int secondHalfCount = maxItemCount - firstHalfCount;
+        assertThat(range.mClampedHead).isEqualTo(1);
+        assertThat(range.mClampedTail).isEqualTo(1);
+        assertThat(range.mStartIndex).isEqualTo(pivotPoint - firstHalfCount);
+        assertThat(range.mEndIndex).isEqualTo(pivotPoint + secondHalfCount);
+        assertThat(range.mEndIndex - range.mStartIndex).isEqualTo(maxItemCount);
+        assertThat(range.mLimitedCount).isEqualTo(maxItemCount + 2 /* two messages*/);
+
+        assertThat(rangeFilter.positionToIndex(0))
+                .isEqualTo(RangeFilter.INVALID_INDEX);
+        assertThat(rangeFilter.positionToIndex(1))
+                .isEqualTo(range.mStartIndex);
+
+        assertThat(rangeFilter.positionToIndex(maxItemCount))
+                .isEqualTo(range.mEndIndex - 1);
+        assertThat(rangeFilter.positionToIndex(maxItemCount + 1))
+                .isEqualTo(RangeFilter.INVALID_INDEX);
+
+        assertThat(rangeFilter.indexToPosition(range.mStartIndex))
+                .isEqualTo(1);
+
+        assertThat(rangeFilter.indexToPosition(range.mEndIndex - 1))
+                .isEqualTo(maxItemCount /* head message takes an additional position */);
+    }
+
+    private void verifyNoClamps(RangeFilterImpl rangeFilter, int unrestrictedCount) {
+        RangeFilterImpl.ListRange range = rangeFilter.getRange();
+        assertThat(range.mClampedHead).isEqualTo(0);
+        assertThat(range.mClampedTail).isEqualTo(0);
+        assertThat(range.mStartIndex).isEqualTo(0);
+        assertThat(range.mEndIndex).isEqualTo(unrestrictedCount);
+        assertThat(range.mEndIndex - range.mStartIndex).isEqualTo(unrestrictedCount);
+        assertThat(range.mLimitedCount).isEqualTo(unrestrictedCount);
+    }
+
+    private void verifyFilterBothEnds(
+            Adapter adapter,
+            int pivotPosition,
+            int maxCount,
+            int unrestrictedCount) {
+        int firstHalfRemainingItems = maxCount / 2;
+        int secondHalfRemainingItems = maxCount - firstHalfRemainingItems;
+        int clampedHeadItemCount = pivotPosition - firstHalfRemainingItems;
+        int clampedTailItemCount = unrestrictedCount - clampedHeadItemCount - maxCount;
+
+        verify(adapter).notifyItemInserted(unrestrictedCount);
+        verify(adapter).notifyItemRangeRemoved(
+                pivotPosition + secondHalfRemainingItems, clampedTailItemCount);
+        verify(adapter).notifyItemRangeRemoved(0, clampedHeadItemCount);
+        verify(adapter).notifyItemInserted(0);
+    }
+
+    private void verifyRemoveFilterBothEnds(
+            Adapter adapter,
+            int pivotPosition,
+            int maxCount,
+            int unrestrictedCount) {
+        int firstHalfRemainingItems = maxCount / 2;
+        int secondHalfRemainingItems = maxCount - firstHalfRemainingItems;
+        int clampedHeadItemCount = pivotPosition - firstHalfRemainingItems;
+        int clampedTailItemCount = unrestrictedCount - clampedHeadItemCount - maxCount;
+
+        verify(adapter).notifyItemRemoved(maxCount + 1);
+        verify(adapter).notifyItemRangeInserted(maxCount + 1, clampedTailItemCount);
+        verify(adapter).notifyItemRangeInserted(1, clampedHeadItemCount);
+        verify(adapter).notifyItemRemoved(0);
+    }
+}
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/TestContentLimitingAdapter.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/TestContentLimitingAdapter.java
new file mode 100644
index 0000000..a65be43
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/TestContentLimitingAdapter.java
@@ -0,0 +1,63 @@
+/*
+ * 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.recyclerview;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.ui.test.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestContentLimitingAdapter extends ContentLimitingAdapter<TestViewHolder> {
+
+    private final List<String> mItems;
+
+    TestContentLimitingAdapter(int numItems) {
+        mItems = new ArrayList<>();
+        for (int i = 0; i < numItems; i++) {
+            mItems.add("Item " + i);
+        }
+    }
+
+    @Override
+    protected TestViewHolder onCreateViewHolderImpl(@NonNull ViewGroup parent,
+            int viewType) {
+        View layout = LayoutInflater.from(parent.getContext())
+                .inflate(R.layout.test_car_ui_recycler_view_list_item, parent, false);
+        return new TestViewHolder(layout);
+    }
+
+    @Override
+    protected void onBindViewHolderImpl(TestViewHolder holder, int position) {
+        holder.bind(mItems.get(position));
+    }
+
+    @Override
+    protected int getUnrestrictedItemCount() {
+        return mItems.size();
+    }
+
+    @Override
+    public int getConfigurationId() {
+        return 0;
+    }
+}
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/TestViewHolder.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/TestViewHolder.java
new file mode 100644
index 0000000..d6b6899
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/TestViewHolder.java
@@ -0,0 +1,44 @@
+/*
+ * 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.recyclerview;
+
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.test.R;
+
+public class TestViewHolder extends RecyclerView.ViewHolder {
+
+    private CharSequence mText;
+
+    TestViewHolder(@NonNull View itemView) {
+        super(itemView);
+    }
+
+    void bind(CharSequence text) {
+        mText = text;
+        TextView textView = itemView.requireViewById(R.id.textTitle);
+        textView.setText(text);
+    }
+
+    CharSequence getText() {
+        return mText;
+    }
+}
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/toolbar/ToolbarTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/toolbar/ToolbarTest.java
similarity index 93%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/toolbar/ToolbarTest.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/toolbar/ToolbarTest.java
index 9d5af2c..251092a 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/toolbar/ToolbarTest.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/toolbar/ToolbarTest.java
@@ -33,20 +33,17 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertFalse;
-import static junit.framework.TestCase.assertTrue;
 
 import static org.hamcrest.core.IsNot.not;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import android.app.Activity;
 import android.view.View;
 
 import androidx.test.rule.ActivityTestRule;
 
 import com.android.car.ui.core.CarUi;
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.test.R;
 
 import org.hamcrest.Matcher;
 import org.junit.Rule;
@@ -118,8 +115,7 @@
 
         onView(withId(R.id.car_ui_toolbar_nav_icon_container)).perform(click());
 
-        assertTrue(mActivityRule.getActivity().isFinishing());
-        assertEquals(mActivityRule.getActivityResult().getResultCode(), Activity.RESULT_CANCELED);
+        assertEquals(1, mActivityRule.getActivity().getTimesOnBackPressed());
     }
 
     @Test
@@ -131,8 +127,7 @@
 
         onView(withId(R.id.car_ui_toolbar_nav_icon_container)).perform(click());
 
-        assertTrue(mActivityRule.getActivity().isFinishing());
-        assertEquals(mActivityRule.getActivityResult().getResultCode(), Activity.RESULT_CANCELED);
+        assertEquals(1, mActivityRule.getActivity().getTimesOnBackPressed());
     }
 
     @Test
@@ -144,7 +139,7 @@
 
         onView(withId(R.id.car_ui_toolbar_nav_icon_container)).perform(click());
 
-        assertFalse(mActivityRule.getActivity().isFinishing());
+        assertEquals(0, mActivityRule.getActivity().getTimesOnBackPressed());
     }
 
     @Test
@@ -159,7 +154,7 @@
 
         onView(withId(R.id.car_ui_toolbar_nav_icon_container)).perform(click());
 
-        assertTrue(mActivityRule.getActivity().isFinishing());
+        assertEquals(1, mActivityRule.getActivity().getTimesOnBackPressed());
     }
 
     @Test
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/toolbar/ToolbarTestActivity.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/toolbar/ToolbarTestActivity.java
similarity index 67%
rename from car-ui-lib/tests/unit/src/com/android/car/ui/toolbar/ToolbarTestActivity.java
rename to car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/toolbar/ToolbarTestActivity.java
index e54ac83..906305e 100644
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/toolbar/ToolbarTestActivity.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/toolbar/ToolbarTestActivity.java
@@ -19,14 +19,30 @@
 import android.app.Activity;
 import android.os.Bundle;
 
-import com.android.car.ui.tests.unit.R;
+import com.android.car.ui.test.R;
 
 /** An Activity used for testing {@link ToolbarController}. */
 public class ToolbarTestActivity extends Activity {
 
+    private int mTimesOnBackPressed = 0;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.empty_test_activity);
     }
+
+    /**
+     * ag/12161937 changes the behavior of pressing back on the top level activity, so
+     * assert the number of times onBackPressed() is called instead of if the activity isFinishing()
+     */
+    public int getTimesOnBackPressed() {
+        return mTimesOnBackPressed;
+    }
+
+    @Override
+    public void onBackPressed() {
+        super.onBackPressed();
+        mTimesOnBackPressed++;
+    }
 }
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_launcher.png b/car-ui-lib/car-ui-lib/src/androidTest/res/drawable/ic_launcher.png
similarity index 100%
copy from car-ui-lib/tests/paintbooth/res/drawable/ic_launcher.png
copy to car-ui-lib/car-ui-lib/src/androidTest/res/drawable/ic_launcher.png
Binary files differ
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/res/drawable/ic_settings_gear.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/drawable/ic_settings_gear.xml
new file mode 100644
index 0000000..2b7fa2f
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/res/drawable/ic_settings_gear.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    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.
+-->
+
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="48dp"
+    android:height="48dp"
+    android:viewportHeight="48.0"
+    android:viewportWidth="48.0">
+    <path
+        android:fillColor="#fff"
+        android:pathData="M38.86,25.95c0.08,-0.64 0.14,-1.29 0.14,-1.95s-0.06,-1.31 -0.14,-1.95l4.23,-3.31c0.38,-0.3 0.49,-0.84 0.24,-1.28l-4,-6.93c-0.25,-0.43 -0.77,-0.61 -1.22,-0.43l-4.98,2.01c-1.03,-0.79 -2.16,-1.46 -3.38,-1.97L29,4.84c-0.09,-0.47 -0.5,-0.84 -1,-0.84h-8c-0.5,0 -0.91,0.37 -0.99,0.84l-0.75,5.3c-1.22,0.51 -2.35,1.17 -3.38,1.97L9.9,10.1c-0.45,-0.17 -0.97,0 -1.22,0.43l-4,6.93c-0.25,0.43 -0.14,0.97 0.24,1.28l4.22,3.31C9.06,22.69 9,23.34 9,24s0.06,1.31 0.14,1.95l-4.22,3.31c-0.38,0.3 -0.49,0.84 -0.24,1.28l4,6.93c0.25,0.43 0.77,0.61 1.22,0.43l4.98,-2.01c1.03,0.79 2.16,1.46 3.38,1.97l0.75,5.3c0.08,0.47 0.49,0.84 0.99,0.84h8c0.5,0 0.91,-0.37 0.99,-0.84l0.75,-5.3c1.22,-0.51 2.35,-1.17 3.38,-1.97l4.98,2.01c0.45,0.17 0.97,0 1.22,-0.43l4,-6.93c0.25,-0.43 0.14,-0.97 -0.24,-1.28l-4.22,-3.31zM24,31c-3.87,0 -7,-3.13 -7,-7s3.13,-7 7,-7 7,3.13 7,7 -3.13,7 -7,7z"/>
+</vector>
diff --git a/car-ui-lib/tests/unit/res/layout/car_ui_recycler_view_gone_test_activity.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/car_ui_recycler_view_gone_test_activity.xml
similarity index 100%
rename from car-ui-lib/tests/unit/res/layout/car_ui_recycler_view_gone_test_activity.xml
rename to car-ui-lib/car-ui-lib/src/androidTest/res/layout/car_ui_recycler_view_gone_test_activity.xml
diff --git a/car-ui-lib/tests/unit/res/layout/car_ui_recycler_view_invisible_test_activity.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/car_ui_recycler_view_invisible_test_activity.xml
similarity index 100%
rename from car-ui-lib/tests/unit/res/layout/car_ui_recycler_view_invisible_test_activity.xml
rename to car-ui-lib/car-ui-lib/src/androidTest/res/layout/car_ui_recycler_view_invisible_test_activity.xml
diff --git a/car-ui-lib/tests/unit/res/layout/car_ui_recycler_view_test_activity.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/car_ui_recycler_view_test_activity.xml
similarity index 100%
rename from car-ui-lib/tests/unit/res/layout/car_ui_recycler_view_test_activity.xml
rename to car-ui-lib/car-ui-lib/src/androidTest/res/layout/car_ui_recycler_view_test_activity.xml
diff --git a/car-ui-lib/tests/robotests/AndroidManifest.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/details_preference_widget.xml
similarity index 67%
copy from car-ui-lib/tests/robotests/AndroidManifest.xml
copy to car-ui-lib/car-ui-lib/src/androidTest/res/layout/details_preference_widget.xml
index b62579f..3912de1 100644
--- a/car-ui-lib/tests/robotests/AndroidManifest.xml
+++ b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/details_preference_widget.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2019 Google Inc.
+    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.
@@ -14,6 +14,10 @@
     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.ui">
-</manifest>
+
+<ImageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center"
+    android:src="@drawable/ic_settings_gear"/>
diff --git a/car-ui-lib/tests/unit/res/layout/empty_test_activity.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/empty_test_activity.xml
similarity index 100%
rename from car-ui-lib/tests/unit/res/layout/empty_test_activity.xml
rename to car-ui-lib/car-ui-lib/src/androidTest/res/layout/empty_test_activity.xml
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/res/layout/focus_area_test_activity.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/focus_area_test_activity.xml
new file mode 100644
index 0000000..524de8d
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/focus_area_test_activity.xml
@@ -0,0 +1,71 @@
+<?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.
+  -->
+<LinearLayout
+    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">
+    <View
+        android:focusable="true"
+        android:layout_width="100dp"
+        android:layout_height="100dp"/>
+    <com.android.car.ui.TestFocusArea
+        android:id="@+id/focus_area"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:defaultFocus="@+id/default_focus"
+        app:startBoundOffset="10dp"
+        app:endBoundOffset="20dp"
+        app:topBoundOffset="30dp"
+        app:bottomBoundOffset="40dp">
+        <View
+            android:id="@+id/child"
+            android:focusable="true"
+            android:layout_width="100dp"
+            android:layout_height="100dp"/>
+        <View
+            android:id="@+id/default_focus"
+            android:focusable="true"
+            android:layout_width="100dp"
+            android:layout_height="100dp"/>
+    </com.android.car.ui.TestFocusArea>
+    <View
+        android:id="@+id/non_child"
+        android:focusable="true"
+        android:layout_width="100dp"
+        android:layout_height="100dp"/>
+    <com.android.car.ui.TestFocusArea
+        android:id="@+id/focus_area2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:highlightPaddingHorizontal="10dp"
+        app:highlightPaddingVertical="20dp"
+        app:highlightPaddingStart="30dp"
+        app:highlightPaddingTop="40dp"
+        app:startBoundOffset="50dp">
+        <View
+            android:id="@+id/child1"
+            android:focusable="true"
+            android:layout_width="100dp"
+            android:layout_height="100dp"/>
+        <View
+            android:id="@+id/child2"
+            android:focusable="true"
+            android:layout_width="100dp"
+            android:layout_height="100dp"/>
+    </com.android.car.ui.TestFocusArea>
+</LinearLayout>
diff --git a/car-ui-lib/tests/unit/res/layout/focus_parking_view_test_activity.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/focus_parking_view_test_activity.xml
similarity index 100%
rename from car-ui-lib/tests/unit/res/layout/focus_parking_view_test_activity.xml
rename to car-ui-lib/car-ui-lib/src/androidTest/res/layout/focus_parking_view_test_activity.xml
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/res/layout/test_car_ui_recycler_view_list_item.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/test_car_ui_recycler_view_list_item.xml
new file mode 100644
index 0000000..7e8717e
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/test_car_ui_recycler_view_list_item.xml
@@ -0,0 +1,33 @@
+<?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
+  -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_marginBottom="10dp"
+        android:id="@+id/textTitle"
+        android:text="TESTING"/>
+
+</LinearLayout>
+
+
diff --git a/car-ui-lib/tests/unit/res/layout/test_list_item.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/layout/test_list_item.xml
similarity index 100%
rename from car-ui-lib/tests/unit/res/layout/test_list_item.xml
rename to car-ui-lib/car-ui-lib/src/androidTest/res/layout/test_list_item.xml
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/res/values/arrays.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/values/arrays.xml
new file mode 100644
index 0000000..9606ddd
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/res/values/arrays.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+<resources>
+
+    <!-- Used for the entries in a list preference [CHAR_LIMIT=NONE]-->
+    <string-array name="entries">
+        <!-- The first sample choice [CHAR_LIMIT=NONE]-->
+        <item>Choose me!</item>
+        <!-- The second sample choice [CHAR_LIMIT=NONE]-->
+        <item>No, me!</item>
+        <!-- The third sample choice [CHAR_LIMIT=NONE]-->
+        <item>What about me?!</item>
+    </string-array>
+
+    <!-- Used for the values in a list preference -->
+    <string-array name="entry_values" translatable="false">
+        <!-- The first sample value -->
+        <item>alpha</item>
+        <!-- The second sample value -->
+        <item>beta</item>
+        <!-- The third sample value -->
+        <item>charlie</item>
+    </string-array>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/res/values/strings.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/values/strings.xml
new file mode 100644
index 0000000..21f4ee4
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/res/values/strings.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+
+<resources>
+    <string name="preferences_screen_title">Preferences</string>
+    <string name="preference_dialog_category">Dialog preferences</string>
+    <string name="title_list_preference">List preference</string>
+    <string name="dialog_title_list_preference">Choose one option!</string>
+    <string name="title_multi_list_preference">Multi-select list preference</string>
+    <string name="summary_multi_list_preference">Shows a dialog with multiple choice options</string>
+    <string name="dialog_title_multi_list_preference">Choose some options!</string>
+    <string name="preference_widgets_category">Widgets</string>
+    <string name="title_checkbox_preference">Checkbox preference</string>
+    <string name="summary_checkbox_preference">Tap anywhere in this preference to toggle state</string>
+    <string name="title_switch_preference">Switch preference</string>
+    <string name="summary_switch_preference">Tap anywhere in this preference to toggle state</string>
+    <string name="title_dropdown_preference">Dropdown preference</string>
+    <string name="title_twoaction_preference">TwoAction preference</string>
+    <string name="summary_twoaction_preference">A widget should be visible on the right</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/res/xml/test_preferences.xml b/car-ui-lib/car-ui-lib/src/androidTest/res/xml/test_preferences.xml
new file mode 100644
index 0000000..042bbb0
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/androidTest/res/xml/test_preferences.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    app:title="@string/preferences_screen_title">
+
+    <PreferenceCategory
+        android:title="@string/preference_dialog_category"
+        android:order="1">
+
+        <ListPreference
+            android:dialogTitle="@string/dialog_title_list_preference"
+            android:entries="@array/entries"
+            android:entryValues="@array/entry_values"
+            android:key="list"
+            android:title="@string/title_list_preference"
+            app:useSimpleSummaryProvider="true"/>
+
+        <MultiSelectListPreference
+            android:dialogTitle="@string/dialog_title_multi_list_preference"
+            android:entries="@array/entries"
+            android:entryValues="@array/entry_values"
+            android:key="multi_select_list"
+            android:summary="@string/summary_multi_list_preference"
+            android:title="@string/title_multi_list_preference"/>
+    </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/AlertDialogBuilder.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/AlertDialogBuilder.java
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusArea.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusArea.java
new file mode 100644
index 0000000..f5c6c1d
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusArea.java
@@ -0,0 +1,709 @@
+/*
+ * 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;
+
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS;
+
+import static com.android.car.ui.utils.RotaryConstants.ACTION_NUDGE_SHORTCUT;
+import static com.android.car.ui.utils.RotaryConstants.ACTION_NUDGE_TO_ANOTHER_FOCUS_AREA;
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_BOTTOM_BOUND_OFFSET;
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_LEFT_BOUND_OFFSET;
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_RIGHT_BOUND_OFFSET;
+import static com.android.car.ui.utils.RotaryConstants.FOCUS_AREA_TOP_BOUND_OFFSET;
+import static com.android.car.ui.utils.RotaryConstants.NUDGE_DIRECTION;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.SystemClock;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.ui.utils.CarUiUtils;
+import com.android.car.ui.utils.ViewUtils;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A {@link LinearLayout} used as a navigation block for the rotary controller.
+ * <p>
+ * The {@link com.android.car.rotary.RotaryService} looks for instances of {@link FocusArea} in the
+ * view hierarchy when handling rotate and nudge actions. When receiving a rotation event ({@link
+ * android.car.input.RotaryEvent}), RotaryService will move the focus to another {@link View} that
+ * can take focus within the same FocusArea. When receiving a nudge event ({@link
+ * KeyEvent#KEYCODE_SYSTEM_NAVIGATION_UP}, {@link KeyEvent#KEYCODE_SYSTEM_NAVIGATION_DOWN}, {@link
+ * KeyEvent#KEYCODE_SYSTEM_NAVIGATION_LEFT}, or {@link KeyEvent#KEYCODE_SYSTEM_NAVIGATION_RIGHT}),
+ * RotaryService will move the focus to another view that can take focus in another (typically
+ * adjacent) FocusArea.
+ * <p>
+ * If enabled, FocusArea can draw highlights when one of its descendants has focus and it's not in
+ * touch mode.
+ * <p>
+ * When creating a navigation block in the layout file, if you intend to use a LinearLayout as a
+ * container for that block, just use a FocusArea instead; otherwise wrap the block in a FocusArea.
+ * <p>
+ * DO NOT nest a FocusArea inside another FocusArea because it will result in undefined navigation
+ * behavior.
+ */
+public class FocusArea extends LinearLayout {
+
+    private static final String TAG = "FocusArea";
+
+    private static final int INVALID_DIMEN = -1;
+
+    private static final int INVALID_DIRECTION = -1;
+
+    private static final List<Integer> NUDGE_DIRECTIONS =
+            Arrays.asList(FOCUS_LEFT, FOCUS_RIGHT, FOCUS_UP, FOCUS_DOWN);
+
+    /** Whether the FocusArea's descendant has focus (the FocusArea itself is not focusable). */
+    private boolean mHasFocus;
+
+    /**
+     * Whether to draw {@link #mForegroundHighlight} when one of the FocusArea's descendants has
+     * focus and it's not in touch mode.
+     */
+    private boolean mEnableForegroundHighlight;
+
+    /**
+     * Whether to draw {@link #mBackgroundHighlight} when one of the FocusArea's descendants has
+     * focus and it's not in touch mode.
+     */
+    private boolean mEnableBackgroundHighlight;
+
+    /**
+     * Highlight (typically outline of the FocusArea) drawn on top of the FocusArea and its
+     * descendants.
+     */
+    private Drawable mForegroundHighlight;
+
+    /**
+     * Highlight (typically a solid or gradient shape) drawn on top of the FocusArea but behind its
+     * descendants.
+     */
+    private Drawable mBackgroundHighlight;
+
+    /** The padding (in pixels) of the FocusArea highlight. */
+    private int mPaddingLeft;
+    private int mPaddingRight;
+    private int mPaddingTop;
+    private int mPaddingBottom;
+
+    /** The offset (in pixels) of the FocusArea's bounds. */
+    private int mLeftOffset;
+    private int mRightOffset;
+    private int mTopOffset;
+    private int mBottomOffset;
+
+    /** Whether the layout direction is {@link View#LAYOUT_DIRECTION_RTL}. */
+    private boolean mRtl;
+
+    /** The ID of the view specified in {@code app:defaultFocus}. */
+    private int mDefaultFocusId;
+    /** The view specified in {@code app:defaultFocus}. */
+    @Nullable
+    private View mDefaultFocusView;
+
+    /**
+     * Whether to focus on the {@code app:defaultFocus} view when nudging to the FocusArea, even if
+     * there was another view in the FocusArea focused before.
+     */
+    private boolean mDefaultFocusOverridesHistory;
+
+    /** The ID of the view specified in {@code app:nudgeShortcut}. */
+    private int mNudgeShortcutId;
+    /** The view specified in {@code app:nudgeShortcut}. */
+    @Nullable
+    private View mNudgeShortcutView;
+
+    /** The direction specified in {@code app:nudgeShortcutDirection}. */
+    private int mNudgeShortcutDirection;
+
+    /**
+     * Map of nudge target FocusArea IDs specified in {@code app:nudgeLeft}, {@code app:nudgRight},
+     * {@code app:nudgeUp}, or {@code app:nudgeDown}.
+     */
+    private Map<Integer, Integer> mSpecifiedNudgeIdMap;
+
+    /** Map of specified nudge target FocusAreas. */
+    private Map<Integer, FocusArea> mSpecifiedNudgeFocusAreaMap;
+
+    /**
+     * Cache of focus history and nudge history of the rotary controller.
+     * <p>
+     * For focus history, the previously focused view and a timestamp will be saved when the
+     * focused view has changed.
+     * <p>
+     * For nudge history, the target FocusArea, direction, and a timestamp will be saved when the
+     * focus has moved from another FocusArea to this FocusArea. There are 2 cases:
+     * <ul>
+     *     <li>The focus is moved to another FocusArea because this FocusArea has called {@link
+     *         #nudgeToAnotherFocusArea}. In this case, the target FocusArea and direction are
+     *         trivial to this FocusArea.
+     *     <li>The focus is moved to this FocusArea because RotaryService has performed {@link
+     *         AccessibilityNodeInfo#ACTION_FOCUS} on this FocusArea. In this case, this FocusArea
+     *         can get the source FocusArea through the {@link
+     *         android.view.ViewTreeObserver.OnGlobalFocusChangeListener} registered, and can get
+     *         the direction when handling the action. Since the listener is triggered before
+     *         {@link #requestFocus} returns (which is called when handling the action), the
+     *         source FocusArea is revealed earlier than the direction, so the nudge history should
+     *         be saved when the direction is revealed.
+     * </ul>
+     */
+    private RotaryCache mRotaryCache;
+
+    /** Whether to clear focus area history when the user rotates the rotary controller. */
+    private boolean mClearFocusAreaHistoryWhenRotating;
+
+    /** The FocusArea that had focus before this FocusArea, if any. */
+    private FocusArea mPreviousFocusArea;
+
+    /** The focused view in this FocusArea, if any. */
+    private View mFocusedView;
+
+    public FocusArea(Context context) {
+        super(context);
+        init(context, null);
+    }
+
+    public FocusArea(Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+        init(context, attrs);
+    }
+
+    public FocusArea(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init(context, attrs);
+    }
+
+    public FocusArea(Context context, @Nullable AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        init(context, attrs);
+    }
+
+    private void init(Context context, @Nullable AttributeSet attrs) {
+        Resources resources = getContext().getResources();
+        mEnableForegroundHighlight = resources.getBoolean(
+                R.bool.car_ui_enable_focus_area_foreground_highlight);
+        mEnableBackgroundHighlight = resources.getBoolean(
+                R.bool.car_ui_enable_focus_area_background_highlight);
+        mForegroundHighlight = resources.getDrawable(
+                R.drawable.car_ui_focus_area_foreground_highlight, getContext().getTheme());
+        mBackgroundHighlight = resources.getDrawable(
+                R.drawable.car_ui_focus_area_background_highlight, getContext().getTheme());
+
+        mDefaultFocusOverridesHistory = resources.getBoolean(
+                R.bool.car_ui_focus_area_default_focus_overrides_history);
+        mClearFocusAreaHistoryWhenRotating = resources.getBoolean(
+                R.bool.car_ui_clear_focus_area_history_when_rotating);
+
+        @RotaryCache.CacheType
+        int focusHistoryCacheType = resources.getInteger(R.integer.car_ui_focus_history_cache_type);
+        int focusHistoryExpirationPeriodMs =
+                resources.getInteger(R.integer.car_ui_focus_history_expiration_period_ms);
+        @RotaryCache.CacheType
+        int focusAreaHistoryCacheType = resources.getInteger(
+                R.integer.car_ui_focus_area_history_cache_type);
+        int focusAreaHistoryExpirationPeriodMs =
+                resources.getInteger(R.integer.car_ui_focus_area_history_expiration_period_ms);
+        mRotaryCache = new RotaryCache(focusHistoryCacheType, focusHistoryExpirationPeriodMs,
+                focusAreaHistoryCacheType, focusAreaHistoryExpirationPeriodMs);
+
+        // Ensure that an AccessibilityNodeInfo is created for this view.
+        setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+
+        // By default all ViewGroup subclasses do not call their draw() and onDraw() methods. We
+        // should enable it since we override these methods.
+        setWillNotDraw(false);
+
+        registerFocusChangeListener();
+
+        initAttrs(context, attrs);
+    }
+
+    private void registerFocusChangeListener() {
+        getViewTreeObserver().addOnGlobalFocusChangeListener(
+                (oldFocus, newFocus) -> {
+                    boolean hasFocus = hasFocus();
+                    saveFocusHistory(hasFocus);
+                    maybeUpdatePreviousFocusArea(hasFocus, oldFocus);
+                    maybeClearFocusAreaHistory(hasFocus, oldFocus);
+                    maybeUpdateFocusAreaHighlight(hasFocus);
+                    mHasFocus = hasFocus;
+                });
+    }
+
+    private void saveFocusHistory(boolean hasFocus) {
+        if (!hasFocus) {
+            mRotaryCache.saveFocusedView(mFocusedView, SystemClock.uptimeMillis());
+            mFocusedView = null;
+            return;
+        }
+        View v = getFocusedChild();
+        while (v != null) {
+            if (v.isFocused()) {
+                break;
+            }
+            v = v instanceof ViewGroup ? ((ViewGroup) v).getFocusedChild() : null;
+        }
+        mFocusedView = v;
+    }
+
+    /**
+     * Updates {@link #mPreviousFocusArea} when the focus has moved from another FocusArea to this
+     * FocusArea.
+     */
+    private void maybeUpdatePreviousFocusArea(boolean hasFocus, View oldFocus) {
+        if (mHasFocus || !hasFocus || oldFocus == null) {
+            return;
+        }
+        mPreviousFocusArea = getAncestorFocusArea(oldFocus);
+        if (mPreviousFocusArea == null) {
+            Log.w(TAG, "No parent FocusArea for " + oldFocus);
+        }
+    }
+
+    /**
+     * Clears FocusArea nudge history when the user rotates the controller to move focus within this
+     * FocusArea.
+     */
+    private void maybeClearFocusAreaHistory(boolean hasFocus, View oldFocus) {
+        if (!mClearFocusAreaHistoryWhenRotating) {
+            return;
+        }
+        if (!hasFocus || oldFocus == null) {
+            return;
+        }
+        FocusArea oldFocusArea = getAncestorFocusArea(oldFocus);
+        if (oldFocusArea != this) {
+            return;
+        }
+        mRotaryCache.clearFocusAreaHistory();
+    }
+
+    /** Updates highlight of the FocusArea if this FocusArea has gained or lost focus. */
+    private void maybeUpdateFocusAreaHighlight(boolean hasFocus) {
+        if (!mEnableBackgroundHighlight && !mEnableForegroundHighlight) {
+            return;
+        }
+        if (mHasFocus != hasFocus) {
+            invalidate();
+        }
+    }
+
+    private void initAttrs(Context context, @Nullable AttributeSet attrs) {
+        if (attrs == null) {
+            return;
+        }
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FocusArea);
+        try {
+            mDefaultFocusId = a.getResourceId(R.styleable.FocusArea_defaultFocus, View.NO_ID);
+
+            // Initialize the highlight padding. The padding, for example, left padding, is set in
+            // the following order:
+            // 1. if highlightPaddingStart (or highlightPaddingEnd in RTL layout) specified, use it
+            // 2. otherwise, if highlightPaddingHorizontal is specified, use it
+            // 3. otherwise use 0
+
+            int paddingStart = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_highlightPaddingStart, INVALID_DIMEN);
+            if (paddingStart == INVALID_DIMEN) {
+                paddingStart = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_highlightPaddingHorizontal, 0);
+            }
+
+            int paddingEnd = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_highlightPaddingEnd, INVALID_DIMEN);
+            if (paddingEnd == INVALID_DIMEN) {
+                paddingEnd = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_highlightPaddingHorizontal, 0);
+            }
+
+            mRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
+            mPaddingLeft = mRtl ? paddingEnd : paddingStart;
+            mPaddingRight = mRtl ? paddingStart : paddingEnd;
+
+            mPaddingTop = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_highlightPaddingTop, INVALID_DIMEN);
+            if (mPaddingTop == INVALID_DIMEN) {
+                mPaddingTop = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_highlightPaddingVertical, 0);
+            }
+
+            mPaddingBottom = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_highlightPaddingBottom, INVALID_DIMEN);
+            if (mPaddingBottom == INVALID_DIMEN) {
+                mPaddingBottom = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_highlightPaddingVertical, 0);
+            }
+
+            // Initialize the offset of the FocusArea's bounds. The offset, for example, left
+            // offset, is set in the following order:
+            // 1. if startBoundOffset (or endBoundOffset in RTL layout) specified, use it
+            // 2. otherwise, if horizontalBoundOffset is specified, use it
+            // 3. otherwise use mPaddingLeft
+
+            int startOffset = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_startBoundOffset, INVALID_DIMEN);
+            if (startOffset == INVALID_DIMEN) {
+                startOffset = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_horizontalBoundOffset, paddingStart);
+            }
+
+            int endOffset = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_endBoundOffset, INVALID_DIMEN);
+            if (endOffset == INVALID_DIMEN) {
+                endOffset = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_horizontalBoundOffset, paddingEnd);
+            }
+
+            mLeftOffset = mRtl ? endOffset : startOffset;
+            mRightOffset = mRtl ? startOffset : endOffset;
+
+            mTopOffset = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_topBoundOffset, INVALID_DIMEN);
+            if (mTopOffset == INVALID_DIMEN) {
+                mTopOffset = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_verticalBoundOffset, mPaddingTop);
+            }
+
+            mBottomOffset = a.getDimensionPixelSize(
+                    R.styleable.FocusArea_bottomBoundOffset, INVALID_DIMEN);
+            if (mBottomOffset == INVALID_DIMEN) {
+                mBottomOffset = a.getDimensionPixelSize(
+                        R.styleable.FocusArea_verticalBoundOffset, mPaddingBottom);
+            }
+
+            mNudgeShortcutId = a.getResourceId(R.styleable.FocusArea_nudgeShortcut, View.NO_ID);
+            mNudgeShortcutDirection = a.getInt(
+                    R.styleable.FocusArea_nudgeShortcutDirection, INVALID_DIRECTION);
+            if ((mNudgeShortcutId == View.NO_ID) ^ (mNudgeShortcutDirection == INVALID_DIRECTION)) {
+                throw new IllegalStateException("nudgeShortcut and nudgeShortcutDirection must "
+                        + "be specified together");
+            }
+
+            mSpecifiedNudgeIdMap = new HashMap<>();
+            mSpecifiedNudgeIdMap.put(FOCUS_LEFT,
+                    a.getResourceId(R.styleable.FocusArea_nudgeLeft, View.NO_ID));
+            mSpecifiedNudgeIdMap.put(FOCUS_RIGHT,
+                    a.getResourceId(R.styleable.FocusArea_nudgeRight, View.NO_ID));
+            mSpecifiedNudgeIdMap.put(FOCUS_UP,
+                    a.getResourceId(R.styleable.FocusArea_nudgeUp, View.NO_ID));
+            mSpecifiedNudgeIdMap.put(FOCUS_DOWN,
+                    a.getResourceId(R.styleable.FocusArea_nudgeDown, View.NO_ID));
+        } finally {
+            a.recycle();
+        }
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        if (mDefaultFocusId != View.NO_ID) {
+            mDefaultFocusView = CarUiUtils.requireViewByRefId(this, mDefaultFocusId);
+        }
+        if (mNudgeShortcutId != View.NO_ID) {
+            mNudgeShortcutView = CarUiUtils.requireViewByRefId(this, mNudgeShortcutId);
+        }
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        boolean rtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
+        if (mRtl != rtl) {
+            mRtl = rtl;
+
+            int temp = mPaddingLeft;
+            mPaddingLeft = mPaddingRight;
+            mPaddingRight = temp;
+
+            temp = mLeftOffset;
+            mLeftOffset = mRightOffset;
+            mRightOffset = temp;
+        }
+    }
+
+    @Override
+    public boolean performAccessibilityAction(int action, Bundle arguments) {
+        switch (action) {
+            case ACTION_FOCUS:
+                // Repurpose ACTION_FOCUS to focus on its descendant. We can do this because
+                // FocusArea is not focusable and it didn't consume ACTION_FOCUS previously.
+                boolean success = focusOnDescendant();
+                if (success && mPreviousFocusArea != null) {
+                    int direction = getNudgeDirection(arguments);
+                    if (direction != INVALID_DIRECTION) {
+                        saveFocusAreaHistory(direction, mPreviousFocusArea, this,
+                                SystemClock.uptimeMillis());
+                    }
+                }
+                return success;
+            case ACTION_NUDGE_SHORTCUT:
+                return nudgeToShortcutView(arguments);
+            case ACTION_NUDGE_TO_ANOTHER_FOCUS_AREA:
+                return nudgeToAnotherFocusArea(arguments);
+            default:
+                return super.performAccessibilityAction(action, arguments);
+        }
+    }
+
+    private boolean focusOnDescendant() {
+        if (focusOnFocusedByDefaultView()) {
+            return true;
+        }
+        if (focusOnPrimaryFocusView()) {
+            return true;
+        }
+        if (mDefaultFocusOverridesHistory) {
+            // Check mDefaultFocus before last focused view.
+            if (focusDefaultFocusView() || focusOnLastFocusedView()) {
+                return true;
+            }
+        } else {
+            // Check last focused view before mDefaultFocus.
+            if (focusOnLastFocusedView() || focusDefaultFocusView()) {
+                return true;
+            }
+        }
+        return focusOnFirstFocusableView();
+    }
+
+    private boolean focusOnFocusedByDefaultView() {
+        View focusedByDefaultView = ViewUtils.findFocusedByDefaultView(this);
+        return requestFocus(focusedByDefaultView);
+    }
+
+    private boolean focusOnPrimaryFocusView() {
+        View primaryFocus = ViewUtils.findPrimaryFocusView(this);
+        return requestFocus(primaryFocus);
+    }
+
+    private boolean focusDefaultFocusView() {
+        return requestFocus(mDefaultFocusView);
+    }
+
+    private boolean focusOnLastFocusedView() {
+        View lastFocusedView = mRotaryCache.getFocusedView(SystemClock.uptimeMillis());
+        return requestFocus(lastFocusedView);
+    }
+
+    private boolean focusOnFirstFocusableView() {
+        View firstFocusableView = ViewUtils.findFocusableDescendant(this);
+        return requestFocus(firstFocusableView);
+    }
+
+    private boolean nudgeToShortcutView(Bundle arguments) {
+        if (mNudgeShortcutDirection == INVALID_DIRECTION) {
+            // No nudge shortcut configured for this FocusArea.
+            return false;
+        }
+        if (arguments == null
+                || arguments.getInt(NUDGE_DIRECTION, INVALID_DIRECTION)
+                    != mNudgeShortcutDirection) {
+            // The user is not nudging in the nudge shortcut direction.
+            return false;
+        }
+        if (mNudgeShortcutView.isFocused()) {
+            // The nudge shortcut view is already focused; return false so that the user can
+            // nudge to another FocusArea.
+            return false;
+        }
+        return requestFocus(mNudgeShortcutView);
+    }
+
+    private boolean nudgeToAnotherFocusArea(Bundle arguments) {
+        int direction = getNudgeDirection(arguments);
+        long elapsedRealtime = SystemClock.uptimeMillis();
+
+        // Try to nudge to specified FocusArea, if any.
+        FocusArea targetFocusArea = getSpecifiedFocusArea(direction);
+        boolean success = targetFocusArea != null && targetFocusArea.focusOnDescendant();
+
+        // If failed, try to nudge to cached FocusArea, if any.
+        if (!success) {
+            targetFocusArea = mRotaryCache.getCachedFocusArea(direction, elapsedRealtime);
+            success = targetFocusArea != null && targetFocusArea.focusOnDescendant();
+        }
+
+        if (success) {
+            saveFocusAreaHistory(direction, this, targetFocusArea, elapsedRealtime);
+        }
+        return success;
+    }
+
+    private static int getNudgeDirection(Bundle arguments) {
+        return arguments == null
+                ? INVALID_DIRECTION
+                : arguments.getInt(NUDGE_DIRECTION, INVALID_DIRECTION);
+    }
+
+    /** Saves bidirectional FocusArea nudge history. */
+    private void saveFocusAreaHistory(int direction, @NonNull FocusArea sourceFocusArea,
+            @NonNull FocusArea targetFocusArea, long elapsedRealtime) {
+        sourceFocusArea.mRotaryCache.saveFocusArea(direction, targetFocusArea, elapsedRealtime);
+
+        int oppositeDirection = getOppositeDirection(direction);
+        targetFocusArea.mRotaryCache.saveFocusArea(oppositeDirection, sourceFocusArea,
+                elapsedRealtime);
+    }
+
+    /** Returns the direction opposite the given {@code direction} */
+    @VisibleForTesting
+    private static int getOppositeDirection(int direction) {
+        switch (direction) {
+            case View.FOCUS_LEFT:
+                return View.FOCUS_RIGHT;
+            case View.FOCUS_RIGHT:
+                return View.FOCUS_LEFT;
+            case View.FOCUS_UP:
+                return View.FOCUS_DOWN;
+            case View.FOCUS_DOWN:
+                return View.FOCUS_UP;
+        }
+        throw new IllegalArgumentException("direction must be "
+                + "FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, or FOCUS_RIGHT.");
+    }
+
+    private static FocusArea getAncestorFocusArea(@NonNull View view) {
+        ViewParent parent = view.getParent();
+        while (parent != null) {
+            if (parent instanceof FocusArea) {
+                return (FocusArea) parent;
+            }
+            parent = parent.getParent();
+        }
+        return null;
+    }
+
+    @Nullable
+    private FocusArea getSpecifiedFocusArea(int direction) {
+        maybeInitializeSpecifiedFocusAreas();
+        return mSpecifiedNudgeFocusAreaMap.get(direction);
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+
+        // Draw highlight on top of this FocusArea (including its background and content) but
+        // behind its children.
+        if (mEnableBackgroundHighlight && mHasFocus && !isInTouchMode()) {
+            mBackgroundHighlight.setBounds(
+                    mPaddingLeft + getScrollX(),
+                    mPaddingTop + getScrollY(),
+                    getScrollX() + getWidth() - mPaddingRight,
+                    getScrollY() + getHeight() - mPaddingBottom);
+            mBackgroundHighlight.draw(canvas);
+        }
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        super.draw(canvas);
+
+        // Draw highlight on top of this FocusArea (including its background and content) and its
+        // children (including background, content, focus highlight, etc).
+        if (mEnableForegroundHighlight && mHasFocus && !isInTouchMode()) {
+            mForegroundHighlight.setBounds(
+                    mPaddingLeft + getScrollX(),
+                    mPaddingTop + getScrollY(),
+                    getScrollX() + getWidth() - mPaddingRight,
+                    getScrollY() + getHeight() - mPaddingBottom);
+            mForegroundHighlight.draw(canvas);
+        }
+    }
+
+    @Override
+    public CharSequence getAccessibilityClassName() {
+        return FocusArea.class.getName();
+    }
+
+    @Override
+    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+        super.onInitializeAccessibilityNodeInfo(info);
+        Bundle bundle = info.getExtras();
+        bundle.putInt(FOCUS_AREA_LEFT_BOUND_OFFSET, mLeftOffset);
+        bundle.putInt(FOCUS_AREA_RIGHT_BOUND_OFFSET, mRightOffset);
+        bundle.putInt(FOCUS_AREA_TOP_BOUND_OFFSET, mTopOffset);
+        bundle.putInt(FOCUS_AREA_BOTTOM_BOUND_OFFSET, mBottomOffset);
+    }
+
+    private void maybeInitializeSpecifiedFocusAreas() {
+        if (mSpecifiedNudgeFocusAreaMap != null) {
+            return;
+        }
+        View root = getRootView();
+        mSpecifiedNudgeFocusAreaMap = new HashMap<>();
+        for (Integer direction : NUDGE_DIRECTIONS) {
+            int id = mSpecifiedNudgeIdMap.get(direction);
+            mSpecifiedNudgeFocusAreaMap.put(direction, root.findViewById(id));
+        }
+    }
+
+    private boolean requestFocus(@Nullable View view) {
+        if (view == null || !view.isAttachedToWindow()) {
+            return false;
+        }
+        // Exit touch mode and focus the view. The view may not be focusable in touch mode, so we
+        // need to exit touch mode before focusing it.
+        return view.performAccessibilityAction(ACTION_FOCUS, null);
+    }
+
+    /** Sets the padding (in pixels) of the FocusArea highlight. */
+    public void setHighlightPadding(int left, int top, int right, int bottom) {
+        if (mPaddingLeft == left && mPaddingTop == top && mPaddingRight == right
+                && mPaddingBottom == bottom) {
+            return;
+        }
+        mPaddingLeft = left;
+        mPaddingTop = top;
+        mPaddingRight = right;
+        mPaddingBottom = bottom;
+        invalidate();
+    }
+
+    /** Sets the offset (in pixels) of the FocusArea's bounds. */
+    public void setBoundsOffset(int left, int top, int right, int bottom) {
+        mLeftOffset = left;
+        mTopOffset = top;
+        mRightOffset = right;
+        mBottomOffset = bottom;
+    }
+
+    @VisibleForTesting
+    void enableForegroundHighlight() {
+        mEnableForegroundHighlight = true;
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/FocusParkingView.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusParkingView.java
similarity index 65%
rename from car-ui-lib/src/com/android/car/ui/FocusParkingView.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusParkingView.java
index 1b4bd13..8a42cea 100644
--- a/car-ui-lib/src/com/android/car/ui/FocusParkingView.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/FocusParkingView.java
@@ -15,21 +15,28 @@
  */
 package com.android.car.ui;
 
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_DISMISS;
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS;
+
+import static com.android.car.ui.utils.RotaryConstants.ACTION_HIDE_IME;
+import static com.android.car.ui.utils.RotaryConstants.ACTION_RESTORE_DEFAULT_FOCUS;
 
 import android.content.Context;
 import android.os.Bundle;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.View;
+import android.view.inputmethod.InputMethodManager;
 
 import androidx.annotation.Nullable;
 
+import com.android.car.ui.utils.ViewUtils;
+
 /**
  * A transparent {@link View} that can take focus. It's used by {@link
  * com.android.car.rotary.RotaryService} to support rotary controller navigation. Each {@link
- * android.view.Window} must have at least one FocusParkingView. The {@link FocusParkingView} must
- * be the first in Tab order, and outside of all {@link FocusArea}s.
- *
+ * android.view.Window} should have one FocusParkingView as the first focusable view in the view
+ * tree, and outside of all {@link FocusArea}s. If multiple FocusParkingView are added in the
+ * window, only the first one will be focusable.
  * <p>
  * Android doesn't clear focus automatically when focus is set in another window. If we try to clear
  * focus in the previous window, Android will re-focus a view in that window, resulting in two
@@ -49,6 +56,7 @@
  * Then it will avoid the wrap-around by not moving focus.
  */
 public class FocusParkingView extends View {
+    private static final String TAG = "FocusParkingView";
 
     public FocusParkingView(Context context) {
         super(context);
@@ -116,12 +124,58 @@
 
     @Override
     public boolean performAccessibilityAction(int action, Bundle arguments) {
-        if (action == ACTION_DISMISS) {
-            // Try to move focus to the default focus.
-            getRootView().restoreDefaultFocus();
-            // The action failed if the FocusParkingView is still focused.
-            return !isFocused();
+        switch (action) {
+            case ACTION_RESTORE_DEFAULT_FOCUS:
+                View root = getRootView();
+
+                // If there is a view focused by default and it can take focus, move focus to it.
+                View defaultFocus = ViewUtils.findFocusedByDefaultView(root);
+                if (defaultFocus != null) {
+                    return defaultFocus.requestFocus();
+                }
+
+                // If there is a primary focus view, move focus to it.
+                View primaryFocus = ViewUtils.findPrimaryFocusView(root);
+                if (primaryFocus != null) {
+                    return primaryFocus.requestFocus();
+                }
+
+                return false;
+            case ACTION_HIDE_IME:
+                InputMethodManager inputMethodManager =
+                        getContext().getSystemService(InputMethodManager.class);
+                return inputMethodManager.hideSoftInputFromWindow(getWindowToken(),
+                        /* flags= */ 0);
+            case ACTION_FOCUS:
+                // Don't leave this to View to handle as it will exit touch mode.
+                if (!hasFocus()) {
+                    return requestFocus();
+                }
+                break;
         }
         return super.performAccessibilityAction(action, arguments);
     }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+
+        // If there is a FocusParkingView already, make the one after in the view tree
+        // non-focusable.
+        boolean []isBefore = new boolean[1];
+        View anotherFpv = ViewUtils.depthFirstSearch(getRootView(), v -> {
+            if (this == v) {
+                isBefore[0] = true;
+            }
+            return v != this && v instanceof FocusParkingView && v.isFocusable();
+        });
+        if (anotherFpv != null) {
+            Log.w(TAG, "There should be only one FocusParkingView in the window");
+            if (isBefore[0]) {
+                anotherFpv.setFocusable(false);
+            } else {
+                setFocusable(false);
+            }
+        }
+    }
 }
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/RotaryCache.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/RotaryCache.java
new file mode 100644
index 0000000..18f9fb0
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/RotaryCache.java
@@ -0,0 +1,218 @@
+/*
+ * 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;
+
+import android.os.SystemClock;
+import android.view.View;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.HashMap;
+
+/**
+ * Cache used by {@link FocusArea} to save focus history and nudge history of the rotary controller.
+ */
+class RotaryCache {
+    /** The cache is disabled. */
+    @VisibleForTesting
+    static final int CACHE_TYPE_DISABLED = 1;
+    /** Entries in the cache will expire after a period of time. */
+    @VisibleForTesting
+    static final int CACHE_TYPE_EXPIRED_AFTER_SOME_TIME = 2;
+    /** Entries in the cache will never expire. */
+    @VisibleForTesting
+    static final int CACHE_TYPE_NEVER_EXPIRE = 3;
+
+    @IntDef(flag = true, value = {
+            CACHE_TYPE_DISABLED, CACHE_TYPE_EXPIRED_AFTER_SOME_TIME, CACHE_TYPE_NEVER_EXPIRE})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface CacheType {
+    }
+
+    /** Cache of focused view. */
+    @NonNull
+    private final FocusCache mFocusCache;
+
+    /** Cache of FocusAreas that were nudged to. */
+    @NonNull
+    private final FocusAreaCache mFocusAreaCache;
+
+    /** A record of when a View was focused. */
+    private static class FocusHistory {
+        /** The focused view. */
+        final View mFocusedView;
+        /** The {@link SystemClock#uptimeMillis} when this history was recorded. */
+        final long mTimestamp;
+
+        FocusHistory(@NonNull View focusedView, long timestamp) {
+            mFocusedView = focusedView;
+            mTimestamp = timestamp;
+        }
+    }
+
+    /** Cache of focused view. */
+    private static class FocusCache {
+        /** The cache type. */
+        @CacheType
+        final int mCacheType;
+        /** How many milliseconds before the entry in the cache expires. */
+        long mExpirationPeriodMs;
+        /** The record of focused view. */
+        @NonNull
+        FocusHistory mFocusHistory;
+
+        FocusCache(@CacheType int cacheType, final long expirationPeriodMs) {
+            mCacheType = cacheType;
+            mExpirationPeriodMs = expirationPeriodMs;
+            if (mCacheType == CACHE_TYPE_EXPIRED_AFTER_SOME_TIME && mExpirationPeriodMs <= 0) {
+                throw new IllegalArgumentException(
+                        "Expiration time must be positive if CacheType is "
+                                + "CACHE_TYPE_EXPIRED_AFTER_SOME_TIME");
+            }
+        }
+
+        View getFocusedView(long elapsedRealtime) {
+            return isValidHistory(elapsedRealtime) ? mFocusHistory.mFocusedView : null;
+        }
+
+        void setFocusedView(@NonNull View focusedView, long elapsedRealtime) {
+            if (mCacheType == CACHE_TYPE_DISABLED) {
+                return;
+            }
+            mFocusHistory = new FocusHistory(focusedView, elapsedRealtime);
+        }
+
+        boolean isValidHistory(long elapsedRealtime) {
+            if (mFocusHistory == null) {
+                return false;
+            }
+            switch (mCacheType) {
+                case CACHE_TYPE_NEVER_EXPIRE:
+                    return true;
+                case CACHE_TYPE_EXPIRED_AFTER_SOME_TIME:
+                    return elapsedRealtime < mFocusHistory.mTimestamp + mExpirationPeriodMs;
+                default:
+                    return false;
+            }
+        }
+    }
+
+    /** A record of a FocusArea that was nudged to. */
+    private static class FocusAreaHistory {
+        /** The FocusArea that was nudged to. */
+        @NonNull
+        final FocusArea mFocusArea;
+        /** The {@link SystemClock#uptimeMillis} when this history was recorded. */
+        final long mTimestamp;
+
+        FocusAreaHistory(@NonNull FocusArea focusArea, long timestamp) {
+            mFocusArea = focusArea;
+            mTimestamp = timestamp;
+        }
+    }
+
+    /** Cache of FocusAreas that were nudged to. */
+    private static class FocusAreaCache extends HashMap<Integer, FocusAreaHistory> {
+        /** Type of the cache. */
+        @CacheType
+        private final int mCacheType;
+        /** How many milliseconds before an entry in the cache expires. */
+        private final int mExpirationPeriodMs;
+
+        FocusAreaCache(@CacheType int cacheType, int expirationPeriodMs) {
+            mCacheType = cacheType;
+            mExpirationPeriodMs = expirationPeriodMs;
+            if (mCacheType == CACHE_TYPE_EXPIRED_AFTER_SOME_TIME && mExpirationPeriodMs <= 0) {
+                throw new IllegalArgumentException(
+                        "Expiration time must be positive if CacheType is "
+                                + "CACHE_TYPE_EXPIRED_AFTER_SOME_TIME");
+            }
+        }
+
+        void put(int direction, @NonNull FocusArea targetFocusArea, long elapsedRealtime) {
+            if (mCacheType == CACHE_TYPE_DISABLED) {
+                return;
+            }
+            put(direction, new FocusAreaHistory(targetFocusArea, elapsedRealtime));
+        }
+
+        FocusArea get(int direction, long elapsedRealtime) {
+            FocusAreaHistory history = get(direction);
+            return isValidHistory(history, elapsedRealtime) ? history.mFocusArea : null;
+        }
+
+        boolean isValidHistory(@Nullable FocusAreaHistory history, long elapsedRealtime) {
+            if (history == null) {
+                return false;
+            }
+            switch (mCacheType) {
+                case CACHE_TYPE_NEVER_EXPIRE:
+                    return true;
+                case CACHE_TYPE_EXPIRED_AFTER_SOME_TIME:
+                    return elapsedRealtime - history.mTimestamp < mExpirationPeriodMs;
+                default:
+                    return false;
+            }
+        }
+    }
+
+    RotaryCache(@CacheType int focusHistoryCacheType,
+            int focusHistoryExpirationPeriodMs,
+            @CacheType int focusAreaHistoryCacheType,
+            int focusAreaHistoryExpirationPeriodMs) {
+        mFocusCache = new FocusCache(focusHistoryCacheType, focusHistoryExpirationPeriodMs);
+        mFocusAreaCache = new FocusAreaCache(
+                focusAreaHistoryCacheType, focusAreaHistoryExpirationPeriodMs);
+    }
+
+    /**
+     * Searches the cache to find the last focused view of the FocusArea. Returns the view, or null
+     * if there is nothing in the cache, the cache is stale.
+     */
+    @Nullable
+    View getFocusedView(long elapsedRealtime) {
+        return mFocusCache.getFocusedView(elapsedRealtime);
+    }
+
+    /** Saves the focused view. */
+    void saveFocusedView(@NonNull View view, long elapsedRealtime) {
+        mFocusCache.setFocusedView(view, elapsedRealtime);
+    }
+
+    /**
+     * Searches the cache to find the target FocusArea for a nudge in a given {@code direction}.
+     * Returns the target FocusArea, or null if there is nothing in the cache, the cache is stale.
+     */
+    @Nullable
+    FocusArea getCachedFocusArea(int direction, long elapsedRealtime) {
+        return mFocusAreaCache.get(direction, elapsedRealtime);
+    }
+
+    /** Saves the FocusArea nudge history. */
+    void saveFocusArea(int direction, @NonNull FocusArea targetFocusArea, long elapsedRealtime) {
+        mFocusAreaCache.put(direction, targetFocusArea, elapsedRealtime);
+    }
+
+    /** Clears the FocusArea nudge history cache. */
+    void clearFocusAreaHistory() {
+        mFocusAreaCache.clear();
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/baselayout/ClickBlockingView.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/baselayout/ClickBlockingView.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/baselayout/ClickBlockingView.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/baselayout/ClickBlockingView.java
diff --git a/car-ui-lib/src/com/android/car/ui/baselayout/Insets.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/baselayout/Insets.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/baselayout/Insets.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/baselayout/Insets.java
diff --git a/car-ui-lib/src/com/android/car/ui/baselayout/InsetsChangedListener.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/baselayout/InsetsChangedListener.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/baselayout/InsetsChangedListener.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/baselayout/InsetsChangedListener.java
diff --git a/car-ui-lib/src/com/android/car/ui/core/BaseLayoutController.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/BaseLayoutController.java
similarity index 71%
rename from car-ui-lib/src/com/android/car/ui/core/BaseLayoutController.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/BaseLayoutController.java
index 153b4e6..1a8360e 100644
--- a/car-ui-lib/src/com/android/car/ui/core/BaseLayoutController.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/BaseLayoutController.java
@@ -15,6 +15,8 @@
  */
 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;
@@ -27,6 +29,7 @@
 import androidx.annotation.LayoutRes;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.core.util.Pair;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 
@@ -35,7 +38,6 @@
 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.Map;
 import java.util.WeakHashMap;
@@ -45,7 +47,7 @@
  * It also exposes a {@link ToolbarController} to access the toolbar. This may be null if
  * used with a base layout without a Toolbar.
  */
-class BaseLayoutController {
+public class BaseLayoutController {
 
     private static final Map<Activity, BaseLayoutController> sBaseLayoutMap = new WeakHashMap<>();
 
@@ -117,6 +119,30 @@
      */
     private void installBaseLayout(Activity activity) {
         boolean toolbarEnabled = getThemeBoolean(activity, R.attr.carUiToolbar);
+        Pair<ToolbarController, InsetsUpdater> results = installBaseLayoutAround(
+                activity,
+                requireViewByRefId(activity.getWindow().getDecorView(), android.R.id.content),
+                toolbarEnabled);
+
+        mToolbarController = results.first;
+        mInsetsUpdater = results.second;
+    }
+
+    /**
+     * Installs a base layout *around* the provided contentView.
+     *
+     * @param activity May be null. Used to dispatch inset changes to, if it implements
+     *                 {@link InsetsChangedListener}
+     * @param contentView The view to install the base layout around.
+     * @param toolbarEnabled If there should be a toolbar in the base layout.
+     * @return Both the {@link ToolbarController} and {@link InsetsUpdater} for the base layout.
+     *         The InsetsUpdater will never be null. The ToolbarController will be null if
+     *         {@code toolbarEnabled} was false.
+     */
+    public static Pair<ToolbarController, InsetsUpdater> installBaseLayoutAround(
+            @Nullable Activity activity,
+            @NonNull View contentView,
+            boolean toolbarEnabled) {
         boolean legacyToolbar = Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q;
         @LayoutRes final int baseLayoutRes;
 
@@ -128,33 +154,35 @@
             baseLayoutRes = R.layout.car_ui_base_layout;
         }
 
-        View baseLayout = LayoutInflater.from(activity)
+        View baseLayout = LayoutInflater.from(contentView.getContext())
                 .inflate(baseLayoutRes, null, false);
 
-        // Replace windowContentView with baseLayout
-        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());
+        // Replace the app's content view with a base layout
+        ViewGroup contentViewParent = (ViewGroup) contentView.getParent();
+        int contentIndex = contentViewParent.indexOfChild(contentView);
+        contentViewParent.removeView(contentView);
+        contentViewParent.addView(baseLayout, contentIndex, contentView.getLayoutParams());
 
-        // Add windowContentView to the baseLayout's content view
-        FrameLayout contentView = CarUiUtils.requireViewByRefId(baseLayout, R.id.content);
-        contentView.addView(windowContentView, new FrameLayout.LayoutParams(
+        // Add the app's content view to the baseLayout's content view container
+        FrameLayout contentViewContainer = requireViewByRefId(baseLayout,
+                R.id.car_ui_base_layout_content_container);
+        contentViewContainer.addView(contentView, new FrameLayout.LayoutParams(
                 ViewGroup.LayoutParams.MATCH_PARENT,
                 ViewGroup.LayoutParams.MATCH_PARENT));
 
+        ToolbarController toolbarController = null;
         if (toolbarEnabled) {
             if (legacyToolbar) {
-                mToolbarController = CarUiUtils.requireViewByRefId(baseLayout, R.id.car_ui_toolbar);
+                toolbarController = requireViewByRefId(baseLayout, R.id.car_ui_toolbar);
             } else {
-                mToolbarController = new ToolbarControllerImpl(baseLayout);
+                toolbarController = new ToolbarControllerImpl(baseLayout);
             }
         }
 
-        mInsetsUpdater = new InsetsUpdater(activity, baseLayout, windowContentView);
-        mInsetsUpdater.installListeners();
+        InsetsUpdater insetsUpdater = new InsetsUpdater(activity, baseLayout, contentView);
+        insetsUpdater.installListeners();
+
+        return Pair.create(toolbarController, insetsUpdater);
     }
 
     /**
@@ -180,7 +208,7 @@
      * none of the Activity/Fragments implement {@link InsetsChangedListener}, it will set
      * padding on the content view equal to the insets.
      */
-    private static class InsetsUpdater implements ViewTreeObserver.OnGlobalLayoutListener {
+    public static final class InsetsUpdater implements ViewTreeObserver.OnGlobalLayoutListener {
         // These tags mark views that should overlay the content view in the base layout.
         // OEMs should add them to views in their base layout, ie: android:tag="car_ui_left_inset"
         // Apps will then be able to draw under these views, but will be encouraged to not put
@@ -190,7 +218,10 @@
         private static final String TOP_INSET_TAG = "car_ui_top_inset";
         private static final String BOTTOM_INSET_TAG = "car_ui_bottom_inset";
 
+        @Nullable
         private final Activity mActivity;
+        private final View mContentView;
+        private final View mContentViewContainer; // Equivalent to mContentView except in Media
         private final View mLeftInsetView;
         private final View mRightInsetView;
         private final View mTopInsetView;
@@ -204,12 +235,19 @@
         /**
          * Constructs an InsetsUpdater that calculates and dispatches insets to an {@link Activity}.
          *
-         * @param activity    The activity that is using base layouts
+         * @param activity    The activity that is using base layouts. Used to dispatch insets to if
+         *                    it implements {@link InsetsChangedListener}
          * @param baseLayout  The root view of the base layout
          * @param contentView The android.R.id.content View
          */
-        InsetsUpdater(Activity activity, View baseLayout, View contentView) {
+        public InsetsUpdater(
+                @Nullable Activity activity,
+                @NonNull View baseLayout,
+                @NonNull View contentView) {
             mActivity = activity;
+            mContentView = contentView;
+            mContentViewContainer = requireViewByRefId(baseLayout,
+                    R.id.car_ui_base_layout_content_container);
 
             mLeftInsetView = baseLayout.findViewWithTag(LEFT_INSET_TAG);
             mRightInsetView = baseLayout.findViewWithTag(RIGHT_INSET_TAG);
@@ -238,16 +276,17 @@
                 mBottomInsetView.addOnLayoutChangeListener(layoutChangeListener);
             }
             contentView.addOnLayoutChangeListener(layoutChangeListener);
+            mContentViewContainer.addOnLayoutChangeListener(layoutChangeListener);
         }
 
         /**
          * Install a global layout listener, during which the insets will be recalculated and
          * dispatched.
          */
-        void installListeners() {
+        public void installListeners() {
             // The global layout listener will run after all the individual layout change listeners
             // so that we only updateInsets once per layout, even if multiple inset views changed
-            mActivity.getWindow().getDecorView().getViewTreeObserver()
+            mContentView.getRootView().getViewTreeObserver()
                     .addOnGlobalLayoutListener(this);
         }
 
@@ -269,25 +308,34 @@
                 return;
             }
 
-            View content = CarUiUtils.requireViewByRefId(mActivity.getWindow().getDecorView(),
-                    android.R.id.content);
-
             // Calculate how much each inset view overlays the content view
-            int top = 0;
-            int left = 0;
-            int right = 0;
-            int bottom = 0;
+
+            // These initial values are for Media Center's implementation of base layouts.
+            // They should evaluate to 0 in all other apps, because the content view and content
+            // view container have the same size and position there.
+            int top = Math.max(0,
+                    getTopOfView(mContentViewContainer) - getTopOfView(mContentView));
+            int left = Math.max(0,
+                    getLeftOfView(mContentViewContainer) - getLeftOfView(mContentView));
+            int right = Math.max(0,
+                    getRightOfView(mContentView) - getRightOfView(mContentViewContainer));
+            int bottom = Math.max(0,
+                    getBottomOfView(mContentView) - getBottomOfView(mContentViewContainer));
             if (mTopInsetView != null) {
-                top = Math.max(0, getBottomOfView(mTopInsetView) - getTopOfView(content));
+                top += Math.max(0,
+                        getBottomOfView(mTopInsetView) - getTopOfView(mContentViewContainer));
             }
             if (mBottomInsetView != null) {
-                bottom = Math.max(0, getBottomOfView(content) - getTopOfView(mBottomInsetView));
+                bottom += Math.max(0,
+                        getBottomOfView(mContentViewContainer) - getTopOfView(mBottomInsetView));
             }
             if (mLeftInsetView != null) {
-                left = Math.max(0, getRightOfView(mLeftInsetView) - getLeftOfView(content));
+                left += Math.max(0,
+                        getRightOfView(mLeftInsetView) - getLeftOfView(mContentViewContainer));
             }
             if (mRightInsetView != null) {
-                right = Math.max(0, getRightOfView(content) - getLeftOfView(mRightInsetView));
+                right += Math.max(0,
+                        getRightOfView(mContentViewContainer) - getLeftOfView(mRightInsetView));
             }
             Insets insets = new Insets(left, top, right, bottom);
 
@@ -299,7 +347,8 @@
         }
 
         /**
-         * Dispatch the new {@link Insets} to the {@link Activity} and all of its
+         * Dispatch the new {@link Insets} to the {@link InsetsChangedListener} IIF there is one,
+         * otherwise dispatch the new {@link Insets} to the {@link Activity} and all of its
          * {@link Fragment Fragments}. If none of those implement {@link InsetsChangedListener},
          * we will set the value of the insets as padding on the content view.
          *
@@ -333,8 +382,7 @@
             }
 
             if (!handled) {
-                CarUiUtils.requireViewByRefId(mActivity.getWindow().getDecorView(),
-                        android.R.id.content).setPadding(insets.getLeft(), insets.getTop(),
+                mContentView.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/car-ui-lib/src/main/java/com/android/car/ui/core/CarUi.java
similarity index 78%
rename from car-ui-lib/src/com/android/car/ui/core/CarUi.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CarUi.java
index ad67121..a645b98 100644
--- a/car-ui-lib/src/com/android/car/ui/core/CarUi.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CarUi.java
@@ -16,15 +16,19 @@
 package com.android.car.ui.core;
 
 import android.app.Activity;
+import android.view.View;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.core.util.Pair;
 
 import com.android.car.ui.baselayout.Insets;
 import com.android.car.ui.baselayout.InsetsChangedListener;
+import com.android.car.ui.core.BaseLayoutController.InsetsUpdater;
 import com.android.car.ui.toolbar.ToolbarController;
 
 import java.lang.reflect.Method;
+import java.util.Objects;
 
 /**
  * Public interface for general CarUi static functions.
@@ -119,6 +123,34 @@
         return result;
     }
 
+    /**
+     * Most apps should not use this method, but instead rely on CarUi automatically
+     * installing the base layout into their activities. See {@link #requireToolbar(Activity)}.
+     *
+     * This method installs the base layout *around* the provided view. As a result, this view
+     * must have a parent ViewGroup.
+     *
+     * When using this method, you can't use the other activity-based methods.
+     * ({@link #requireToolbar(Activity)}, {@link #requireInsets(Activity)}, ect.)
+     *
+     * @param view The view to wrap inside a base layout.
+     * @param hasToolbar if there should be a toolbar in the base layout.
+     * @return The {@link ToolbarController}, which will be null if hasToolbar is false.
+     */
+    @Nullable
+    public static ToolbarController installBaseLayoutAround(
+            View view,
+            InsetsChangedListener insetsChangedListener,
+            boolean hasToolbar) {
+        Pair<ToolbarController, InsetsUpdater> results =
+                BaseLayoutController.installBaseLayoutAround(null, view, hasToolbar);
+
+        Objects.requireNonNull(results.second)
+                .replaceInsetsChangedListenerWith(insetsChangedListener);
+
+        return results.first;
+    }
+
     /* package */ static BaseLayoutController getBaseLayoutController(Activity activity) {
         if (activity.getClassLoader().equals(CarUi.class.getClassLoader())) {
             return BaseLayoutController.getBaseLayout(activity);
@@ -127,7 +159,7 @@
             // The usage of the alternate classloader is to accommodate GMSCore.
             // Some activities are loaded dynamically from external modules.
             try {
-                Class baseLayoutControllerClass = activity.getClassLoader()
+                Class<?> baseLayoutControllerClass = activity.getClassLoader()
                         .loadClass(BaseLayoutController.class.getName());
                 Method method = baseLayoutControllerClass
                         .getDeclaredMethod("getBaseLayout", Activity.class);
diff --git a/car-ui-lib/src/com/android/car/ui/core/CarUiInstaller.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CarUiInstaller.java
similarity index 99%
rename from car-ui-lib/src/com/android/car/ui/core/CarUiInstaller.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CarUiInstaller.java
index e845979..4693b18 100644
--- a/car-ui-lib/src/com/android/car/ui/core/CarUiInstaller.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CarUiInstaller.java
@@ -183,7 +183,7 @@
         // The usage of the alternate classloader is to accommodate GMSCore.
         // Some activities are loaded dynamically from external modules.
         try {
-            Class baseLayoutControllerClass =
+            Class<?> baseLayoutControllerClass =
                     activity.getClassLoader()
                             .loadClass(BaseLayoutController.class.getName());
             Method method = baseLayoutControllerClass
diff --git a/car-ui-lib/src/com/android/car/ui/core/CheckCarUiComponents.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CheckCarUiComponents.java
similarity index 70%
rename from car-ui-lib/src/com/android/car/ui/core/CheckCarUiComponents.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CheckCarUiComponents.java
index b4fd358..bd8462d 100644
--- a/car-ui-lib/src/com/android/car/ui/core/CheckCarUiComponents.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/core/CheckCarUiComponents.java
@@ -23,6 +23,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
+import android.os.Handler;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
@@ -30,6 +31,7 @@
 
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.android.car.ui.R;
 import com.android.car.ui.utils.CarUiUtils;
 
 /**
@@ -39,45 +41,29 @@
  * To check if the activity is using the CarUI components properly, navigate to the activity and
  * run: adb shell am broadcast -a com.android.car.ui.intent.CHECK_CAR_UI_COMPONENTS. Filter
  * the logs with "CheckCarUiComponents". This is ONLY available for debug and eng builds.
+ *
+ * Other than using the adb command you can also set a boolean resource
+ * "car_ui_escrow_check_components_automatically" to true. This will generate the logs 2 seconds
+ * after launching any activity.
  */
 class CheckCarUiComponents implements Application.ActivityLifecycleCallbacks {
     private static final String TAG = CheckCarUiComponents.class.getSimpleName();
     private static final String INTENT_FILTER = "com.android.car.ui.intent.CHECK_CAR_UI_COMPONENTS";
+    private static final String NO_CAR_UI_RV = "CarUiRecyclerView not used:";
+    private static final String NO_CAR_UI_TOOLBAR = "CarUiToolbar is not used: ";
+    private static final String NO_CAR_UI_TOOLBAR_BL = "CarUiBaseLayoutToolbar is not used: ";
+    private static final String NO_CAR_UI_PREFERENCE = "CarUiPreference is not used: ";
+    private static final String NO_LIST_ITEM =
+            "CarUiListItem are not used within CarUiRecyclerView: ";
     private View mRootView;
     private boolean mIsScreenVisible;
 
+    private Handler mHandler = new Handler();
+
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            if (!mIsScreenVisible) {
-                return;
-            }
-
-            CarUiComponents carUiComponents = new CarUiComponents();
-            checkForCarUiComponents(mRootView, carUiComponents);
-            if (carUiComponents.mIsUsingCarUiRecyclerView
-                    && !carUiComponents.mIsCarUiRecyclerViewUsingListItem) {
-                Log.e(TAG, "CarUiListItem are not used within CarUiRecyclerView: ");
-                showToast(context, "CarUiListItem are not used within CarUiRecyclerView");
-            }
-            if (carUiComponents.mIsUsingAndroidXRecyclerView) {
-                Log.e(TAG, "CarUiRecyclerView not used: ");
-                showToast(context, "CarUiRecycler is not used");
-            }
-            if (!carUiComponents.mIsUsingCarUiToolbar) {
-                Log.e(TAG, "CarUiToolbar is not used: ");
-                showToast(context, "CarUiToolbar is not used");
-            }
-            if (!carUiComponents.mIsUsingCarUiBaseLayoutToolbar
-                    && carUiComponents.mIsUsingCarUiToolbar) {
-                Log.e(TAG, "CarUiBaseLayoutToolbar is not used: ");
-                showToast(context, "CarUiBaseLayoutToolbar is not used");
-            }
-            if (carUiComponents.mIsUsingCarUiRecyclerViewForPreference
-                    && !carUiComponents.mIsUsingCarUiPreference) {
-                Log.e(TAG, "CarUiPreference is not used: ");
-                showToast(context, "CarUiPreference is not used");
-            }
+            checkForComponents(context, true);
         }
     };
 
@@ -97,8 +83,17 @@
 
     @Override
     public void onActivityResumed(Activity activity) {
+    }
+
+    @Override
+    public void onActivityPostResumed(Activity activity) {
         mRootView = activity.getWindow().getDecorView().getRootView();
         mIsScreenVisible = true;
+        if (checkComponentsForAllActivities(activity)) {
+            // post a message after 2 seconds delay. This is an arbitrary number so that activity
+            // is ready with all its views rendered by this time.
+            mHandler.postDelayed(() -> checkForComponents(activity, false), 2000);
+        }
     }
 
     @Override
@@ -108,6 +103,7 @@
 
     @Override
     public void onActivityStopped(Activity activity) {
+        mHandler.removeCallbacksAndMessages(null);
     }
 
     @Override
@@ -122,6 +118,43 @@
         }
     }
 
+    private boolean checkComponentsForAllActivities(Context context) {
+        return context.getResources().getBoolean(
+                R.bool.car_ui_escrow_check_components_automatically);
+    }
+
+    private void checkForComponents(Context context, boolean showToast) {
+        if (!mIsScreenVisible) {
+            return;
+        }
+
+        CarUiComponents carUiComponents = new CarUiComponents();
+        checkForCarUiComponents(mRootView, carUiComponents);
+        if (carUiComponents.mIsUsingCarUiRecyclerView
+                && !carUiComponents.mIsCarUiRecyclerViewUsingListItem) {
+            Log.d(TAG, NO_LIST_ITEM);
+            mayShowToast(context, NO_LIST_ITEM, showToast);
+        }
+        if (carUiComponents.mIsUsingAndroidXRecyclerView) {
+            Log.d(TAG, NO_CAR_UI_RV);
+            mayShowToast(context, NO_CAR_UI_RV, showToast);
+        }
+        if (!carUiComponents.mIsUsingCarUiToolbar) {
+            Log.d(TAG, NO_CAR_UI_TOOLBAR);
+            mayShowToast(context, NO_CAR_UI_TOOLBAR, showToast);
+        }
+        if (!carUiComponents.mIsUsingCarUiBaseLayoutToolbar
+                && carUiComponents.mIsUsingCarUiToolbar) {
+            Log.d(TAG, NO_CAR_UI_TOOLBAR_BL);
+            mayShowToast(context, NO_CAR_UI_TOOLBAR_BL, showToast);
+        }
+        if (carUiComponents.mIsUsingCarUiRecyclerViewForPreference
+                && !carUiComponents.mIsUsingCarUiPreference) {
+            Log.d(TAG, NO_CAR_UI_PREFERENCE);
+            mayShowToast(context, NO_CAR_UI_PREFERENCE, showToast);
+        }
+    }
+
     private void checkForCarUiComponents(View v, CarUiComponents carUiComponents) {
         viewHasChildMatching(v, view -> {
             if (isCarUiRecyclerView(view)) {
@@ -194,7 +227,10 @@
         return view.getClass() == RecyclerView.class;
     }
 
-    private static void showToast(Context context, String message) {
+    private static void mayShowToast(Context context, String message, boolean show) {
+        if (!show) {
+            return;
+        }
         Toast.makeText(context, message, Toast.LENGTH_LONG).show();
     }
 
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiDialogFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiDialogFragment.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiDialogFragment.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiDialogFragment.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiDropDownPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiDropDownPreference.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiDropDownPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiDropDownPreference.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiEditTextPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiEditTextPreference.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiEditTextPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiEditTextPreference.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiListPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiListPreference.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiListPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiListPreference.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiMultiSelectListPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiMultiSelectListPreference.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiMultiSelectListPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiMultiSelectListPreference.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiPreference.java
similarity index 93%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiPreference.java
index 111fbf5..8db5733 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/CarUiPreference.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiPreference.java
@@ -106,6 +106,16 @@
     }
 
     /**
+     * An exact copy of {@link androidx.preference.Preference#performClick(View)}
+     * This method was added here because super.performClick(View) is not open
+     * for app usage.
+     */
+    @SuppressWarnings("RestrictTo")
+    void performClickUnrestricted(View v) {
+        performClick();
+    }
+
+    /**
      * This is similar to {@link Preference#performClick()} with the only difference that we do not
      * return when view is not enabled.
      */
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiRadioButtonPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiRadioButtonPreference.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiRadioButtonPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiRadioButtonPreference.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiSeekBarDialogPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiSeekBarDialogPreference.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiSeekBarDialogPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiSeekBarDialogPreference.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiSwitchPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiSwitchPreference.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiSwitchPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiSwitchPreference.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/CarUiTwoActionPreference.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiTwoActionPreference.java
similarity index 85%
rename from car-ui-lib/src/com/android/car/ui/preference/CarUiTwoActionPreference.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiTwoActionPreference.java
index 3b9a583..3b9693a 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/CarUiTwoActionPreference.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/CarUiTwoActionPreference.java
@@ -88,14 +88,20 @@
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
+        View containerWithoutWidget = CarUiUtils.findViewByRefId(holder.itemView,
+                R.id.car_ui_preference_container_without_widget);
         View actionContainer = CarUiUtils.findViewByRefId(holder.itemView,
                 R.id.action_widget_container);
         View widgetFrame = CarUiUtils.findViewByRefId(holder.itemView, android.R.id.widget_frame);
+        holder.itemView.setFocusable(!mIsActionShown);
+        containerWithoutWidget.setOnClickListener(
+                mIsActionShown ? this::performClickUnrestricted : null);
+        containerWithoutWidget.setClickable(mIsActionShown);
+        containerWithoutWidget.setFocusable(mIsActionShown);
+        actionContainer.setVisibility(mIsActionShown ? View.VISIBLE : View.GONE);
+        widgetFrame.setFocusable(mIsActionShown);
         if (mIsActionShown) {
-            actionContainer.setVisibility(View.VISIBLE);
             onBindWidgetFrame(widgetFrame);
-        } else {
-            actionContainer.setVisibility(View.GONE);
         }
     }
 
diff --git a/car-ui-lib/src/com/android/car/ui/preference/DialogFragmentCallbacks.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/DialogFragmentCallbacks.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/DialogFragmentCallbacks.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/DialogFragmentCallbacks.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/DisabledPreferenceCallback.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/DisabledPreferenceCallback.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/DisabledPreferenceCallback.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/DisabledPreferenceCallback.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/ListPreferenceFragment.java
similarity index 97%
rename from car-ui-lib/src/com/android/car/ui/preference/ListPreferenceFragment.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/ListPreferenceFragment.java
index 348ec54..5a34dcd 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceFragment.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/ListPreferenceFragment.java
@@ -55,17 +55,6 @@
     private ListPreference mPreference;
     private CarUiContentListItem mSelectedItem;
     private int mSelectedIndex = -1;
-    private final Toolbar.OnBackListener mOnBackListener = () -> {
-        if (mSelectedIndex >= 0 && mPreference != null) {
-            String entryValue = mPreference.getEntryValues()[mSelectedIndex].toString();
-
-            if (mPreference.callChangeListener(entryValue)) {
-                mPreference.setValue(entryValue);
-            }
-        }
-
-        return false;
-    };
 
     /**
      * Returns a new instance of {@link ListPreferenceFragment} for the {@link ListPreference} with
@@ -166,7 +155,6 @@
     @Override
     public void onStart() {
         super.onStart();
-        mToolbar.registerOnBackListener(mOnBackListener);
         Insets insets = CarUi.getInsets(getActivity());
         if (insets != null) {
             onCarUiInsetsChanged(insets);
@@ -176,7 +164,17 @@
     @Override
     public void onStop() {
         super.onStop();
-        mToolbar.unregisterOnBackListener(mOnBackListener);
+        updatePreference();
+    }
+
+    private void updatePreference() {
+        if (mSelectedIndex >= 0 && mPreference != null) {
+            String entryValue = mPreference.getEntryValues()[mSelectedIndex].toString();
+
+            if (mPreference.callChangeListener(entryValue)) {
+                mPreference.setValue(entryValue);
+            }
+        }
     }
 
     private ListPreference getListPreference() {
diff --git a/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
similarity index 96%
rename from car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
index 1d4a3a2..44c5f43 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/MultiSelectListPreferenceFragment.java
@@ -55,13 +55,6 @@
     private CarUiMultiSelectListPreference mPreference;
     private Set<String> mNewValues;
     private ToolbarController mToolbar;
-    private final Toolbar.OnBackListener mOnBackListener = () -> {
-        if (mPreference.callChangeListener(mNewValues)) {
-            mPreference.setValues(mNewValues);
-        }
-
-        return false;
-    };
 
     /**
      * Returns a new instance of {@link MultiSelectListPreferenceFragment} for the {@link
@@ -161,7 +154,6 @@
     @Override
     public void onStart() {
         super.onStart();
-        mToolbar.registerOnBackListener(mOnBackListener);
         Insets insets = CarUi.getInsets(getActivity());
         if (insets != null) {
             onCarUiInsetsChanged(insets);
@@ -171,7 +163,13 @@
     @Override
     public void onStop() {
         super.onStop();
-        mToolbar.unregisterOnBackListener(mOnBackListener);
+        updatePreference();
+    }
+
+    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/PreferenceDialogFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceDialogFragment.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/PreferenceDialogFragment.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceDialogFragment.java
diff --git a/car-ui-lib/src/com/android/car/ui/preference/PreferenceFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceFragment.java
similarity index 93%
rename from car-ui-lib/src/com/android/car/ui/preference/PreferenceFragment.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceFragment.java
index 8b66b8e..fbd6856 100644
--- a/car-ui-lib/src/com/android/car/ui/preference/PreferenceFragment.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/PreferenceFragment.java
@@ -37,8 +37,10 @@
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceScreen;
 import androidx.preference.SwitchPreference;
+import androidx.preference.TwoStatePreference;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.android.car.ui.FocusArea;
 import com.android.car.ui.R;
 import com.android.car.ui.baselayout.Insets;
 import com.android.car.ui.baselayout.InsetsChangedListener;
@@ -98,6 +100,9 @@
             int oldHeight = recyclerView.getPaddingTop();
             recyclerView.setPadding(0, newHeight, 0, 0);
             recyclerView.scrollBy(0, oldHeight - newHeight);
+
+            FocusArea focusArea = CarUiUtils.requireViewByRefId(view, R.id.car_ui_focus_area);
+            focusArea.setHighlightPadding(0, newHeight, 0, 0);
         });
 
         recyclerView.setClipToPadding(false);
@@ -118,6 +123,8 @@
     @Override
     public void onCarUiInsetsChanged(@NonNull Insets insets) {
         View view = requireView();
+        FocusArea focusArea = CarUiUtils.requireViewByRefId(view, R.id.car_ui_focus_area);
+        focusArea.setHighlightPadding(0, insets.getTop(), 0, insets.getBottom());
         CarUiUtils.requireViewByRefId(view, R.id.recycler_view)
                 .setPadding(0, insets.getTop(), 0, insets.getBottom());
         view.setPadding(insets.getLeft(), 0, insets.getRight(), 0);
@@ -360,6 +367,18 @@
             toMulti.setEntries(fromMulti.getEntries());
             toMulti.setEntryValues(fromMulti.getEntryValues());
             toMulti.setValues(fromMulti.getValues());
+        } else if (from instanceof TwoStatePreference) {
+            TwoStatePreference fromTwoState = (TwoStatePreference) from;
+            TwoStatePreference toTwoState = (TwoStatePreference) to;
+            toTwoState.setSummaryOn(fromTwoState.getSummaryOn());
+            toTwoState.setSummaryOff(fromTwoState.getSummaryOff());
+
+            if (from instanceof SwitchPreference) {
+                SwitchPreference fromSwitch = (SwitchPreference) from;
+                SwitchPreference toSwitch = (SwitchPreference) to;
+                toSwitch.setSwitchTextOn(fromSwitch.getSwitchTextOn());
+                toSwitch.setSwitchTextOff(fromSwitch.getSwitchTextOff());
+            }
         }
 
         // We don't need to add checks for things that we will never replace,
diff --git a/car-ui-lib/src/com/android/car/ui/preference/SeekbarPreferenceDialogFragment.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/SeekbarPreferenceDialogFragment.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/preference/SeekbarPreferenceDialogFragment.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/preference/SeekbarPreferenceDialogFragment.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiCheckBoxListItem.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiCheckBoxListItem.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiCheckBoxListItem.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiCheckBoxListItem.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiContentListItem.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiContentListItem.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiContentListItem.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiContentListItem.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiHeaderListItem.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiHeaderListItem.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiHeaderListItem.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiHeaderListItem.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiListItem.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiListItem.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiListItem.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiListItem.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiListItemAdapter.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiListItemAdapter.java
similarity index 98%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiListItemAdapter.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiListItemAdapter.java
index eac856a..8bc39eb 100644
--- a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiListItemAdapter.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiListItemAdapter.java
@@ -309,10 +309,8 @@
                         mActionContainerTouchInterceptor.setOnClickListener(
                                 (container) -> {
                                     if (item.getSupplementalIconOnClickListener() != null) {
-                                        item.getSupplementalIconOnClickListener().onClick(mIcon);
-                                    }
-                                    if (itemOnClickListener != null) {
-                                        itemOnClickListener.onClick(item);
+                                        item.getSupplementalIconOnClickListener().onClick(
+                                                mSupplementalIcon);
                                     }
                                 });
                         mTouchInterceptor.setVisibility(View.GONE);
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRadioButtonListItem.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRadioButtonListItem.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRadioButtonListItem.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRadioButtonListItem.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRadioButtonListItemAdapter.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRadioButtonListItemAdapter.java
similarity index 96%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRadioButtonListItemAdapter.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRadioButtonListItemAdapter.java
index 9485678..80d763e 100644
--- a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRadioButtonListItemAdapter.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRadioButtonListItemAdapter.java
@@ -106,6 +106,13 @@
         }
     }
 
+    /*
+     * @return the position of the currently selected item, -1 if no item is selected.
+     */
+    public int getSelectedItemPosition() {
+        return mSelectedIndex;
+    }
+
     static class RadioButtonListItemViewHolder extends ListItemViewHolder {
         /**
          * Callback to be invoked when the checked state of a {@link RadioButtonListItemViewHolder}
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerView.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerView.java
similarity index 85%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerView.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerView.java
index 8f2cb7d..627ab95 100644
--- a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerView.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerView.java
@@ -36,6 +36,7 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 
@@ -52,7 +53,6 @@
 import com.android.car.ui.recyclerview.decorations.linear.LinearDividerItemDecoration;
 import com.android.car.ui.recyclerview.decorations.linear.LinearOffsetItemDecoration;
 import com.android.car.ui.recyclerview.decorations.linear.LinearOffsetItemDecoration.OffsetPosition;
-import com.android.car.ui.toolbar.Toolbar;
 import com.android.car.ui.utils.CarUxRestrictionsUtil;
 
 import java.lang.annotation.Retention;
@@ -63,8 +63,7 @@
  * 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 {
+public final class CarUiRecyclerView extends RecyclerView {
 
     private static final String TAG = "CarUiRecyclerView";
 
@@ -82,10 +81,15 @@
 
     @Nullable
     private ScrollBar mScrollBar;
-    private int mInitialTopPadding;
 
-    @Nullable
-    private GridOffsetItemDecoration mOffsetItemDecoration;
+    @NonNull
+    private GridOffsetItemDecoration mTopOffsetItemDecorationGrid;
+    @NonNull
+    private GridOffsetItemDecoration mBottomOffsetItemDecorationGrid;
+    @NonNull
+    private RecyclerView.ItemDecoration mTopOffsetItemDecorationLinear;
+    @NonNull
+    private RecyclerView.ItemDecoration mBottomOffsetItemDecorationLinear;
     @NonNull
     private GridDividerItemDecoration mDividerItemDecorationGrid;
     @NonNull
@@ -100,6 +104,21 @@
     @Nullable
     private LinearLayout mContainer;
 
+    private boolean mEnableDividers;
+    private int mTopOffset;
+    private int mBottomOffset;
+
+    private ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener = () -> {
+        if (!mHasScrolledToTop && getLayoutManager() != null) {
+            // Scroll to the top after the first global layout, so that
+            // we can set padding for the insets and still have the
+            // recyclerview start at the top.
+            new Handler(Objects.requireNonNull(Looper.myLooper())).post(() ->
+                    getLayoutManager().scrollToPosition(0));
+            mHasScrolledToTop = true;
+        }
+    };
+
 
     /**
      * The possible values for setScrollBarPosition. The default value is actually {@link
@@ -185,7 +204,7 @@
         @CarUiRecyclerViewLayout int carUiRecyclerViewLayout =
                 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);
 
         mDividerItemDecorationLinear = new LinearDividerItemDecoration(
@@ -197,44 +216,28 @@
                         context.getDrawable(R.drawable.car_ui_divider),
                         mNumOfColumns);
 
-        int topOffset = a.getInteger(R.styleable.CarUiRecyclerView_topOffset, /* defValue= */0);
-        int bottomOffset = a.getInteger(
+        mTopOffset = a.getInteger(R.styleable.CarUiRecyclerView_topOffset, /* defValue= */0);
+        mBottomOffset = a.getInteger(
                 R.styleable.CarUiRecyclerView_bottomOffset, /* defValue= */0);
+        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);
         if (carUiRecyclerViewLayout == CarUiRecyclerViewLayout.LINEAR) {
-
-            if (enableDivider) {
-                addItemDecoration(mDividerItemDecorationLinear);
-            }
-            RecyclerView.ItemDecoration topOffsetItemDecoration =
-                    new LinearOffsetItemDecoration(topOffset, OffsetPosition.START);
-
-            RecyclerView.ItemDecoration bottomOffsetItemDecoration =
-                    new LinearOffsetItemDecoration(bottomOffset, OffsetPosition.END);
-
-            addItemDecoration(topOffsetItemDecoration);
-            addItemDecoration(bottomOffsetItemDecoration);
             setLayoutManager(new LinearLayoutManager(getContext()));
         } else {
-
-            if (enableDivider) {
-                addItemDecoration(mDividerItemDecorationGrid);
-            }
-
-            mOffsetItemDecoration =
-                    new GridOffsetItemDecoration(topOffset, mNumOfColumns,
-                            OffsetPosition.START);
-
-            GridOffsetItemDecoration bottomOffsetItemDecoration =
-                    new GridOffsetItemDecoration(bottomOffset, mNumOfColumns,
-                            OffsetPosition.END);
-
-            addItemDecoration(mOffsetItemDecoration);
-            addItemDecoration(bottomOffsetItemDecoration);
             setLayoutManager(new GridLayoutManager(getContext(), mNumOfColumns));
-            setNumOfColumns(mNumOfColumns);
         }
 
         a.recycle();
+
+
         if (!mScrollBarEnabled) {
             return;
         }
@@ -243,21 +246,37 @@
         setHorizontalScrollBarEnabled(false);
 
         mScrollBarClass = context.getResources().getString(R.string.car_ui_scrollbar_component);
-        this.getViewTreeObserver()
-                .addOnGlobalLayoutListener(() -> {
-                    if (!mHasScrolledToTop && getLayoutManager() != null) {
-                        // Scroll to the top after the first global layout, so that
-                        // we can set padding for the insets and still have the
-                        // recyclerview start at the top.
-                        new Handler(Objects.requireNonNull(Looper.myLooper())).post(() ->
-                                getLayoutManager().scrollToPosition(0));
-                        mHasScrolledToTop = true;
-                    }
+    }
 
-                    if (mInitialTopPadding == 0) {
-                        mInitialTopPadding = getPaddingTop();
-                    }
-                });
+    @Override
+    public void setLayoutManager(@Nullable LayoutManager layout) {
+        addItemDecorations(layout);
+        super.setLayoutManager(layout);
+    }
+
+    private void addItemDecorations(LayoutManager layout) {
+        // remove existing Item decorations
+        removeItemDecoration(mDividerItemDecorationGrid);
+        removeItemDecoration(mTopOffsetItemDecorationGrid);
+        removeItemDecoration(mBottomOffsetItemDecorationGrid);
+        removeItemDecoration(mDividerItemDecorationLinear);
+        removeItemDecoration(mTopOffsetItemDecorationLinear);
+        removeItemDecoration(mBottomOffsetItemDecorationLinear);
+
+        if (layout instanceof GridLayoutManager) {
+            if (mEnableDividers) {
+                addItemDecoration(mDividerItemDecorationGrid);
+            }
+            addItemDecoration(mTopOffsetItemDecorationGrid);
+            addItemDecoration(mBottomOffsetItemDecorationGrid);
+            setNumOfColumns(((GridLayoutManager) layout).getSpanCount());
+        } else {
+            if (mEnableDividers) {
+                addItemDecoration(mDividerItemDecorationLinear);
+            }
+            addItemDecoration(mTopOffsetItemDecorationLinear);
+            addItemDecoration(mBottomOffsetItemDecorationLinear);
+        }
     }
 
     /**
@@ -324,19 +343,13 @@
         }
     }
 
-    @Override
-    public void onHeightChanged(int height) {
-        setPaddingRelative(getPaddingStart(), mInitialTopPadding + height,
-                getPaddingEnd(), getPaddingBottom());
-    }
-
     /**
      * Sets the number of columns in which grid needs to be divided.
      */
     public void setNumOfColumns(int numberOfColumns) {
         mNumOfColumns = numberOfColumns;
-        if (mOffsetItemDecoration != null) {
-            mOffsetItemDecoration.setNumOfColumns(mNumOfColumns);
+        if (mTopOffsetItemDecorationGrid != null) {
+            mTopOffsetItemDecorationGrid.setNumOfColumns(mNumOfColumns);
         }
         if (mDividerItemDecorationGrid != null) {
             mDividerItemDecorationGrid.setNumOfColumns(mNumOfColumns);
@@ -356,6 +369,7 @@
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
         mCarUxRestrictionsUtil.register(mListener);
+        this.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
         if (mInstallingExtScrollBar || !mScrollBarEnabled) {
             return;
         }
@@ -433,6 +447,7 @@
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
         mCarUxRestrictionsUtil.unregister(mListener);
+        this.getViewTreeObserver().removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
     }
 
     @Override
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapter.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapter.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapter.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapter.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerViewContainer.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerViewContainer.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiRecyclerViewContainer.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerViewContainer.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiSmoothScroller.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiSmoothScroller.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiSmoothScroller.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiSmoothScroller.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/CarUiSnapHelper.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiSnapHelper.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/CarUiSnapHelper.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiSnapHelper.java
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ContentLimiting.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ContentLimiting.java
new file mode 100644
index 0000000..29fb159
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ContentLimiting.java
@@ -0,0 +1,51 @@
+/*
+ * 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.recyclerview;
+
+import androidx.annotation.IdRes;
+import androidx.annotation.StringRes;
+
+/**
+ * An interface for {@link androidx.recyclerview.widget.RecyclerView.Adapter} objects whose
+ * content can be limited to a provided maximum number of items.
+ */
+public interface ContentLimiting {
+
+    /**
+     * A value that indicates there should be no limit.
+     */
+    int UNLIMITED = -1;
+
+    /**
+     * Sets the maximum number of items available in the adapter. Use {@link #UNLIMITED} if
+     * the list should not be capped.
+     */
+    void setMaxItems(int maxItems);
+
+    /**
+     * Sets the message to show in the UI when the list content length is capped.
+     */
+    void setScrollingLimitedMessageResId(@StringRes int resId);
+
+    /**
+     * Returns the resource ID of a string resource that can uniquely identify the list
+     * displayed via this adapter in the UI for the purposes of mapping UXR restriction
+     * customizations to it.
+     */
+    @IdRes
+    int getConfigurationId();
+}
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ContentLimitingAdapter.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ContentLimitingAdapter.java
new file mode 100644
index 0000000..a3114ab
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ContentLimitingAdapter.java
@@ -0,0 +1,322 @@
+/*
+ * 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.recyclerview;
+
+import android.util.Log;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * A {@link RecyclerView.Adapter} that can limit its content based on a given length limit which
+ * can change at run-time.
+ *
+ * @param <T> type of the {@link RecyclerView.ViewHolder} objects used by base classes.
+ */
+public abstract class ContentLimitingAdapter<T extends RecyclerView.ViewHolder>
+        extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ContentLimiting {
+    private static final String TAG = "ContentLimitingAdapter";
+
+    private static final int SCROLLING_LIMITED_MESSAGE_VIEW_TYPE = Integer.MAX_VALUE;
+
+    private Integer mScrollingLimitedMessageResId;
+    private RangeFilter mRangeFilter = new PassThroughFilter();
+    private RecyclerView mRecyclerView;
+    private boolean mIsLimiting = false;
+
+    /**
+     * Returns the viewType value to use for the scrolling limited message views.
+     *
+     * Override this method to provide your own alternative value if {@link Integer#MAX_VALUE} is
+     * a viewType value already in-use by your adapter.
+     */
+    public int getScrollingLimitedMessageViewType() {
+        return SCROLLING_LIMITED_MESSAGE_VIEW_TYPE;
+    }
+
+    @Override
+    @NonNull
+    public final RecyclerView.ViewHolder onCreateViewHolder(
+            @NonNull ViewGroup parent, int viewType) {
+        if (viewType == getScrollingLimitedMessageViewType()) {
+            return ScrollingLimitedViewHolder.create(parent);
+        }
+
+        return onCreateViewHolderImpl(parent, viewType);
+    }
+
+    /** See {@link RangeFilter#indexToPosition}. */
+    protected int indexToPosition(int index) {
+        return mRangeFilter.indexToPosition(index);
+    }
+
+    /** See {@link RangeFilter#positionToIndex}. */
+    protected int positionToIndex(int position) {
+        return mRangeFilter.positionToIndex(position);
+    }
+
+    /**
+     * Returns a {@link androidx.recyclerview.widget.RecyclerView.ViewHolder} of type {@code T}.
+     *
+     * <p>It is delegated to by {@link #onCreateViewHolder(ViewGroup, int)} to handle any
+     * {@code viewType}s other than the one corresponding to the "scrolling is limited" message.
+     */
+    protected abstract T onCreateViewHolderImpl(
+            @NonNull ViewGroup parent, int viewType);
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public final void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof ScrollingLimitedViewHolder) {
+            ScrollingLimitedViewHolder vh = (ScrollingLimitedViewHolder) holder;
+            vh.bind(mScrollingLimitedMessageResId);
+        } else {
+            int index = mRangeFilter.positionToIndex(position);
+            if (index != RangeFilterImpl.INVALID_INDEX) {
+                int size = getUnrestrictedItemCount();
+                if (0 <= index && index < size) {
+                    onBindViewHolderImpl((T) holder, index);
+                } else {
+                    Log.e(TAG, "onBindViewHolder pos: " + position + " gave index: "
+                            + index + " out of bounds size: " + size
+                            + " " + mRangeFilter.toString());
+                }
+            } else {
+                Log.e(TAG, "onBindViewHolder invalid position " + position
+                        + " " + mRangeFilter.toString());
+            }
+        }
+    }
+
+    /**
+     * Binds {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}s of type {@code T}.
+     *
+     * <p>It is delegated to by {@link #onBindViewHolder(RecyclerView.ViewHolder, int)} to handle
+     * holders that are not of type {@link ScrollingLimitedViewHolder}.
+     */
+    protected abstract void onBindViewHolderImpl(T holder, int position);
+
+    @Override
+    public final int getItemViewType(int position) {
+        if (mRangeFilter.positionToIndex(position) == RangeFilterImpl.INVALID_INDEX) {
+            return getScrollingLimitedMessageViewType();
+        } else {
+            return getItemViewTypeImpl(mRangeFilter.positionToIndex(position));
+        }
+    }
+
+    /**
+     * Returns the view type of the item at {@code position}.
+     *
+     * <p>Defaults to the implementation in {@link RecyclerView.Adapter#getItemViewType(int)}.
+     *
+     * <p>It is delegated to by {@link #getItemViewType(int)} for all positions other than the
+     * {@link #getScrollingLimitedMessagePosition()}.
+     */
+    protected int getItemViewTypeImpl(int position) {
+        return super.getItemViewType(position);
+    }
+
+    /**
+     * Returns the position where the "scrolling is limited" message should be placed.
+     *
+     * <p>The default implementation is to put this item at the very end of the limited list.
+     * Subclasses can override to choose a different position to suit their needs.
+     *
+     * @deprecated limiting message offset is not supported any more.
+     */
+    @Deprecated
+    protected int getScrollingLimitedMessagePosition() {
+        return getItemCount() - 1;
+    }
+
+    @Override
+    public final int getItemCount() {
+        if (mIsLimiting) {
+            return mRangeFilter.getFilteredCount();
+        } else {
+            return getUnrestrictedItemCount();
+        }
+    }
+
+    /**
+     * Returns the number of items in the unrestricted list being displayed via this adapter.
+     */
+    protected abstract int getUnrestrictedItemCount();
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public final void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
+        super.onViewRecycled(holder);
+
+        if (!(holder instanceof ScrollingLimitedViewHolder)) {
+            onViewRecycledImpl((T) holder);
+        }
+    }
+
+    /**
+     * Recycles {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}s of type {@code T}.
+     *
+     * <p>It is delegated to by {@link #onViewRecycled(RecyclerView.ViewHolder)} to handle
+     * holders that are not of type {@link ScrollingLimitedViewHolder}.
+     */
+    @SuppressWarnings("unused")
+    protected void onViewRecycledImpl(@NonNull T holder) {
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public final boolean onFailedToRecycleView(@NonNull RecyclerView.ViewHolder holder) {
+        if (!(holder instanceof ScrollingLimitedViewHolder)) {
+            return onFailedToRecycleViewImpl((T) holder);
+        }
+        return super.onFailedToRecycleView(holder);
+    }
+
+    /**
+     * Handles failed recycle attempts for
+     * {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}s of type {@code T}.
+     *
+     * <p>It is delegated to by {@link #onFailedToRecycleView(RecyclerView.ViewHolder)} for holders
+     * that are not of type {@link ScrollingLimitedViewHolder}.
+     */
+    protected boolean onFailedToRecycleViewImpl(@NonNull T holder) {
+        return super.onFailedToRecycleView(holder);
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public final void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {
+        super.onViewAttachedToWindow(holder);
+        if (!(holder instanceof ScrollingLimitedViewHolder)) {
+            onViewAttachedToWindowImpl((T) holder);
+        }
+    }
+
+    /**
+     * Handles attaching {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}s of type
+     * {@code T} to the application window.
+     *
+     * <p>It is delegated to by {@link #onViewAttachedToWindow(RecyclerView.ViewHolder)} for
+     * holders that are not of type {@link ScrollingLimitedViewHolder}.
+     */
+    @SuppressWarnings("unused")
+    protected void onViewAttachedToWindowImpl(@NonNull T holder) {
+    }
+
+    @Override
+    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
+        mRecyclerView = recyclerView;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public final void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) {
+        super.onViewDetachedFromWindow(holder);
+        if (!(holder instanceof ScrollingLimitedViewHolder)) {
+            onViewDetachedFromWindowImpl((T) holder);
+        }
+    }
+
+    /**
+     * Handles detaching {@link androidx.recyclerview.widget.RecyclerView.ViewHolder}s of type
+     * {@code T} from the application window.
+     *
+     * <p>It is delegated to by {@link #onViewDetachedFromWindow(RecyclerView.ViewHolder)} for
+     * holders that are not of type {@link ScrollingLimitedViewHolder}.
+     */
+    @SuppressWarnings("unused")
+    protected void onViewDetachedFromWindowImpl(@NonNull T holder) {
+    }
+
+    @Override
+    public void setMaxItems(int maxItems) {
+        if (maxItems >= 0) {
+            if (mRangeFilter != null && mIsLimiting) {
+                Log.w(TAG, "A new filter range received before parked");
+                // remove the original filter first.
+                mRangeFilter.removeFilter();
+            }
+            mIsLimiting = true;
+            mRangeFilter = new RangeFilterImpl(this, maxItems);
+            mRangeFilter.recompute(getUnrestrictedItemCount(), computeAnchorIndexWhenRestricting());
+            mRangeFilter.applyFilter();
+            autoScrollWhenRestricted();
+        } else {
+            mRangeFilter.removeFilter();
+
+            mIsLimiting = false;
+            mRangeFilter = new PassThroughFilter();
+            mRangeFilter.recompute(getUnrestrictedItemCount(), 0);
+        }
+    }
+
+    /**
+     * Returns the position in the truncated list to scroll to when the list is limited.
+     *
+     * Returns -1 to disable the scrolling.
+     */
+    protected int getScrollToPositionWhenRestricted() {
+        return -1;
+    }
+
+    private void autoScrollWhenRestricted() {
+        int scrollToPosition = getScrollToPositionWhenRestricted();
+        if (scrollToPosition >= 0) {
+            RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
+            if (layoutManager != null) {
+                mRecyclerView.getLayoutManager().scrollToPosition(scrollToPosition);
+            }
+        }
+    }
+
+    /**
+     * Computes the anchor point index in the original list when limiting starts.
+     * Returns position 0 by default.
+     *
+     * Override this function to return a different anchor point to control the position of the
+     * limiting window.
+     */
+    protected int computeAnchorIndexWhenRestricting() {
+        return 0;
+    }
+
+    /**
+     * Updates the changes from underlying data along with a new anchor.
+     */
+    public void updateUnderlyingDataChanged(int unrestrictedCount, int newAnchorIndex) {
+        mRangeFilter.recompute(unrestrictedCount, newAnchorIndex);
+    }
+
+    /**
+     * Changes the index where the limiting range surrounds. Items that are added and removed will
+     * be notified.
+     */
+    public void notifyLimitingAnchorChanged(int newPivotIndex) {
+        mRangeFilter.notifyPivotIndexChanged(newPivotIndex);
+    }
+
+    @Override
+    public void setScrollingLimitedMessageResId(@StringRes int resId) {
+        if (mScrollingLimitedMessageResId == null || mScrollingLimitedMessageResId != resId) {
+            mScrollingLimitedMessageResId = resId;
+            mRangeFilter.invalidateMessagePositions();
+        }
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/DefaultScrollBar.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/DefaultScrollBar.java
similarity index 93%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/DefaultScrollBar.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/DefaultScrollBar.java
index a643f6d..b27aab0 100644
--- a/car-ui-lib/src/com/android/car/ui/recyclerview/DefaultScrollBar.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/DefaultScrollBar.java
@@ -40,6 +40,7 @@
  */
 class DefaultScrollBar implements ScrollBar {
 
+
     private float mButtonDisabledAlpha;
     private CarUiSnapHelper mSnapHelper;
 
@@ -48,6 +49,7 @@
     private View mScrollThumb;
     private View mUpButton;
     private View mDownButton;
+    private int mScrollbarThumbMinHeight;
 
     private RecyclerView mRecyclerView;
 
@@ -66,6 +68,8 @@
         Resources res = rv.getContext().getResources();
 
         mButtonDisabledAlpha = CarUiUtils.getFloat(res, R.dimen.car_ui_button_disabled_alpha);
+        mScrollbarThumbMinHeight = rv.getContext().getResources()
+                .getDimensionPixelSize(R.dimen.car_ui_scrollbar_min_thumb_height);
 
         getRecyclerView().addOnScrollListener(mRecyclerViewOnScrollListener);
         getRecyclerView().getRecycledViewPool().setMaxRecycledViews(0, 12);
@@ -159,7 +163,7 @@
      * The
      * values should also be positive.
      *
-     * @param range  The range of the scrollbar's thumb
+     * @param range The range of the scrollbar's thumb
      * @param offset The offset of the scrollbar's thumb
      * @param extent The extent of the scrollbar's thumb
      */
@@ -195,24 +199,23 @@
      * Calculates and returns how big the scroll bar thumb should be based on the given range and
      * extent.
      *
-     * @param range  The total amount of space the scroll bar is allowed to roam over.
+     * @param range The total amount of space the scroll bar is allowed to roam over.
      * @param extent The amount of space that the scroll bar takes up relative to the range.
      * @return The height of the scroll bar thumb in pixels.
      */
     private int calculateScrollThumbLength(int range, int extent) {
         // Scale the length by the available space that the thumb can fill.
-        return Math.round(((float) extent / range) * mScrollTrack.getHeight());
+        return Math.max(Math.round(((float) extent / range) * mScrollTrack.getHeight()),
+                mScrollbarThumbMinHeight);
     }
 
     /**
      * Calculates and returns how much the scroll thumb should be offset from the top of where it
-     * has
-     * been laid out.
+     * has been laid out.
      *
-     * @param range       The total amount of space the scroll bar is allowed to roam over.
-     * @param offset      The amount the scroll bar should be offset, expressed in the same units as
-     *                    the
-     *                    given range.
+     * @param range The total amount of space the scroll bar is allowed to roam over.
+     * @param offset The amount the scroll bar should be offset, expressed in the same units as
+     * the given range.
      * @param thumbLength The current length of the thumb in pixels.
      * @return The amount the thumb should be offset in pixels.
      */
@@ -223,7 +226,7 @@
         // the top of scrollbar track is.
         return mScrollTrack.getTop()
                 + (isDownEnabled()
-                ? Math.round(((float) offset / range) * mScrollTrack.getHeight())
+                ? Math.round(((float) offset / range) * (mScrollTrack.getHeight() - thumbLength))
                 : mScrollTrack.getHeight() - thumbLength);
     }
 
@@ -325,7 +328,8 @@
         View lastChild = getRecyclerView().getChildAt(getRecyclerView().getChildCount() - 1);
         if (getRecyclerView().getLayoutManager().isViewPartiallyVisible(lastChild,
                 /* completelyVisible= */ false, /* acceptEndPointInclusion= */ false)) {
-            scrollDistance = orientationHelper.getDecoratedStart(lastChild);
+            scrollDistance = orientationHelper.getDecoratedStart(lastChild)
+                    - orientationHelper.getStartAfterPadding();
             if (scrollDistance <= 0) {
                 // - Scroll value is zero if the top of last item is aligned with top of the screen;
                 // - Scroll value can be negative if the child is longer than the screen size and
@@ -344,9 +348,11 @@
              */
             View child = getRecyclerView().getChildAt(i);
             if (child.getHeight() > screenSize) {
-                if (orientationHelper.getDecoratedStart(child) > 0) {
+                if (orientationHelper.getDecoratedStart(child)
+                        - orientationHelper.getStartAfterPadding() > 0) {
                     // Child view top is entering screen. Align its top with parent top.
-                    scrollDistance = orientationHelper.getDecoratedStart(child);
+                    scrollDistance = orientationHelper.getDecoratedStart(lastChild)
+                            - orientationHelper.getStartAfterPadding();
                 } else if (screenSize < orientationHelper.getDecoratedEnd(child)
                         && orientationHelper.getDecoratedEnd(child) < 2 * screenSize) {
                     // Child view bottom is about to enter screen - its distance to parent bottom
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/DelegatingContentLimitingAdapter.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/DelegatingContentLimitingAdapter.java
new file mode 100644
index 0000000..c865b75
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/DelegatingContentLimitingAdapter.java
@@ -0,0 +1,249 @@
+/*
+ * 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.recyclerview;
+
+import android.view.ViewGroup;
+
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * A delegating implementation of {@link ContentLimiting} interface.
+ *
+ * <p>This class will provide content limiting capability to any {@link RecyclerView.Adapter} that
+ * is wrapped in it.
+ *
+ * @param <T> type of the {@link RecyclerView.ViewHolder} objects used by the delegate.
+ */
+public class DelegatingContentLimitingAdapter<T extends RecyclerView.ViewHolder>
+        extends ContentLimitingAdapter<T> {
+    private static final int SCROLLING_LIMITED_MESSAGE_VIEW_TYPE = Integer.MAX_VALUE;
+    private static final int SCROLLING_LIMITED_MESSAGE_DEFAULT_POSITION_OFFSET = -1;
+
+    private final RecyclerView.Adapter<T> mDelegate;
+    private final int mScrollingLimitedMessageViewType;
+    private final int mScrollingLimitedMessagePositionOffset;
+    @IdRes
+    private final int mConfigId;
+
+    /**
+     * Provides the abilities to delegate {@link ContentLimitingAdapter} callback functions.
+     */
+    public interface ContentLimiting {
+        /**
+         * @see ContentLimitingAdapter#getScrollToPositionWhenRestricted()
+         */
+        int getScrollToPositionWhenRestricted();
+
+        /**
+         * @see ContentLimitingAdapter#computeAnchorIndexWhenRestricting()
+         */
+        int computeAnchorIndexWhenRestricting();
+    }
+
+    /**
+     * Constructs a {@link DelegatingContentLimitingAdapter} that uses {@link Integer#MAX_VALUE}
+     * for the scrolling limited message viewType and positions it at the very bottom of the list
+     * being content limited.
+     *
+     * <p>Use {@link #DelegatingContentLimitingAdapter(RecyclerView.Adapter, int, int, int)} if you
+     * need to customize any of the two default values above.
+     *
+     * @param delegate - the {@link RecyclerView.Adapter} whose content needs to be limited.
+     * @param configId - an Id Resource that can be used to identify said adapter.
+     */
+    public DelegatingContentLimitingAdapter(
+            RecyclerView.Adapter<T> delegate,
+            @IdRes int configId) {
+        this(delegate,
+                configId,
+                SCROLLING_LIMITED_MESSAGE_VIEW_TYPE,
+                SCROLLING_LIMITED_MESSAGE_DEFAULT_POSITION_OFFSET);
+    }
+
+    /**
+     * Constructs a {@link DelegatingContentLimitingAdapter}.
+     *
+     * @param delegate - the {@link RecyclerView.Adapter} whose content needs to be limited.
+     * @param configId - an Id Resource that can be used to identify said adapter.
+     * @param viewType - viewType value for the scrolling limited message
+     * @param offset   - offset of the position of the scrolling limited message. Negative values
+     *                 will be treated as a "bottom offset", i.e. they represent the value to
+     *                 subtract from {@link #getItemCount()} to get to the actual position of the
+     *                 message. For example, by default the offset is -1, meaning the position of
+     *                 the scrolling limited message will be getItemCount() - 1, which in a list
+     *                 indexed at 0 means the very last item. Positive values will be treated as
+     *                 "top offset", so an offset of 0 will put the scrolling limited message at the
+     *                 very top of the list.
+     * @deprecated offset is not supported in the {@link ContentLimitingAdapter} any more.
+     */
+    @Deprecated
+    public DelegatingContentLimitingAdapter(RecyclerView.Adapter<T> delegate,
+            @IdRes int configId,
+            int viewType,
+            int offset) {
+        mDelegate = delegate;
+        mConfigId = configId;
+        mScrollingLimitedMessageViewType = viewType;
+        mScrollingLimitedMessagePositionOffset = offset;
+        mDelegate.registerAdapterDataObserver(new Observer());
+    }
+
+    private class Observer extends RecyclerView.AdapterDataObserver {
+
+        @Override
+        public void onChanged() {
+            DelegatingContentLimitingAdapter.this.notifyDataSetChanged();
+        }
+
+        @Override
+        public void onItemRangeChanged(int positionStart, int itemCount) {
+            DelegatingContentLimitingAdapter.this
+                    .notifyItemRangeChanged(positionStart, itemCount);
+        }
+
+        @Override
+        public void onItemRangeChanged(int positionStart, int itemCount, @Nullable Object payload) {
+            DelegatingContentLimitingAdapter.this
+                    .notifyItemRangeChanged(positionStart, itemCount, payload);
+        }
+
+        @Override
+        public void onItemRangeInserted(int positionStart, int itemCount) {
+            DelegatingContentLimitingAdapter.this
+                    .notifyItemRangeInserted(positionStart, itemCount);
+        }
+
+        @Override
+        public void onItemRangeRemoved(int positionStart, int itemCount) {
+            DelegatingContentLimitingAdapter.this
+                    .notifyItemRangeRemoved(positionStart, itemCount);
+        }
+
+        @Override
+        public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
+            DelegatingContentLimitingAdapter.this.notifyDataSetChanged();
+        }
+    }
+
+    @Override
+    @NonNull
+    public T onCreateViewHolderImpl(@NonNull ViewGroup parent, int viewType) {
+        return mDelegate.onCreateViewHolder(parent, viewType);
+    }
+
+    @Override
+    public void onBindViewHolderImpl(T holder, int position) {
+        mDelegate.onBindViewHolder(holder, position);
+    }
+
+    @Override
+    public int getItemViewTypeImpl(int position) {
+        return mDelegate.getItemViewType(position);
+    }
+
+    @Override
+    protected void onViewRecycledImpl(@NonNull T holder) {
+        mDelegate.onViewRecycled(holder);
+    }
+
+    @Override
+    protected boolean onFailedToRecycleViewImpl(@NonNull T holder) {
+        return mDelegate.onFailedToRecycleView(holder);
+    }
+
+    @Override
+    protected void onViewAttachedToWindowImpl(@NonNull T holder) {
+        mDelegate.onViewAttachedToWindow(holder);
+    }
+
+    @Override
+    protected void onViewDetachedFromWindowImpl(@NonNull T holder) {
+        mDelegate.onViewDetachedFromWindow(holder);
+    }
+
+    @Override
+    public void setHasStableIds(boolean hasStableIds) {
+        mDelegate.setHasStableIds(hasStableIds);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return mDelegate.getItemId(position);
+    }
+
+    @Override
+    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
+        super.onAttachedToRecyclerView(recyclerView);
+        mDelegate.onAttachedToRecyclerView(recyclerView);
+    }
+
+    @Override
+    public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
+        super.onDetachedFromRecyclerView(recyclerView);
+        mDelegate.onDetachedFromRecyclerView(recyclerView);
+    }
+
+    @Override
+    protected int computeAnchorIndexWhenRestricting() {
+        if (mDelegate instanceof DelegatingContentLimitingAdapter.ContentLimiting) {
+            return ((DelegatingContentLimitingAdapter.ContentLimiting) mDelegate)
+                    .computeAnchorIndexWhenRestricting();
+        } else {
+            return 0;
+        }
+    }
+
+    @Override
+    protected int getScrollToPositionWhenRestricted() {
+        if (mDelegate instanceof DelegatingContentLimitingAdapter.ContentLimiting) {
+            return ((DelegatingContentLimitingAdapter.ContentLimiting) mDelegate)
+                    .getScrollToPositionWhenRestricted();
+        } else {
+            return -1;
+        }
+    }
+
+    @Override
+    public int getUnrestrictedItemCount() {
+        return mDelegate.getItemCount();
+    }
+
+    @Override
+    @IdRes
+    public int getConfigurationId() {
+        return mConfigId;
+    }
+
+    @Override
+    public int getScrollingLimitedMessageViewType() {
+        return mScrollingLimitedMessageViewType;
+    }
+
+    @Override
+    protected int getScrollingLimitedMessagePosition() {
+        if (mScrollingLimitedMessagePositionOffset < 0) {
+            // For negative values, treat them as a bottom offset.
+            return getItemCount() + mScrollingLimitedMessagePositionOffset;
+        } else {
+            // For positive values, treat them like a top offset.
+            return mScrollingLimitedMessagePositionOffset;
+        }
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/FastScroller.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/FastScroller.java
similarity index 88%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/FastScroller.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/FastScroller.java
index 9a44110..15c0ff2 100644
--- a/car-ui-lib/src/com/android/car/ui/recyclerview/FastScroller.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/FastScroller.java
@@ -20,6 +20,7 @@
 
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewConfiguration;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
@@ -38,15 +39,17 @@
     private float mTouchDownY = -1;
 
     private View mScrollTrackView;
-    private boolean mIsDragging;
     private View mScrollThumb;
     private RecyclerView mRecyclerView;
+    private int mClickActionThreshold;
 
     FastScroller(@NonNull RecyclerView recyclerView, @NonNull View scrollTrackView,
             @NonNull View scrollView) {
         mRecyclerView = recyclerView;
         mScrollTrackView = scrollTrackView;
         mScrollThumb = requireViewByRefId(scrollView, R.id.car_ui_scrollbar_thumb);
+        mClickActionThreshold = ViewConfiguration.get(
+                recyclerView.getContext()).getScaledTouchSlop();
     }
 
     void enable() {
@@ -60,10 +63,8 @@
         switch (me.getAction()) {
             case MotionEvent.ACTION_DOWN:
                 mTouchDownY = me.getY();
-                mIsDragging = false;
                 break;
             case MotionEvent.ACTION_MOVE:
-                mIsDragging = true;
                 float thumbBottom = mScrollThumb.getY() + mScrollThumb.getHeight();
                 // check if the move coordinates are within the bounds of the thumb. i.e user is
                 // holding and dragging the thumb.
@@ -85,17 +86,21 @@
                 break;
             case MotionEvent.ACTION_UP:
             default:
-                mTouchDownY = -1;
-                // if not dragged then it's a click. When a click is detected on the track and
-                // within the range we want to move the center of the thumb to the Y coordinate
-                // of the clicked position.
-                if (!mIsDragging) {
+                if (isClick(mTouchDownY, me.getY())) {
                     verticalScrollTo(me.getY() + mScrollTrackView.getY());
                 }
+                mTouchDownY = -1;
         }
         return true;
     }
 
+    /**
+     * Checks if the start and end points are within the threshold to be considered as a click.
+     */
+    private boolean isClick(float startY, float endY) {
+        return Math.abs(startY - endY) < mClickActionThreshold;
+    }
+
     private void verticalScrollTo(float y) {
         int scrollingBy = calculateScrollDistance(y);
         if (scrollingBy != 0) {
@@ -116,12 +121,7 @@
         float percentage = ((newDragPos - thumbCenter) / (float) scrollbarLength);
         int totalPossibleOffset =
                 mRecyclerView.computeVerticalScrollRange() - mRecyclerView.getHeight();
-        int scrollingBy = (int) (percentage * totalPossibleOffset);
-        int absoluteOffset = mRecyclerView.computeVerticalScrollOffset() + scrollingBy;
-        if (absoluteOffset < 0) {
-            return 0;
-        }
-        return scrollingBy;
+        return (int) (percentage * totalPossibleOffset);
     }
 
     /**
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/OnContinuousScrollListener.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/OnContinuousScrollListener.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/OnContinuousScrollListener.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/OnContinuousScrollListener.java
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/PassThroughFilter.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/PassThroughFilter.java
new file mode 100644
index 0000000..4a02a94
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/PassThroughFilter.java
@@ -0,0 +1,60 @@
+/*
+ * 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.recyclerview;
+
+/**
+ * A trivial implementation that doesn't do any filtering (simplifies the filter's code).
+ */
+public class PassThroughFilter implements RangeFilter {
+    private int mCount;
+
+    @Override
+    public void recompute(int newCount, int pivotIndex) {
+        mCount = newCount;
+    }
+
+    @Override
+    public void notifyPivotIndexChanged(int pivotIndex) {
+    }
+
+    @Override
+    public int getFilteredCount() {
+        return mCount;
+    }
+
+    @Override
+    public int indexToPosition(int index) {
+        return index;
+    }
+
+    @Override
+    public int positionToIndex(int position) {
+        return position;
+    }
+
+    @Override
+    public void invalidateMessagePositions() {
+    }
+
+    @Override
+    public void applyFilter() {
+    }
+
+    @Override
+    public void removeFilter() {
+    }
+};
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/RangeFilter.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/RangeFilter.java
new file mode 100644
index 0000000..c9ea953
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/RangeFilter.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.ui.recyclerview;
+
+/**
+ * Interface for helper objects that hide elements from lists that are too long. The limiting
+ * happens around a pivot element that can be anywhere in the list. Elements near that pivot will
+ * be visible, while elements at the head and / or tail of the list will be replaced by a message
+ * telling the user about the truncation.
+ */
+public interface RangeFilter {
+
+    int INVALID_INDEX = -1;
+    int INVALID_POSITION = -1;
+
+    /**
+     * Computes new restrictions when the list (and optionally) the pivot have changed.
+     * The implementation doesn't send any notification.
+     */
+    void recompute(int newCount, int pivotIndex);
+
+    /**
+     * Computes new restrictions when only the pivot has changed.
+     * The implementation must send notification changes (ideally incremental ones).
+     */
+    void notifyPivotIndexChanged(int pivotIndex);
+
+    /** Returns the number of elements in the resulting list, including the message(s). */
+    int getFilteredCount();
+
+    /**
+     * Converts an index in the unfiltered data set to a RV position in the filtered UI in the
+     * 0 .. {@link #getFilteredCount} range which includes the limits message(s).
+     * Returns INVALID_POSITION if that element has been filtered out.
+     */
+    int indexToPosition(int index);
+
+    /**
+     * Converts a RV position in the filtered UI to an index in the unfiltered data set.
+     * Returns INVALID_INDEX if a message is shown at that position.
+     */
+    int positionToIndex(int position);
+
+    /** Send notification changes for the restriction message(s) if there are any. */
+    void invalidateMessagePositions();
+
+    /**
+     * Called when the filter will be applied. If needed, notifies the adapter with data
+     * removal signal.
+     */
+    void applyFilter();
+
+    /**
+     * Called when the filter will be removed. If needed, notifies the adapter with data
+     * inserted signal.
+     */
+    void removeFilter();
+}
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/RangeFilterImpl.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/RangeFilterImpl.java
new file mode 100644
index 0000000..ecba8da
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/RangeFilterImpl.java
@@ -0,0 +1,264 @@
+/*
+ * 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.recyclerview;
+
+import android.util.Log;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * An implementation of {@link RangeFilter} interface.
+ */
+public class RangeFilterImpl implements RangeFilter {
+
+    private static final String TAG = "RangeFilterImpl";
+
+    private final RecyclerView.Adapter<?> mAdapter;
+    private final int mMaxItems;
+    private final int mMaxItemsFirstHalf;
+    private final int mMaxItemsSecondHalf;
+
+    private int mUnlimitedCount;
+    private int mPivotIndex;
+    private final ListRange mRange = new ListRange();
+
+    /**
+     * Constructor
+     * @param adapter the adapter to notify of changes in {@link #notifyPivotIndexChanged(int)}.
+     * @param maxItems the maximum number of items to show.
+     */
+    public RangeFilterImpl(RecyclerView.Adapter<?> adapter, int maxItems) {
+        mAdapter = adapter;
+        if (maxItems <= 0) {
+            mMaxItemsFirstHalf = 0;
+            mMaxItemsSecondHalf = 0;
+            mMaxItems = 0;
+        } else {
+            mMaxItemsFirstHalf = maxItems / 2;
+            mMaxItemsSecondHalf = maxItems - mMaxItemsFirstHalf;
+            mMaxItems = maxItems;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "RangeFilterImpl{"
+                + "mMaxItemsFirstHalf=" + mMaxItemsFirstHalf
+                + "mMaxItemsSecondHalf=" + mMaxItemsSecondHalf
+                + ", mUnlimitedCount=" + mUnlimitedCount
+                + ", mPivotIndex=" + mPivotIndex
+                + ", mRange=" + mRange.toString()
+                + '}';
+    }
+
+    @Override
+    public int getFilteredCount() {
+        return mRange.mLimitedCount;
+    }
+
+    @Override
+    public void invalidateMessagePositions() {
+        if (mRange.mClampedHead > 0) {
+            mAdapter.notifyItemChanged(0);
+        }
+        if (mRange.mClampedTail > 0) {
+            mAdapter.notifyItemChanged(getFilteredCount() - 1);
+        }
+    }
+
+    @Override
+    public void applyFilter() {
+        if (mRange.isTailClamped()) {
+            mAdapter.notifyItemInserted(mUnlimitedCount);
+            mAdapter.notifyItemRangeRemoved(mRange.mEndIndex, mUnlimitedCount - mRange.mEndIndex);
+        }
+        if (mRange.isHeadClamped()) {
+            mAdapter.notifyItemRangeRemoved(0, mRange.mStartIndex);
+            mAdapter.notifyItemInserted(0);
+        }
+    }
+
+    @Override
+    public void removeFilter() {
+        if (mRange.isTailClamped()) {
+            // Remove the message
+            mAdapter.notifyItemRemoved(mRange.mLimitedCount - 1);
+            // Add the tail items that were dropped
+            mAdapter.notifyItemRangeInserted(mRange.mLimitedCount - 1,
+                    mUnlimitedCount - mRange.mEndIndex);
+        }
+        if (mRange.isHeadClamped()) {
+            // Add the head items that were dropped
+            mAdapter.notifyItemRangeInserted(1, mRange.mStartIndex);
+            // Remove the message
+            mAdapter.notifyItemRemoved(0);
+        }
+    }
+
+    @Override
+    public void recompute(int newCount, int pivotIndex) {
+        if (pivotIndex < 0 || newCount <= pivotIndex) {
+            Log.e(TAG, "Invalid pivotIndex: " + pivotIndex + " newCount: " + newCount);
+            pivotIndex = 0;
+        }
+        mUnlimitedCount = newCount;
+        mPivotIndex = pivotIndex;
+
+        mRange.mClampedHead = 0;
+        mRange.mClampedTail = 0;
+
+        if (mUnlimitedCount <= mMaxItems) {
+            // Under the cap case.
+            mRange.mStartIndex = 0;
+            mRange.mEndIndex = mUnlimitedCount;
+            mRange.mLimitedCount = mUnlimitedCount;
+        } else if (mMaxItems <= 0) {
+            // Zero cap case.
+            mRange.mStartIndex = 0;
+            mRange.mEndIndex = 0;
+            mRange.mLimitedCount = 1; // One limit message
+            mRange.mClampedTail = 1;
+        } else if (mPivotIndex <= mMaxItemsFirstHalf) {
+            // No need to clamp the head case
+            // For example: P = 2, M/2 = 2 => exactly two items before the pivot.
+            // Tail has to be clamped or we'd be in the "under the cap" case.
+            mRange.mStartIndex = 0;
+            mRange.mEndIndex = mMaxItems;
+            mRange.mLimitedCount = mMaxItems + 1; // One limit message at the end
+            mRange.mClampedTail = 1;
+        } else if ((mUnlimitedCount - 1 - mPivotIndex) <= mMaxItemsSecondHalf) {
+            // No need to clamp the tail case
+            // For example: C = 5, P = 2 => exactly 2 items after the pivot (count is exclusive).
+            // Head has to be clamped or we'd be in the "under the cap" case.
+            mRange.mEndIndex = mUnlimitedCount;
+            mRange.mStartIndex = mRange.mEndIndex - mMaxItems;
+            mRange.mLimitedCount = mMaxItems + 1; // One limit message at the start
+            mRange.mClampedHead = 1;
+        } else {
+            // Both head and tail need clamping
+            mRange.mStartIndex = mPivotIndex - mMaxItemsFirstHalf;
+            mRange.mEndIndex = mPivotIndex + mMaxItemsSecondHalf;
+            mRange.mLimitedCount = mMaxItems + 2; // One limit message at each end.
+            mRange.mClampedHead = 1;
+            mRange.mClampedTail = 1;
+        }
+    }
+
+    @Override
+    public void notifyPivotIndexChanged(int pivotIndex) {
+        // TODO: Implement this function.
+    }
+
+    @Override
+    public int indexToPosition(int index) {
+        if ((mRange.mStartIndex <= index) && (index < mRange.mEndIndex)) {
+            return mRange.indexToPosition(index);
+        } else {
+            return INVALID_POSITION;
+        }
+    }
+
+    @Override
+    public int positionToIndex(int position) {
+        return mRange.positionToIndex(position);
+    }
+
+    @VisibleForTesting
+    ListRange getRange() {
+        return mRange;
+    }
+
+    /** Represents a portion of the unfiltered list. */
+    static class ListRange {
+        public static final int INVALID_INDEX = -1;
+
+        @VisibleForTesting
+        /* In original data, inclusive. */
+                int mStartIndex;
+        @VisibleForTesting
+        /* In original data, exclusive. */
+                int mEndIndex;
+
+        @VisibleForTesting
+        /* 1 when clamped, otherwise 0. */
+                int mClampedHead;
+        @VisibleForTesting
+        /* 1 when clamped, otherwise 0. */
+                int mClampedTail;
+
+        @VisibleForTesting
+        /* The count of the resulting elements, including the truncation message(s). */
+                int mLimitedCount;
+
+        /**
+         * Deep copy from a ListRange.
+         */
+        public void copyFrom(ListRange range) {
+            mStartIndex = range.mStartIndex;
+            mEndIndex = range.mEndIndex;
+            mClampedHead = range.mClampedHead;
+            mClampedTail = range.mClampedTail;
+            mLimitedCount = range.mLimitedCount;
+        }
+
+        @Override
+        public String toString() {
+            return "ListRange{"
+                    + "mStartIndex=" + mStartIndex
+                    + ", mEndIndex=" + mEndIndex
+                    + ", mClampedHead=" + mClampedHead
+                    + ", mClampedTail=" + mClampedTail
+                    + ", mLimitedCount=" + mLimitedCount
+                    + '}';
+        }
+
+        /**
+         * Returns true if two ranges intersect.
+         */
+        public boolean intersects(ListRange range) {
+            return ((range.mEndIndex > mStartIndex) && (mEndIndex > range.mStartIndex));
+        }
+
+        /**
+         * Converts an index in the unrestricted list to the position in the restricted one.
+         *
+         * Unchecked index needed by {@link #notifyPivotIndexChanged(int)}.
+         */
+        public int indexToPosition(int index) {
+            return index - mStartIndex + mClampedHead;
+        }
+
+        /** Converts the position in the restricted list to an index in the unrestricted one.*/
+        public int positionToIndex(int position) {
+            int index = position - mClampedHead + mStartIndex;
+            if ((index < mStartIndex) || (mEndIndex <= index)) {
+                return INVALID_INDEX;
+            } else {
+                return index;
+            }
+        }
+
+        public boolean isHeadClamped() {
+            return mClampedHead == 1;
+        }
+
+        public boolean isTailClamped() {
+            return mClampedTail == 1;
+        }
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/ScrollBar.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ScrollBar.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/ScrollBar.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ScrollBar.java
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ScrollingLimitedViewHolder.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ScrollingLimitedViewHolder.java
new file mode 100644
index 0000000..63b8692
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/ScrollingLimitedViewHolder.java
@@ -0,0 +1,63 @@
+/*
+ * 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.recyclerview;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.R;
+import com.android.car.ui.utils.CarUiUtils;
+
+/**
+ * {@link RecyclerView.ViewHolder} for the last item in a scrolling limited list.
+ */
+public final class ScrollingLimitedViewHolder extends RecyclerView.ViewHolder {
+
+    private final TextView mMessage;
+
+    /**
+     * Return an instance of {@link ScrollingLimitedViewHolder} with an already inflated root view.
+     * @param parent - the parent {@link ViewGroup} to use during inflation of the root view.
+     */
+    public static ScrollingLimitedViewHolder create(@NonNull ViewGroup parent) {
+        View rootView = LayoutInflater.from(parent.getContext())
+                .inflate(R.layout.car_ui_list_limiting_message, parent, false);
+        return new ScrollingLimitedViewHolder(rootView);
+    }
+
+    ScrollingLimitedViewHolder(@NonNull View itemView) {
+        super(itemView);
+        mMessage = CarUiUtils.requireViewByRefId(itemView, R.id.car_ui_list_limiting_message);
+    }
+
+    /**
+     * Update the content of this {@link ScrollingLimitedViewHolder} object using the provided
+     * message String resource id.
+     * @param messageId
+     */
+    public void bind(@StringRes @Nullable Integer messageId) {
+        int resId = (messageId != null) ? messageId : R.string.car_ui_scrolling_limited_message;
+        mMessage.setText(mMessage.getContext().getString(resId));
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/decorations/grid/GridDividerItemDecoration.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/grid/GridDividerItemDecoration.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/decorations/grid/GridDividerItemDecoration.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/grid/GridDividerItemDecoration.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/decorations/grid/GridOffsetItemDecoration.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/grid/GridOffsetItemDecoration.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/decorations/grid/GridOffsetItemDecoration.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/grid/GridOffsetItemDecoration.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/decorations/linear/LinearDividerItemDecoration.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/linear/LinearDividerItemDecoration.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/decorations/linear/LinearDividerItemDecoration.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/linear/LinearDividerItemDecoration.java
diff --git a/car-ui-lib/src/com/android/car/ui/recyclerview/decorations/linear/LinearOffsetItemDecoration.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/linear/LinearOffsetItemDecoration.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/recyclerview/decorations/linear/LinearOffsetItemDecoration.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/decorations/linear/LinearOffsetItemDecoration.java
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItem.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItem.java
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItemRenderer.java
similarity index 88%
rename from car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItemRenderer.java
index 7bf9025..85141f1 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItemRenderer.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItemRenderer.java
@@ -63,9 +63,13 @@
     private View mIconContainer;
     private ImageView mIconView;
     private Switch mSwitch;
+    private View mTextContainer;
     private TextView mTextView;
     private TextView mTextWithIconView;
 
+    /** Whether the layout file supports rotary mode. */
+    private boolean mIsRotaryEnabledLayout;
+
     MenuItemRenderer(MenuItem item, ViewGroup parentView) {
         mMenuItem = item;
         mParentView = parentView;
@@ -102,6 +106,10 @@
                     requireViewByRefId(mView, R.id.car_ui_toolbar_menu_item_icon_container);
             mIconView = requireViewByRefId(mView, R.id.car_ui_toolbar_menu_item_icon);
             mSwitch = requireViewByRefId(mView, R.id.car_ui_toolbar_menu_item_switch);
+            // mTextContainer is only available in rotary enabled layout.
+            mTextContainer =
+                    CarUiUtils.findViewByRefId(mView, R.id.car_ui_toolbar_menu_item_text_container);
+            mIsRotaryEnabledLayout = mTextContainer != null;
             mTextView = requireViewByRefId(mView, R.id.car_ui_toolbar_menu_item_text);
             mTextWithIconView =
                     requireViewByRefId(mView, R.id.car_ui_toolbar_menu_item_text_with_icon);
@@ -132,24 +140,36 @@
         mView.setVisibility(View.VISIBLE);
         mView.setContentDescription(mMenuItem.getTitle());
 
-        mIconContainer.setVisibility(View.GONE);
+        int iconContainerVisibility = View.GONE;
+        int textContainerVisibility = View.GONE;
         mTextView.setVisibility(View.GONE);
         mTextWithIconView.setVisibility(View.GONE);
         mSwitch.setVisibility(View.GONE);
         if (checkable) {
             mSwitch.setChecked(mMenuItem.isChecked());
             mSwitch.setVisibility(View.VISIBLE);
+            if (mIsRotaryEnabledLayout) {
+                iconContainerVisibility = View.VISIBLE;
+            }
         } else if (hasText && hasIcon && textAndIcon) {
             mMenuItem.getIcon().setBounds(0, 0, mMenuItemIconSize, mMenuItemIconSize);
             mTextWithIconView.setCompoundDrawables(mMenuItem.getIcon(), null, null, null);
             mTextWithIconView.setText(mMenuItem.getTitle());
             mTextWithIconView.setVisibility(View.VISIBLE);
+            textContainerVisibility = View.VISIBLE;
         } else if (hasIcon) {
             mIconView.setImageDrawable(mMenuItem.getIcon());
-            mIconContainer.setVisibility(View.VISIBLE);
+            iconContainerVisibility = View.VISIBLE;
         } else { // hasText will be true
             mTextView.setText(mMenuItem.getTitle());
             mTextView.setVisibility(View.VISIBLE);
+            textContainerVisibility = View.VISIBLE;
+        }
+        // Unlike other views, we should only update the visibility of mIconContainer and
+        // mTextContainer once, otherwise rotary focus might break.
+        mIconContainer.setVisibility(iconContainerVisibility);
+        if (mTextContainer != null) {
+            mTextContainer.setVisibility(textContainerVisibility);
         }
 
         if (!mMenuItem.isTinted() && hasIcon) {
@@ -159,13 +179,19 @@
         recursiveSetEnabledAndDrawableState(mView);
         mView.setActivated(mMenuItem.isActivated());
 
+        View clickTarget = null;
+        if (mIsRotaryEnabledLayout) {
+            clickTarget = iconContainerVisibility == View.VISIBLE ? mIconContainer : mTextContainer;
+        } else {
+            clickTarget = mView;
+        }
         if (mMenuItem.getOnClickListener() != null
                 || mMenuItem.isCheckable()
                 || mMenuItem.isActivatable()) {
-            mView.setOnClickListener(v -> mMenuItem.performClick());
+            clickTarget.setOnClickListener(v -> mMenuItem.performClick());
         } else {
-            mView.setOnClickListener(null);
-            mView.setClickable(false);
+            clickTarget.setOnClickListener(null);
+            clickTarget.setClickable(false);
         }
     }
 
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/ProgressBarController.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ProgressBarController.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/toolbar/ProgressBarController.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ProgressBarController.java
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/ProgressBarControllerImpl.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ProgressBarControllerImpl.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/toolbar/ProgressBarControllerImpl.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ProgressBarControllerImpl.java
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/SearchView.java
similarity index 88%
rename from car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/SearchView.java
index 7f7eb80..9506fe1 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/SearchView.java
@@ -23,6 +23,7 @@
 import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.util.AttributeSet;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
@@ -116,15 +117,37 @@
         mSearchText.setOnEditorActionListener((v, actionId, event) -> {
             if (actionId == EditorInfo.IME_ACTION_DONE
                     || actionId == EditorInfo.IME_ACTION_SEARCH) {
-                mSearchText.clearFocus();
-                for (Toolbar.OnSearchCompletedListener listener : mSearchCompletedListeners) {
-                    listener.onSearchCompleted();
+                notifyQuerySubmit();
+            } else if (isEnter(event)) {
+                if (event.getAction() == KeyEvent.ACTION_UP) {
+                    // Note that we want to trigger search only on ACTION_UP, but want to return
+                    // true for all actions for the relevant key event.
+                    notifyQuerySubmit();
                 }
+                return true;
             }
             return false;
         });
     }
 
+    private boolean isEnter(KeyEvent event) {
+        boolean result = false;
+        if (event != null) {
+            int keyCode = event.getKeyCode();
+            result = keyCode == KeyEvent.KEYCODE_ENTER
+                    || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER
+                    || keyCode == KeyEvent.KEYCODE_SEARCH;
+        }
+        return result;
+    }
+
+    private void notifyQuerySubmit() {
+        mSearchText.clearFocus();
+        for (Toolbar.OnSearchCompletedListener listener : mSearchCompletedListeners) {
+            listener.onSearchCompleted();
+        }
+    }
+
     private boolean mWasShown = false;
 
     @Override
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/TabLayout.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/TabLayout.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/toolbar/TabLayout.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/TabLayout.java
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/Toolbar.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/Toolbar.java
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/ToolbarController.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarController.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/toolbar/ToolbarController.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarController.java
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/ToolbarControllerImpl.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarControllerImpl.java
similarity index 97%
rename from car-ui-lib/src/com/android/car/ui/toolbar/ToolbarControllerImpl.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarControllerImpl.java
index 1ef9f4a..413beaa 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/ToolbarControllerImpl.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarControllerImpl.java
@@ -20,6 +20,7 @@
 import static android.view.View.INVISIBLE;
 import static android.view.View.VISIBLE;
 
+import static com.android.car.ui.utils.CarUiUtils.findViewByRefId;
 import static com.android.car.ui.utils.CarUiUtils.requireViewByRefId;
 
 import android.app.Activity;
@@ -63,6 +64,7 @@
 public class ToolbarControllerImpl implements ToolbarController {
     private static final String TAG = "CarUiToolbarController";
 
+    @Nullable
     private View mBackground;
     private ImageView mNavIcon;
     private ImageView mLogoInNavIconSpace;
@@ -152,7 +154,7 @@
                 R.bool.car_ui_toolbar_show_logo);
         mSearchHint = getContext().getString(R.string.car_ui_toolbar_default_search_hint);
 
-        mBackground = requireViewByRefId(view, R.id.car_ui_toolbar_background);
+        mBackground = findViewByRefId(view, R.id.car_ui_toolbar_background);
         mTabLayout = requireViewByRefId(view, R.id.car_ui_toolbar_tabs);
         mNavIcon = requireViewByRefId(view, R.id.car_ui_toolbar_nav_icon);
         mLogoInNavIconSpace = requireViewByRefId(view, R.id.car_ui_toolbar_logo);
@@ -176,14 +178,16 @@
             }
         });
 
-        mBackground.addOnLayoutChangeListener((v, left, top, right, bottom,
-                oldLeft, oldTop, oldRight, oldBottom) -> {
-            if (oldBottom - oldTop != bottom - top) {
-                for (Toolbar.OnHeightChangedListener listener : mOnHeightChangedListeners) {
-                    listener.onHeightChanged(mBackground.getHeight());
+        if (mBackground != null) {
+            mBackground.addOnLayoutChangeListener((v, left, top, right, bottom,
+                    oldLeft, oldTop, oldRight, oldBottom) -> {
+                if (oldBottom - oldTop != bottom - top) {
+                    for (Toolbar.OnHeightChangedListener listener : mOnHeightChangedListeners) {
+                        listener.onHeightChanged(mBackground.getHeight());
+                    }
                 }
-            }
-        });
+            });
+        }
 
         setBackgroundShown(true);
 
@@ -417,6 +421,10 @@
     /** Show/hide the background. When hidden, the toolbar is completely transparent. */
     @Override
     public void setBackgroundShown(boolean shown) {
+        if (mBackground == null) {
+            return;
+        }
+
         if (shown) {
             mBackground.setBackground(
                     getContext().getDrawable(R.drawable.car_ui_toolbar_background));
@@ -428,6 +436,10 @@
     /** Returns true is the toolbar background is shown */
     @Override
     public boolean getBackgroundShown() {
+        if (mBackground == null) {
+            return true;
+        }
+
         return mBackground.getBackground() != null;
     }
 
diff --git a/car-ui-lib/src/com/android/car/ui/utils/CarUiUtils.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/CarUiUtils.java
similarity index 91%
rename from car-ui-lib/src/com/android/car/ui/utils/CarUiUtils.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/CarUiUtils.java
index 93cf868..b27a81a 100644
--- a/car-ui-lib/src/com/android/car/ui/utils/CarUiUtils.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/CarUiUtils.java
@@ -21,6 +21,7 @@
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.util.TypedValue;
 import android.view.View;
 import android.view.ViewGroup;
@@ -152,7 +153,10 @@
     }
 
     /**
-     * It behaves similar to @see View#findViewById, except it resolves the ID reference first.
+     * It behaves similarly to {@link View#findViewById(int)}, except that on Q and below,
+     * it will first resolve the id to whatever it references.
+     *
+     * This is to support layout RROs before the new RRO features in R.
      *
      * @param id the ID to search for
      * @return a view with given ID if found, or {@code null} otherwise
@@ -161,6 +165,10 @@
     @Nullable
     @UiThread
     public static <T extends View> T findViewByRefId(@NonNull View root, @IdRes int id) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            return root.findViewById(id);
+        }
+
         if (id == View.NO_ID) {
             return null;
         }
@@ -171,7 +179,10 @@
     }
 
     /**
-     * It behaves similar to @see View#requireViewById, except it resolves the ID reference first.
+     * It behaves similarly to {@link View#requireViewById(int)}, except that on Q and below,
+     * it will first resolve the id to whatever it references.
+     *
+     * This is to support layout RROs before the new RRO features in R.
      *
      * @param id the ID to search for
      * @return a view with given ID
diff --git a/car-ui-lib/src/com/android/car/ui/utils/CarUxRestrictionsUtil.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/CarUxRestrictionsUtil.java
similarity index 74%
rename from car-ui-lib/src/com/android/car/ui/utils/CarUxRestrictionsUtil.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/CarUxRestrictionsUtil.java
index e5c7fc9..b4baf31 100644
--- a/car-ui-lib/src/com/android/car/ui/utils/CarUxRestrictionsUtil.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/CarUxRestrictionsUtil.java
@@ -22,6 +22,7 @@
 import android.car.drivingstate.CarUxRestrictions.CarUxRestrictionsInfo;
 import android.car.drivingstate.CarUxRestrictionsManager;
 import android.content.Context;
+import android.os.Build;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
@@ -34,10 +35,6 @@
 import java.util.Set;
 import java.util.WeakHashMap;
 
-// This can't be in the middle of the rest of the imports on gerrit or it will
-// fail our style checks
-// copybara:insert import android.car.CarNotConnectedException;
-
 /**
  * Utility class to access Car Restriction Manager.
  *
@@ -48,10 +45,6 @@
 public class CarUxRestrictionsUtil {
     private static final String TAG = "CarUxRestrictionsUtil";
 
-    /* copybara:insert
-    private final Car mCarApi;
-    private CarUxRestrictionsManager mCarUxRestrictionsManager;
-    */
     @NonNull
     private CarUxRestrictions mCarUxRestrictions = getDefaultRestrictions();
 
@@ -73,36 +66,36 @@
                     }
                 };
 
-        // copybara:strip_begin
-        Car.createCar(context.getApplicationContext(), null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT,
-                (Car car, boolean ready) -> {
-                    if (ready) {
-                        CarUxRestrictionsManager carUxRestrictionsManager =
-                                (CarUxRestrictionsManager) car.getCarManager(
-                                        Car.CAR_UX_RESTRICTION_SERVICE);
-                        carUxRestrictionsManager.registerListener(listener);
-                        listener.onUxRestrictionsChanged(
-                                carUxRestrictionsManager.getCurrentCarUxRestrictions());
-                    } else {
-                        Log.w(TAG, "Car service disconnected, assuming fully restricted uxr");
-                        listener.onUxRestrictionsChanged(null);
-                    }
-                });
-        /* copybara:strip_end_and_replace
-        mCarApi = Car.createCar(context.getApplicationContext());
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+            Car.createCar(context.getApplicationContext(), null, Car.CAR_WAIT_TIMEOUT_DO_NOT_WAIT,
+                    (Car car, boolean ready) -> {
+                        if (ready) {
+                            CarUxRestrictionsManager carUxRestrictionsManager =
+                                    (CarUxRestrictionsManager) car.getCarManager(
+                                            Car.CAR_UX_RESTRICTION_SERVICE);
+                            carUxRestrictionsManager.registerListener(listener);
+                            listener.onUxRestrictionsChanged(
+                                    carUxRestrictionsManager.getCurrentCarUxRestrictions());
+                        } else {
+                            Log.w(TAG, "Car service disconnected, assuming fully restricted uxr");
+                            listener.onUxRestrictionsChanged(null);
+                        }
+                    });
+        } else {
+            Car carApi = Car.createCar(context.getApplicationContext());
 
-        try {
-            mCarUxRestrictionsManager =
-                    (CarUxRestrictionsManager) mCarApi.getCarManager(
-                            Car.CAR_UX_RESTRICTION_SERVICE);
-            mCarUxRestrictionsManager.registerListener(listener);
-            listener.onUxRestrictionsChanged(
-                    mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
-        } catch (CarNotConnectedException | NullPointerException e) {
-            Log.e(TAG, "Car not connected", e);
-            // mCarUxRestrictions will be the default
+            try {
+                CarUxRestrictionsManager carUxRestrictionsManager =
+                        (CarUxRestrictionsManager) carApi.getCarManager(
+                                Car.CAR_UX_RESTRICTION_SERVICE);
+                carUxRestrictionsManager.registerListener(listener);
+                listener.onUxRestrictionsChanged(
+                        carUxRestrictionsManager.getCurrentCarUxRestrictions());
+            } catch (NullPointerException e) {
+                Log.e(TAG, "Car not connected", e);
+                // mCarUxRestrictions will be the default
+            }
         }
-        */
     }
 
     @NonNull
diff --git a/car-ui-lib/src/com/android/car/ui/utils/DirectManipulationHelper.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/DirectManipulationHelper.java
similarity index 65%
rename from car-ui-lib/src/com/android/car/ui/utils/DirectManipulationHelper.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/DirectManipulationHelper.java
index 24a32d1..184e522 100644
--- a/car-ui-lib/src/com/android/car/ui/utils/DirectManipulationHelper.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/DirectManipulationHelper.java
@@ -15,6 +15,8 @@
  */
 package com.android.car.ui.utils;
 
+import static android.os.Build.VERSION_CODES.R;
+
 import android.annotation.TargetApi;
 import android.content.Context;
 import android.text.TextUtils;
@@ -25,8 +27,6 @@
 
 import androidx.annotation.NonNull;
 
-import java.lang.reflect.Method;
-
 /** Helper class to toggle direct manipulation mode. */
 public final class DirectManipulationHelper {
 
@@ -74,31 +74,50 @@
         return TextUtils.equals(DIRECT_MANIPULATION, event.getClassName());
     }
 
-    /** Returns whether the given {@code node} supports direct manipulation. */
-    @TargetApi(30)
-    public static boolean supportDirectManipulation(@NonNull AccessibilityNodeInfo node) {
-        try {
-            // TODO(b/156115044): remove the reflection once Android R sdk is publicly released.
-            Method getStateDescription =
-                    AccessibilityNodeInfo.class.getMethod("getStateDescription");
-            CharSequence stateDescription = (CharSequence) getStateDescription.invoke(node);
-            return TextUtils.equals(DIRECT_MANIPULATION, stateDescription);
-        } catch (ReflectiveOperationException e) {
-            throw new RuntimeException(e);
-        }
+    /** Returns whether the given {@code node} supports rotate directly. */
+    @TargetApi(R)
+    public static boolean supportRotateDirectly(@NonNull AccessibilityNodeInfo node) {
+        return TextUtils.equals(DIRECT_MANIPULATION, node.getStateDescription());
     }
 
-    /** Sets whether the given {@code view} supports direct manipulation. */
-    @TargetApi(30)
+    /**
+     * Sets whether the given {@code view} supports rotate directly.
+     * <p>
+     * If the view supports rotate directly, when it's focused but not in direct manipulation mode,
+     * clicking the center button of the rotary controller will make RotaryService enter direct
+     * manipulation mode. In this mode, the view's selected state is toggled, and only controller
+     * rotation and Back button press are supported.
+     * <ul>
+     *   <li>When the controller is rotated, the view will be asked to perform ACTION_SCROLL_FORWARD
+     *       or ACTION_SCROLL_BACKWARD.
+     *   <li>When Back button is pressed, RotaryService will toggle off the view's selected state
+     *       and exit this mode.
+     * </ul>
+     * To support controller nudges as well in direct manipulation mode, use {@link
+     * #enableDirectManipulationMode} instead.
+     */
+    @TargetApi(R)
+    public static void setSupportsRotateDirectly(@NonNull View view, boolean enable) {
+        view.setStateDescription(enable ? DIRECT_MANIPULATION : null);
+    }
+
+    /**
+     * Returns whether the given {@code node} supports rotate directly.
+     *
+     * @deprecated use {@link #supportRotateDirectly} instead
+     */
+    @Deprecated
+    public static boolean supportDirectManipulation(@NonNull AccessibilityNodeInfo node) {
+        return supportRotateDirectly(node);
+    }
+
+    /**
+     * Sets whether the given {@code view} supports rotate directly.
+     *
+     * @deprecated use {@link #setSupportsRotateDirectly} instead
+     */
+    @Deprecated
     public static void setSupportsDirectManipulation(@NonNull View view, boolean enable) {
-        try {
-            // TODO(b/156115044): remove the reflection once Android R sdk is publicly released.
-            Method setStateDescription =
-                    View.class.getMethod("setStateDescription", CharSequence.class);
-            CharSequence stateDescription = enable ? DIRECT_MANIPULATION : null;
-            setStateDescription.invoke(view, stateDescription);
-        } catch (ReflectiveOperationException e) {
-            throw new RuntimeException(e);
-        }
+        setSupportsRotateDirectly(view, enable);
     }
 }
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/RotaryConstants.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/RotaryConstants.java
new file mode 100644
index 0000000..99154df
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/RotaryConstants.java
@@ -0,0 +1,82 @@
+/*
+ * 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.utils;
+
+/**
+ * Constants for the rotary controller.
+ *
+ * @hide
+ */
+public final class RotaryConstants {
+    /**
+     * Content description indicating that the rotary controller should scroll this view
+     * horizontally.
+     */
+    public static final String ROTARY_HORIZONTALLY_SCROLLABLE =
+            "com.android.car.ui.utils.HORIZONTALLY_SCROLLABLE";
+
+    /**
+     * Content description indicating that the rotary controller should scroll this view
+     * vertically.
+     */
+    public static final String ROTARY_VERTICALLY_SCROLLABLE =
+            "com.android.car.ui.utils.VERTICALLY_SCROLLABLE";
+
+    /** The key to store the offset of the FocusArea's left bound in the node's extras. */
+    public static final String FOCUS_AREA_LEFT_BOUND_OFFSET =
+            "com.android.car.ui.utils.FOCUS_AREA_LEFT_BOUND_OFFSET";
+
+    /** The key to store the offset of the FocusArea's right bound in the node's extras. */
+    public static final String FOCUS_AREA_RIGHT_BOUND_OFFSET =
+            "com.android.car.ui.utils.FOCUS_AREA_RIGHT_BOUND_OFFSET";
+
+    /** The key to store the offset of the FocusArea's top bound in the node's extras. */
+    public static final String FOCUS_AREA_TOP_BOUND_OFFSET =
+            "com.android.car.ui.utils.FOCUS_AREA_TOP_BOUND_OFFSET";
+
+    /** The key to store the offset of the FocusArea's bottom bound in the node's extras. */
+    public static final String FOCUS_AREA_BOTTOM_BOUND_OFFSET =
+            "com.android.car.ui.utils.FOCUS_AREA_BOTTOM_BOUND_OFFSET";
+
+    /** The key to store nudge direction in the Bundle. */
+    public static final String NUDGE_DIRECTION =
+            "com.android.car.ui.utils.NUDGE_DIRECTION";
+
+    /**
+     * Action performed on a FocusArea to move focus to the nudge shortcut within the same
+     * FocusArea.
+     * <p>
+     * This action and the actions below only use the most significant 8 bits to avoid
+     * conflicting with legacy standard actions (which don't use the most significant 8 bits),
+     * e.g. ACTION_FOCUS. The actions only use one bit to avoid conflicting with IDs defined in
+     * framework (which start with 0x0102), e.g. R.id.accessibilityActionScrollUp.
+     */
+    public static final int ACTION_NUDGE_SHORTCUT = 0x01000000;
+
+    /** Action performed on a FocusArea to move focus to another FocusArea. */
+    public static final int ACTION_NUDGE_TO_ANOTHER_FOCUS_AREA = 0x02000000;
+
+    /** Action performed on a FocusParkingView to restore the default focus. */
+    public static final int ACTION_RESTORE_DEFAULT_FOCUS = 0x04000000;
+
+    /** Action performed on a FocusParkingView to hide the IME. */
+    public static final int ACTION_HIDE_IME = 0x08000000;
+
+    /** Prevent instantiation. */
+    private RotaryConstants() {
+    }
+}
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/ViewUtils.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/ViewUtils.java
new file mode 100644
index 0000000..6dd993b
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/ViewUtils.java
@@ -0,0 +1,144 @@
+/*
+ * 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.utils;
+
+import static android.view.View.VISIBLE;
+
+import static com.android.car.ui.utils.RotaryConstants.ROTARY_HORIZONTALLY_SCROLLABLE;
+import static com.android.car.ui.utils.RotaryConstants.ROTARY_VERTICALLY_SCROLLABLE;
+
+import android.text.TextUtils;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * Utility class used by {@link com.android.car.ui.FocusArea} and {@link
+ * com.android.car.ui.FocusParkingView}.
+ *
+ * @hide
+ */
+public final class ViewUtils {
+
+    /** This is a utility class */
+    private ViewUtils() {
+    }
+
+    /**
+     * Searches the {@code view} and its descendants in depth first order, and returns the first
+     * view that is focused by default, can take focus, but has no invisible ancestors. Returns null
+     * if not found.
+     */
+    @Nullable
+    public static View findFocusedByDefaultView(@NonNull View view) {
+        return depthFirstSearch(view,
+                /* targetPredicate= */ v -> v.isFocusedByDefault() && canTakeFocus(v),
+                /* skipPredicate= */ v -> v.getVisibility() != VISIBLE);
+    }
+
+    /**
+     * Searches the {@code view} and its descendants in depth first order, and returns the first
+     * primary focus view, i.e., the first focusable item in a scrollable container. Returns null
+     * if not found.
+     */
+    public static View findPrimaryFocusView(@NonNull View view) {
+        View scrollableContainer = findScrollableContainer(view);
+        return scrollableContainer == null ? null : findFocusableDescendant(scrollableContainer);
+    }
+
+    /**
+     * Searches the {@code view}'s descendants in depth first order, and returns the first view
+     * that can take focus but has no invisible ancestors, or null if not found.
+     */
+    @Nullable
+    public static View findFocusableDescendant(@NonNull View view) {
+        return depthFirstSearch(view,
+                /* targetPredicate= */ v -> v != view && canTakeFocus(v),
+                /* skipPredicate= */ v -> v.getVisibility() != VISIBLE);
+    }
+
+    /**
+     * Searches the {@code view} and its descendants in depth first order, and returns the first
+     * view that meets the given condition. Returns null if not found.
+     */
+    @Nullable
+    public static View depthFirstSearch(@NonNull View view, @NonNull Predicate<View> predicate) {
+        return depthFirstSearch(view, predicate, /* skipPredicate= */ null);
+    }
+
+    /**
+     * Searches the {@code view} and its descendants in depth first order, skips the views that
+     * match {@code skipPredicate} and their descendants, and returns the first view that matches
+     * {@code targetPredicate}. Returns null if not found.
+     */
+    @Nullable
+    private static View depthFirstSearch(@NonNull View view,
+            @NonNull Predicate<View> targetPredicate,
+            @NonNull Predicate<View> skipPredicate) {
+        if (skipPredicate != null && skipPredicate.test(view)) {
+            return null;
+        }
+        if (targetPredicate.test(view)) {
+            return view;
+        }
+        if (view instanceof ViewGroup) {
+            ViewGroup parent = (ViewGroup) view;
+            for (int i = 0; i < parent.getChildCount(); i++) {
+                View child = parent.getChildAt(i);
+                View target = depthFirstSearch(child, targetPredicate, skipPredicate);
+                if (target != null) {
+                    return target;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * This is a functional interface and can therefore be used as the assignment target for a
+     * lambda expression or method reference.
+     *
+     * @param <T> the type of the input to the predicate
+     */
+    public interface Predicate<T> {
+        /** Evaluates this predicate on the given argument. */
+        boolean test(@NonNull T t);
+    }
+
+    /**
+     * Searches the {@code view} and its descendants in depth first order, and returns the first
+     * scrollable container that has no invisible ancestors. Returns null if not found.
+     */
+    @Nullable
+    private static View findScrollableContainer(@NonNull View view) {
+        return depthFirstSearch(view,
+                /* targetPredicate= */ v -> {
+                    CharSequence contentDescription = v.getContentDescription();
+                    return TextUtils.equals(contentDescription, ROTARY_VERTICALLY_SCROLLABLE)
+                            || TextUtils.equals(contentDescription, ROTARY_HORIZONTALLY_SCROLLABLE);
+                },
+                /* skipPredicate= */ v -> v.getVisibility() != VISIBLE);
+    }
+
+    /** Returns whether {@code view} can be focused. */
+    private static boolean canTakeFocus(@NonNull View view) {
+        return view.isFocusable() && view.isEnabled() && view.getVisibility() == VISIBLE
+                && view.getWidth() > 0 && view.getHeight() > 0;
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/uxr/DrawableStateButton.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/uxr/DrawableStateButton.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/uxr/DrawableStateButton.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/uxr/DrawableStateButton.java
diff --git a/car-ui-lib/src/com/android/car/ui/uxr/DrawableStateSwitch.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/uxr/DrawableStateSwitch.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/uxr/DrawableStateSwitch.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/uxr/DrawableStateSwitch.java
diff --git a/car-ui-lib/src/com/android/car/ui/uxr/DrawableStateView.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/uxr/DrawableStateView.java
similarity index 100%
rename from car-ui-lib/src/com/android/car/ui/uxr/DrawableStateView.java
rename to car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/uxr/DrawableStateView.java
diff --git a/car-ui-lib/car-ui-lib/src/main/res-overlayable/values/overlayable.xml b/car-ui-lib/car-ui-lib/src/main/res-overlayable/values/overlayable.xml
new file mode 100644
index 0000000..e9b706d
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res-overlayable/values/overlayable.xml
@@ -0,0 +1,481 @@
+<?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_clear_focus_area_history_when_rotating"/>
+      <item type="bool" name="car_ui_enable_focus_area_background_highlight"/>
+      <item type="bool" name="car_ui_enable_focus_area_foreground_highlight"/>
+      <item type="bool" name="car_ui_escrow_check_components_automatically"/>
+      <item type="bool" name="car_ui_focus_area_default_focus_overrides_history"/>
+      <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_dialog_icon_color"/>
+      <item type="color" name="car_ui_list_item_divider"/>
+      <item type="color" name="car_ui_preference_icon_color"/>
+      <item type="color" name="car_ui_preference_two_action_divider_color"/>
+      <item type="color" name="car_ui_recyclerview_divider_color"/>
+      <item type="color" name="car_ui_ripple_color"/>
+      <item type="color" name="car_ui_rotary_focus_fill_color"/>
+      <item type="color" name="car_ui_rotary_focus_fill_secondary_color"/>
+      <item type="color" name="car_ui_rotary_focus_stroke_color"/>
+      <item type="color" name="car_ui_rotary_focus_stroke_secondary_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_divider_width"/>
+      <item type="dimen" name="car_ui_header_list_item_text_start_margin"/>
+      <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_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_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_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_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_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_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_rotary_focus_stroke_width"/>
+      <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_size"/>
+      <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_focus_area_background_highlight"/>
+      <item type="drawable" name="car_ui_focus_area_foreground_highlight"/>
+      <item type="drawable" name="car_ui_icon_add"/>
+      <item type="drawable" name="car_ui_icon_arrow_back"/>
+      <item type="drawable" name="car_ui_icon_close"/>
+      <item type="drawable" name="car_ui_icon_delete"/>
+      <item type="drawable" name="car_ui_icon_down"/>
+      <item type="drawable" name="car_ui_icon_edit"/>
+      <item type="drawable" name="car_ui_icon_lock"/>
+      <item type="drawable" name="car_ui_icon_overflow_menu"/>
+      <item type="drawable" name="car_ui_icon_save"/>
+      <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="action_widget_container"/>
+      <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_focus_area"/>
+      <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_container_without_widget"/>
+      <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_container"/>
+      <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="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"/>
+      <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="seek_bar"/>
+      <item type="id" name="seek_bar_text_left"/>
+      <item type="id" name="seek_bar_text_right"/>
+      <item type="id" name="seek_bar_text_top"/>
+      <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_container"/>
+      <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_focus_area_history_cache_type"/>
+      <item type="integer" name="car_ui_focus_area_history_expiration_period_ms"/>
+      <item type="integer" name="car_ui_focus_history_cache_type"/>
+      <item type="integer" name="car_ui_focus_history_expiration_period_ms"/>
+      <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_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_list_preference_with_toolbar"/>
+      <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_radio_button_preference_widget"/>
+      <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_seekbar_dialog"/>
+      <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="layout" name="car_ui_two_action_preference"/>
+      <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_installer_process_name"/>
+      <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.DialogSeekBarPreference"/>
+      <item type="style" name="Preference.CarUi.DialogSeekBarPreference.LeftText"/>
+      <item type="style" name="Preference.CarUi.DialogSeekBarPreference.RightText"/>
+      <item type="style" name="Preference.CarUi.DialogSeekBarPreference.Seekbar"/>
+      <item type="style" name="Preference.CarUi.DialogSeekBarPreference.TopText"/>
+      <item type="style" name="Preference.CarUi.Divider"/>
+      <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/color/car_ui_color_accent.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_color_accent.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_color_accent.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_color_accent.xml
diff --git a/car-ui-lib/res/color/car_ui_dialog_icon_color.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_dialog_icon_color.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_dialog_icon_color.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_dialog_icon_color.xml
diff --git a/car-ui-lib/res/color/car_ui_list_item_divider.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_list_item_divider.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_list_item_divider.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_list_item_divider.xml
diff --git a/car-ui-lib/res/color/car_ui_text_color_hint.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_text_color_hint.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_text_color_hint.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_text_color_hint.xml
diff --git a/car-ui-lib/res/color/car_ui_text_color_primary.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_text_color_primary.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_text_color_primary.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_text_color_primary.xml
diff --git a/car-ui-lib/res/color/car_ui_text_color_secondary.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_text_color_secondary.xml
similarity index 100%
copy from car-ui-lib/res/color/car_ui_text_color_secondary.xml
copy to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_text_color_secondary.xml
diff --git a/car-ui-lib/res/color/car_ui_toolbar_menu_item_icon_background_color.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_toolbar_menu_item_icon_background_color.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_toolbar_menu_item_icon_background_color.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_toolbar_menu_item_icon_background_color.xml
diff --git a/car-ui-lib/res/color/car_ui_toolbar_menu_item_icon_color.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_toolbar_menu_item_icon_color.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_toolbar_menu_item_icon_color.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_toolbar_menu_item_icon_color.xml
diff --git a/car-ui-lib/res/color/car_ui_toolbar_tab_item_selector.xml b/car-ui-lib/car-ui-lib/src/main/res/color/car_ui_toolbar_tab_item_selector.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_toolbar_tab_item_selector.xml
rename to car-ui-lib/car-ui-lib/src/main/res/color/car_ui_toolbar_tab_item_selector.xml
diff --git a/car-ui-lib/res/drawable/car_ui_divider.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_divider.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_divider.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_divider.xml
diff --git a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_focus_area_background_highlight.xml
similarity index 94%
rename from car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_focus_area_background_highlight.xml
index 74b8d13..7dd6341 100644
--- a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_focus_area_background_highlight.xml
@@ -16,5 +16,5 @@
   -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
-    <solid android:color="#00FF00"/>
+    <solid android:color="#2994CBFF"/>
 </shape>
diff --git a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_focus_area_foreground_highlight.xml
similarity index 87%
copy from car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
copy to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_focus_area_foreground_highlight.xml
index 74b8d13..94de514 100644
--- a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_focus_area_foreground_highlight.xml
@@ -16,5 +16,6 @@
   -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
-    <solid android:color="#00FF00"/>
+    <stroke android:width="1dp"
+            android:color="@color/car_ui_rotary_focus_stroke_color"/>
 </shape>
diff --git a/car-ui-lib/res/drawable/car_ui_icon_add.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_add.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_add.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_add.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_arrow_back.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_arrow_back.xml
similarity index 100%
copy from car-ui-lib/res/drawable/car_ui_icon_arrow_back.xml
copy to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_arrow_back.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_close.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_close.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_close.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_close.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_delete.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_delete.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_delete.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_delete.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_down.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_down.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_down.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_down.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_edit.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_edit.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_edit.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_edit.xml
diff --git a/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_lock.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_lock.xml
new file mode 100644
index 0000000..d74b14a
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/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_icon_overflow_menu.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_overflow_menu.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_overflow_menu.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_overflow_menu.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_save.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_save.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_save.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_save.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_search.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_search.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_search.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_search.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_settings.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_settings.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_settings.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_icon_settings.xml
diff --git a/car-ui-lib/res/drawable/car_ui_list_header_background.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_header_background.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_list_header_background.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_header_background.xml
diff --git a/car-ui-lib/res/drawable/car_ui_list_item_avatar_icon_outline.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_item_avatar_icon_outline.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_list_item_avatar_icon_outline.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_item_avatar_icon_outline.xml
diff --git a/car-ui-lib/res/drawable/car_ui_list_item_background.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_item_background.xml
similarity index 73%
rename from car-ui-lib/res/drawable/car_ui_list_item_background.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_item_background.xml
index 15585b2..f10416e 100644
--- a/car-ui-lib/res/drawable/car_ui_list_item_background.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_item_background.xml
@@ -16,13 +16,19 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_focused="true">
-        <ripple android:color="@color/car_ui_rotary_focus_color">
-            <item android:id="@android:id/mask">
+        <layer-list>
+            <item>
                 <shape android:shape="rectangle">
-                    <solid android:color="?android:colorAccent"/>
+                    <solid android:color="@color/car_ui_rotary_focus_fill_color"/>
                 </shape>
             </item>
-        </ripple>
+            <item>
+                <shape android:shape="rectangle">
+                    <stroke android:width="@dimen/car_ui_rotary_focus_stroke_width"
+                            android:color="@color/car_ui_rotary_focus_stroke_color"/>
+                </shape>
+            </item>
+        </layer-list>
     </item>
     <item>
         <ripple android:color="?android:attr/colorControlHighlight">
diff --git a/car-ui-lib/res/drawable/car_ui_list_item_divider.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_item_divider.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_list_item_divider.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_item_divider.xml
diff --git a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_limiting_message_background.xml
similarity index 83%
copy from car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
copy to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_limiting_message_background.xml
index 74b8d13..02a8065 100644
--- a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_list_limiting_message_background.xml
@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright 2020 The Android Open Source Project
+  ~ 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.
@@ -16,5 +15,6 @@
   -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
-    <solid android:color="#00FF00"/>
+    <solid android:color="#282A2D"/>
+    <corners android:radius="96dp"/>
 </shape>
diff --git a/car-ui-lib/res/drawable/car_ui_preference_icon_chevron.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_preference_icon_chevron.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_preference_icon_chevron.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_preference_icon_chevron.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_button_ripple_background.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_button_ripple_background.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_recyclerview_button_ripple_background.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_button_ripple_background.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_divider.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_divider.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_recyclerview_divider.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_divider.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_ic_down.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_ic_down.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_recyclerview_ic_down.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_ic_down.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_ic_up.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_ic_up.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_recyclerview_ic_up.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_ic_up.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml
diff --git a/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_divider.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_toolbar_menu_item_divider.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_toolbar_menu_item_divider.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_toolbar_menu_item_divider.xml
diff --git a/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_background.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
similarity index 99%
rename from car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
index 33594c2..46171fd 100644
--- a/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
@@ -23,5 +23,3 @@
         android:height="@dimen/car_ui_toolbar_menu_item_icon_background_size"/>
     <solid android:color="@color/car_ui_toolbar_menu_item_icon_background_color"/>
 </shape>
-
-
diff --git a/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml b/car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
rename to car-ui-lib/car-ui-lib/src/main/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
diff --git a/car-ui-lib/res/layout/car_ui_alert_dialog_edit_text.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_alert_dialog_edit_text.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_alert_dialog_edit_text.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_alert_dialog_edit_text.xml
diff --git a/car-ui-lib/res/layout/car_ui_alert_dialog_list.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_alert_dialog_list.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_alert_dialog_list.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_alert_dialog_list.xml
diff --git a/car-ui-lib/res/layout/car_ui_alert_dialog_title_with_subtitle.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_alert_dialog_title_with_subtitle.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_alert_dialog_title_with_subtitle.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_alert_dialog_title_with_subtitle.xml
diff --git a/car-ui-lib/res/layout/car_ui_base_layout.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout.xml
similarity index 80%
rename from car-ui-lib/res/layout/car_ui_base_layout.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout.xml
index 14dfb75..cd73725 100644
--- a/car-ui-lib/res/layout/car_ui_base_layout.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout.xml
@@ -17,14 +17,18 @@
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:id="@+id/content">
+    android:layout_height="match_parent">
     <!-- When not in touch mode, if we clear focus in current window, Android will re-focus the
          first focusable view in the window automatically. Adding a FocusParkingView to the window
          can fix this issue, because it can take focus, and it is transparent and its default focus
          highlight is disabled, so it's invisible to the user no matter whether it's focused or not.
          -->
     <com.android.car.ui.FocusParkingView
-        android:layout_width="1dp"
-        android:layout_height="1dp"/>
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <FrameLayout
+        android:id="@+id/car_ui_base_layout_content_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
 </FrameLayout>
diff --git a/car-ui-lib/res/layout/car_ui_base_layout_toolbar.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout_toolbar.xml
similarity index 97%
rename from car-ui-lib/res/layout/car_ui_base_layout_toolbar.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout_toolbar.xml
index 2d0cde8..410261c 100644
--- a/car-ui-lib/res/layout/car_ui_base_layout_toolbar.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout_toolbar.xml
@@ -27,11 +27,11 @@
          highlight is disabled, so it's invisible to the user no matter whether it's focused or not.
          -->
     <com.android.car.ui.FocusParkingView
-        android:layout_width="1dp"
-        android:layout_height="1dp"/>
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
 
     <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"
diff --git a/car-ui-lib/res/layout/car_ui_base_layout_toolbar_legacy.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout_toolbar_legacy.xml
similarity index 92%
rename from car-ui-lib/res/layout/car_ui_base_layout_toolbar_legacy.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout_toolbar_legacy.xml
index 0a55746..191fb3e 100644
--- a/car-ui-lib/res/layout/car_ui_base_layout_toolbar_legacy.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_base_layout_toolbar_legacy.xml
@@ -28,11 +28,11 @@
          highlight is disabled, so it's invisible to the user no matter whether it's focused or not.
          -->
     <com.android.car.ui.FocusParkingView
-        android:layout_width="1dp"
-        android:layout_height="1dp"/>
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
 
     <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"
diff --git a/car-ui-lib/res/layout/car_ui_header_list_item.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_header_list_item.xml
similarity index 64%
rename from car-ui-lib/res/layout/car_ui_header_list_item.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_header_list_item.xml
index d91512e..51204de 100644
--- a/car-ui-lib/res/layout/car_ui_header_list_item.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_header_list_item.xml
@@ -29,27 +29,31 @@
         android:orientation="vertical"
         app:layout_constraintGuide_begin="@dimen/car_ui_list_item_header_start_inset" />
 
-    <TextView
-        android:id="@+id/title"
+    <!-- Use nested layout as a workaround for a regression in constraintlayout where chains not
+    are not rendered correctly when the tail is gone (b/168627311).-->
+    <LinearLayout
+        android:id="@+id/text_container"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        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"
-        app:layout_constraintStart_toStartOf="@id/car_ui_list_item_start_guideline"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_chainStyle="packed" />
-
-    <TextView
-        android:id="@+id/body"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/car_ui_list_item_text_no_icon_start_margin"
-        android:textAppearance="@style/TextAppearance.CarUi.ListItem.Body"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="@id/car_ui_list_item_start_guideline"
-        app:layout_constraintTop_toBottomOf="@+id/title" />
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/car_ui_header_list_item_text_start_margin"
+            android:textAppearance="@style/TextAppearance.CarUi.ListItem.Header" />
+
+        <TextView
+            android:id="@+id/body"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/car_ui_list_item_text_no_icon_start_margin"
+            android:textAppearance="@style/TextAppearance.CarUi.ListItem.Body" />
+    </LinearLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/res/layout/car_ui_list_item.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_item.xml
similarity index 86%
rename from car-ui-lib/res/layout/car_ui_list_item.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_item.xml
index cc5c39a..8b5b281 100644
--- a/car-ui-lib/res/layout/car_ui_list_item.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_item.xml
@@ -21,8 +21,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:tag="carUiListItem"
-    android:minHeight="@dimen/car_ui_list_item_height"
-    app:layout_optimizationLevel="none">
+    android:minHeight="@dimen/car_ui_list_item_height">
 
     <!-- The following touch interceptor views are sized to encompass the specific sub-sections of
     the list item view to easily control the bounds of a background ripple effects. -->
@@ -91,31 +90,33 @@
             android:scaleType="fitXY" />
     </FrameLayout>
 
-    <TextView
-        android:id="@+id/title"
+    <!-- Use nested layout as a workaround for a regression in constraintlayout where chains not
+    are not rendered correctly when the tail is gone (b/168627311).-->
+    <LinearLayout
+        android:id="@+id/text_container"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/car_ui_list_item_text_start_margin"
-        android:singleLine="@bool/car_ui_list_item_single_line_title"
-        android:textAppearance="@style/TextAppearance.CarUi.ListItem"
-        app:layout_constraintBottom_toTopOf="@+id/body"
-        app:layout_constraintEnd_toStartOf="@+id/action_container"
-        app:layout_constraintStart_toEndOf="@+id/icon_container"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintVertical_chainStyle="packed"
-        app:layout_goneMarginStart="@dimen/car_ui_list_item_text_no_icon_start_margin" />
-
-    <TextView
-        android:id="@+id/body"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/car_ui_list_item_text_start_margin"
-        android:textAppearance="@style/TextAppearance.CarUi.ListItem.Body"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/action_container"
-        app:layout_constraintStart_toEndOf="@+id/icon_container"
-        app:layout_constraintTop_toBottomOf="@+id/title"
-        app:layout_goneMarginStart="@dimen/car_ui_list_item_text_no_icon_start_margin" />
+        app:layout_constraintEnd_toStartOf="@id/action_container"
+        app:layout_constraintStart_toEndOf="@id/icon_container"
+        android:layout_marginStart="@dimen/car_ui_list_item_text_start_margin"
+        app:layout_goneMarginStart="@dimen/car_ui_list_item_text_no_icon_start_margin"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:singleLine="@bool/car_ui_list_item_single_line_title"
+            android:textAppearance="@style/TextAppearance.CarUi.ListItem" />
+
+        <TextView
+            android:id="@+id/body"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="@style/TextAppearance.CarUi.ListItem.Body" />
+    </LinearLayout>
 
     <!-- This touch interceptor is sized and positioned to encompass the action container   -->
     <View
diff --git a/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_limiting_message.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_limiting_message.xml
new file mode 100644
index 0000000..a9f9b9b
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/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>
diff --git a/car-ui-lib/res/layout/car_ui_list_preference.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_preference.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_list_preference.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_preference.xml
diff --git a/car-ui-lib/res/layout/car_ui_list_preference_with_toolbar.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_preference_with_toolbar.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_list_preference_with_toolbar.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_list_preference_with_toolbar.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference_category.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_category.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference_category.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_category.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference_chevron.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_chevron.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference_chevron.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_chevron.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference_dialog_edittext.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_dialog_edittext.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference_dialog_edittext.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_dialog_edittext.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference_dropdown.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_dropdown.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference_dropdown.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_dropdown.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference_fragment.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_fragment.xml
similarity index 70%
rename from car-ui-lib/res/layout/car_ui_preference_fragment.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_fragment.xml
index e17664a..53fc089 100644
--- a/car-ui-lib/res/layout/car_ui_preference_fragment.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_fragment.xml
@@ -26,11 +26,16 @@
         android:id="@android:id/list_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-        <com.android.car.ui.recyclerview.CarUiRecyclerView
-            android:id="@+id/recycler_view"
+        <com.android.car.ui.FocusArea
+            android:id="@+id/car_ui_focus_area"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:tag="carUiPreferenceRecyclerView"
-            app:enableDivider="true"/>
+            android:layout_height="match_parent">
+            <com.android.car.ui.recyclerview.CarUiRecyclerView
+                android:id="@+id/recycler_view"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:tag="carUiPreferenceRecyclerView"
+                app:enableDivider="true"/>
+        </com.android.car.ui.FocusArea>
     </FrameLayout>
 </FrameLayout>
diff --git a/car-ui-lib/res/layout/car_ui_preference_fragment_with_toolbar.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_fragment_with_toolbar.xml
similarity index 74%
rename from car-ui-lib/res/layout/car_ui_preference_fragment_with_toolbar.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_fragment_with_toolbar.xml
index cf55067..b3c6ea9 100644
--- a/car-ui-lib/res/layout/car_ui_preference_fragment_with_toolbar.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_fragment_with_toolbar.xml
@@ -27,12 +27,17 @@
         android:id="@android:id/list_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
-        <com.android.car.ui.recyclerview.CarUiRecyclerView
-            android:id="@+id/recycler_view"
+        <com.android.car.ui.FocusArea
+            android:id="@+id/car_ui_focus_area"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:tag="carUiPreferenceRecyclerView"
-            app:enableDivider="true"/>
+            android:layout_height="match_parent">
+            <com.android.car.ui.recyclerview.CarUiRecyclerView
+                android:id="@+id/recycler_view"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:tag="carUiPreferenceRecyclerView"
+                app:enableDivider="true"/>
+        </com.android.car.ui.FocusArea>
     </FrameLayout>
 
     <com.android.car.ui.toolbar.Toolbar
diff --git a/car-ui-lib/res/layout/car_ui_preference_widget_checkbox.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_widget_checkbox.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference_widget_checkbox.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_widget_checkbox.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference_widget_seekbar.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_widget_seekbar.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference_widget_seekbar.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_widget_seekbar.xml
diff --git a/car-ui-lib/res/layout/car_ui_preference_widget_switch.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_widget_switch.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_preference_widget_switch.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_preference_widget_switch.xml
diff --git a/car-ui-lib/res/layout/car_ui_radio_button_preference_widget.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_radio_button_preference_widget.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_radio_button_preference_widget.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_radio_button_preference_widget.xml
diff --git a/car-ui-lib/res/layout/car_ui_recycler_view.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_recycler_view.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_recycler_view.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_recycler_view.xml
diff --git a/car-ui-lib/res/layout/car_ui_recycler_view_item.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_recycler_view_item.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_recycler_view_item.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_recycler_view_item.xml
diff --git a/car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_recyclerview_scrollbar.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_recyclerview_scrollbar.xml
diff --git a/car-ui-lib/res/layout/car_ui_seekbar_dialog.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_seekbar_dialog.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_seekbar_dialog.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_seekbar_dialog.xml
diff --git a/car-ui-lib/res/layout/car_ui_toolbar.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_toolbar.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar.xml
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_menu_item.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_menu_item.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_toolbar_menu_item.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_menu_item.xml
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_search_view.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_search_view.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_toolbar_search_view.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_search_view.xml
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_tab_item.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_tab_item.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_toolbar_tab_item.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_tab_item.xml
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_tab_item_flexible.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_tab_item_flexible.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_toolbar_tab_item_flexible.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_tab_item_flexible.xml
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_two_row.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_two_row.xml
similarity index 100%
rename from car-ui-lib/res/layout/car_ui_toolbar_two_row.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_toolbar_two_row.xml
diff --git a/car-ui-lib/res/layout/car_ui_two_action_preference.xml b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_two_action_preference.xml
similarity index 97%
rename from car-ui-lib/res/layout/car_ui_two_action_preference.xml
rename to car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_two_action_preference.xml
index 4ad6ce4..7c633e0 100644
--- a/car-ui-lib/res/layout/car_ui_two_action_preference.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/layout/car_ui_two_action_preference.xml
@@ -23,6 +23,7 @@
     android:gravity="center_vertical"
     android:minHeight="?android:attr/listPreferredItemHeightSmall">
     <LinearLayout
+        android:id="@+id/car_ui_preference_container_without_widget"
         android:layout_width="0dp"
         android:layout_height="match_parent"
         android:layout_weight="1"
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-af/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-af/strings.xml
new file mode 100644
index 0000000..2c00927
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-af/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Soek …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Rollees af"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Rollees op"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Terug"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Soek"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Instellings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Oorloop"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Aan"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Af"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Maak toe"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Rollees word beperk terwyl jy bestuur"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Kenmerk is nie beskikbaar terwyl jy bestuur nie"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-am/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-am/strings.xml
new file mode 100644
index 0000000..0558e81
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-am/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ይፈልጉ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"ወደ ታች ይሸብልሉ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ወደ ላይ ይሸብልሉ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ተመለስ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ፈልግ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ቅንብሮች"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ትርፍ ፍሰት"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"አብራ"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ቅናሽ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"ዝጋ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"እየነዱ ማሸብለል ተገድቧል"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"እየነዱ ሳለ ባህሪው አይገኝም"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ar/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ar/strings.xml
new file mode 100644
index 0000000..4879cb5
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ar/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"بحث…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"التمرير للأسفل"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"التمرير للأعلى"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"رجوع"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"بحث"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"إعدادات"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"القائمة الكاملة"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"مفعّل"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"غير مفعَّل"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"إغلاق"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"هناك حد أقصى للتمرير على الشاشة أثناء القيادة."</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"لا تتوفَّر هذه الميزة أثناء القيادة."</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-as/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-as/strings.xml
new file mode 100644
index 0000000..060f64e
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-as/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"সন্ধান কৰক…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"তললৈ স্ক্ৰ’ল কৰক"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ওপৰলৈ স্ক্ৰ’ল কৰক"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"উভতি যাওক"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"সন্ধান কৰক"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ছেটিংসমূহ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"অভাৰফ্ল’"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"অন আছে"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"অফ আছে"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"বন্ধ কৰক"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"গাড়ী চলাই থকা সময়ত স্ক্ৰ’ল কৰাটো সীমিত কৰা হৈছে"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"গাড়ী চলাই থকা সময়ত এই সুবিধাটো উপলব্ধ নহয়"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-az/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-az/strings.xml
new file mode 100644
index 0000000..9f0472e
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-az/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Axtarış…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Aşağı sürüşdürün"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Yuxarı sürüşdürün"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Geri"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Axtarış"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Ayarlar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Kənara çıxma"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Aktiv"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Deaktiv"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Qapadın"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Sürüşdürmə avtomobil idarə edərkən məhdudlaşdırılır"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funksiya avtomobil idarə edərkən əlçatan deyil"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-b+sr+Latn/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..2584a57
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Pretražite…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Pomerite nadole"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Pomerite nagore"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Nazad"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Pretraži"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Podešavanja"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Preklopni meni"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Uključeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Isključeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Zatvori"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Pomeranje je ograničeno tokom vožnje"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkcija nije dostupna tokom vožnje"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-be/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-be/strings.xml
new file mode 100644
index 0000000..c66577d
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-be/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Пошук…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Прагартаць уніз"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Прагартаць уверх"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Пошук"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Налады"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Дадатковае меню"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Уключана"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Выключана"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Закрыць"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Функцыя прагортвання абмежаваная, калі аўтамабіль рухаецца"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Функцыя недаступная, калі аўтамабіль рухаецца"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-bg/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-bg/strings.xml
new file mode 100644
index 0000000..64d1e0a
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-bg/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Търсете…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Превъртане надолу"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Превъртане нагоре"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Търсене"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Настройки"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Препълване"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Вкл."</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Изкл."</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Затваряне"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Превъртането е ограничено при шофиране"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Функцията не е налице по време на шофиране"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-bn/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-bn/strings.xml
new file mode 100644
index 0000000..7f09486
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-bn/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"সার্চ করুন…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"নিচের দিকে স্ক্রল করুন"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"উপরের দিকে স্ক্রল করুন"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ফিরুন"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"সার্চ মেনু"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"সেটিংস"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ওভারফ্লো মেনু"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"চালু"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"বন্ধ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"বন্ধ করুন"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"গাড়ি চালানোর সময় স্ক্রলিং ফিচার সীমিতভাবে ব্যবহার করা যাবে"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"গাড়ি চালানোর সময় এই ফিচার কাজ করবে না"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-bs/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-bs/strings.xml
new file mode 100644
index 0000000..7295dac
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-bs/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Pretražite…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Klizanje prema dolje"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Klizanje prema gore"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Nazad"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Pretraživanje"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Postavke"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Preklopni meni"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Uključeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Isključeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Zatvori"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Klizanje je ograničeno tokom vožnje"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkcija nije dostupna tokom vožnje"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ca/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ca/strings.xml
new file mode 100644
index 0000000..a19a663
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ca/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Cerca…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Desplaça cap avall"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Desplaça cap amunt"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Enrere"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Cerca"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Configuració"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Menú addicional"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Activat"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Desactivat"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Tanca"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"El desplaçament està limitat mentre condueixes"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Aquesta funció no està disponible mentre condueixes"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-cs/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-cs/strings.xml
new file mode 100644
index 0000000..16ad755
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-cs/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Vyhledat…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Posunout dolů"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Posunout nahoru"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Zpět"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Hledat"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Nastavení"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Rozbalovací nabídka"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Zap"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Vyp"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Zavřít"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Posouvání zobrazení je při řízení omezeno"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkce při řízení není dostupná"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-da/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-da/strings.xml
new file mode 100644
index 0000000..80d4a64
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-da/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Søg…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Rul ned"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Rul op"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Tilbage"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Søg"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Indstillinger"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overløb"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Til"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Fra"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Luk"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Rullefunktionen er begrænset under kørsel"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funktionen er ikke tilgængelig, mens du kører"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-de/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-de/strings.xml
new file mode 100644
index 0000000..8a76bd3
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-de/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Suchen…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Nach unten scrollen"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Nach oben scrollen"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Zurück"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Suchen"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Einstellungen"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Dreipunkt-Menü"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"An"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Aus"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Schließen"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scrollen während der Fahrt eingeschränkt"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funktion während der Fahrt nicht verfügbar"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-el/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-el/strings.xml
new file mode 100644
index 0000000..1819ec2
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-el/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Αναζήτηση…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Κύλιση προς τα κάτω"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Κύλιση προς τα επάνω"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Πίσω"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Αναζήτηση"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Ρυθμίσεις"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Υπερχείλιση"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Ενεργό"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Ανενεργή"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Κλείσιμο"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Η κύλιση είναι περιορισμένη κατά τη διάρκεια της οδήγησης."</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Η λειτουργία δεν διατίθεται κατά τη διάρκεια της οδήγησης."</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-en-rAU/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..fb25c85
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-en-rAU/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overflow"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-en-rCA/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..fb25c85
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-en-rCA/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overflow"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-en-rGB/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..fb25c85
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-en-rGB/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overflow"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-en-rIN/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..fb25c85
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-en-rIN/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Search…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Scroll down"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Scroll up"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Back"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Settings"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overflow"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Close"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scrolling limited while driving"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Feature not available while driving"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-en-rXC/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..82c6ca1
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-en-rXC/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎Search…‎‏‎‎‏‎"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎Scroll down‎‏‎‎‏‎"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎Scroll up‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎Back‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎Search‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎Settings‎‏‎‎‏‎"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎Overflow‎‏‎‎‏‎"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎On‎‏‎‎‏‎"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎Off‎‏‎‎‏‎"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎Close‎‏‎‎‏‎"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎Scrolling limited while driving‎‏‎‎‏‎"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎Feature not available while driving‎‏‎‎‏‎"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-es-rUS/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..4904ad4
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-es-rUS/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Buscar…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Desplazamiento hacia abajo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Desplazamiento hacia arriba"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Atrás"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Buscar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Configuración"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Ampliado"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Sí"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"No"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Cerrar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"La función de desplazamiento se limita al conducir"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Esta función no está disponible mientras conduces"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-es/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-es/strings.xml
new file mode 100644
index 0000000..171134a
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-es/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Realiza una búsqueda…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Desplazarse hacia abajo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Desplazarse hacia arriba"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Atrás"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Buscar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Ajustes"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Menú adicional"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Activado"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Desactivado"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Cerrar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Desplazamiento limitado mientras conduces"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Función no disponible mientras conduces"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-et/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-et/strings.xml
new file mode 100644
index 0000000..bb5092c
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-et/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Otsing …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Keri alla"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Keri üles"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Tagasi"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Otsi"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Seaded"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Ületäide"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Sees"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Väljas"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Sule"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Kerimine on sõitmise ajal piiratud"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funktsioon pole sõidu ajal saadaval"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-eu/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-eu/strings.xml
new file mode 100644
index 0000000..af4e757
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-eu/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Bilatu…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Egin behera"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Egin gora"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Atzera"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Bilaketa"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Ezarpenak"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Luzapena"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Aktibatuta"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Desaktibatuta"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Itxi"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Gora edo behera egiteko eginbidea mugatuta dago gidatu bitartean"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Eginbide hau ezin da erabili gidatu bitartean"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-fa/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-fa/strings.xml
new file mode 100644
index 0000000..1ddc1df
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-fa/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"جستجو…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"پیمایش به پایین"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"پیمایش به بالا"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"برگشت"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"جستجو"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"تنظیمات"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"لبریزشده"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"روشن"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"خاموش"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"بستن"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"پیمایش درحین رانندگی محدود شده است"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"این ویژگی هنگام رانندگی در دسترس نیست"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-fi/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-fi/strings.xml
new file mode 100644
index 0000000..31c1e62
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-fi/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Hae…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Vieritä alas"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Vieritä ylös"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Takaisin"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Haku"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Asetukset"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Ylivuoto"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Päällä"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Pois"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Sulje"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Vierittämistä rajoitettu ajon aikana"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Ominaisuus ei ole käytettävissä ajon aikana"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-fr-rCA/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..a894032
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-fr-rCA/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Rechercher…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Faire défiler vers le bas"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Faire défiler vers le haut"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Retour"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Rechercher"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Paramètres"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Menu déroulant"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Activé"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Désactivé"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Fermer"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Le défilement de l\'écran est limité durant la conduite"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Cette fonctionnalité n\'est pas accessible durant la conduite"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-fr/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-fr/strings.xml
new file mode 100644
index 0000000..8776859
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-fr/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Rechercher…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Défiler vers le bas"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Défiler vers le haut"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Retour"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Rechercher"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Paramètres"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Menu à développer"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Activé"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Désactivé"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Fermer"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Défilement limité lorsque vous conduisez"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Fonctionnalité non disponible lorsque vous conduisez"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-gl/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-gl/strings.xml
new file mode 100644
index 0000000..7882edf
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-gl/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Busca…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Desprazarse cara abaixo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Desprazarse cara arriba"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Atrás"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Buscar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Configuración"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Elemento do menú adicional"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Si"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Non"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Pechar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"O desprazamento está limitado mentres conduces"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Esta función non está dispoñible mentres conduces"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-gu/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-gu/strings.xml
new file mode 100644
index 0000000..25d6fbc
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-gu/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"શોધો…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"નીચે સ્ક્રોલ કરો"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ઉપર સ્ક્રોલ કરો"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"પાછળ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"શોધો"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"સેટિંગ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ઓવરફ્લો"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ચાલુ"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"બંધ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"બંધ કરો"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ડ્રાઇવિંગ કરતી વખતે સ્ક્રોલ કરવું મર્યાદિત છે"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ડ્રાઇવિંગ કરતી વખતે આ સુવિધા ઉપલબ્ધ રહેશે નહીં"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-hi/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-hi/strings.xml
new file mode 100644
index 0000000..21aaf3c
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-hi/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"खोजें…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"नीचे की ओर स्क्रोल करें"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ऊपर की ओर स्क्रोल करें"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"वापस जाएं"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"खोजें"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"सेटिंग"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ओवरफ़्लो मेन्यू"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"चालू है"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"बंद है"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"बंद करें"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"गाड़ी चलाते समय इससे ज़्यादा स्क्रोल नहीं कर सकते"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"गाड़ी चलाते समय इस सुविधा का इस्तेमाल नहीं किया जा सकता"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-hr/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-hr/strings.xml
new file mode 100644
index 0000000..1bc74b5
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-hr/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Pretražite…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Pomak prema dolje"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Pomak prema gore"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Natrag"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Pretraži"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Postavke"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Dodatno"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Uključeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Isključeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Zatvori"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Pomicanje je ograničeno tijekom vožnje"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Značajka nije dostupna tijekom vožnje"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-hu/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-hu/strings.xml
new file mode 100644
index 0000000..912809b
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-hu/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Keresés…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Görgetés lefelé"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Görgetés felfelé"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Vissza"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Keresés"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Beállítások"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"További elemeket tartalmazó menü"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Be"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Ki"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Bezárás"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Vezetés közben a görgetés korlátozott"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Vezetés közben nem áll rendelkezésre a funkció"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-hy/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-hy/strings.xml
new file mode 100644
index 0000000..bed2d2c
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-hy/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Որոնում…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Ոլորել վար"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Ոլորել վեր"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Հետ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Որոնել"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Կարգավորումներ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Լրացուցիչ ընտրացանկ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Միացված է"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Անջատված է"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Փակել"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Վարելու ընթացքում ոլորումը սահմանափակված է"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Վարելու ընթացքում գործառույթը հասանելի չէ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-in/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-in/strings.xml
new file mode 100644
index 0000000..b3d7063
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-in/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Telusuri…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Scroll ke bawah"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Scroll ke atas"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Kembali"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Penelusuran"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Setelan"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Tambahan"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Aktif"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Nonaktif"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Tutup"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Men-scroll dibatasi saat mengemudi"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Fitur tidak tersedia saat mengemudi"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-is/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-is/strings.xml
new file mode 100644
index 0000000..61d2891
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-is/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Leita…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Fletta niður"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Fletta upp"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Til baka"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Leit"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Stillingar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Yfirflæði"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Kveikt"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Slökkt"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Loka"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Fletting er takmörkuð meðan á akstri stendur"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Þessi eiginleiki er ekki í boði meðan á akstri stendur"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-it/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-it/strings.xml
new file mode 100644
index 0000000..2cb178a
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-it/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Cerca…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Scorri verso il basso"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Scorri verso l\'alto"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Indietro"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Cerca"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Impostazioni"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Extra"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"On"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Chiudi"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scorrimento limitato durante la guida"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funzionalità non disponibile durante la guida"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-iw/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-iw/strings.xml
new file mode 100644
index 0000000..746dfbc
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-iw/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"חיפוש…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"גלילה למטה"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"גלילה למעלה"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"חזרה"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"חיפוש"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"הגדרות"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"אפשרויות נוספות"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"פועל"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"כבוי"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"סגירה"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"הגלילה מוגבלת בזמן הנהיגה"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"התכונה לא זמינה בזמן הנהיגה"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ja/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ja/strings.xml
new file mode 100644
index 0000000..7d8eac1
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ja/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"検索…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"下にスクロール"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"上にスクロール"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"戻る"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"検索"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"設定"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"オーバーフロー"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ON"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"OFF"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"閉じる"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"運転中のスクロール操作は制限されています"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"この機能は運転中は利用できません"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ka/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ka/strings.xml
new file mode 100644
index 0000000..1350fe8
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ka/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ძიება…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"ქვემოთ გადაადგილება"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ზემოთ გადაადგილება"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"უკან"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ძიება"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"პარამეტრები"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"გადავსება"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ჩართულია"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"გამორთულია"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"დახურვა"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"გადაადგილება შეზღუდულია მანქანის მართვისას"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ფუნქცია მიუწვდომელია მანქანის მართვისას"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-kk/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-kk/strings.xml
new file mode 100644
index 0000000..ab8a259
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-kk/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Іздеу…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Төмен айналдыру"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Жоғары айналдыру"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Артқа"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Іздеу"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Параметрлер"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Қосымша мәзір"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Қосулы"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Өшірулі"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Жабу"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Көлік жүргізу кезінде айналдыру мүмкіндігі шектеледі."</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Көлік жүргізу кезінде бұл функция жұмыс істемейді."</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-km/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-km/strings.xml
new file mode 100644
index 0000000..17d3293
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-km/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ស្វែងរក…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"រំកិលចុះក្រោម"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"រំកិល​​ឡើង​លើ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ថយក្រោយ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ស្វែងរក"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ការកំណត់"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ម៉ឺនុយបន្ថែម"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"បើក"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"បិទ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"បិទ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ការរំកិលបានកំណត់ ខណៈពេលកំពុង​បើកបរ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"មិនអាច​ប្រើមុខងារ​នេះបានទេ ខណៈពេល​កំពុង​បើកបរ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-kn/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-kn/strings.xml
new file mode 100644
index 0000000..3d312d1
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-kn/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ಹುಡುಕಿ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"ಕೆಳಗೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ಮೇಲೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ಹಿಂದಕ್ಕೆ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ಹುಡುಕಾಟ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ಓವರ್‌ಫ್ಲೋ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ಆನ್ ಆಗಿದೆ"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"ಮುಚ್ಚಿ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ಸ್ಕ್ರಾಲ್ ಮಾಡುವಿಕೆ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸೀಮಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ಈ ವೈಶಿಷ್ಟ್ಯ ಲಭ್ಯವಿಲ್ಲ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ko/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ko/strings.xml
new file mode 100644
index 0000000..d992a45
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ko/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"검색…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"아래로 스크롤"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"위로 스크롤"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"뒤로"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"검색"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"설정"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"더보기"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"사용 설정됨"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"사용 중지됨"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"닫기"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"운전 중에는 스크롤이 제한됨"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"운전 중에 사용할 수 없는 기능입니다."</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ky/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ky/strings.xml
new file mode 100644
index 0000000..7340674
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ky/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Издөө…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Төмөн сыдыруу"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Жогору сыдыруу"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Артка"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Издөө"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Жөндөөлөр"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Кошумча меню"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Күйүк"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Өчүк"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Жабуу"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Унаа айдаганда сыдыруу чектелет"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Унаа айдаганда бул функция жеткиликтүү эмес"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-lo/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-lo/strings.xml
new file mode 100644
index 0000000..0422da3
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-lo/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ຊອກຫາ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"ເລື່ອນລົງ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ເລື່ອນຂຶ້ນ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ກັບຄືນ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ຊອກຫາ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ການຕັ້ງຄ່າ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ລົ້ນ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ເປີດ"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ປິດ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"ປິດ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ຈຳກັດການເລື່ອນໃນຂະນະທີ່ຂັບລົດ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ຄຸນສົມບັດບໍ່ສາມາດໃຊ້ໄດ້ໃນເວລາຂັບລົດ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-lt/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-lt/strings.xml
new file mode 100644
index 0000000..09539cc
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-lt/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Ieškoti…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Slinkti žemyn"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Slinkti aukštyn"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Atgal"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Paieška"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Nustatymai"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Perpildymas"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Įjungta"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Išjungta"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Uždaryti"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Slinkimas apribotas vairuojant"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkcija nepasiekiama vairuojant"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-lv/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-lv/strings.xml
new file mode 100644
index 0000000..1df9318
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-lv/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Meklēt…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Ritināt uz leju"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Ritināt uz augšu"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Atpakaļ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Meklēšana"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Iestatījumi"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Pārpilde"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Ieslēgta"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Izslēgta"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Aizvērt"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Ritināšana ir ierobežota braukšanas laikā."</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkcija nav pieejama braukšanas laikā."</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-mk/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-mk/strings.xml
new file mode 100644
index 0000000..413e340
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-mk/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Пребарувајте…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Оди надолу"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Оди нагоре"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Пребарување"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Поставки"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Прелевање"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Вклучено"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Исклучено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Затвори"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Лизгањето е ограничено при возење"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Функцијата не е достапна при возење"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ml/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ml/strings.xml
new file mode 100644
index 0000000..f588c60
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ml/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"തിരയുക…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"താഴോട്ട് സ്‌ക്രോൾ ചെയ്യുക"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"മുകളിലോട്ട് സ്‌ക്രോൾ ചെയ്യുക"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"മടങ്ങുക"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"തിരയുക"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ക്രമീകരണം"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ഓവർഫ്ലോ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ഓണാണ്"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ഓഫാണ്"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"അടയ്‌ക്കുക"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ഡ്രൈവ് ചെയ്യുമ്പോൾ സ്ക്രോൾ ചെയ്യൽ പരിമിതപ്പെടുത്തിയിരിക്കുന്നു"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ഡ്രൈവ് ചെയ്യുമ്പോൾ ഫീച്ചർ ലഭ്യമല്ല"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-mn/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-mn/strings.xml
new file mode 100644
index 0000000..db34cd7
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-mn/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Хайх..."</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Доош гүйлгэх"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Дээш гүйлгэх"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Буцах"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Хайлт"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Тохиргоо"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Халих"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Асаалттай"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Унтраалттай"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Хаах"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Жолоо барьж байх үед гүйлгэхийг хязгаарласан"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Жолоо барьж байх үед онцлог боломжгүй"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-mr/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-mr/strings.xml
new file mode 100644
index 0000000..c8f7a42
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-mr/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"शोधा…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"खाली स्क्रोल करा"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"वर स्क्रोल करा"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"मागे जा"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Search"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"सेटिंग्ज"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ओव्हरफ्लो"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"सुरू आहे"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"बंद आहे"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"बंद करा"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ड्राइव्ह करताना स्क्रोलिंग मर्यादित केली आहे"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ड्राइव्ह करताना वैशिष्ट्य उपलब्ध नाही"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ms/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ms/strings.xml
new file mode 100644
index 0000000..7ea4fbb
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ms/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Cari…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Tatal ke bawah"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Tatal ke atas"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Kembali"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Cari"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Tetapan"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Limpahan"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Hidup"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Mati"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Tutup"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Penatalan terhad semasa memandu"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Ciri tidak tersedia semasa anda memandu"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-my/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-my/strings.xml
new file mode 100644
index 0000000..55f37b1
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-my/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ရှာဖွေရန်…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"အောက်သို့ လှိမ့်ရန်"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"အပေါ်သို့ လှိမ့်ရန်"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"နောက်သို့"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ရှာဖွေခြင်း"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ဆက်တင်များ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"အပို"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ဖွင့်ထားသည်"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ပိတ်ထားသည်"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"ပိတ်ရန်"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ယာဉ်မောင်းနေစဉ် အပေါ်အောက်ရွှေ့ခြင်းကို ကန့်သတ်ထားသည်"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ကားမောင်းနေစဉ် ဝန်ဆောင်မှု မရနိုင်ပါ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-nb/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-nb/strings.xml
new file mode 100644
index 0000000..d490393
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-nb/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Søk"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Rull ned"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Rull opp"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Tilbake"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Søk"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Innstillinger"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overflyt"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"På"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Av"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Lukk"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Rullefunksjonen er begrenset mens du kjører"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funksjonen er ikke tilgjengelig når du kjører"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ne/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ne/strings.xml
new file mode 100644
index 0000000..90124de
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ne/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"खोज्नुहोस्…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"तलतिर स्क्रोल गर्नुहोस्"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"माथितिर स्क्रोल गर्नु…"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"पछाडि"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"खोज्नुहोस्"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"सेटिङ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ओभरफ्लो"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"सुचारू छ"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"बन्द छ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"बन्द गर्नुहोस्"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"सवारी साधन चलाइरहेका बेला योभन्दा बढी स्क्रोल गर्न पाइँदैन"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"सवारी साधन चलाइरहेका बेला यो सुविधा उपलब्ध हुँदैन"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-nl/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-nl/strings.xml
new file mode 100644
index 0000000..fe36ab0
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-nl/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Zoeken…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Omlaag scrollen"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Omhoog scrollen"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Terug"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Zoeken"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Instellingen"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overloop"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Aan"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Uit"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Sluiten"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scrollen is beperkt tijdens het rijden"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Functie niet beschikbaar tijdens het rijden"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-or/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-or/strings.xml
new file mode 100644
index 0000000..d84ae51
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-or/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ସନ୍ଧାନ କରନ୍ତୁ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"ତଳକୁ ସ୍କ୍ରୋଲ୍ କରନ୍ତୁ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ଉପରକୁ ସ୍କ୍ରୋଲ୍ କରନ୍ତୁ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ସନ୍ଧାନ କରନ୍ତୁ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ସେଟିଂସ୍"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ଓଭରଫ୍ଲୋ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ଚାଲୁ ଅଛି"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ବନ୍ଦ ଅଛି"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"ବନ୍ଦ କରନ୍ତୁ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ଗାଡ଼ି ଚଲାଇବା ସମୟରେ ସ୍କ୍ରୋଲିଂ ସୀମିତ ଅଟେ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ଗାଡ଼ି ଚଲାଇବା ସମୟରେ ଫିଚର୍ ଉପଲବ୍ଧ ହେବ ନାହିଁ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-pa/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-pa/strings.xml
new file mode 100644
index 0000000..576c6d4
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-pa/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ਖੋਜ…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"ਹੇਠਾਂ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ਉੱਪਰ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ਪਿੱਛੇ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ਖੋਜ"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ਸੈਟਿੰਗਾਂ"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ਓਵਰਫ਼ਲੋ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ਚਾਲੂ"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ਬੰਦ"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"ਬੰਦ ਕਰੋ"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ਚਲਦੀ ਗੱਡੀ ਵਿੱਚ ਸਕ੍ਰੋਲ ਕਰਨ ਨੂੰ ਸੀਮਤ ਕੀਤਾ ਗਿਆ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ਚੱਲਦੀ ਗੱਡੀ ਵਿੱਚ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-pl/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-pl/strings.xml
new file mode 100644
index 0000000..85df36d
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-pl/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Szukaj…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Przewiń w dół"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Przewiń w górę"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Wstecz"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Szukaj"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Ustawienia"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Rozszerzone menu"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Wł."</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Wył."</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Zamknij"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Podczas jazdy można przewijać tylko w ograniczonym zakresie"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkcja niedostępna podczas jazdy"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-port/bools.xml b/car-ui-lib/car-ui-lib/src/main/res/values-port/bools.xml
new file mode 100644
index 0000000..136b3e9
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-port/bools.xml
@@ -0,0 +1,26 @@
+<?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>
+   <!-- 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>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-pt-rPT/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..ad969e8
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-pt-rPT/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Pesquisar…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Deslocar para baixo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Deslocar para cima"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Anterior"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Pesquisar"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Definições"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Menu adicional"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Ativado"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Desativado"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Fechar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Deslocamento limitado durante a condução"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funcionalidade não disponível durante a condução."</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-pt/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-pt/strings.xml
new file mode 100644
index 0000000..98a3746
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-pt/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Pesquisar…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Rolar para baixo"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Rolar para cima"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Voltar"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Pesquisa"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Configurações"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Menu flutuante"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Ativada"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Desativada"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Fechar"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"O recurso de rolagem fica limitado enquanto você dirige"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Recurso indisponível enquanto você dirige"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ro/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ro/strings.xml
new file mode 100644
index 0000000..3433253
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ro/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Căutați…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Derulați în jos"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Derulați în sus"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Înapoi"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Căutați"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Setări"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Suplimentar"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Activat"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Dezactivat"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Închideți"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Derularea este restricționată în timp ce conduceți"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funcția nu este disponibilă când conduceți"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ru/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ru/strings.xml
new file mode 100644
index 0000000..50c7efd
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ru/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Поиск…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Прокрутить вниз"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Прокрутить вверх"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Поиск"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Настройки"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Дополнительное меню"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Включено"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Выключено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Закрыть"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Функция прокручивания ограничена во время вождения."</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Функция недоступна во время вождения."</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-si/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-si/strings.xml
new file mode 100644
index 0000000..3693869
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-si/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"සොයන්න…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"පහළට අනුචලනය කරන්න"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"ඉහළට අනුචලනය කරන්න"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"ආපසු"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"සෙවීම"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"සැකසීම්"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ඉතිරියනය"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ක්‍රියාත්මකයි"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ක්‍රියාවිරහිතයි"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"වසන්න"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"රිය පදවන අතරතුර සීමිත අනුචලනය"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"රිය පදවන අතරේ විශේෂාංගය නොමැත"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-sk/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-sk/strings.xml
new file mode 100644
index 0000000..a9c0565
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-sk/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Vyhľadať…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Posunúť nadol"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Posunúť nahor"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Späť"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Hľadať"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Nastavenia"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Rozšírená ponuka"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Zap."</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Vyp."</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Zavrieť"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Posúvanie zobrazenia je počas jazdy obmedzené"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkcia nie je k dispozícii počas jazdy"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-sl/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-sl/strings.xml
new file mode 100644
index 0000000..ac0940f
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-sl/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Iskanje …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Pomik navzdol"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Pomik navzgor"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Nazaj"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Išči"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Nastavitve"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Element menija z dodatnimi elementi"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Vklopljeno"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Izklopljeno"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Zapri"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Pomikanje je med vožnjo omejeno"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funkcija med vožnjo ni na voljo"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-sq/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-sq/strings.xml
new file mode 100644
index 0000000..9208197
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-sq/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Kërko…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Lëviz poshtë"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Lëviz lart"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Pas"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Kërko"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Cilësimet"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Tejkalo"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Aktiv"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Joaktiv"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Mbyll"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Lëvizja është e kufizuar gjatë drejtimit të makinës"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Veçoria nuk ofrohet gjatë drejtimit të makinës"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-sr/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-sr/strings.xml
new file mode 100644
index 0000000..6a6fb9b
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-sr/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Претражите…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Померите надоле"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Померите нагоре"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Претражи"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Подешавања"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Преклопни мени"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Укључено"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Искључено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Затвори"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Померање је ограничено током вожње"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Функција није доступна током вожње"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-sv/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-sv/strings.xml
new file mode 100644
index 0000000..e14b299
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-sv/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Sök …"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Scrolla nedåt"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Scrolla uppåt"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Tillbaka"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Sök"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Inställningar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Fler menyalternativ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"På"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Av"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Stäng"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Scrollning begränsas när du kör"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Funktionen är inte tillgänglig när du kör"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-sw/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-sw/strings.xml
new file mode 100644
index 0000000..3d6ed8a
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-sw/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Tafuta…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Sogeza chini"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Sogeza juu"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Nyuma"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Tafuta"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Mipangilio"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Vipengee vya ziada"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Imewashwa"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Imezimwa"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Funga"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Umedhibitiwa kusogeza unapoendesha gari"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Kipengele hakipatikani unapoendesha gari"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ta/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ta/strings.xml
new file mode 100644
index 0000000..abd4b98
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ta/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"தேடுக…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"கீழே செல்லும்"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"மேலே செல்லும்"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"பின்செல்வதற்கான பட்டன்"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"தேடு"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"அமைப்புகள்"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"ஓவர்ஃப்லோ"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ஆன்"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ஆஃப்"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"மூடுக"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"வாகனம் ஓட்டிக் கொண்டிருப்பதனால் இதற்குமேல் ஸ்க்ரோல் செய்ய முடியாது"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"வாகனம் ஓட்டும்போது இந்த அம்சத்தைப் பயன்படுத்த இயலாது"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-te/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-te/strings.xml
new file mode 100644
index 0000000..e3422b8
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-te/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"వెతకండి…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"కిందికి స్క్రోల్ చేయండి"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"పైకి స్క్రోల్ చేయండి"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"వెనుకకు"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"శోధన"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"సెట్టింగ్‌లు"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"అతివ్యాప్తి అంశాలు"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"ఆన్‌లో ఉంది"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ఆఫ్‌లో ఉంది"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"మూసివేయండి"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"డ్రైవింగ్ చేస్తున్నప్పుడు స్క్రోలింగ్ పరిమితంగా ఉంటుంది"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"డ్రైవింగ్ చేస్తున్నప్పుడు ఈ ఫీచర్ అందుబాటులో ఉండదు"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-th/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-th/strings.xml
new file mode 100644
index 0000000..837ff9c
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-th/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"ค้นหา…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"เลื่อนลง"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"เลื่อนขึ้น"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"กลับ"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"ค้นหา"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"การตั้งค่า"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"รายการเพิ่มเติม"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"เปิด"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"ปิด"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"ปิด"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"การเลื่อนถูกจำกัดไม่ให้ใช้งานขณะขับรถ"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ฟีเจอร์ไม่พร้อมใช้งานขณะขับรถ"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-tl/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-tl/strings.xml
new file mode 100644
index 0000000..3a8e981
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-tl/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Maghanap…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Mag-scroll pababa"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Mag-scroll pataas"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Bumalik"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Paghahanap"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Mga Setting"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Overflow"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"I-on"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"I-off"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Isara"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Limitado ang pag-scroll habang nagmamaneho"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Hindi available ang feature habang nagmamaneho"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-tr/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-tr/strings.xml
new file mode 100644
index 0000000..f9e923f
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-tr/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Ara…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Aşağı kaydır"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Yukarı kaydır"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Geri"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Ara"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Ayarlar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Taşma"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Açık"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Kapalı"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Kapat"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"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="7490306547860308268">"Sürüş sırasında bu özellik kullanılamaz"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-uk/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-uk/strings.xml
new file mode 100644
index 0000000..0ecec7e
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-uk/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Пошук…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Прокрутити вниз"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Прокрутити вгору"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Назад"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Пошук"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Налаштування"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Додаткове меню"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Увімкнено"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Вимкнено"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Закрити"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Прокручування обмежено під час водіння"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Функція недоступна під час руху автомобіля"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-ur/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-ur/strings.xml
new file mode 100644
index 0000000..23b9033
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-ur/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"تلاش کریں…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"نیچے اسکرول کریں"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"اوپر اسکرول کریں"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"پیچھے"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"تلاش کریں"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"ترتیبات"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"اوورفلو"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"آن ہے"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"آف ہے"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"بند کریں"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"ڈرائیونگ کے دوران اسکرولنگ محدود ہے"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"ڈرائیونگ کے دوران یہ خصوصیت دستیاب نہیں ہے"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-uz/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-uz/strings.xml
new file mode 100644
index 0000000..9735f60
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-uz/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Qidirish…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Pastga surish"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Tepaga surish"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Orqaga"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Qidiruv"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Sozlamalar"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Kengaytirilgan"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Yoniq"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Yoqilmagan"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Yopish"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Avtomobilda harakatlanayotganda aylantirish funksiyasi cheklangan"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Avtomobilda harakatlanayotganda bu funksiya ishlamaydi"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-vi/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-vi/strings.xml
new file mode 100644
index 0000000..d0ebb04
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-vi/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Tìm kiếm…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Cuộn xuống"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Cuộn lên"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Quay lại"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Tìm kiếm"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Cài đặt"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Trình đơn mục bổ sung"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Đang bật"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Đang tắt"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Đóng"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Tính năng cuộn bị hạn chế khi đang lái xe"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"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/car-ui-lib/src/main/res/values-zh-rCN/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..7c5a5b0
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"搜索…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"向下滚动"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"向上滚动"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"返回"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"搜索"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"设置"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"溢出菜单"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"开启"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"关闭"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"关闭"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"驾车时滚动操作受限"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"驾车时无法使用此功能"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-zh-rHK/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..2bd14e7
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-zh-rHK/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"搜尋…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"向下捲動"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"向上捲動"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"返回"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"搜尋"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"設定"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"展開式選單"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"已開啟"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"已關閉"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"關閉"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"捲動功能在駕駛時受限制"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"無法在駕駛時使用此功能"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-zh-rTW/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..1fc26f4
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"搜尋…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"向下捲動"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"向上捲動"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"返回"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"搜尋"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"設定"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"溢位"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"開啟"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"關閉"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"關閉"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"系統會限制開車時的捲動操作"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"開車時無法使用這項功能"</string>
+</resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values-zu/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values-zu/strings.xml
new file mode 100644
index 0000000..8955377
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values-zu/strings.xml
@@ -0,0 +1,31 @@
+<?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="8339474149462104372">"Sesha…"</string>
+    <string name="car_ui_scrollbar_page_down_button" msgid="746830252244551947">"Skrolela phansi"</string>
+    <string name="car_ui_scrollbar_page_up_button" msgid="965431866383176249">"Skrolela phezulu"</string>
+    <string name="car_ui_toolbar_nav_icon_content_description" msgid="6116610935599234725">"Emuva"</string>
+    <string name="car_ui_toolbar_menu_item_search_title" msgid="2988075382498202155">"Sesha"</string>
+    <string name="car_ui_toolbar_menu_item_settings_title" msgid="5206858558664840197">"Izilungiselelo"</string>
+    <string name="car_ui_toolbar_menu_item_overflow_title" msgid="9132512843297732890">"Ukuphuphuma"</string>
+    <string name="car_ui_preference_switch_on" msgid="2091385466752081649">"Vuliwe"</string>
+    <string name="car_ui_preference_switch_off" msgid="511096411523593697">"Valiwe"</string>
+    <string name="car_ui_alert_dialog_default_button" msgid="399078418913970003">"Vala"</string>
+    <string name="car_ui_scrolling_limited_message" msgid="5978003166159186378">"Ukuskrola kukhawulelwe uma ushayela"</string>
+    <string name="car_ui_restricted_while_driving" msgid="7490306547860308268">"Isici asitholakali ngenkathi ushayela"</string>
+</resources>
diff --git a/car-ui-lib/res/values/attrs.xml b/car-ui-lib/car-ui-lib/src/main/res/values/attrs.xml
similarity index 65%
rename from car-ui-lib/res/values/attrs.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/attrs.xml
index 4b06a60..e823bdf 100644
--- a/car-ui-lib/res/values/attrs.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/values/attrs.xml
@@ -144,4 +144,75 @@
     <attr name="carUiRecyclerViewStyle" format="reference" />
 
     <attr name="state_ux_restricted" format="boolean" />
+
+    <!-- Attributes for FocusArea. -->
+    <declare-styleable name="FocusArea">
+        <!-- The ID of a focusable descendant view which should be focused when the user nudges to
+             this FocusArea, if there was no view focused in the FocusArea or
+             car_ui_focus_area_default_focus_overrides_history is true. -->
+        <attr name="defaultFocus" format="reference"/>
+
+        <!-- The paddings of FocusArea highlight. It does't impact the paddings on its child views,
+             or vice versa. -->
+        <!-- The start padding of the FocusArea highlight. -->
+        <attr name="highlightPaddingStart" format="dimension"/>
+        <!-- The end padding of the FocusArea highlight. -->
+        <attr name="highlightPaddingEnd" format="dimension"/>
+        <!-- The top padding of the FocusArea highlight. -->
+        <attr name="highlightPaddingTop" format="dimension"/>
+        <!-- The bottom padding of the FocusArea highlight. -->
+        <attr name="highlightPaddingBottom" format="dimension"/>
+        <!-- The horizontal padding of the FocusArea highlight. It can be overridden by
+             highlightPaddingStart or highlightPaddingEnd. -->
+        <attr name="highlightPaddingHorizontal" format="dimension"/>
+        <!-- The vertical padding of the FocusArea highlight.  It can be overridden by
+             highlightPaddingTop or highlightPaddingBottom. -->
+        <attr name="highlightPaddingVertical" format="dimension"/>
+
+        <!-- The offset of the FocusArea's bounds. It only affects the perceived bounds for the
+             purposes of finding the nudge target. It doesn't affect the FocusArea's view bounds or
+             highlight bounds. The offset should only be used when FocusAreas are overlapping and
+             nudge interaction is ambiguous. -->
+        <!-- The offset of the FocusArea's start bound. -->
+        <attr name="startBoundOffset" format="dimension"/>
+        <!-- The offset of the FocusArea's end bound. -->
+        <attr name="endBoundOffset" format="dimension"/>
+        <!-- The offset of the FocusArea's top bound. -->
+        <attr name="topBoundOffset" format="dimension"/>
+        <!-- The offset of the FocusArea's bottom bound. -->
+        <attr name="bottomBoundOffset" format="dimension"/>
+        <!-- The offset of the FocusArea's horizontal bounds. It can be overridden by
+             startBoundOffset or endBoundOffset. -->
+        <attr name="horizontalBoundOffset" format="dimension"/>
+        <!-- The offset of the FocusArea's vertical bounds. It can be overridden by topBoundOffset
+             or bottomBoundOffset. -->
+        <attr name="verticalBoundOffset" format="dimension"/>
+
+        <!-- Attributes for nudge shortcut. Usually nudge is used to navigate to another FocusArea,
+             but when a nudge shortcut is specified, it's used to navigate to the given view within
+             the same FocusArea. The 2 attributes must be specified together. -->
+        <!-- The ID of the nudge shortcut view. -->
+        <attr name="nudgeShortcut" format="reference"/>
+        <!-- The direction of the nudge shortcut. -->
+        <attr name="nudgeShortcutDirection">
+            <!-- View.FOCUS_LEFT -->
+            <flag name="left" value="0x11" />
+            <!-- View.FOCUS_RIGHT -->
+            <flag name="right" value="0x42" />
+            <!-- View.FOCUS_UP -->
+            <flag name="up" value="0x21" />
+            <!-- View.FOCUS_DOWN -->
+            <flag name="down" value="0x82" />
+        </attr>
+
+        <!-- Attributes to specify the target FocusArea for a nudge. -->
+        <!-- The ID of the target FocusArea when nudging to the left. -->
+        <attr name="nudgeLeft" format="reference"/>
+        <!-- The ID of the target FocusArea when nudging to the right. -->
+        <attr name="nudgeRight" format="reference"/>
+        <!-- The ID of the target FocusArea when nudging up. -->
+        <attr name="nudgeUp" format="reference"/>
+        <!-- The ID of the target FocusArea when nudging down. -->
+        <attr name="nudgeDown" format="reference"/>
+    </declare-styleable>
 </resources>
diff --git a/car-ui-lib/res/values/bools.xml b/car-ui-lib/car-ui-lib/src/main/res/values/bools.xml
similarity index 82%
rename from car-ui-lib/res/values/bools.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/bools.xml
index d85e840..67efdca 100644
--- a/car-ui-lib/res/values/bools.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/values/bools.xml
@@ -55,4 +55,12 @@
     <!-- Whether to draw highlight (car_ui_focus_area_background_highlight) on top of the FocusArea
          but behind its children when the FocusArea's descendant gets focused. -->
     <bool name="car_ui_enable_focus_area_background_highlight">false</bool>
+    <!-- Whether to focus on the app:defaultFocus view when nudging to the FocusArea, even if there
+         was another view focused in the FocusArea. -->
+    <bool name="car_ui_focus_area_default_focus_overrides_history">true</bool>
+    <!-- Whether to clear FocusArea history when the user rotates the rotary controller. -->
+    <bool name="car_ui_clear_focus_area_history_when_rotating">true</bool>
+
+    <!--  Whether to log the escrow components check automatically for all the activities or not.  -->
+    <bool name="car_ui_escrow_check_components_automatically">false</bool>
 </resources>
diff --git a/car-ui-lib/res/values/colors.xml b/car-ui-lib/car-ui-lib/src/main/res/values/colors.xml
similarity index 87%
rename from car-ui-lib/res/values/colors.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/colors.xml
index db62ad2..d943920 100644
--- a/car-ui-lib/res/values/colors.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/values/colors.xml
@@ -45,5 +45,9 @@
     <color name="car_ui_preference_two_action_divider_color">#1fffffff</color>
 
     <!-- Rotary focus -->
-    <color name="car_ui_rotary_focus_color">#4b9eff</color>
+
+    <color name="car_ui_rotary_focus_stroke_color">#94CBFF</color>
+    <color name="car_ui_rotary_focus_fill_color">#3D94CBFF</color>
+    <color name="car_ui_rotary_focus_stroke_secondary_color">#0059B3</color>
+    <color name="car_ui_rotary_focus_fill_secondary_color">#3D0059B3</color>
 </resources>
diff --git a/car-ui-lib/res/values/dimens.xml b/car-ui-lib/car-ui-lib/src/main/res/values/dimens.xml
similarity index 98%
rename from car-ui-lib/res/values/dimens.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/dimens.xml
index 3910c60..f0c2a8b 100644
--- a/car-ui-lib/res/values/dimens.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/values/dimens.xml
@@ -127,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>
@@ -206,4 +207,8 @@
     <dimen name="car_ui_list_item_check_box_end_inset">@dimen/car_ui_list_item_end_inset</dimen>
     <dimen name="car_ui_list_item_check_box_icon_container_width">@dimen/car_ui_list_item_icon_container_width</dimen>
 
+    <!-- Rotary focus highlight  -->
+
+    <dimen name="car_ui_rotary_focus_stroke_width">8dp</dimen>
+
 </resources>
diff --git a/car-ui-lib/res/values/drawables.xml b/car-ui-lib/car-ui-lib/src/main/res/values/drawables.xml
similarity index 100%
rename from car-ui-lib/res/values/drawables.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/drawables.xml
diff --git a/car-ui-lib/res/values/ids.xml b/car-ui-lib/car-ui-lib/src/main/res/values/ids.xml
similarity index 85%
rename from car-ui-lib/res/values/ids.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/ids.xml
index 2c23ac3..3f0c9b1 100644
--- a/car-ui-lib/res/values/ids.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/values/ids.xml
@@ -16,4 +16,7 @@
 <resources>
     <!-- Id used for the search button when using Toolbar.createSearch() method -->
     <item name="search" type="id"/>
+
+    <!-- Id used for in car_ui_toolbar_menu_item.xml -->
+    <item name="car_ui_toolbar_menu_item_text_container" type="id"/>
 </resources>
diff --git a/car-ui-lib/car-ui-lib/src/main/res/values/integers.xml b/car-ui-lib/car-ui-lib/src/main/res/values/integers.xml
new file mode 100644
index 0000000..b2c737b
--- /dev/null
+++ b/car-ui-lib/car-ui-lib/src/main/res/values/integers.xml
@@ -0,0 +1,37 @@
+<?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>
+    <!-- Default max string length -->
+    <integer name="car_ui_default_max_string_length">120</integer>
+    <integer name="car_ui_scrollbar_longpress_initial_delay">1000</integer>
+    <integer name="car_ui_scrollbar_longpress_repeat_interval">100</integer>
+
+    <!-- Type of FocusHistoryCache. The values are defined in RotaryCache. 1 means the cache
+    is disabled, 2 means entries in the cache will expire after a period of time, and 3 means
+    elements in the cache will never expire. -->
+    <integer name="car_ui_focus_history_cache_type">2</integer>
+    <!-- How many milliseconds before the entry in FocusHistoryCache expires. Must be positive value
+     when car_ui_focus_history_cache_type is 2. -->
+    <integer name="car_ui_focus_history_expiration_period_ms">10000</integer>
+
+    <!-- Type of FocusAreaHistoryCache. The values are defined in RotaryCache. 1 means the
+    cache is disabled, 2 means entries in the cache will expire after a period of time, and 3 means
+    elements in the cache will never expire. -->
+    <integer name="car_ui_focus_area_history_cache_type">2</integer>
+    <!-- How many milliseconds before an entry in FocusAreaHistoryCache expires. Must be positive
+    value when car_ui_focus_area_history_cache_type is 2. -->
+    <integer name="car_ui_focus_area_history_expiration_period_ms">10000</integer>
+</resources>
diff --git a/car-ui-lib/res/values/strings.xml b/car-ui-lib/car-ui-lib/src/main/res/values/strings.xml
similarity index 92%
rename from car-ui-lib/res/values/strings.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/strings.xml
index ff101f7..46a29fe 100644
--- a/car-ui-lib/res/values/strings.xml
+++ b/car-ui-lib/car-ui-lib/src/main/res/values/strings.xml
@@ -48,7 +48,10 @@
     <string name="car_ui_preference_switch_off">Off</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/car-ui-lib/src/main/res/values/styles.xml
similarity index 100%
rename from car-ui-lib/res/values/styles.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/styles.xml
diff --git a/car-ui-lib/res/values/themes.xml b/car-ui-lib/car-ui-lib/src/main/res/values/themes.xml
similarity index 100%
rename from car-ui-lib/res/values/themes.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/themes.xml
diff --git a/car-ui-lib/res/values/values.xml b/car-ui-lib/car-ui-lib/src/main/res/values/values.xml
similarity index 100%
rename from car-ui-lib/res/values/values.xml
rename to car-ui-lib/car-ui-lib/src/main/res/values/values.xml
diff --git a/car-ui-lib/sharedlibrary/Android.bp b/car-ui-lib/car-ui-lib/src/test/Android.bp
similarity index 69%
copy from car-ui-lib/sharedlibrary/Android.bp
copy to car-ui-lib/car-ui-lib/src/test/Android.bp
index 1abaa30..5c48329 100644
--- a/car-ui-lib/sharedlibrary/Android.bp
+++ b/car-ui-lib/car-ui-lib/src/test/Android.bp
@@ -1,4 +1,3 @@
-
 //
 // Copyright (C) 2020 The Android Open Source Project
 //
@@ -14,18 +13,15 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+//###########################################################
+// CarUi lib just for Robolectric test target.     #
+//###########################################################
 android_app {
-    name: "car-ui-lib-sharedlibrary",
-    visibility: [
-        "//packages/apps/Car/libs/car-ui-lib/tests/PaintBooth:__pkg__",
-    ],
-    platform_apis: true,
+    name: "CarUiRobolectricTestApp",
     resource_dirs: ["res"],
-    aaptflags: ["--shared-lib"],
-    optimize: {
-        enabled: false,
-    },
-    static_libs: [
-        "car-ui-lib",
-    ],
+    platform_apis: true,
+    privileged: true,
+    libs: ["android.car"],
+    static_libs: ["car-ui-lib"],
 }
+
diff --git a/car-ui-lib/tests/robotests/AndroidManifest.xml b/car-ui-lib/car-ui-lib/src/test/AndroidManifest.xml
similarity index 95%
rename from car-ui-lib/tests/robotests/AndroidManifest.xml
rename to car-ui-lib/car-ui-lib/src/test/AndroidManifest.xml
index b62579f..eb83765 100644
--- a/car-ui-lib/tests/robotests/AndroidManifest.xml
+++ b/car-ui-lib/car-ui-lib/src/test/AndroidManifest.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-    Copyright (C) 2019 Google Inc.
+    Copyright (C) 2020 Google Inc.
 
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
diff --git a/car-ui-lib/sharedlibrary/Android.bp b/car-ui-lib/car-ui-lib/src/test/java/Android.bp
similarity index 65%
copy from car-ui-lib/sharedlibrary/Android.bp
copy to car-ui-lib/car-ui-lib/src/test/java/Android.bp
index 1abaa30..551d985 100644
--- a/car-ui-lib/sharedlibrary/Android.bp
+++ b/car-ui-lib/car-ui-lib/src/test/java/Android.bp
@@ -1,4 +1,3 @@
-
 //
 // Copyright (C) 2020 The Android Open Source Project
 //
@@ -14,18 +13,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-android_app {
-    name: "car-ui-lib-sharedlibrary",
-    visibility: [
-        "//packages/apps/Car/libs/car-ui-lib/tests/PaintBooth:__pkg__",
+
+//###############################################
+// Car Ui Robolectric test target. #
+//###############################################
+android_robolectric_test {
+    name: "CarUiRoboTests",
+    srcs: ["**/*.java"],
+    libs: [
+        "android.car",
+        "testng",
     ],
-    platform_apis: true,
-    resource_dirs: ["res"],
-    aaptflags: ["--shared-lib"],
-    optimize: {
-        enabled: false,
-    },
-    static_libs: [
-        "car-ui-lib",
-    ],
+    instrumentation_for: "CarUiRobolectricTestApp",
 }
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiListItemTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiListItemTest.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiListItemTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiListItemTest.java
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapterTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapterTest.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapterTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiRecyclerViewAdapterTest.java
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
similarity index 65%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
index c0b87de..648a3a4 100644
--- a/car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
+++ b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
@@ -19,6 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.view.LayoutInflater;
 import android.view.View;
 
@@ -41,40 +42,23 @@
     private Context mContext;
     private View mView;
     private CarUiRecyclerView mCarUiRecyclerView;
+    private Resources mResources;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-
         mContext = RuntimeEnvironment.application;
-    }
-
-    @Test
-    public void onHeightChanged_shouldAddTheValueToInitialTopValue() {
-        mView = LayoutInflater.from(mContext)
-                .inflate(R.layout.test_linear_car_ui_recycler_view, null);
-
-        mCarUiRecyclerView = mView.findViewById(R.id.test_prv);
-
-        assertThat(mCarUiRecyclerView.getPaddingBottom()).isEqualTo(0);
-        assertThat(mCarUiRecyclerView.getPaddingTop()).isEqualTo(0);
-        assertThat(mCarUiRecyclerView.getPaddingStart()).isEqualTo(0);
-        assertThat(mCarUiRecyclerView.getPaddingEnd()).isEqualTo(0);
-
-        mCarUiRecyclerView.onHeightChanged(10);
-
-        assertThat(mCarUiRecyclerView.getPaddingTop()).isEqualTo(10);
-        assertThat(mCarUiRecyclerView.getPaddingBottom()).isEqualTo(0);
-        assertThat(mCarUiRecyclerView.getPaddingStart()).isEqualTo(0);
-        assertThat(mCarUiRecyclerView.getPaddingEnd()).isEqualTo(0);
+        mResources = mContext.getResources();
     }
 
     @Test
     public void setAdapter_shouldInitializeLinearLayoutManager() {
         mView = LayoutInflater.from(mContext)
-                .inflate(R.layout.test_linear_car_ui_recycler_view, null);
+                .inflate(mResources.getIdentifier("test_linear_car_ui_recycler_view", "layout",
+                        mContext.getPackageName()), null);
 
-        mCarUiRecyclerView = mView.findViewById(R.id.test_prv);
+        mCarUiRecyclerView = mView.findViewById(
+                mResources.getIdentifier("test_prv", "id", mContext.getPackageName()));
 
         assertThat(mCarUiRecyclerView.getLayoutManager()).isInstanceOf(
                 LinearLayoutManager.class);
@@ -83,9 +67,11 @@
     @Test
     public void setAdapter_shouldInitializeGridLayoutManager() {
         mView = LayoutInflater.from(mContext)
-                .inflate(R.layout.test_grid_car_ui_recycler_view, null);
+                .inflate(mResources.getIdentifier("test_grid_car_ui_recycler_view", "layout",
+                        mContext.getPackageName()), null);
 
-        mCarUiRecyclerView = mView.findViewById(R.id.test_prv);
+        mCarUiRecyclerView = mView.findViewById(
+                mResources.getIdentifier("test_prv", "id", mContext.getPackageName()));
 
         assertThat(mCarUiRecyclerView.getLayoutManager()).isInstanceOf(
                 GridLayoutManager.class);
@@ -94,9 +80,11 @@
     @Test
     public void init_shouldContainRecyclerView() {
         mView = LayoutInflater.from(mContext)
-                .inflate(R.layout.test_grid_car_ui_recycler_view, null);
+                .inflate(mResources.getIdentifier("test_linear_car_ui_recycler_view", "layout",
+                        mContext.getPackageName()), null);
 
-        mCarUiRecyclerView = mView.findViewById(R.id.test_prv);
+        mCarUiRecyclerView = mView.findViewById(
+                mResources.getIdentifier("test_prv", "id", mContext.getPackageName()));
 
         assertThat(mCarUiRecyclerView).isNotNull();
     }
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiSmoothScrollerTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiSmoothScrollerTest.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiSmoothScrollerTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiSmoothScrollerTest.java
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiSnapHelperTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiSnapHelperTest.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/CarUiSnapHelperTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/CarUiSnapHelperTest.java
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/DefaultScrollBarTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/DefaultScrollBarTest.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/recyclerview/DefaultScrollBarTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/recyclerview/DefaultScrollBarTest.java
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ExtendedShadowTypeface.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/ExtendedShadowTypeface.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ExtendedShadowTypeface.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/ExtendedShadowTypeface.java
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ShadowAsyncLayoutInflater.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/ShadowAsyncLayoutInflater.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ShadowAsyncLayoutInflater.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/ShadowAsyncLayoutInflater.java
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/TestActivity.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/TestActivity.java
similarity index 91%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/TestActivity.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/TestActivity.java
index dcbe1cd..b6fa3c4 100644
--- a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/TestActivity.java
+++ b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/TestActivity.java
@@ -18,8 +18,6 @@
 import android.app.Activity;
 import android.os.Bundle;
 
-import com.android.car.ui.R;
-
 /** An activity to use in the Toolbar tests */
 public class TestActivity extends Activity {
 
@@ -28,7 +26,7 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.test_toolbar);
+        setContentView(getResources().getIdentifier("test_toolbar", "layout", getPackageName()));
     }
 
     @Override
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ToolbarTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/ToolbarTest.java
similarity index 90%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ToolbarTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/ToolbarTest.java
index 189fd91..aec7af5 100644
--- a/car-ui-lib/tests/robotests/src/com/android/car/ui/toolbar/ToolbarTest.java
+++ b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/toolbar/ToolbarTest.java
@@ -63,6 +63,10 @@
         mToolbar = mActivity.findViewById(R.id.toolbar);
     }
 
+    private int getTestDrawableInt(String drawable) {
+        return mResources.getIdentifier(drawable, "drawable", mContext.getPackageName());
+    }
+
     @Test
     public void getters_nochanges_shouldReturnDefaults() {
         assertThat(mToolbar.getBackgroundShown()).isEqualTo(true);
@@ -100,7 +104,7 @@
     @Test
     public void showLogo_whenSet_andStateIsHome() {
         mToolbar.setState(Toolbar.State.HOME);
-        mToolbar.setLogo(R.drawable.test_ic_launcher);
+        mToolbar.setLogo(getTestDrawableInt("test_ic_launcher"));
 
         assertThat(mToolbar.findViewById(R.id.car_ui_toolbar_logo).isShown()).isTrue();
         assertThat(mToolbar.findViewById(R.id.car_ui_toolbar_title_logo).isShown()).isFalse();
@@ -113,7 +117,7 @@
 
         Toolbar toolbar = new Toolbar(mContext);
         toolbar.setState(Toolbar.State.HOME);
-        toolbar.setLogo(R.drawable.test_ic_launcher);
+        mToolbar.setLogo(getTestDrawableInt("test_ic_launcher"));
 
         assertThat(isViewInToolbarShown(toolbar, R.id.car_ui_toolbar_logo)).isFalse();
         assertThat(isViewInToolbarShown(toolbar, R.id.car_ui_toolbar_title_logo)).isFalse();
@@ -122,7 +126,7 @@
     @Test
     public void showTitleLogo_whenSet_andStateIsNotHome() {
         mToolbar.setState(Toolbar.State.SUBPAGE);
-        mToolbar.setLogo(R.drawable.test_ic_launcher);
+        mToolbar.setLogo(getTestDrawableInt("test_ic_launcher"));
 
         assertThat(mToolbar.findViewById(R.id.car_ui_toolbar_logo).isShown()).isFalse();
         assertThat(mToolbar.findViewById(R.id.car_ui_toolbar_title_logo).isShown()).isTrue();
@@ -184,8 +188,12 @@
 
         // Set title and tabs for toolbar.
         toolbar.setTitle("Test title");
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
 
         // Toolbar should display two rows, showing both title and tabs.
         assertThat(isViewInToolbarShown(toolbar, R.id.car_ui_toolbar_tabs)).isTrue();
@@ -193,7 +201,7 @@
     }
 
     @Test
-    public void testState_twoRow_withTitle()  {
+    public void testState_twoRow_withTitle() {
         mockResources();
         when(mResources.getBoolean(R.bool.car_ui_toolbar_tabs_on_second_row)).thenReturn(true);
 
@@ -214,8 +222,12 @@
 
         Toolbar toolbar = new Toolbar(mContext);
         assertThat(toolbar.isTabsInSecondRow()).isTrue();
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
 
         // Toolbar should display two rows with an empty title and tabs.
         assertThat(isViewInToolbarShown(toolbar, R.id.car_ui_toolbar_tabs)).isTrue();
@@ -232,8 +244,12 @@
 
         // Set title and tabs for toolbar.
         toolbar.setTitle("Test title");
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
 
         // With only one row available, toolbar will only show tabs and not the title.
         assertThat(isViewInToolbarShown(toolbar, R.id.car_ui_toolbar_tabs)).isTrue();
@@ -245,7 +261,6 @@
         mockResources();
         when(mResources.getBoolean(R.bool.car_ui_toolbar_tabs_on_second_row)).thenReturn(false);
 
-
         Toolbar toolbar = new Toolbar(mContext);
         assertThat(toolbar.isTabsInSecondRow()).isFalse();
 
@@ -261,12 +276,15 @@
         mockResources();
         when(mResources.getBoolean(R.bool.car_ui_toolbar_tabs_on_second_row)).thenReturn(false);
 
-
         Toolbar toolbar = new Toolbar(mContext);
         assertThat(toolbar.isTabsInSecondRow()).isFalse();
 
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
-        toolbar.addTab(new TabLayout.Tab(mContext.getDrawable(R.drawable.test_ic_launcher), "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
+        toolbar.addTab(
+                new TabLayout.Tab(mContext.getDrawable(getTestDrawableInt("test_ic_launcher")),
+                        "Foo"));
 
         // Toolbar should display one row with only tabs.
         assertThat(isViewInToolbarShown(toolbar, R.id.car_ui_toolbar_tabs)).isTrue();
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/utils/CarUxRestrictionsUtilTest.java b/car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/utils/CarUxRestrictionsUtilTest.java
similarity index 100%
rename from car-ui-lib/tests/robotests/src/com/android/car/ui/utils/CarUxRestrictionsUtilTest.java
rename to car-ui-lib/car-ui-lib/src/test/java/com/android/car/ui/utils/CarUxRestrictionsUtilTest.java
diff --git a/car-ui-lib/tests/robotests/res/drawable/test_ic_launcher.png b/car-ui-lib/car-ui-lib/src/test/res/drawable/test_ic_launcher.png
similarity index 100%
rename from car-ui-lib/tests/robotests/res/drawable/test_ic_launcher.png
rename to car-ui-lib/car-ui-lib/src/test/res/drawable/test_ic_launcher.png
Binary files differ
diff --git a/car-ui-lib/tests/robotests/res/layout/test_custom_view.xml b/car-ui-lib/car-ui-lib/src/test/res/layout/test_custom_view.xml
similarity index 100%
rename from car-ui-lib/tests/robotests/res/layout/test_custom_view.xml
rename to car-ui-lib/car-ui-lib/src/test/res/layout/test_custom_view.xml
diff --git a/car-ui-lib/tests/robotests/res/layout/test_grid_car_ui_recycler_view.xml b/car-ui-lib/car-ui-lib/src/test/res/layout/test_grid_car_ui_recycler_view.xml
similarity index 100%
rename from car-ui-lib/tests/robotests/res/layout/test_grid_car_ui_recycler_view.xml
rename to car-ui-lib/car-ui-lib/src/test/res/layout/test_grid_car_ui_recycler_view.xml
diff --git a/car-ui-lib/tests/robotests/res/layout/test_linear_car_ui_recycler_view.xml b/car-ui-lib/car-ui-lib/src/test/res/layout/test_linear_car_ui_recycler_view.xml
similarity index 100%
rename from car-ui-lib/tests/robotests/res/layout/test_linear_car_ui_recycler_view.xml
rename to car-ui-lib/car-ui-lib/src/test/res/layout/test_linear_car_ui_recycler_view.xml
diff --git a/car-ui-lib/tests/robotests/res/layout/test_toolbar.xml b/car-ui-lib/car-ui-lib/src/test/res/layout/test_toolbar.xml
similarity index 100%
rename from car-ui-lib/tests/robotests/res/layout/test_toolbar.xml
rename to car-ui-lib/car-ui-lib/src/test/res/layout/test_toolbar.xml
diff --git a/car-ui-lib/documentation/images/android_project_view.png b/car-ui-lib/documentation/images/android_project_view.png
new file mode 100644
index 0000000..9b82bc2
--- /dev/null
+++ b/car-ui-lib/documentation/images/android_project_view.png
Binary files differ
diff --git a/car-ui-lib/documentation/images/launch_paintbooth.png b/car-ui-lib/documentation/images/launch_paintbooth.png
new file mode 100644
index 0000000..ba901b6
--- /dev/null
+++ b/car-ui-lib/documentation/images/launch_paintbooth.png
Binary files differ
diff --git a/car-ui-lib/documentation/images/navigating_to_car_ui_lib.png b/car-ui-lib/documentation/images/navigating_to_car_ui_lib.png
new file mode 100644
index 0000000..4897ad6
--- /dev/null
+++ b/car-ui-lib/documentation/images/navigating_to_car_ui_lib.png
Binary files differ
diff --git a/car-ui-lib/documentation/images/open_existing_android_studio_project.png b/car-ui-lib/documentation/images/open_existing_android_studio_project.png
new file mode 100644
index 0000000..29c2f96
--- /dev/null
+++ b/car-ui-lib/documentation/images/open_existing_android_studio_project.png
Binary files differ
diff --git a/car-ui-lib/documentation/images/running_tests.png b/car-ui-lib/documentation/images/running_tests.png
new file mode 100644
index 0000000..796bf3a
--- /dev/null
+++ b/car-ui-lib/documentation/images/running_tests.png
Binary files differ
diff --git a/car-ui-lib/generate_rros.mk b/car-ui-lib/generate_rros.mk
index 4f67520..c0d2966 100644
--- a/car-ui-lib/generate_rros.mk
+++ b/car-ui-lib/generate_rros.mk
@@ -21,7 +21,8 @@
 define generate-rro
   include $$(CLEAR_VARS)
 
-  rro_package_name := $(2)-$(subst .,-,$(1))
+  rro_package_name := $(subst .,-,$(2))-$(subst .,-,$(1))
+  manifest_file := $(4)
   LOCAL_RESOURCE_DIR := $(3)
   LOCAL_RRO_THEME := $$(rro_package_name)
   LOCAL_PACKAGE_NAME := $$(rro_package_name)
@@ -34,7 +35,7 @@
   LOCAL_AAPT_FLAGS := --no-resource-deduping
 
   gen := $$(call intermediates-dir-for,ETC,$$(rro_package_name))/AndroidManifest.xml
-  $$(gen): $(LOCAL_PATH)/AndroidManifest.xml
+  $$(gen): $$(manifest_file)
 	@echo Generate $$@
 	$$(hide) mkdir -p $$(dir $$@)
 	$$(hide) sed -e "s/{{TARGET_PACKAGE_NAME}}/$(1)/" \
@@ -44,11 +45,17 @@
   include $$(BUILD_RRO_PACKAGE)
 endef
 
+ifndef CAR_UI_RRO_MANIFEST_FILE
+CAR_UI_RRO_MANIFEST_FILE = $(LOCAL_PATH)/AndroidManifest.xml
+endif
+
 $(foreach t,\
   $(CAR_UI_RRO_TARGETS),\
-  $(eval $(call generate-rro,$(t),$(CAR_UI_RRO_SET_NAME),$(CAR_UI_RESOURCE_DIR))))
+  $(eval $(call generate-rro,$(t),$(CAR_UI_RRO_SET_NAME),$(CAR_UI_RESOURCE_DIR),$(CAR_UI_RRO_MANIFEST_FILE))) \
+  )
 
 # Clear variables
 CAR_UI_RRO_SET_NAME :=
+CAR_UI_RRO_MANIFEST_FILE :=
 CAR_UI_RESOURCE_DIR :=
 CAR_UI_RRO_TARGETS :=
diff --git a/car-ui-lib/tests/paintbooth/AndroidManifest-gradle.xml b/car-ui-lib/paintbooth/AndroidManifest-gradle.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/AndroidManifest-gradle.xml
rename to car-ui-lib/paintbooth/AndroidManifest-gradle.xml
diff --git a/car-ui-lib/tests/paintbooth/AndroidManifest.xml b/car-ui-lib/paintbooth/AndroidManifest.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/AndroidManifest.xml
rename to car-ui-lib/paintbooth/AndroidManifest.xml
diff --git a/car-ui-lib/tests/paintbooth/build.gradle b/car-ui-lib/paintbooth/build.gradle
similarity index 90%
rename from car-ui-lib/tests/paintbooth/build.gradle
rename to car-ui-lib/paintbooth/build.gradle
index e85a629..94ab49e 100644
--- a/car-ui-lib/tests/paintbooth/build.gradle
+++ b/car-ui-lib/paintbooth/build.gradle
@@ -17,11 +17,11 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 29
+    compileSdkVersion 30
     defaultConfig {
         applicationId "com.android.car.ui.paintbooth"
         minSdkVersion 28
-        targetSdkVersion 29
+        targetSdkVersion 30
         versionCode 1
         versionName "1.0"
     }
@@ -35,19 +35,17 @@
         main {
             manifest.srcFile 'AndroidManifest-gradle.xml'
             java {
-                srcDirs = ['src']
                 filter.excludes = [
                         "com/android/car/ui/paintbooth/overlays/OverlayManagerImpl.java",
                         "com/android/car/ui/paintbooth/currentactivity/ActivityTaskManagerImpl.java",
                 ]
             }
-            res.srcDirs = ['res', 'res-public']
         }
     }
 }
 
 dependencies {
-    implementation project(':')
+    implementation project(':car-ui-lib')
     debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0'
     api 'androidx.annotation:annotation:1.1.0'
     api 'androidx.constraintlayout:constraintlayout:1.1.3'
diff --git a/car-ui-lib/tests/paintbooth/gradlew b/car-ui-lib/paintbooth/gradlew
similarity index 100%
rename from car-ui-lib/tests/paintbooth/gradlew
rename to car-ui-lib/paintbooth/gradlew
diff --git a/car-ui-lib/tests/paintbooth/gradlew.bat b/car-ui-lib/paintbooth/gradlew.bat
similarity index 100%
rename from car-ui-lib/tests/paintbooth/gradlew.bat
rename to car-ui-lib/paintbooth/gradlew.bat
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/MainActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/MainActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/MainActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/MainActivity.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/VisibleBoundsSimulator.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/VisibleBoundsSimulator.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/VisibleBoundsSimulator.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/VisibleBoundsSimulator.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/CarUiListItemActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/CarUiListItemActivity.java
similarity index 97%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/CarUiListItemActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/CarUiListItemActivity.java
index f6db6d3..1819427 100644
--- a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/CarUiListItemActivity.java
+++ b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/CarUiListItemActivity.java
@@ -38,7 +38,7 @@
 import java.util.ArrayList;
 
 /**
- * Activity that shows {@link CarUiRecyclerView} with dummy {@link CarUiContentListItem} entries
+ * Activity that shows {@link CarUiRecyclerView} with sample {@link CarUiContentListItem} entries
  */
 public class CarUiListItemActivity extends Activity implements InsetsChangedListener {
 
@@ -55,11 +55,11 @@
         toolbar.setState(Toolbar.State.SUBPAGE);
 
         CarUiRecyclerView recyclerView = findViewById(R.id.list);
-        mAdapter = new CarUiListItemAdapter(generateDummyData());
+        mAdapter = new CarUiListItemAdapter(generateSampleData());
         recyclerView.setAdapter(mAdapter);
     }
 
-    private ArrayList<CarUiListItem> generateDummyData() {
+    private ArrayList<CarUiListItem> generateSampleData() {
         Context context = this;
 
         CarUiHeaderListItem header = new CarUiHeaderListItem("First header");
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/CarUiRecyclerViewActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/CarUiRecyclerViewActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/CarUiRecyclerViewActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/CarUiRecyclerViewActivity.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
similarity index 93%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
index 7d98a1e..5d51d4c 100644
--- a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
+++ b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
@@ -31,7 +31,7 @@
 
 import java.util.ArrayList;
 
-/** Activity that shows GridCarUiRecyclerView example with dummy data. */
+/** Activity that shows GridCarUiRecyclerView example with sample data. */
 public class GridCarUiRecyclerViewActivity extends Activity implements
         InsetsChangedListener {
     private final ArrayList<String> mData = new ArrayList<>();
@@ -48,11 +48,11 @@
 
         CarUiRecyclerView recyclerView = findViewById(R.id.list);
 
-        RecyclerViewAdapter adapter = new RecyclerViewAdapter(generateDummyData());
+        RecyclerViewAdapter adapter = new RecyclerViewAdapter(generateSampleData());
         recyclerView.setAdapter(adapter);
     }
 
-    private ArrayList<String> generateDummyData() {
+    private ArrayList<String> generateSampleData() {
         for (int i = 1; i <= mDataToGenerate; i++) {
             mData.add("data" + i);
         }
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/RecyclerViewAdapter.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/RecyclerViewAdapter.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/caruirecyclerview/RecyclerViewAdapter.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/RecyclerViewAdapter.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManager.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManager.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManager.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManager.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManagerImpl.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManagerImpl.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManagerImpl.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/currentactivity/ActivityTaskManagerImpl.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/currentactivity/CurrentActivityService.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/currentactivity/CurrentActivityService.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/currentactivity/CurrentActivityService.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/currentactivity/CurrentActivityService.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/overlays/OverlayActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/overlays/OverlayActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/overlays/OverlayActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/overlays/OverlayActivity.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/overlays/OverlayManager.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/overlays/OverlayManager.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/overlays/OverlayManager.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/overlays/OverlayManager.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/overlays/OverlayManagerImpl.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/overlays/OverlayManagerImpl.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/overlays/OverlayManagerImpl.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/overlays/OverlayManagerImpl.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/preferences/PreferenceActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/preferences/PreferenceActivity.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceDemoFragment.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/preferences/PreferenceDemoFragment.java
similarity index 86%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceDemoFragment.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/preferences/PreferenceDemoFragment.java
index 233c873..e9f990d 100644
--- a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceDemoFragment.java
+++ b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/preferences/PreferenceDemoFragment.java
@@ -20,7 +20,6 @@
 
 import com.android.car.ui.paintbooth.R;
 import com.android.car.ui.preference.CarUiPreference;
-import com.android.car.ui.preference.CarUiSwitchPreference;
 import com.android.car.ui.preference.PreferenceFragment;
 
 /**
@@ -45,10 +44,5 @@
         preferenceDisabledWithRipple.setMessageToShowWhenDisabledPreferenceClicked(
                 "I am disabled because...");
         preferenceDisabledWithRipple.setShouldShowRippleOnDisabledPreference(true);
-
-        CarUiSwitchPreference carUiSwitchPreference = findPreference("switch");
-        carUiSwitchPreference.setEnabled(false);
-        carUiSwitchPreference.setMessageToShowWhenDisabledPreferenceClicked(
-                "I am disabled because...");
     }
 }
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/NoCarUiToolbarActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/toolbar/NoCarUiToolbarActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/NoCarUiToolbarActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/toolbar/NoCarUiToolbarActivity.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/OldToolbarActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/toolbar/OldToolbarActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/OldToolbarActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/toolbar/OldToolbarActivity.java
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
similarity index 99%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
index 938f448..f32818a 100644
--- a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
+++ b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
@@ -320,7 +320,7 @@
         Mutable<Boolean> showingLauncherIcon = new Mutable<>(false);
         mButtons.add(Pair.create(getString(R.string.toolbar_toggle_search_icon), v -> {
             if (showingLauncherIcon.value) {
-                toolbar.setSearchIcon(0);
+                toolbar.setSearchIcon(null);
             } else {
                 toolbar.setSearchIcon(R.drawable.ic_launcher);
             }
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/widgets/WidgetActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/widgets/WidgetActivity.java
similarity index 100%
rename from car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/widgets/WidgetActivity.java
rename to car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/widgets/WidgetActivity.java
diff --git a/car-ui-lib/tests/paintbooth/res-public/values/public.xml b/car-ui-lib/paintbooth/src/main/res-public/values/public.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res-public/values/public.xml
rename to car-ui-lib/paintbooth/src/main/res-public/values/public.xml
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_cut.xml b/car-ui-lib/paintbooth/src/main/res/drawable/ic_cut.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/drawable/ic_cut.xml
rename to car-ui-lib/paintbooth/src/main/res/drawable/ic_cut.xml
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_launcher.png b/car-ui-lib/paintbooth/src/main/res/drawable/ic_launcher.png
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/drawable/ic_launcher.png
rename to car-ui-lib/paintbooth/src/main/res/drawable/ic_launcher.png
Binary files differ
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_sample_logo.png b/car-ui-lib/paintbooth/src/main/res/drawable/ic_sample_logo.png
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/drawable/ic_sample_logo.png
rename to car-ui-lib/paintbooth/src/main/res/drawable/ic_sample_logo.png
Binary files differ
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_settings_gear.xml b/car-ui-lib/paintbooth/src/main/res/drawable/ic_settings_gear.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/drawable/ic_settings_gear.xml
rename to car-ui-lib/paintbooth/src/main/res/drawable/ic_settings_gear.xml
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_settings_wifi.xml b/car-ui-lib/paintbooth/src/main/res/drawable/ic_settings_wifi.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/drawable/ic_settings_wifi.xml
rename to car-ui-lib/paintbooth/src/main/res/drawable/ic_settings_wifi.xml
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_tracklist.xml b/car-ui-lib/paintbooth/src/main/res/drawable/ic_tracklist.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/drawable/ic_tracklist.xml
rename to car-ui-lib/paintbooth/src/main/res/drawable/ic_tracklist.xml
diff --git a/car-ui-lib/tests/paintbooth/res/drawable/simulated_screen_shape.xml b/car-ui-lib/paintbooth/src/main/res/drawable/simulated_screen_shape.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/drawable/simulated_screen_shape.xml
rename to car-ui-lib/paintbooth/src/main/res/drawable/simulated_screen_shape.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/car_ui_recycler_view_activity.xml b/car-ui-lib/paintbooth/src/main/res/layout/car_ui_recycler_view_activity.xml
similarity index 75%
rename from car-ui-lib/tests/paintbooth/res/layout/car_ui_recycler_view_activity.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/car_ui_recycler_view_activity.xml
index 5ae7e7f..89a73d8 100644
--- a/car-ui-lib/tests/paintbooth/res/layout/car_ui_recycler_view_activity.xml
+++ b/car-ui-lib/paintbooth/src/main/res/layout/car_ui_recycler_view_activity.xml
@@ -14,9 +14,15 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<com.android.car.ui.recyclerview.CarUiRecyclerView
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/list"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@drawable/car_ui_activity_background"/>
+    android:background="@drawable/car_ui_activity_background">
+    <com.android.car.ui.recyclerview.CarUiRecyclerView
+        android:id="@+id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</FrameLayout>
+
+
diff --git a/car-ui-lib/tests/paintbooth/res/layout/car_ui_recycler_view_activity_with_old_toolbar.xml b/car-ui-lib/paintbooth/src/main/res/layout/car_ui_recycler_view_activity_with_old_toolbar.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/car_ui_recycler_view_activity_with_old_toolbar.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/car_ui_recycler_view_activity_with_old_toolbar.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/car_ui_recycler_view_list_item.xml b/car-ui-lib/paintbooth/src/main/res/layout/car_ui_recycler_view_list_item.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/car_ui_recycler_view_list_item.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/car_ui_recycler_view_list_item.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/details_preference_widget.xml b/car-ui-lib/paintbooth/src/main/res/layout/details_preference_widget.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/details_preference_widget.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/details_preference_widget.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/grid_car_ui_recycler_view_activity.xml b/car-ui-lib/paintbooth/src/main/res/layout/grid_car_ui_recycler_view_activity.xml
similarity index 72%
rename from car-ui-lib/tests/paintbooth/res/layout/grid_car_ui_recycler_view_activity.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/grid_car_ui_recycler_view_activity.xml
index 2b0d1a4..233c148 100644
--- a/car-ui-lib/tests/paintbooth/res/layout/grid_car_ui_recycler_view_activity.xml
+++ b/car-ui-lib/paintbooth/src/main/res/layout/grid_car_ui_recycler_view_activity.xml
@@ -14,12 +14,16 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<com.android.car.ui.recyclerview.CarUiRecyclerView
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/list"
-    app:layoutStyle="grid"
-    app:numOfColumns="4"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@drawable/car_ui_activity_background" />
+    android:background="@drawable/car_ui_activity_background">
+    <com.android.car.ui.recyclerview.CarUiRecyclerView
+        android:id="@+id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:numOfColumns="4"
+        app:layoutStyle="grid"/>
+</FrameLayout>
diff --git a/car-ui-lib/tests/paintbooth/res/layout/list_item.xml b/car-ui-lib/paintbooth/src/main/res/layout/list_item.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/list_item.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/list_item.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/list_item_switch.xml b/car-ui-lib/paintbooth/src/main/res/layout/list_item_switch.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/list_item_switch.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/list_item_switch.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/no_car_ui_toolbar_activity.xml b/car-ui-lib/paintbooth/src/main/res/layout/no_car_ui_toolbar_activity.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/no_car_ui_toolbar_activity.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/no_car_ui_toolbar_activity.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/simulated_screen_shape_container.xml b/car-ui-lib/paintbooth/src/main/res/layout/simulated_screen_shape_container.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/simulated_screen_shape_container.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/simulated_screen_shape_container.xml
diff --git a/car-ui-lib/tests/paintbooth/res/layout/widgets_activity.xml b/car-ui-lib/paintbooth/src/main/res/layout/widgets_activity.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/layout/widgets_activity.xml
rename to car-ui-lib/paintbooth/src/main/res/layout/widgets_activity.xml
diff --git a/car-ui-lib/tests/paintbooth/res/values/arrays.xml b/car-ui-lib/paintbooth/src/main/res/values/arrays.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/values/arrays.xml
rename to car-ui-lib/paintbooth/src/main/res/values/arrays.xml
diff --git a/car-ui-lib/tests/paintbooth/res/values/colors.xml b/car-ui-lib/paintbooth/src/main/res/values/colors.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/values/colors.xml
rename to car-ui-lib/paintbooth/src/main/res/values/colors.xml
diff --git a/car-ui-lib/tests/paintbooth/res/values/dimens.xml b/car-ui-lib/paintbooth/src/main/res/values/dimens.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/values/dimens.xml
rename to car-ui-lib/paintbooth/src/main/res/values/dimens.xml
diff --git a/car-ui-lib/tests/paintbooth/res/values/strings.xml b/car-ui-lib/paintbooth/src/main/res/values/strings.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/values/strings.xml
rename to car-ui-lib/paintbooth/src/main/res/values/strings.xml
diff --git a/car-ui-lib/tests/paintbooth/res/xml/current_activity_service.xml b/car-ui-lib/paintbooth/src/main/res/xml/current_activity_service.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/xml/current_activity_service.xml
rename to car-ui-lib/paintbooth/src/main/res/xml/current_activity_service.xml
diff --git a/car-ui-lib/tests/paintbooth/res/xml/menuitems.xml b/car-ui-lib/paintbooth/src/main/res/xml/menuitems.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/xml/menuitems.xml
rename to car-ui-lib/paintbooth/src/main/res/xml/menuitems.xml
diff --git a/car-ui-lib/tests/paintbooth/res/xml/preference_overlays.xml b/car-ui-lib/paintbooth/src/main/res/xml/preference_overlays.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/xml/preference_overlays.xml
rename to car-ui-lib/paintbooth/src/main/res/xml/preference_overlays.xml
diff --git a/car-ui-lib/tests/paintbooth/res/xml/preference_samples.xml b/car-ui-lib/paintbooth/src/main/res/xml/preference_samples.xml
similarity index 100%
rename from car-ui-lib/tests/paintbooth/res/xml/preference_samples.xml
rename to car-ui-lib/paintbooth/src/main/res/xml/preference_samples.xml
diff --git a/car-ui-lib/referencedesign/Android.mk b/car-ui-lib/referencedesign/Android.mk
index 7da04dc..ac85df4 100644
--- a/car-ui-lib/referencedesign/Android.mk
+++ b/car-ui-lib/referencedesign/Android.mk
@@ -2,6 +2,7 @@
 include $(CLEAR_VARS)
 
 CAR_UI_RRO_SET_NAME := googlecarui
+CAR_UI_RRO_MANIFEST_FILE := $(LOCAL_PATH)/AndroidManifest.xml
 CAR_UI_RESOURCE_DIR := $(LOCAL_PATH)/res
 CAR_UI_RRO_TARGETS := \
     com.android.car.ui.paintbooth \
@@ -31,3 +32,18 @@
     com.android.vending \
 
 include packages/apps/Car/libs/car-ui-lib/generate_rros.mk
+
+CAR_UI_RRO_SET_NAME := googlecarui.overlayable
+CAR_UI_RRO_MANIFEST_FILE := $(LOCAL_PATH)/AndroidManifest-overlayable.xml
+CAR_UI_RESOURCE_DIR := $(LOCAL_PATH)/res
+CAR_UI_RRO_TARGETS := \
+    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-overlayable.xml b/car-ui-lib/referencedesign/AndroidManifest-overlayable.xml
new file mode 100644
index 0000000..214755c
--- /dev/null
+++ b/car-ui-lib/referencedesign/AndroidManifest-overlayable.xml
@@ -0,0 +1,11 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="{{RRO_PACKAGE_NAME}}">
+    <application android:hasCode="false"/>
+    <overlay android:priority="10"
+        android:targetPackage="{{TARGET_PACKAGE_NAME}}"
+        android:targetName="car-ui-lib"
+        android:resourcesMap="@xml/overlays"
+        android:isStatic="true"
+        android:requiredSystemPropertyName="ro.build.characteristics"
+        android:requiredSystemPropertyValue="automotive"/>
+</manifest>
diff --git a/car-ui-lib/referencedesign/product.mk b/car-ui-lib/referencedesign/product.mk
index 915f31b..92e0bea 100644
--- a/car-ui-lib/referencedesign/product.mk
+++ b/car-ui-lib/referencedesign/product.mk
@@ -27,3 +27,15 @@
     googlecarui-com-google-android-carassistant \
     googlecarui-com-google-android-tts \
     googlecarui-com-android-vending \
+
+
+# Include generated RROs that that use targetName
+PRODUCT_PACKAGES += \
+    googlecarui-overlayable-com-google-android-apps-automotive-inputmethod \
+    googlecarui-overlayable-com-google-android-apps-automotive-inputmethod-dev \
+    googlecarui-overlayable-com-google-android-embedded-projection \
+    googlecarui-overlayable-com-google-android-gms \
+    googlecarui-overlayable-com-google-android-packageinstaller \
+    googlecarui-overlayable-com-google-android-carassistant \
+    googlecarui-overlayable-com-google-android-tts \
+    googlecarui-overlayable-com-android-vending \
diff --git a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml b/car-ui-lib/referencedesign/res/color/car_ui_seekbar_thumb_inner_ring_color.xml
similarity index 69%
copy from car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
copy to car-ui-lib/referencedesign/res/color/car_ui_seekbar_thumb_inner_ring_color.xml
index 74b8d13..1f197c0 100644
--- a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
+++ b/car-ui-lib/referencedesign/res/color/car_ui_seekbar_thumb_inner_ring_color.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright 2020 The Android Open Source Project
+  ~ 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.
@@ -14,7 +14,7 @@
   ~ 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="#00FF00"/>
-</shape>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="true" android:color="#3D94CBFF"/>
+    <item android:color="@android:color/transparent"/>
+</selector>
diff --git a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml b/car-ui-lib/referencedesign/res/color/car_ui_seekbar_thumb_outer_ring_color.xml
similarity index 70%
copy from car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
copy to car-ui-lib/referencedesign/res/color/car_ui_seekbar_thumb_outer_ring_color.xml
index 74b8d13..d03fe13 100644
--- a/car-ui-lib/res/drawable/car_ui_focus_area_background_highlight.xml
+++ b/car-ui-lib/referencedesign/res/color/car_ui_seekbar_thumb_outer_ring_color.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~ Copyright 2020 The Android Open Source Project
+  ~ 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.
@@ -14,7 +14,7 @@
   ~ 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="#00FF00"/>
-</shape>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="true" android:color="#94CBFF"/>
+    <item android:color="@android:color/transparent"/>
+</selector>
diff --git a/car-ui-lib/res/color/car_ui_text_color_secondary.xml b/car-ui-lib/referencedesign/res/color/car_ui_text_color_secondary.xml
similarity index 100%
rename from car-ui-lib/res/color/car_ui_text_color_secondary.xml
rename to car-ui-lib/referencedesign/res/color/car_ui_text_color_secondary.xml
diff --git a/car-ui-lib/referencedesign/res/color/car_ui_toolbar_menu_item_icon_background_color.xml b/car-ui-lib/referencedesign/res/color/car_ui_toolbar_menu_item_icon_background_color.xml
new file mode 100644
index 0000000..01b70aa
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/color/car_ui_toolbar_menu_item_icon_background_color.xml
@@ -0,0 +1,31 @@
+<?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.
+  -->
+<!-- The same as @color/car_ui_text_color_primary but with an activated state.
+     ColorStateLists don't support switching to complex colors, so we have to repeat
+     car_ui_text_color_primary here. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item android:state_activated="false"
+          android:color="@android:color/transparent"/>
+    <item android:state_enabled="false"
+          android:alpha="?android:attr/disabledAlpha"
+          android:color="?android:attr/colorForeground"/>
+    <item app:state_ux_restricted="true"
+          android:alpha="?android:attr/disabledAlpha"
+          android:color="?android:attr/colorForeground"/>
+    <item android:color="?android:attr/colorForeground" />
+</selector>
diff --git a/car-ui-lib/referencedesign/res/color/car_ui_toolbar_menu_item_icon_color.xml b/car-ui-lib/referencedesign/res/color/car_ui_toolbar_menu_item_icon_color.xml
new file mode 100644
index 0000000..a15bcba
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/color/car_ui_toolbar_menu_item_icon_color.xml
@@ -0,0 +1,31 @@
+<?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.
+  -->
+<!-- The same as @color/car_ui_text_color_primary but with an activated state.
+     ColorStateLists don't support switching to complex colors, so we have to repeat
+     car_ui_text_color_primary here. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item android:state_activated="true"
+          android:color="?android:attr/colorBackground"/>
+    <item android:state_enabled="false"
+          android:alpha="?android:attr/disabledAlpha"
+          android:color="?android:attr/colorForeground"/>
+    <item app:state_ux_restricted="true"
+          android:alpha="?android:attr/disabledAlpha"
+          android:color="?android:attr/colorForeground"/>
+    <item android:color="?android:attr/colorForeground" />
+</selector>
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_button_ripple_background.xml b/car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_button_ripple_background.xml
similarity index 100%
copy from car-ui-lib/res/drawable/car_ui_recyclerview_button_ripple_background.xml
copy to car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_button_ripple_background.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_ic_down.xml b/car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_ic_down.xml
similarity index 100%
copy from car-ui-lib/res/drawable/car_ui_recyclerview_ic_down.xml
copy to car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_ic_down.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_ic_up.xml b/car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_ic_up.xml
similarity index 100%
copy from car-ui-lib/res/drawable/car_ui_recyclerview_ic_up.xml
copy to car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_ic_up.xml
diff --git a/car-ui-lib/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml b/car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_scrollbar_thumb.xml
similarity index 100%
copy from car-ui-lib/res/drawable/car_ui_recyclerview_scrollbar_thumb.xml
copy to car-ui-lib/referencedesign/res/drawable-ldrtl/car_ui_recyclerview_scrollbar_thumb.xml
diff --git a/car-ui-lib/res/drawable/car_ui_icon_arrow_back.xml b/car-ui-lib/referencedesign/res/drawable/car_ui_icon_arrow_back.xml
similarity index 100%
rename from car-ui-lib/res/drawable/car_ui_icon_arrow_back.xml
rename to car-ui-lib/referencedesign/res/drawable/car_ui_icon_arrow_back.xml
diff --git a/car-ui-lib/referencedesign/res/drawable/car_ui_seekbar_preference_background.xml b/car-ui-lib/referencedesign/res/drawable/car_ui_seekbar_preference_background.xml
new file mode 100644
index 0000000..405403b
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/drawable/car_ui_seekbar_preference_background.xml
@@ -0,0 +1,27 @@
+<?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.
+  -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <!-- Highlight the preference when it's focused but not selected. The preference is selected in
+    direct manipulation mode. -->
+    <item android:state_focused="true" android:state_selected="false">
+        <shape android:shape="rectangle">
+            <solid android:color="#3D94CBFF"/>
+            <stroke android:width="8dp"
+                    android:color="#94CBFF"/>
+        </shape>
+    </item>
+</selector>
diff --git a/car-ui-lib/referencedesign/res/drawable/car_ui_seekbar_thumb.xml b/car-ui-lib/referencedesign/res/drawable/car_ui_seekbar_thumb.xml
new file mode 100644
index 0000000..2d6723e
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/drawable/car_ui_seekbar_thumb.xml
@@ -0,0 +1,41 @@
+<?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">
+    <!-- Padding ensures the intrinsic size of this drawable includes the rings. -->
+    <item>
+        <shape android:shape="oval">
+            <solid android:color="?android:attr/colorAccent"/>
+            <size android:width="24dp" android:height="24dp"/>
+        </shape>
+    </item>
+    <item>
+        <shape android:shape="ring"
+               android:innerRadius="12dp"
+               android:thickness="4dp"
+               android:useLevel="false">
+            <solid android:color="@color/car_ui_seekbar_thumb_inner_ring_color"/>
+        </shape>
+    </item>
+    <item>
+        <shape android:shape="ring"
+               android:innerRadius="16dp"
+               android:thickness="8dp"
+               android:useLevel="false">
+            <solid android:color="@color/car_ui_seekbar_thumb_outer_ring_color"/>
+        </shape>
+    </item>
+</layer-list>
diff --git a/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_background.xml b/car-ui-lib/referencedesign/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
similarity index 80%
copy from car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
copy to car-ui-lib/referencedesign/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
index 33594c2..3f96409 100644
--- a/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
+++ b/car-ui-lib/referencedesign/res/drawable/car_ui_toolbar_menu_item_icon_background.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
   ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ Copyright (C) 2020 Google Inc.
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
@@ -19,9 +19,7 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
     <size
-        android:width="@dimen/car_ui_toolbar_menu_item_icon_background_size"
-        android:height="@dimen/car_ui_toolbar_menu_item_icon_background_size"/>
+        android:width="54dp"
+        android:height="54dp"/>
     <solid android:color="@color/car_ui_toolbar_menu_item_icon_background_color"/>
 </shape>
-
-
diff --git a/car-ui-lib/referencedesign/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml b/car-ui-lib/referencedesign/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
index 03f8d82..1f89ff2 100644
--- a/car-ui-lib/referencedesign/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
+++ b/car-ui-lib/referencedesign/res/drawable/car_ui_toolbar_menu_item_icon_ripple.xml
@@ -16,6 +16,23 @@
   ~ limitations under the License.
   ~
  -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="#27ffffff"
-        android:radius="48dp"/>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_focused="true">
+        <shape android:shape="oval">
+            <solid android:color="#3D94CBFF"/>
+            <stroke android:width="8dp"
+                    android:color="#94CBFF"/>
+            <size android:width="48dp"
+                  android:height="48dp"/>
+        </shape>
+    </item>
+    <item>
+        <ripple android:color="#27ffffff">
+            <item android:id="@android:id/mask">
+                <shape android:shape="oval">
+                    <solid android:color="#FFFFFF"/>
+                </shape>
+            </item>
+        </ripple>
+    </item>
+</selector>
diff --git a/car-ui-lib/referencedesign/res/layout-ldrtl-port/car_ui_base_layout_toolbar.xml b/car-ui-lib/referencedesign/res/layout-ldrtl-port/car_ui_base_layout_toolbar.xml
index 10c7de6..d988179 100644
--- a/car-ui-lib/referencedesign/res/layout-ldrtl-port/car_ui_base_layout_toolbar.xml
+++ b/car-ui-lib/referencedesign/res/layout-ldrtl-port/car_ui_base_layout_toolbar.xml
@@ -28,11 +28,11 @@
          highlight is disabled, so it's invisible to the user no matter whether it's focused or not.
          -->
     <com.android.car.ui.FocusParkingView
-        android:layout_width="1dp"
-        android:layout_height="1dp"/>
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
 
     <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"
@@ -64,7 +64,8 @@
 
             <FrameLayout
                 android:id="@+id/car_ui_toolbar_nav_icon_container"
-                android:layout_width="112dp"
+                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_guideline"
                 app:layout_constraintLeft_toLeftOf="parent"
@@ -72,11 +73,11 @@
 
                 <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"
-                    android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
                     android:tint="@color/car_ui_text_color_primary"/>
 
                 <ImageView
diff --git a/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_base_layout_toolbar.xml b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_base_layout_toolbar.xml
index 2028530..52c9f3f 100644
--- a/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_base_layout_toolbar.xml
+++ b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_base_layout_toolbar.xml
@@ -27,11 +27,11 @@
          highlight is disabled, so it's invisible to the user no matter whether it's focused or not.
          -->
     <com.android.car.ui.FocusParkingView
-        android:layout_width="1dp"
-        android:layout_height="1dp"/>
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
 
     <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"
@@ -56,7 +56,8 @@
 
             <FrameLayout
                 android:id="@+id/car_ui_toolbar_nav_icon_container"
-                android:layout_width="112dp"
+                style="@style/Widget.CarUi.Toolbar.NavIconContainer"
+                android:layout_width="@dimen/car_ui_toolbar_margin"
                 android:layout_height="0dp"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintLeft_toLeftOf="parent"
@@ -64,7 +65,7 @@
 
                 <ImageView
                     android:id="@+id/car_ui_toolbar_nav_icon"
-                    android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
+                    style="@style/Widget.CarUi.Toolbar.NavIcon"
                     android:tint="@color/car_ui_text_color_primary"
                     android:layout_width="@dimen/car_ui_toolbar_nav_icon_size"
                     android:layout_height="@dimen/car_ui_toolbar_nav_icon_size"
diff --git a/car-ui-lib/res/layout-ldrtl/car_ui_recycler_view.xml b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_recycler_view.xml
similarity index 100%
rename from car-ui-lib/res/layout-ldrtl/car_ui_recycler_view.xml
rename to car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_recycler_view.xml
diff --git a/car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_recyclerview_scrollbar.xml
similarity index 100%
copy from car-ui-lib/res/layout/car_ui_recyclerview_scrollbar.xml
copy to car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_recyclerview_scrollbar.xml
diff --git a/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar.xml b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar.xml
index a2d884d..2714f44 100644
--- a/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar.xml
+++ b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar.xml
@@ -23,7 +23,8 @@
 
     <FrameLayout
         android:id="@+id/car_ui_toolbar_nav_icon_container"
-        android:layout_width="112dp"
+        style="@style/Widget.CarUi.Toolbar.NavIconContainer"
+        android:layout_width="@dimen/car_ui_toolbar_margin"
         android:layout_height="0dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="parent"
@@ -31,7 +32,7 @@
 
         <ImageView
             android:id="@+id/car_ui_toolbar_nav_icon"
-            android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
+            style="@style/Widget.CarUi.Toolbar.NavIcon"
             android:tint="@color/car_ui_text_color_primary"
             android:layout_width="@dimen/car_ui_toolbar_nav_icon_size"
             android:layout_height="@dimen/car_ui_toolbar_nav_icon_size"
diff --git a/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar_two_row.xml b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar_two_row.xml
index 395e48a..6935121 100644
--- a/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar_two_row.xml
+++ b/car-ui-lib/referencedesign/res/layout-ldrtl/car_ui_toolbar_two_row.xml
@@ -30,7 +30,8 @@
 
     <FrameLayout
         android:id="@+id/car_ui_toolbar_nav_icon_container"
-        android:layout_width="112dp"
+        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_guideline"
         app:layout_constraintLeft_toLeftOf="parent"
@@ -38,11 +39,11 @@
 
         <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"
-            android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
             android:tint="@color/car_ui_text_color_primary"/>
 
         <ImageView
diff --git a/car-ui-lib/referencedesign/res/layout-port/car_ui_base_layout_toolbar.xml b/car-ui-lib/referencedesign/res/layout-port/car_ui_base_layout_toolbar.xml
index 7aaa72d..283baf8 100644
--- a/car-ui-lib/referencedesign/res/layout-port/car_ui_base_layout_toolbar.xml
+++ b/car-ui-lib/referencedesign/res/layout-port/car_ui_base_layout_toolbar.xml
@@ -28,11 +28,11 @@
          highlight is disabled, so it's invisible to the user no matter whether it's focused or not.
          -->
     <com.android.car.ui.FocusParkingView
-        android:layout_width="1dp"
-        android:layout_height="1dp"/>
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
 
     <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"
@@ -64,7 +64,8 @@
 
             <FrameLayout
                 android:id="@+id/car_ui_toolbar_nav_icon_container"
-                android:layout_width="112dp"
+                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_guideline"
                 app:layout_constraintStart_toStartOf="parent"
@@ -72,11 +73,11 @@
 
                 <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"
-                    android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple"
                     android:tint="@color/car_ui_text_color_primary"/>
 
                 <ImageView
diff --git a/car-ui-lib/referencedesign/res/layout/car_ui_preference_widget_seekbar.xml b/car-ui-lib/referencedesign/res/layout/car_ui_preference_widget_seekbar.xml
new file mode 100644
index 0000000..16d4ea0
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/layout/car_ui_preference_widget_seekbar.xml
@@ -0,0 +1,92 @@
+<?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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:gravity="center_vertical"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:orientation="horizontal"
+    android:background="@drawable/car_ui_seekbar_preference_background"
+    android:clipChildren="false"
+    android:clipToPadding="false">
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="44dp"
+        android:layout_height="44dp"
+        android:layout_marginTop="16dp"
+        android:layout_marginBottom="16dp"
+        android:layout_marginEnd="16dp"
+        android:scaleType="fitCenter"
+        android:tint="@color/car_ui_text_color_primary"/>
+
+    <RelativeLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:layout_marginTop="16dp"
+        android:layout_marginBottom="16dp"
+        android:clipChildren="false"
+        android:clipToPadding="false">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="@style/TextAppearance.CarUi.PreferenceTitle"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignStart="@android:id/title"
+            android:layout_below="@android:id/title"
+            android:textAppearance="@style/TextAppearance.CarUi.PreferenceSummary"/>
+
+        <!-- Using UnPressableLinearLayout as a workaround to disable the pressed state propagation
+        to the children of this container layout. Otherwise, the animated pressed state will also
+        play for the thumb in the AbsSeekBar in addition to the preference's ripple background.
+        The background of the SeekBar is also set to null to disable the ripple background -->
+        <androidx.preference.UnPressableLinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alignStart="@android:id/title"
+            android:layout_below="@android:id/summary"
+            android:clipChildren="false"
+            android:clipToPadding="false">
+            <SeekBar
+                android:id="@+id/seekbar"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                style="@style/Widget.CarUi.SeekbarPreference.Seekbar"/>
+
+            <TextView
+                android:id="@+id/seekbar_value"
+                android:layout_width="0dp"
+                android:layout_height="0dp"
+                android:visibility="gone"/>
+        </androidx.preference.UnPressableLinearLayout>
+
+    </RelativeLayout>
+
+</LinearLayout>
diff --git a/car-ui-lib/referencedesign/res/layout/car_ui_toolbar_menu_item.xml b/car-ui-lib/referencedesign/res/layout/car_ui_toolbar_menu_item.xml
new file mode 100644
index 0000000..18f2e16
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/layout/car_ui_toolbar_menu_item.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  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.
+-->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent"
+    android:focusable="false">
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_menu_item_icon_container"
+        style="@style/Widget.CarUi.Toolbar.MenuItem.IndividualContainer"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/car_ui_toolbar_menu_item_icon_ripple">
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:src="@drawable/car_ui_toolbar_menu_item_icon_background"
+            android:scaleType="center"/>
+        <ImageView
+            android:id="@+id/car_ui_toolbar_menu_item_icon"
+            android:layout_width="44dp"
+            android:layout_height="44dp"
+            android:layout_gravity="center"
+            android:tint="@color/car_ui_toolbar_menu_item_icon_color"
+            android:tintMode="src_in"/>
+        <com.android.car.ui.uxr.DrawableStateSwitch
+            android:id="@+id/car_ui_toolbar_menu_item_switch"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:background="@null"
+            android:focusable="false"
+            android:clickable="false"/>
+    </FrameLayout>
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_menu_item_text_container"
+        style="@style/Widget.CarUi.Toolbar.MenuItem.IndividualContainer"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="?android:attr/selectableItemBackground">
+        <!-- These buttons must have clickable="false" or they will steal the click events from the container -->
+        <com.android.car.ui.uxr.DrawableStateButton
+            android:id="@+id/car_ui_toolbar_menu_item_text"
+            style="@style/Widget.CarUi.Toolbar.TextButton"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:background="@null"
+            android:focusable="false"
+            android:clickable="false"/>
+        <com.android.car.ui.uxr.DrawableStateButton
+            android:id="@+id/car_ui_toolbar_menu_item_text_with_icon"
+            style="@style/Widget.CarUi.Toolbar.TextButton.WithIcon"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:background="@null"
+            android:focusable="false"
+            android:clickable="false"/>
+    </FrameLayout>
+</FrameLayout>
diff --git a/car-ui-lib/referencedesign/res/values-ldrtl/values.xml b/car-ui-lib/referencedesign/res/values-ldrtl/values.xml
index 2d50133..24552a5 100644
--- a/car-ui-lib/referencedesign/res/values-ldrtl/values.xml
+++ b/car-ui-lib/referencedesign/res/values-ldrtl/values.xml
@@ -1,4 +1,17 @@
 <resources>
     <bool name="car_ui_toolbar_nav_icon_reserve_space">false</bool>
     <bool name="car_ui_toolbar_logo_fills_nav_icon_space">false</bool>
+
+    <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>
 </resources>
diff --git a/car-ui-lib/res/values-night/colors.xml b/car-ui-lib/referencedesign/res/values-night/colors.xml
similarity index 83%
rename from car-ui-lib/res/values-night/colors.xml
rename to car-ui-lib/referencedesign/res/values-night/colors.xml
index 4295f07..42d706d 100644
--- a/car-ui-lib/res/values-night/colors.xml
+++ b/car-ui-lib/referencedesign/res/values-night/colors.xml
@@ -15,5 +15,7 @@
 -->
 <resources>
     <!-- Rotary focus -->
-    <color name="car_ui_rotary_focus_color">#2371cd</color>
+
+    <color name="car_ui_rotary_focus_stroke_color">#94CBFF</color>
+    <color name="car_ui_rotary_focus_fill_color">#3D94CBFF</color>
 </resources>
diff --git a/car-ui-lib/res/values-port/bools.xml b/car-ui-lib/referencedesign/res/values-port/bools.xml
similarity index 100%
rename from car-ui-lib/res/values-port/bools.xml
rename to car-ui-lib/referencedesign/res/values-port/bools.xml
diff --git a/car-ui-lib/referencedesign/res/values/attrs.xml b/car-ui-lib/referencedesign/res/values/attrs.xml
index a0b53df..0708c10 100644
--- a/car-ui-lib/referencedesign/res/values/attrs.xml
+++ b/car-ui-lib/referencedesign/res/values/attrs.xml
@@ -56,4 +56,6 @@
     <attr name="layout_goneMarginStart" format="dimension"/>
     <attr name="layout_goneMarginEnd" format="dimension"/>
 
+    <attr name="state_ux_restricted" format="boolean"/>
+
 </resources>
diff --git a/car-ui-lib/res/values/ids.xml b/car-ui-lib/referencedesign/res/values/dimens.xml
similarity index 77%
copy from car-ui-lib/res/values/ids.xml
copy to car-ui-lib/referencedesign/res/values/dimens.xml
index 2c23ac3..80fc15b 100644
--- a/car-ui-lib/res/values/ids.xml
+++ b/car-ui-lib/referencedesign/res/values/dimens.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019 The Android Open Source Project
+<!-- 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.
@@ -14,6 +14,5 @@
  limitations under the License.
 -->
 <resources>
-    <!-- Id used for the search button when using Toolbar.createSearch() method -->
-    <item name="search" type="id"/>
+    <dimen name="car_ui_toolbar_margin">76dp</dimen>
 </resources>
diff --git a/car-ui-lib/referencedesign/res/values/styles.xml b/car-ui-lib/referencedesign/res/values/styles.xml
new file mode 100644
index 0000000..433911c
--- /dev/null
+++ b/car-ui-lib/referencedesign/res/values/styles.xml
@@ -0,0 +1,84 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android">
+    <style name="Widget.CarUi" parent="android:Widget.DeviceDefault"/>
+
+    <style name="Widget.CarUi.Toolbar"/>
+
+    <style name="Widget.CarUi.Toolbar.NavIconContainer">
+        <item name="android:layout_marginVertical">10dp</item>
+        <item name="android:layout_marginHorizontal">18dp</item>
+        <item name="android:background">@drawable/car_ui_toolbar_menu_item_icon_ripple</item>
+    </style>
+
+    <style name="Widget.CarUi.Toolbar.NavIcon">
+        <item name="android:tint">@color/car_ui_text_color_primary</item>
+        <item name="android:src">@drawable/car_ui_icon_arrow_back</item>
+    </style>
+
+    <style name="Widget.CarUi.Toolbar.MenuItem"/>
+
+    <style name="Widget.CarUi.Toolbar.MenuItem.IndividualContainer">
+        <item name="android:minHeight">76dp</item>
+        <item name="android:minWidth">76dp</item>
+        <item name="android:layout_gravity">center</item>
+        <item name="android:focusable">true</item>
+    </style>
+
+    <style name="Widget.CarUi.Button.Borderless.Colored"
+           parent="android:Widget.DeviceDefault.Button.Borderless.Colored"/>
+
+    <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">
+        <item name="android:textColor">@color/car_ui_toolbar_menu_item_icon_color</item>
+    </style>
+
+    <style name="Widget.CarUi.SeekbarPreference"/>
+
+    <!-- Style applied to the seekbar widget within the seekbar preference -->
+    <style name="Widget.CarUi.SeekbarPreference.Seekbar">
+        <item name="android:background">@null</item>
+        <item name="android:clickable">false</item>
+        <item name="android:focusable">false</item>
+        <item name="android:thumb">@drawable/car_ui_seekbar_thumb</item>
+        <item name="android:splitTrack">false</item>
+    </style>
+
+    <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">
+        <item name="android:textSize">32sp</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.PreferenceTitle" parent="TextAppearance.CarUi.Body1"/>
+
+    <style name="TextAppearance.CarUi.Body3">
+        <item name="android:textSize">24sp</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.PreferenceSummary" parent="TextAppearance.CarUi.Body3">
+        <item name="android:textColor">@color/car_ui_text_color_secondary</item>
+    </style>
+
+</resources>
diff --git a/car-ui-lib/referencedesign/res/xml/overlays.xml b/car-ui-lib/referencedesign/res/xml/overlays.xml
index 0d0eb74..cc9b092 100644
--- a/car-ui-lib/referencedesign/res/xml/overlays.xml
+++ b/car-ui-lib/referencedesign/res/xml/overlays.xml
@@ -2,9 +2,53 @@
     <item target="layout/car_ui_base_layout_toolbar" value="@layout/car_ui_base_layout_toolbar"/>
     <item target="layout/car_ui_toolbar" value="@layout/car_ui_toolbar"/>
     <item target="layout/car_ui_toolbar_two_row" value="@layout/car_ui_toolbar_two_row"/>
+    <item target="layout/car_ui_toolbar_menu_item" value="@layout/car_ui_toolbar_menu_item"/>
+    <item target="layout/car_ui_preference_widget_seekbar" value="@layout/car_ui_preference_widget_seekbar"/>
+
+    <item target="drawable/car_ui_icon_arrow_back" value="@drawable/car_ui_icon_arrow_back"/>
+    <item target="drawable/car_ui_toolbar_menu_item_icon_ripple" value="@drawable/car_ui_toolbar_menu_item_icon_ripple"/>
+    <item target="drawable/car_ui_toolbar_menu_item_icon_background" value="@drawable/car_ui_toolbar_menu_item_icon_background"/>
+    <item target="drawable/car_ui_toolbar_menu_item_icon_background" value="@drawable/car_ui_toolbar_menu_item_icon_background"/>
+
+    <item target="style/Widget.CarUi" value="@style/Widget.CarUi"/>
+    <item target="style/Widget.CarUi.Toolbar" value="@style/Widget.CarUi.Toolbar"/>
+    <item target="style/Widget.CarUi.Toolbar.NavIconContainer" value="@style/Widget.CarUi.Toolbar.NavIconContainer"/>
+    <item target="style/Widget.CarUi.Toolbar.NavIcon" value="@style/Widget.CarUi.Toolbar.NavIcon"/>
+    <item target="style/Widget.CarUi.Toolbar.MenuItem" value="@style/Widget.CarUi.Toolbar.MenuItem"/>
+    <item target="style/Widget.CarUi.Toolbar.MenuItem.IndividualContainer" value="@style/Widget.CarUi.Toolbar.MenuItem.IndividualContainer"/>
+    <item target="style/Widget.CarUi.Button.Borderless.Colored" value="@style/Widget.CarUi.Button.Borderless.Colored"/>
+    <item target="style/Widget.CarUi.Toolbar.TextButton" value="@style/Widget.CarUi.Toolbar.TextButton"/>
+    <item target="style/Widget.CarUi.Toolbar.TextButton.WithIcon" value="@style/Widget.CarUi.Toolbar.TextButton.WithIcon"/>
+    <item target="style/Widget.CarUi.SeekbarPreference" value="@style/Widget.CarUi.SeekbarPreference"/>
+    <item target="style/Widget.CarUi.SeekbarPreference.Seekbar" value="@style/Widget.CarUi.SeekbarPreference.Seekbar"/>
+
+    <item target="dimen/car_ui_toolbar_margin" value="@dimen/car_ui_toolbar_margin"/>
+
+    <item target="color/car_ui_text_color_secondary" value="@color/car_ui_text_color_secondary"/>
+    <item target="color/car_ui_toolbar_menu_item_icon_background_color" value="@color/car_ui_toolbar_menu_item_icon_background_color"/>
+    <item target="color/car_ui_toolbar_menu_item_icon_color" value="@color/car_ui_toolbar_menu_item_icon_color"/>
+
+    <item target="drawable/car_ui_icon_arrow_back" value="@drawable/car_ui_icon_arrow_back"/>
+    <item target="drawable/car_ui_toolbar_menu_item_icon_ripple" value="@drawable/car_ui_toolbar_menu_item_icon_ripple"/>
+
+    <item target="style/TextAppearance.CarUi" value="@style/TextAppearance.CarUi"/>
+    <item target="style/TextAppearance.CarUi.Body1" value="@style/TextAppearance.CarUi.Body1"/>
+    <item target="style/TextAppearance.CarUi.PreferenceTitle" value="@style/TextAppearance.CarUi.PreferenceTitle"/>
+    <item target="style/TextAppearance.CarUi.Body3" value="@style/TextAppearance.CarUi.Body3"/>
+    <item target="style/TextAppearance.CarUi.PreferenceSummary" value="@style/TextAppearance.CarUi.PreferenceSummary"/>
+
+    <item target="style/Widget.CarUi" value="@style/Widget.CarUi"/>
+    <item target="style/Widget.CarUi.Toolbar" value="@style/Widget.CarUi.Toolbar"/>
+    <item target="style/Widget.CarUi.Toolbar.NavIconContainer" value="@style/Widget.CarUi.Toolbar.NavIconContainer"/>
+    <item target="style/Widget.CarUi.Toolbar.NavIcon" value="@style/Widget.CarUi.Toolbar.NavIcon"/>
+
+    <item target="dimen/car_ui_toolbar_margin" value="@dimen/car_ui_toolbar_margin"/>
+    <item target="layout/car_ui_recycler_view" value="@layout/car_ui_recycler_view"/>
 
     <item target="bool/car_ui_toolbar_nav_icon_reserve_space" value="@bool/car_ui_toolbar_nav_icon_reserve_space" />
     <item target="bool/car_ui_toolbar_logo_fills_nav_icon_space" value="@bool/car_ui_toolbar_logo_fills_nav_icon_space" />
+    <item target="bool/car_ui_toolbar_tab_flexible_layout" value="@bool/car_ui_toolbar_tab_flexible_layout" />
+    <item target="bool/car_ui_toolbar_tabs_on_second_row" value="@bool/car_ui_toolbar_tabs_on_second_row" />
 
     <item target="id/car_ui_toolbar_background" value="@id/car_ui_toolbar_background" />
     <item target="id/car_ui_toolbar_nav_icon_container" value="@id/car_ui_toolbar_nav_icon_container" />
@@ -19,7 +63,21 @@
     <item target="id/car_ui_toolbar_menu_items_container" value="@id/car_ui_toolbar_menu_items_container" />
     <item target="id/car_ui_toolbar_search_view_container" value="@id/car_ui_toolbar_search_view_container" />
     <item target="id/car_ui_toolbar_progress_bar" value="@id/car_ui_toolbar_progress_bar" />
-    <item target="id/content" value="@id/content" />
+    <item target="id/car_ui_base_layout_content_container" value="@id/car_ui_base_layout_content_container" />
+    <item target="id/car_ui_toolbar_menu_item_icon_container" value="@id/car_ui_toolbar_menu_item_icon_container"/>
+    <item target="id/car_ui_toolbar_menu_item_icon" value="@id/car_ui_toolbar_menu_item_icon"/>
+    <item target="id/car_ui_toolbar_menu_item_switch" value="@id/car_ui_toolbar_menu_item_switch"/>
+    <item target="id/car_ui_toolbar_menu_item_text_container" value="@id/car_ui_toolbar_menu_item_text_container"/>
+    <item target="id/car_ui_toolbar_menu_item_text" value="@id/car_ui_toolbar_menu_item_text"/>
+    <item target="id/car_ui_toolbar_menu_item_text_with_icon" value="@id/car_ui_toolbar_menu_item_text_with_icon"/>
+    <item target="id/seekbar" value="@id/seekbar"/>
+    <item target="id/seekbar_value" value="@id/seekbar_value"/>
+    <item target="id/car_ui_recycler_view" value="@id/car_ui_recycler_view" />
+    <item target="id/car_ui_scroll_bar" value="@id/car_ui_scroll_bar"/>
+    <item target="id/car_ui_scrollbar_page_down" value="@id/car_ui_scrollbar_page_down"/>
+    <item target="id/car_ui_scrollbar_page_up" value="@id/car_ui_scrollbar_page_up"/>
+    <item target="id/car_ui_scrollbar_thumb" value="@id/car_ui_scrollbar_thumb"/>
+    <item target="id/car_ui_scrollbar_track" value="@id/car_ui_scrollbar_track"/>
 
     <item target="attr/layout_constraintGuide_begin" value="@attr/layout_constraintGuide_begin"/>
     <item target="attr/layout_constraintGuide_end" value="@attr/layout_constraintGuide_end"/>
@@ -42,4 +100,5 @@
     <item target="attr/layout_goneMarginLeft" value="@attr/layout_goneMarginBottom"/>
     <item target="attr/layout_goneMarginLeft" value="@attr/layout_goneMarginStart"/>
     <item target="attr/layout_goneMarginLeft" value="@attr/layout_goneMarginEnd"/>
+    <item target="attr/state_ux_restricted" value="@attr/state_ux_restricted"/>
 </overlay>
diff --git a/car-ui-lib/res/drawable/car_ui_focus_area_foreground_highlight.xml b/car-ui-lib/res/drawable/car_ui_focus_area_foreground_highlight.xml
deleted file mode 100644
index b6955f6..0000000
--- a/car-ui-lib/res/drawable/car_ui_focus_area_foreground_highlight.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ 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.
-  -->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-       android:shape="rectangle" >
-    <stroke android:width="10dp" android:color="#FF0000"/>
-</shape>
diff --git a/car-ui-lib/res/layout/car_ui_check_box_list_item.xml b/car-ui-lib/res/layout/car_ui_check_box_list_item.xml
deleted file mode 100644
index 2f5c7a8..0000000
--- a/car-ui-lib/res/layout/car_ui_check_box_list_item.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?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.
-  -->
-<androidx.constraintlayout.widget.ConstraintLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:background="?android:attr/selectableItemBackground"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/car_ui_list_item_check_box_height">
-
-    <androidx.constraintlayout.widget.Guideline
-        android:id="@+id/car_ui_check_box_start_guideline"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        app:layout_constraintGuide_begin="@dimen/car_ui_list_item_check_box_start_inset" />
-
-    <androidx.constraintlayout.widget.Guideline
-        android:id="@+id/car_ui_check_box_end_guideline"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        app:layout_constraintGuide_end="@dimen/car_ui_list_item_check_box_end_inset" />
-
-    <FrameLayout
-        android:id="@+id/check_box_container"
-        android:layout_width="@dimen/car_ui_list_item_check_box_icon_container_width"
-        android:layout_height="0dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="@+id/car_ui_check_box_start_guideline"
-        app:layout_constraintTop_toTopOf="parent">
-
-        <CheckBox
-            android:id="@+id/checkbox"
-            android:clickable="false"
-            android:focusable="false"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center" />
-    </FrameLayout>
-
-    <TextView
-        android:id="@+id/text"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/car_ui_list_item_text_start_margin"
-        android:textAppearance="@style/TextAppearance.CarUi.ListItem"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="@+id/car_ui_check_box_end_guideline"
-        app:layout_constraintStart_toEndOf="@+id/check_box_container"
-        app:layout_constraintTop_toTopOf="parent" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/res/values-af/strings.xml b/car-ui-lib/res/values-af/strings.xml
deleted file mode 100644
index 75130b9..0000000
--- a/car-ui-lib/res/values-af/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Aan"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Af"</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
deleted file mode 100644
index a78faec..0000000
--- a/car-ui-lib/res/values-am/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"አብራ"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ቅናሽ"</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
deleted file mode 100644
index b64c521..0000000
--- a/car-ui-lib/res/values-ar/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"مفعّل"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"غير مفعَّل"</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
deleted file mode 100644
index c391666..0000000
--- a/car-ui-lib/res/values-as/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"অন আছে"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"অফ আছে"</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
deleted file mode 100644
index 5e3670d..0000000
--- a/car-ui-lib/res/values-az/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Aktiv"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Deaktiv"</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
deleted file mode 100644
index f1c2eb7..0000000
--- a/car-ui-lib/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Uključeno"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Isključeno"</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
deleted file mode 100644
index 054ba36..0000000
--- a/car-ui-lib/res/values-be/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Уключана"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Выключана"</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
deleted file mode 100644
index 3ed930c..0000000
--- a/car-ui-lib/res/values-bg/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Вкл."</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Изкл."</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
deleted file mode 100644
index 702a5bb..0000000
--- a/car-ui-lib/res/values-bn/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"চালু"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"বন্ধ"</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
deleted file mode 100644
index 7b5376a..0000000
--- a/car-ui-lib/res/values-bs/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Uključeno"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Isključeno"</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
deleted file mode 100644
index 5d284b7..0000000
--- a/car-ui-lib/res/values-ca/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Activat"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desactivat"</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
deleted file mode 100644
index d230329..0000000
--- a/car-ui-lib/res/values-cs/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Zap"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Vyp"</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
deleted file mode 100644
index 630494f..0000000
--- a/car-ui-lib/res/values-da/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Til"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Fra"</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
deleted file mode 100644
index 2c655d4..0000000
--- a/car-ui-lib/res/values-de/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"An"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Aus"</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
deleted file mode 100644
index d08f663..0000000
--- a/car-ui-lib/res/values-el/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Ενεργό"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Ανενεργή"</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
deleted file mode 100644
index 271d61f..0000000
--- a/car-ui-lib/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"On"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</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
deleted file mode 100644
index 271d61f..0000000
--- a/car-ui-lib/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"On"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</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
deleted file mode 100644
index 271d61f..0000000
--- a/car-ui-lib/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"On"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</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
deleted file mode 100644
index 271d61f..0000000
--- a/car-ui-lib/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"On"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</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
deleted file mode 100644
index 9993024..0000000
--- a/car-ui-lib/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎On‎‏‎‎‏‎"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎Off‎‏‎‎‏‎"</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
deleted file mode 100644
index 71178e9..0000000
--- a/car-ui-lib/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Sí"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"No"</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
deleted file mode 100644
index dd5f07f..0000000
--- a/car-ui-lib/res/values-es/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Activado"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desactivado"</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
deleted file mode 100644
index 2c4c2bb..0000000
--- a/car-ui-lib/res/values-et/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Sees"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Väljas"</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
deleted file mode 100644
index b8b0c79..0000000
--- a/car-ui-lib/res/values-eu/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Aktibatuta"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desaktibatuta"</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
deleted file mode 100644
index c0cc566..0000000
--- a/car-ui-lib/res/values-fa/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"روشن"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"خاموش"</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
deleted file mode 100644
index 4b4a942..0000000
--- a/car-ui-lib/res/values-fi/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Päällä"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Pois"</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
deleted file mode 100644
index b83c159..0000000
--- a/car-ui-lib/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Activé"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Désactivé"</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
deleted file mode 100644
index 067f056..0000000
--- a/car-ui-lib/res/values-fr/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Activé"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Désactivé"</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
deleted file mode 100644
index 853a780..0000000
--- a/car-ui-lib/res/values-gl/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Si"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Non"</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
deleted file mode 100644
index 7e937b2..0000000
--- a/car-ui-lib/res/values-gu/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ચાલુ"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"બંધ"</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
deleted file mode 100644
index 30edfb9..0000000
--- a/car-ui-lib/res/values-hi/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"चालू है"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"बंद है"</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
deleted file mode 100644
index 8f19523..0000000
--- a/car-ui-lib/res/values-hr/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Uključeno"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Isključeno"</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
deleted file mode 100644
index f731494..0000000
--- a/car-ui-lib/res/values-hu/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Be"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Ki"</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
deleted file mode 100644
index fc5f19e..0000000
--- a/car-ui-lib/res/values-hy/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Միացված է"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Անջատված է"</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
deleted file mode 100644
index 3bffad0..0000000
--- a/car-ui-lib/res/values-in/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Aktif"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Nonaktif"</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
deleted file mode 100644
index 206dd62..0000000
--- a/car-ui-lib/res/values-is/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Kveikt"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Slökkt"</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
deleted file mode 100644
index 9534e68..0000000
--- a/car-ui-lib/res/values-it/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"On"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Off"</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
deleted file mode 100644
index 24b6a1d..0000000
--- a/car-ui-lib/res/values-iw/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"פועל"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"כבוי"</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
deleted file mode 100644
index b80bef6..0000000
--- a/car-ui-lib/res/values-ja/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ON"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"OFF"</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
deleted file mode 100644
index 3c90f08..0000000
--- a/car-ui-lib/res/values-ka/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ჩართულია"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"გამორთულია"</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
deleted file mode 100644
index 80170fa..0000000
--- a/car-ui-lib/res/values-kk/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Қосулы"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Өшірулі"</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
deleted file mode 100644
index 044333c..0000000
--- a/car-ui-lib/res/values-km/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"បើក"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"បិទ"</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
deleted file mode 100644
index 261d650..0000000
--- a/car-ui-lib/res/values-kn/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ಆನ್ ಆಗಿದೆ"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ಆಫ್ ಆಗಿದೆ"</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
deleted file mode 100644
index f8efa76..0000000
--- a/car-ui-lib/res/values-ko/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"사용 설정됨"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"사용 중지됨"</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
deleted file mode 100644
index 5143048..0000000
--- a/car-ui-lib/res/values-ky/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Күйүк"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Өчүк"</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
deleted file mode 100644
index 3c65459..0000000
--- a/car-ui-lib/res/values-lo/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ເປີດ"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ປິດ"</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
deleted file mode 100644
index 674e342..0000000
--- a/car-ui-lib/res/values-lt/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Įjungta"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Išjungta"</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
deleted file mode 100644
index fa02dd9..0000000
--- a/car-ui-lib/res/values-lv/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Ieslēgta"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Izslēgta"</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
deleted file mode 100644
index 9905cd0..0000000
--- a/car-ui-lib/res/values-mk/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Вклучено"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Исклучено"</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
deleted file mode 100644
index c94f404..0000000
--- a/car-ui-lib/res/values-ml/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ഓണാണ്"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ഓഫാണ്"</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
deleted file mode 100644
index ac81c8a..0000000
--- a/car-ui-lib/res/values-mn/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Асаалттай"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Унтраалттай"</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
deleted file mode 100644
index b86a9de..0000000
--- a/car-ui-lib/res/values-mr/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"सुरू आहे"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"बंद आहे"</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
deleted file mode 100644
index c5c780f..0000000
--- a/car-ui-lib/res/values-ms/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Hidup"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Mati"</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
deleted file mode 100644
index b1c9f63..0000000
--- a/car-ui-lib/res/values-my/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ဖွင့်ထားသည်"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ပိတ်ထားသည်"</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
deleted file mode 100644
index ed93746..0000000
--- a/car-ui-lib/res/values-nb/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"På"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Av"</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
deleted file mode 100644
index 9e86b17..0000000
--- a/car-ui-lib/res/values-ne/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"सुचारू छ"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"बन्द छ"</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
deleted file mode 100644
index 50418fc..0000000
--- a/car-ui-lib/res/values-nl/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Aan"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Uit"</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
deleted file mode 100644
index 28ac864..0000000
--- a/car-ui-lib/res/values-or/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ଚାଲୁ ଅଛି"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ବନ୍ଦ ଅଛି"</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
deleted file mode 100644
index 251b8bb..0000000
--- a/car-ui-lib/res/values-pa/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ਚਾਲੂ"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ਬੰਦ"</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
deleted file mode 100644
index ec5388c..0000000
--- a/car-ui-lib/res/values-pl/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Wł."</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Wył."</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-pt-rPT/strings.xml b/car-ui-lib/res/values-pt-rPT/strings.xml
deleted file mode 100644
index ec04d23..0000000
--- a/car-ui-lib/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Ativado"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desativado"</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
deleted file mode 100644
index 69fc9fe..0000000
--- a/car-ui-lib/res/values-pt/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Ativada"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Desativada"</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
deleted file mode 100644
index 32e31eb..0000000
--- a/car-ui-lib/res/values-ro/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Activat"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Dezactivat"</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
deleted file mode 100644
index 29373a6..0000000
--- a/car-ui-lib/res/values-ru/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Включено"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Выключено"</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
deleted file mode 100644
index a0ea615..0000000
--- a/car-ui-lib/res/values-si/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ක්‍රියාත්මකයි"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ක්‍රියාවිරහිතයි"</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
deleted file mode 100644
index 3925a81..0000000
--- a/car-ui-lib/res/values-sk/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Zap."</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Vyp."</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
deleted file mode 100644
index 6333890..0000000
--- a/car-ui-lib/res/values-sl/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Vklopljeno"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Izklopljeno"</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
deleted file mode 100644
index fb50946..0000000
--- a/car-ui-lib/res/values-sq/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Aktiv"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Joaktiv"</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
deleted file mode 100644
index fd83edf..0000000
--- a/car-ui-lib/res/values-sr/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Укључено"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Искључено"</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
deleted file mode 100644
index 1b31e43..0000000
--- a/car-ui-lib/res/values-sv/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"På"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Av"</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
deleted file mode 100644
index 999ccb6..0000000
--- a/car-ui-lib/res/values-sw/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Imewashwa"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Imezimwa"</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
deleted file mode 100644
index 8598837..0000000
--- a/car-ui-lib/res/values-ta/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ஆன்"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ஆஃப்"</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
deleted file mode 100644
index 3ccf486..0000000
--- a/car-ui-lib/res/values-te/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"ఆన్‌లో ఉంది"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ఆఫ్‌లో ఉంది"</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
deleted file mode 100644
index 6557b2c..0000000
--- a/car-ui-lib/res/values-th/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"เปิด"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"ปิด"</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
deleted file mode 100644
index b879f3b..0000000
--- a/car-ui-lib/res/values-tl/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"I-on"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"I-off"</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
deleted file mode 100644
index 47a1978..0000000
--- a/car-ui-lib/res/values-tr/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Açık"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Kapalı"</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
deleted file mode 100644
index bd50346..0000000
--- a/car-ui-lib/res/values-uk/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Увімкнено"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Вимкнено"</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
deleted file mode 100644
index efffbcd..0000000
--- a/car-ui-lib/res/values-ur/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"آن ہے"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"آف ہے"</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
deleted file mode 100644
index 1dd26ac..0000000
--- a/car-ui-lib/res/values-uz/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Yoniq"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Yoqilmagan"</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
deleted file mode 100644
index 39df5ce..0000000
--- a/car-ui-lib/res/values-vi/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_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_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-zh-rCN/strings.xml b/car-ui-lib/res/values-zh-rCN/strings.xml
deleted file mode 100644
index a581718..0000000
--- a/car-ui-lib/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"开启"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"关闭"</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
deleted file mode 100644
index dc5482d..0000000
--- a/car-ui-lib/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"已開啟"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"已關閉"</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
deleted file mode 100644
index 0d28130..0000000
--- a/car-ui-lib/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"開啟"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"關閉"</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
deleted file mode 100644
index a3066d0..0000000
--- a/car-ui-lib/res/values-zu/strings.xml
+++ /dev/null
@@ -1,29 +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"
-    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_preference_switch_on" msgid="5512335363135043642">"Vuliwe"</string>
-    <string name="car_ui_preference_switch_off" msgid="4393435896926380920">"Valiwe"</string>
-    <string name="car_ui_restricted_while_driving" msgid="8401317496175957541">"Isici asitholakali ngenkathi ushayela"</string>
-</resources>
diff --git a/car-ui-lib/res/values/integers.xml b/car-ui-lib/res/values/integers.xml
deleted file mode 100644
index 963c955..0000000
--- a/car-ui-lib/res/values/integers.xml
+++ /dev/null
@@ -1,21 +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>
-    <!-- Default max string length -->
-    <integer name="car_ui_default_max_string_length">120</integer>
-    <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/settings.gradle b/car-ui-lib/settings.gradle
index 50c2c6d..4deba21 100644
--- a/car-ui-lib/settings.gradle
+++ b/car-ui-lib/settings.gradle
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
+include ':car-ui-lib'
+project(':car-ui-lib').projectDir = new File('./car-ui-lib')
 include ':PaintBooth'
-project(':PaintBooth').projectDir = new File('./tests/paintbooth')
-include ':RoboTests'
-project(':RoboTests').projectDir = new File('./tests/robotests')
-include ':InstrumentionTests'
-project(':InstrumentionTests').projectDir = new File('./tests/unit')
+project(':PaintBooth').projectDir = new File('./paintbooth')
+include ':shared-library'
+project(':shared-library').projectDir = new File('./sharedlibrary')
 
 rootProject.name='Chassis'
diff --git a/car-ui-lib/sharedlibrary/AndroidManifest-gradle.xml b/car-ui-lib/sharedlibrary/AndroidManifest-gradle.xml
new file mode 100644
index 0000000..53744fd
--- /dev/null
+++ b/car-ui-lib/sharedlibrary/AndroidManifest-gradle.xml
@@ -0,0 +1,23 @@
+<?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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.car.ui.sharedlibrary">
+  <application>
+      <library android:name="com.android.car.ui.sharedlibrary" />
+  </application>
+</manifest>
diff --git a/car-ui-lib/sharedlibrary/AndroidManifest.xml b/car-ui-lib/sharedlibrary/AndroidManifest.xml
index 61b4515..89a2407 100644
--- a/car-ui-lib/sharedlibrary/AndroidManifest.xml
+++ b/car-ui-lib/sharedlibrary/AndroidManifest.xml
@@ -19,8 +19,8 @@
           package="com.android.car.ui.sharedlibrary">
   <uses-sdk
       android:minSdkVersion="28"
-      android:targetSdkVersion="28" />
-    <application>
-        <library android:name="com.android.car.ui.sharedlibrary" />
-    </application>
+      android:targetSdkVersion="30"/>
+  <application>
+      <library android:name="com.android.car.ui.sharedlibrary"/>
+  </application>
 </manifest>
diff --git a/car-ui-lib/sharedlibrary/README.md b/car-ui-lib/sharedlibrary/README.md
index 21c6172..6835846 100644
--- a/car-ui-lib/sharedlibrary/README.md
+++ b/car-ui-lib/sharedlibrary/README.md
@@ -2,4 +2,4 @@
 Please refer to [Android Automotive 'Chassiss' library](../README.md)
 
 **Required**
-This module needs to be, and is included in PRODUCT_PACKAGES in vendor/auto/embeded/products/car.mk. It needs to be pre-installed with the system image.
\ No newline at end of file
+This module needs to be, and is included in PRODUCT_PACKAGES in vendor/auto/embeded/products/car.mk. It needs to be pre-installed with the system image.
diff --git a/car-ui-lib/sharedlibrary/build.gradle b/car-ui-lib/sharedlibrary/build.gradle
new file mode 100644
index 0000000..f5a4831
--- /dev/null
+++ b/car-ui-lib/sharedlibrary/build.gradle
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+// Library-level build file
+
+apply plugin: 'com.android.library'
+
+android {
+    compileSdkVersion 30
+
+    defaultConfig {
+        minSdkVersion 28
+        targetSdkVersion 30
+        versionCode 1
+        versionName "1.0"
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    sourceSets {
+        main {
+            manifest.srcFile 'AndroidManifest-gradle.xml'
+        }
+    }
+}
+
+dependencies {
+}
diff --git a/car-ui-lib/sharedlibrary/res/values/public.xml b/car-ui-lib/sharedlibrary/res/values/public.xml
deleted file mode 100644
index 80ea2e7..0000000
--- a/car-ui-lib/sharedlibrary/res/values/public.xml
+++ /dev/null
@@ -1,53 +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.
--->
-<resources>
-    <!-- Any resource or attribute that is or can be referenced from RRO needs to be public go/rro-on-r -->
-
-    <!-- To add new resources to this file follow the following naming convention -->
-    <!-- 0cXXXX is used for styles -->
-    <!-- 0dXXXX is used for attributes -->
-    <!-- 0eXXXX is used for drawables -->
-    <!-- The first time that a resource type is seen, Android resource manager, assigns YY of the ID (0xXXYYXXXX) of the resouce to that type.
-         And you'll get a compile error if you use the same type with a different YY -->
-
-    <public type="style" name="Theme.CarUi" id="0x000c0000" />
-
-    <public type="attr" name="logo" id="0x000d0001" />
-    <public type="attr" name="car_ui_state" id="0x000d0002" />
-    <public type="attr" name="title" id="0x000d0003" />
-    <public type="attr" name="layoutStyle" id="0x000d0004" />
-    <public type="attr" name="numOfColumns" id="0x000d0005" />
-    <public type="attr" name="layout_constraintTop_toTopOf" id="0x000d0006" />
-    <public type="attr" name="layout_constraintTop_toBottomOf" id="0x000d0007" />
-    <public type="attr" name="layout_constraintLeft_toLeftOf" id="0x000d0008" />
-    <public type="attr" name="layout_constraintBottom_toTopOf" id="0x000d0009" />
-    <public type="attr" name="layout_constraintBottom_toBottomOf" id="0x000d0010" />
-    <public type="attr" name="layout_constraintRight_toRightOf" id="0x000d0011" />
-    <public type="attr" name="search" id="0x000d0012" />
-    <public type="attr" name="settings" id="0x000d0013" />
-    <public type="attr" name="id" id="0x000d0014" />
-    <public type="attr" name="icon" id="0x000d0015" />
-    <public type="attr" name="onClick" id="0x000d0016" />
-    <public type="attr" name="checkable" id="0x000d0017" />
-    <public type="attr" name="uxRestrictions" id="0x000d0018" />
-    <public type="attr" name="singleLineTitle" id="0x000d0019" />
-    <public type="attr" name="useSimpleSummaryProvider" id="0x000d0020" />
-    <public type="attr" name="initialExpandedChildrenCount" id="0x000d0021" />
-    <public type="attr" name="enableCopying" id="0x000d0022" />
-
-    <public type="drawable" name="car_ui_activity_background" id="0x000e0000" />
-
-</resources>
diff --git a/car-ui-lib/sharedlibrary/src/main/res/values/public.xml b/car-ui-lib/sharedlibrary/src/main/res/values/public.xml
new file mode 100644
index 0000000..7ec6c82
--- /dev/null
+++ b/car-ui-lib/sharedlibrary/src/main/res/values/public.xml
@@ -0,0 +1,27 @@
+<?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>
+    <!-- Any resource or attribute that is or can be referenced from RRO needs to be public go/rro-on-r -->
+    <!-- Keep in mind public resources are ignored when building with gradle -->
+
+    <!-- To add new resources to this file follow the following naming convention -->
+    <!-- 0cXXXX is used for styles -->
+    <!-- 0dXXXX is used for attributes -->
+    <!-- 0eXXXX is used for drawables -->
+    <!-- The first time that a resource type is seen, Android resource manager, assigns YY of the ID (0xXXYYXXXX) of the resource to that type.
+         And you'll get a compile error if you use the same type with a different YY -->
+
+</resources>
diff --git a/car-ui-lib/src/com/android/car/ui/FocusArea.java b/car-ui-lib/src/com/android/car/ui/FocusArea.java
deleted file mode 100644
index f969380..0000000
--- a/car-ui-lib/src/com/android/car/ui/FocusArea.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * 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;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.view.KeyEvent;
-import android.view.View;
-import android.widget.LinearLayout;
-
-import androidx.annotation.Nullable;
-
-/**
- * A {@link LinearLayout} used as a navigation block for the rotary controller.
- * <p>
- * The {@link com.android.car.rotary.RotaryService} looks for instances of {@link FocusArea} in the
- * view hierarchy when handling rotate and nudge actions. When receiving a rotation event ({@link
- * android.car.input.RotaryEvent}), RotaryService will move the focus to another {@link View} that
- * can take focus within the same FocusArea. When receiving a nudge event ({@link
- * KeyEvent#KEYCODE_SYSTEM_NAVIGATION_UP}, {@link KeyEvent#KEYCODE_SYSTEM_NAVIGATION_DOWN}, {@link
- * KeyEvent#KEYCODE_SYSTEM_NAVIGATION_LEFT}, or {@link KeyEvent#KEYCODE_SYSTEM_NAVIGATION_RIGHT}),
- * RotaryService will move the focus to another view that can take focus in another (typically
- * adjacent) FocusArea.
- * <p>
- * If enabled, FocusArea can draw highlights when one of its descendants has focus.
- * <p>
- * When creating a navigation block in the layout file, if you intend to use a LinearLayout as a
- * container for that block, just use a FocusArea instead; otherwise wrap the block in a FocusArea.
- * <p>
- * DO NOT nest a FocusArea inside another FocusArea because it will result in undefined navigation
- * behavior.
- */
-public class FocusArea extends LinearLayout {
-
-    /** Whether the FocusArea's descendant has focus (the FocusArea itself is not focusable). */
-    private boolean mHasFocus;
-
-    /**
-     * Whether to draw {@link #mForegroundHighlight} when one of the FocusArea's descendants has
-     * focus.
-     */
-    private boolean mEnableForegroundHighlight;
-
-    /**
-     * Whether to draw {@link #mBackgroundHighlight} when one of the FocusArea's descendants has
-     * focus.
-     */
-    private boolean mEnableBackgroundHighlight;
-
-    /**
-     * Highlight (typically outline of the FocusArea) drawn on top of the FocusArea and its
-     * descendants.
-     */
-    private Drawable mForegroundHighlight;
-
-    /**
-     * Highlight (typically a solid or gradient shape) drawn on top of the FocusArea but behind its
-     * descendants.
-     */
-    private Drawable mBackgroundHighlight;
-
-    /** The padding (in pixels) of the FocusArea highlight. */
-    private int mPaddingLeft;
-    private int mPaddingRight;
-    private int mPaddingTop;
-    private int mPaddingBottom;
-
-    public FocusArea(Context context) {
-        super(context);
-        init();
-    }
-
-    public FocusArea(Context context, @Nullable AttributeSet attrs) {
-        super(context, attrs);
-        init();
-    }
-
-    public FocusArea(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        init();
-    }
-
-    public FocusArea(Context context, @Nullable AttributeSet attrs, int defStyleAttr,
-            int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-        init();
-    }
-
-    private void init() {
-        mEnableForegroundHighlight = getContext().getResources().getBoolean(
-                R.bool.car_ui_enable_focus_area_foreground_highlight);
-        mEnableBackgroundHighlight = getContext().getResources().getBoolean(
-                R.bool.car_ui_enable_focus_area_background_highlight);
-        mForegroundHighlight = getContext().getResources().getDrawable(
-                R.drawable.car_ui_focus_area_foreground_highlight, getContext().getTheme());
-        mBackgroundHighlight = getContext().getResources().getDrawable(
-                R.drawable.car_ui_focus_area_background_highlight, getContext().getTheme());
-
-        // Ensure that an AccessibilityNodeInfo is created for this view.
-        setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
-
-        // By default all ViewGroup subclasses do not call their draw() and onDraw() methods. We
-        // should enable it since we override these methods.
-        setWillNotDraw(false);
-
-        // Update highlight of the FocusArea when the focus of its descendants has changed.
-        getViewTreeObserver().addOnGlobalFocusChangeListener(
-                (oldFocus, newFocus) -> {
-                    boolean hasFocus = hasFocus();
-                    if (mHasFocus != hasFocus) {
-                        mHasFocus = hasFocus;
-                        invalidate();
-                    }
-                });
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-
-        // Draw highlight on top of this FocusArea (including its background and content) but
-        // behind its children.
-        if (mEnableBackgroundHighlight && mHasFocus) {
-            mBackgroundHighlight.setBounds(
-                    mPaddingLeft + getScrollX(),
-                    mPaddingTop + getScrollY(),
-                    getScrollX() + getWidth() - mPaddingRight,
-                    getScrollY() + getHeight() - mPaddingBottom);
-            mBackgroundHighlight.draw(canvas);
-        }
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        super.draw(canvas);
-
-        // Draw highlight on top of this FocusArea (including its background and content) and its
-        // children (including background, content, focus highlight, etc).
-        if (mEnableForegroundHighlight && mHasFocus) {
-            mForegroundHighlight.setBounds(
-                    mPaddingLeft + getScrollX(),
-                    mPaddingTop + getScrollY(),
-                    getScrollX() + getWidth() - mPaddingRight,
-                    getScrollY() + getHeight() - mPaddingBottom);
-            mForegroundHighlight.draw(canvas);
-        }
-    }
-
-    @Override
-    public CharSequence getAccessibilityClassName() {
-        return FocusArea.class.getName();
-    }
-
-    /** Sets the padding (in pixels) of the FocusArea highlight. */
-    public void setHighlightPadding(int left, int top, int right, int bottom) {
-        if (mPaddingLeft == left && mPaddingTop == top && mPaddingRight == right
-                && mPaddingBottom == bottom) {
-            return;
-        }
-        mPaddingLeft = left;
-        mPaddingTop = top;
-        mPaddingRight = right;
-        mPaddingBottom = bottom;
-        invalidate();
-    }
-}
diff --git a/car-ui-lib/src/com/android/car/ui/utils/RotaryConstants.java b/car-ui-lib/src/com/android/car/ui/utils/RotaryConstants.java
deleted file mode 100644
index cb418bb..0000000
--- a/car-ui-lib/src/com/android/car/ui/utils/RotaryConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.utils;
-
-/** Constants for the rotary controller. */
-public final class RotaryConstants {
-    /**
-     * Content description indicating that the rotary controller should scroll this view
-     * horizontally.
-     */
-    public static final String ROTARY_HORIZONTALLY_SCROLLABLE =
-            "android.rotary.HORIZONTALLY_SCROLLABLE";
-
-    /**
-     * Content description indicating that the rotary controller should scroll this view
-     * vertically.
-     */
-    public static final String ROTARY_VERTICALLY_SCROLLABLE =
-            "android.rotary.VERTICALLY_SCROLLABLE";
-
-    /** Prevent instantiation. */
-    private RotaryConstants() {}
-}
diff --git a/car-ui-lib/tests/apitest/auto-generate-resources.py b/car-ui-lib/tests/apitest/auto-generate-resources.py
index 1fcd866..10143c0 100755
--- a/car-ui-lib/tests/apitest/auto-generate-resources.py
+++ b/car-ui-lib/tests/apitest/auto-generate-resources.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #
 # Copyright 2019, The Android Open Source Project
 #
@@ -19,11 +19,28 @@
 import sys
 from resource_utils import get_all_resources, get_resources_from_single_file, add_resource_to_set, Resource
 from git_utils import has_chassis_changes
+from datetime import date
 
 # path to 'packages/apps/Car/libs/car-ui-lib/'
 ROOT_FOLDER = os.path.dirname(os.path.abspath(__file__)) + '/../..'
 OUTPUT_FILE_PATH = ROOT_FOLDER + '/tests/apitest/'
 
+
+COPYRIGHT_STR = """Copyright (C) %s 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.""" % (date.today().strftime("%Y"))
+
+
 """
 Script used to update the 'current.xml' file. This is being used as part of pre-submits to
 verify whether resources previously exposed to OEMs are being changed by a CL, potentially
@@ -45,9 +62,10 @@
 
     output_file = args.file or 'current.xml'
     if args.compare:
-        compare_resources(ROOT_FOLDER+'/res', OUTPUT_FILE_PATH + 'current.xml')
+        compare_resources(ROOT_FOLDER+'/car-ui-lib/src/main/res', OUTPUT_FILE_PATH + 'current.xml')
     else:
-        generate_current_file(ROOT_FOLDER+'/res', output_file)
+        generate_current_file(ROOT_FOLDER+'/car-ui-lib/src/main/res', output_file)
+        generate_overlayable_file(ROOT_FOLDER+'/car-ui-lib/src/main/res')
 
 def generate_current_file(res_folder, output_file='current.xml'):
     resources = get_all_resources(res_folder)
@@ -67,28 +85,64 @@
 
     data = etree.ElementTree(root)
 
-    with open(OUTPUT_FILE_PATH + output_file, 'w') as f:
+    with open(OUTPUT_FILE_PATH + output_file, 'wb') as f:
         data.write(f, pretty_print=True, xml_declaration=True, encoding='utf-8')
 
 def generate_overlayable_file(res_folder):
     resources = get_all_resources(res_folder)
     # We need these to be able to use base layouts in RROs
     # This should become unnecessary in S
+    # source: https://android.googlesource.com/platform/frameworks/opt/sherpa/+/studio-3.0/constraintlayout/src/main/res/values/attrs.xml
+    add_resource_to_set(resources, Resource('layout_optimizationLevel', 'attr'))
+    add_resource_to_set(resources, Resource('constraintSet', 'attr'))
+    add_resource_to_set(resources, Resource('barrierDirection', 'attr'))
+    add_resource_to_set(resources, Resource('constraint_referenced_ids', 'attr'))
+    add_resource_to_set(resources, Resource('chainUseRtl', 'attr'))
+    add_resource_to_set(resources, Resource('title', 'attr'))
     add_resource_to_set(resources, Resource('layout_constraintGuide_begin', 'attr'))
     add_resource_to_set(resources, Resource('layout_constraintGuide_end', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintHorizontal_bias', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintTop_toTopOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintTop_toBottomOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintBottom_toBottomOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintBottom_toTopOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintStart_toStartOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintStart_toEndOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintEnd_toEndOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintEnd_toStartOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintGuide_percent', 'attr'))
     add_resource_to_set(resources, Resource('layout_constraintLeft_toLeftOf', 'attr'))
     add_resource_to_set(resources, Resource('layout_constraintLeft_toRightOf', 'attr'))
-    add_resource_to_set(resources, Resource('layout_constraintRight_toRightOf', 'attr'))
     add_resource_to_set(resources, Resource('layout_constraintRight_toLeftOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintRight_toRightOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintTop_toTopOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintTop_toBottomOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintBottom_toTopOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintBottom_toBottomOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintBaseline_toBaselineOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintStart_toEndOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintStart_toStartOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintEnd_toStartOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintEnd_toEndOf', 'attr'))
+    add_resource_to_set(resources, Resource('layout_goneMarginLeft', 'attr'))
+    add_resource_to_set(resources, Resource('layout_goneMarginTop', 'attr'))
+    add_resource_to_set(resources, Resource('layout_goneMarginRight', 'attr'))
+    add_resource_to_set(resources, Resource('layout_goneMarginBottom', 'attr'))
+    add_resource_to_set(resources, Resource('layout_goneMarginStart', 'attr'))
+    add_resource_to_set(resources, Resource('layout_goneMarginEnd', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintHorizontal_bias', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintVertical_bias', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintWidth_default', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintHeight_default', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintWidth_min', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintWidth_max', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintWidth_percent', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintHeight_min', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintHeight_max', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintHeight_percent', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintLeft_creator', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintTop_creator', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintRight_creator', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintBottom_creator', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintBaseline_creator', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintDimensionRatio', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintHorizontal_weight', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintVertical_weight', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintHorizontal_chainStyle', 'attr'))
+    add_resource_to_set(resources, Resource('layout_constraintVertical_chainStyle', 'attr'))
+    add_resource_to_set(resources, Resource('layout_editor_absoluteX', 'attr'))
+    add_resource_to_set(resources, Resource('layout_editor_absoluteY', 'attr'))
     resources = sorted(resources, key=lambda x: x.type + x.name)
 
     # defer importing lxml to here so that people who aren't editing chassis don't have to have
@@ -97,22 +151,11 @@
 
     root = etree.Element('resources')
 
-    root.addprevious(etree.Comment(' Copyright (C) 2020 The Android Open Source Project\n\n' +
-
-                                   '     Licensed under the Apache License, Version 2.0 (the "License");\n' +
-                                   '     you may not use this file except in compliance with the License.\n' +
-                                   '     You may obtain a copy of the License at\n\n' +
-
-                                   '     http://www.apache.org/licenses/LICENSE-2.0\n\n'
-
-                                   '     Unless required by applicable law or agreed to in writing, software\n'
-                                   '     distributed under the License is distributed on an "AS IS" BASIS,\n'
-                                   '     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
-                                   '     See the License for the specific language governing permissions and\n'
-                                   '     limitations under the License.\n'))
+    root.addprevious(etree.Comment(COPYRIGHT_STR))
+    root.addprevious(etree.Comment('THIS FILE IS AUTO GENERATED, DO NOT EDIT MANUALLY.'))
 
     overlayable = etree.SubElement(root, 'overlayable')
-    overlayable.set('name', 'CarUiLibOverlayableResources')
+    overlayable.set('name', 'car-ui-lib')
 
     policy = etree.SubElement(overlayable, 'policy')
     policy.set('type', 'public')
@@ -124,8 +167,8 @@
 
     data = etree.ElementTree(root)
 
-    output_file=ROOT_FOLDER+'/res/values/overlayable.xml'
-    with open(output_file, 'w') as f:
+    output_file=ROOT_FOLDER+'/car-ui-lib/src/main/res-overlayable/values/overlayable.xml'
+    with open(output_file, 'wb') as f:
         data.write(f, pretty_print=True, xml_declaration=True, encoding='utf-8')
 
 def compare_resources(res_folder, res_public_file):
diff --git a/car-ui-lib/tests/apitest/current.xml b/car-ui-lib/tests/apitest/current.xml
index 0731374..76eb5a2 100644
--- a/car-ui-lib/tests/apitest/current.xml
+++ b/car-ui-lib/tests/apitest/current.xml
@@ -5,8 +5,11 @@
   <public type="attr" name="carUiPreferenceStyle"/>
   <public type="attr" name="carUiRecyclerViewStyle"/>
   <public type="attr" name="state_ux_restricted"/>
+  <public type="bool" name="car_ui_clear_focus_area_history_when_rotating"/>
   <public type="bool" name="car_ui_enable_focus_area_background_highlight"/>
   <public type="bool" name="car_ui_enable_focus_area_foreground_highlight"/>
+  <public type="bool" name="car_ui_escrow_check_components_automatically"/>
+  <public type="bool" name="car_ui_focus_area_default_focus_overrides_history"/>
   <public type="bool" name="car_ui_list_item_single_line_title"/>
   <public type="bool" name="car_ui_preference_list_show_full_screen"/>
   <public type="bool" name="car_ui_preference_show_chevron"/>
@@ -24,7 +27,10 @@
   <public type="color" name="car_ui_preference_two_action_divider_color"/>
   <public type="color" name="car_ui_recyclerview_divider_color"/>
   <public type="color" name="car_ui_ripple_color"/>
-  <public type="color" name="car_ui_rotary_focus_color"/>
+  <public type="color" name="car_ui_rotary_focus_fill_color"/>
+  <public type="color" name="car_ui_rotary_focus_fill_secondary_color"/>
+  <public type="color" name="car_ui_rotary_focus_stroke_color"/>
+  <public type="color" name="car_ui_rotary_focus_stroke_secondary_color"/>
   <public type="color" name="car_ui_scrollbar_thumb"/>
   <public type="color" name="car_ui_text_color_hint"/>
   <public type="color" name="car_ui_text_color_primary"/>
@@ -102,12 +108,14 @@
   <public type="dimen" name="car_ui_recyclerview_divider_height"/>
   <public type="dimen" name="car_ui_recyclerview_divider_start_margin"/>
   <public type="dimen" name="car_ui_recyclerview_divider_top_margin"/>
+  <public type="dimen" name="car_ui_rotary_focus_stroke_width"/>
   <public type="dimen" name="car_ui_scrollbar_button_size"/>
   <public type="dimen" name="car_ui_scrollbar_container_width"/>
   <public type="dimen" name="car_ui_scrollbar_decelerate_interpolator_factor"/>
   <public type="dimen" name="car_ui_scrollbar_deceleration_times_divisor"/>
   <public type="dimen" name="car_ui_scrollbar_margin"/>
   <public type="dimen" name="car_ui_scrollbar_milliseconds_per_inch"/>
+  <public type="dimen" name="car_ui_scrollbar_min_thumb_height"/>
   <public type="dimen" name="car_ui_scrollbar_padding_bottom"/>
   <public type="dimen" name="car_ui_scrollbar_padding_top"/>
   <public type="dimen" name="car_ui_scrollbar_separator_margin"/>
@@ -158,6 +166,7 @@
   <public type="drawable" name="car_ui_icon_delete"/>
   <public type="drawable" name="car_ui_icon_down"/>
   <public type="drawable" name="car_ui_icon_edit"/>
+  <public type="drawable" name="car_ui_icon_lock"/>
   <public type="drawable" name="car_ui_icon_overflow_menu"/>
   <public type="drawable" name="car_ui_icon_save"/>
   <public type="drawable" name="car_ui_icon_search"/>
@@ -167,6 +176,7 @@
   <public type="drawable" name="car_ui_list_item_avatar_icon_outline"/>
   <public type="drawable" name="car_ui_list_item_background"/>
   <public type="drawable" name="car_ui_list_item_divider"/>
+  <public type="drawable" name="car_ui_list_limiting_message_background"/>
   <public type="drawable" name="car_ui_preference_icon_chevron"/>
   <public type="drawable" name="car_ui_preference_icon_chevron_disabled"/>
   <public type="drawable" name="car_ui_preference_icon_chevron_enabled"/>
@@ -190,10 +200,12 @@
   <public type="id" name="car_ui_alert_icon"/>
   <public type="id" name="car_ui_alert_subtitle"/>
   <public type="id" name="car_ui_alert_title"/>
-  <public type="id" name="car_ui_check_box_end_guideline"/>
-  <public type="id" name="car_ui_check_box_start_guideline"/>
+  <public type="id" name="car_ui_base_layout_content_container"/>
+  <public type="id" name="car_ui_focus_area"/>
   <public type="id" name="car_ui_list_item_end_guideline"/>
   <public type="id" name="car_ui_list_item_start_guideline"/>
+  <public type="id" name="car_ui_list_limiting_message"/>
+  <public type="id" name="car_ui_preference_container_without_widget"/>
   <public type="id" name="car_ui_preference_fragment_container"/>
   <public type="id" name="car_ui_recycler_view"/>
   <public type="id" name="car_ui_scroll_bar"/>
@@ -211,6 +223,7 @@
   <public type="id" name="car_ui_toolbar_menu_item_icon_container"/>
   <public type="id" name="car_ui_toolbar_menu_item_switch"/>
   <public type="id" name="car_ui_toolbar_menu_item_text"/>
+  <public type="id" name="car_ui_toolbar_menu_item_text_container"/>
   <public type="id" name="car_ui_toolbar_menu_item_text_with_icon"/>
   <public type="id" name="car_ui_toolbar_menu_items_container"/>
   <public type="id" name="car_ui_toolbar_nav_icon"/>
@@ -232,11 +245,8 @@
   <public type="id" name="car_ui_toolbar_title_logo"/>
   <public type="id" name="car_ui_toolbar_title_logo_container"/>
   <public type="id" name="car_ui_toolbar_top_guideline"/>
-  <public type="id" name="check_box_container"/>
-  <public type="id" name="checkbox"/>
   <public type="id" name="checkbox_widget"/>
   <public type="id" name="container"/>
-  <public type="id" name="content"/>
   <public type="id" name="content_icon"/>
   <public type="id" name="icon"/>
   <public type="id" name="icon_container"/>
@@ -256,13 +266,17 @@
   <public type="id" name="spinner"/>
   <public type="id" name="supplemental_icon"/>
   <public type="id" name="switch_widget"/>
-  <public type="id" name="text"/>
+  <public type="id" name="text_container"/>
   <public type="id" name="textbox"/>
   <public type="id" name="title"/>
   <public type="id" name="title_template"/>
   <public type="id" name="toolbar"/>
   <public type="id" name="touch_interceptor"/>
   <public type="integer" name="car_ui_default_max_string_length"/>
+  <public type="integer" name="car_ui_focus_area_history_cache_type"/>
+  <public type="integer" name="car_ui_focus_area_history_expiration_period_ms"/>
+  <public type="integer" name="car_ui_focus_history_cache_type"/>
+  <public type="integer" name="car_ui_focus_history_expiration_period_ms"/>
   <public type="integer" name="car_ui_scrollbar_longpress_initial_delay"/>
   <public type="integer" name="car_ui_scrollbar_longpress_repeat_interval"/>
   <public type="layout" name="car_ui_alert_dialog_edit_text"/>
@@ -271,9 +285,9 @@
   <public type="layout" name="car_ui_base_layout"/>
   <public type="layout" name="car_ui_base_layout_toolbar"/>
   <public type="layout" name="car_ui_base_layout_toolbar_legacy"/>
-  <public type="layout" name="car_ui_check_box_list_item"/>
   <public type="layout" name="car_ui_header_list_item"/>
   <public type="layout" name="car_ui_list_item"/>
+  <public type="layout" name="car_ui_list_limiting_message"/>
   <public type="layout" name="car_ui_list_preference"/>
   <public type="layout" name="car_ui_list_preference_with_toolbar"/>
   <public type="layout" name="car_ui_preference"/>
@@ -311,6 +325,7 @@
   <public type="string" name="car_ui_scrollbar_component"/>
   <public type="string" name="car_ui_scrollbar_page_down_button"/>
   <public type="string" name="car_ui_scrollbar_page_up_button"/>
+  <public type="string" name="car_ui_scrolling_limited_message"/>
   <public type="string" name="car_ui_toolbar_default_search_hint"/>
   <public type="string" name="car_ui_toolbar_menu_item_overflow_title"/>
   <public type="string" name="car_ui_toolbar_menu_item_search_title"/>
diff --git a/car-ui-lib/tests/apitest/git_utils.py b/car-ui-lib/tests/apitest/git_utils.py
index d3b83a5..9d19432 100755
--- a/car-ui-lib/tests/apitest/git_utils.py
+++ b/car-ui-lib/tests/apitest/git_utils.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #
 # Copyright 2019, The Android Open Source Project
 #
diff --git a/car-ui-lib/tests/apitest/resource_utils.py b/car-ui-lib/tests/apitest/resource_utils.py
index 8429d33..763c5a0 100755
--- a/car-ui-lib/tests/apitest/resource_utils.py
+++ b/car-ui-lib/tests/apitest/resource_utils.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #
 # Copyright 2019, The Android Open Source Project
 #
diff --git a/car-ui-lib/tests/apitest/verify_rro.py b/car-ui-lib/tests/apitest/verify_rro.py
index a58210d..3221123 100755
--- a/car-ui-lib/tests/apitest/verify_rro.py
+++ b/car-ui-lib/tests/apitest/verify_rro.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #
 # Copyright 2019, The Android Open Source Project
 #
@@ -16,7 +16,7 @@
 
 import argparse
 import sys
-from resource_utils import get_all_resources, remove_layout_resources, merge_resources
+from resource_utils import get_all_resources, merge_resources
 from git_utils import has_chassis_changes
 
 def main():
@@ -36,11 +36,11 @@
 
     rro_resources = set()
     for resDir in args.rro:
-        merge_resources(rro_resources, remove_layout_resources(get_all_resources(resDir[0])))
+        merge_resources(rro_resources, get_all_resources(resDir[0]))
 
     base_resources = set()
     for resDir in args.base:
-        merge_resources(base_resources, remove_layout_resources(get_all_resources(resDir[0])))
+        merge_resources(base_resources, get_all_resources(resDir[0]))
 
     extras = rro_resources.difference(base_resources)
     if len(extras) > 0:
diff --git a/car-ui-lib/tests/paintbooth/Android.bp b/car-ui-lib/tests/paintbooth/Android.bp
deleted file mode 100644
index e303d83..0000000
--- a/car-ui-lib/tests/paintbooth/Android.bp
+++ /dev/null
@@ -1,56 +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.
-//
-
-android_app {
-    name: "PaintBooth",
-
-    srcs: [
-    	"src/**/*.java",
-    	"src/**/*.kt",
-    ],
-
-    required: ["privapp_whitelist_com.android.car.ui.paintbooth"],
-
-    resource_dirs: ["res", "res-public"],
-
-    platform_apis: true,
-
-    certificate: "platform",
-
-    privileged: true,
-
-    static_libs: [
-        "car-ui-lib",
-        "android.car.userlib",
-		"guava",
-		"gson-prebuilt-jar",
-    ],
-
-    optimize: {
-        enabled: false,
-    },
-
-    dex_preopt: {
-        enabled: false,
-    },
-
-    product_variables: {
-        pdk: {
-            enabled: false,
-        },
-    },
-    export_package_resources: true,
-}
diff --git a/car-ui-lib/tests/robotests/Android.bp b/car-ui-lib/tests/robotests/Android.bp
deleted file mode 100644
index 20e67ef..0000000
--- a/car-ui-lib/tests/robotests/Android.bp
+++ /dev/null
@@ -1,53 +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.
-//
-
-//###########################################################
-// CarUi lib just for Robolectric test target.     #
-//###########################################################
-android_app {
-    name: "CarUi",
-
-    resource_dirs: [
-        "res",
-    ],
-
-    platform_apis: true,
-
-    privileged: true,
-
-    libs: ["android.car"],
-
-    static_libs: ["car-ui-lib"],
-
-}
-
-//###############################################
-// Car Ui Robolectric test target. #
-//###############################################
-android_robolectric_test {
-    name: "CarUiRoboTests",
-
-    srcs: ["src/**/*.java"],
-
-    java_resource_dirs: ["config"],
-
-    libs: [
-        "android.car",
-        "testng",
-    ],
-
-    instrumentation_for: "CarUi",
-}
diff --git a/car-ui-lib/tests/robotests/build.gradle b/car-ui-lib/tests/robotests/build.gradle
deleted file mode 100644
index 88387b8..0000000
--- a/car-ui-lib/tests/robotests/build.gradle
+++ /dev/null
@@ -1,87 +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.
- */
-
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
-    repositories {
-        google()
-        jcenter()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.3'
-
-        // NOTE: Do not place your application dependencies here; they belong
-        // in the individual module build.gradle files
-    }
-}
-
-allprojects {
-    repositories {
-        google()
-        jcenter()
-    }
-}
-
-// Library-level build file
-
-apply plugin: 'com.android.library'
-
-android {
-    compileSdkVersion 29
-
-    defaultConfig {
-        minSdkVersion 28
-        targetSdkVersion 29
-        versionCode 1
-        versionName "1.0"
-    }
-
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
-    }
-
-    sourceSets {
-        main {
-            manifest.srcFile 'AndroidManifest.xml'
-            res.srcDirs = ['res']
-        }
-
-        test {
-            java.srcDirs = ['src']
-        }
-    }
-
-    testOptions {
-        unitTests {
-            includeAndroidResources = true
-        }
-    }
-}
-
-dependencies {
-    implementation project(':')
-    testImplementation "androidx.test.ext:junit:1.1.1"
-    testImplementation 'org.robolectric:robolectric:4.2'
-    testImplementation "org.mockito:mockito-core:2.19.0"
-    testImplementation "com.google.truth:truth:0.29"
-    testImplementation "org.testng:testng:6.9.9"
-
-    // This is the gradle equivalent of linking to android.car in our Android.mk
-    implementation files('../../../../../../../out/target/common/obj/JAVA_LIBRARIES/android.car_intermediates/classes.jar')
-}
diff --git a/car-ui-lib/tests/robotests/config/robolectric.properties b/car-ui-lib/tests/robotests/config/robolectric.properties
deleted file mode 100644
index 849e07f..0000000
--- a/car-ui-lib/tests/robotests/config/robolectric.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# 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.
-#
-sdk=NEWEST_SDK
diff --git a/car-ui-lib/tests/unit/res/drawable/ic_launcher.png b/car-ui-lib/tests/unit/res/drawable/ic_launcher.png
deleted file mode 100644
index 2af53a4..0000000
--- a/car-ui-lib/tests/unit/res/drawable/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-ui-lib/tests/unit/res/layout/focus_area_test_activity.xml b/car-ui-lib/tests/unit/res/layout/focus_area_test_activity.xml
deleted file mode 100644
index 405bbfe..0000000
--- a/car-ui-lib/tests/unit/res/layout/focus_area_test_activity.xml
+++ /dev/null
@@ -1,36 +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.
-  -->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-    <com.android.car.ui.TestFocusArea
-        android:id="@+id/focus_area"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content">
-        <View
-            android:id="@+id/child"
-            android:focusable="true"
-            android:layout_width="10dp"
-            android:layout_height="10dp"/>
-    </com.android.car.ui.TestFocusArea>
-    <View
-        android:id="@+id/non_child"
-        android:focusable="true"
-        android:layout_width="10dp"
-        android:layout_height="10dp"/>
-</LinearLayout>
diff --git a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusAreaTest.java b/car-ui-lib/tests/unit/src/com/android/car/ui/FocusAreaTest.java
deleted file mode 100644
index 8b2ddc1..0000000
--- a/car-ui-lib/tests/unit/src/com/android/car/ui/FocusAreaTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * 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;
-
-import static org.junit.Assert.assertTrue;
-
-import android.view.View;
-
-import androidx.test.rule.ActivityTestRule;
-
-import com.android.car.ui.tests.unit.R;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/** Unit tests for {@link FocusArea}. */
-public class FocusAreaTest {
-    private static final long WAIT_TIME_MS = 3000;
-
-    @Rule
-    public ActivityTestRule<FocusAreaTestActivity> mActivityRule =
-            new ActivityTestRule<>(FocusAreaTestActivity.class);
-
-    private FocusAreaTestActivity mActivity;
-    private TestFocusArea mFocusArea;
-    private View mChild;
-    private View mNonChild;
-
-    @Before
-    public void setUp() {
-        mActivity = mActivityRule.getActivity();
-        mFocusArea = mActivity.findViewById(R.id.focus_area);
-        mChild = mActivity.findViewById(R.id.child);
-        mNonChild = mActivity.findViewById(R.id.non_child);
-    }
-
-    @Test
-    public void testLoseFocus() throws Exception {
-        mChild.post(() -> {
-            mChild.requestFocus();
-        });
-        mFocusArea.setOnDrawCalled(false);
-        mFocusArea.setDrawCalled(false);
-
-        // FocusArea lost focus.
-        CountDownLatch latch = new CountDownLatch(1);
-        mNonChild.post(() -> {
-            mNonChild.requestFocus();
-            mNonChild.post(() -> {
-                latch.countDown();
-            });
-        });
-        assertDrawMethodsCalled(latch);
-    }
-
-    @Test
-    public void testGetFocus() throws Exception {
-        mNonChild.post(() -> {
-            mNonChild.requestFocus();
-        });
-        mFocusArea.setOnDrawCalled(false);
-        mFocusArea.setDrawCalled(false);
-
-        // FocusArea got focus.
-        CountDownLatch latch = new CountDownLatch(1);
-        mChild.post(() -> {
-            mChild.requestFocus();
-            mChild.post(() -> {
-                latch.countDown();
-            });
-        });
-        assertDrawMethodsCalled(latch);
-    }
-
-    private void assertDrawMethodsCalled(CountDownLatch latch) throws Exception {
-        latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS);
-        assertTrue(mFocusArea.onDrawCalled());
-        assertTrue(mFocusArea.drawCalled());
-    }
-}
diff --git a/car-ui-lib/trailing-blank-line-hook.sh b/car-ui-lib/trailing-blank-line-hook.sh
index d69489d..a850d8e 100755
--- a/car-ui-lib/trailing-blank-line-hook.sh
+++ b/car-ui-lib/trailing-blank-line-hook.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-result=$(find car-ui-lib/ -type f \( -iname \*.java -o -iname \*.xml \) -a \( ! -wholename \*/.idea/\* \) -print0 | xargs -0 -L1 bash -c 'test "$(tail -c 1 "$0")" && echo "No new line at end of $0"')
+result=$(find car-ui-lib/ -type f \( -iname \*.java -o -iname \*.xml \) -a \( ! -wholename \*/.idea/\* \) \( ! -wholename \*/build/\* \) -print0 | xargs -0 -L1 bash -c 'test "$(tail -c 1 "$0")" && echo "No new line at end of $0"')
 if [ \( ! -z "$result" \)  -o \( $(echo "$result" | wc -l) -gt 1 \) ]
 then
     echo "$result" && false;
diff --git a/car-ui-lib/sharedlibrary/Android.bp b/car-uxr-client-lib/Android.bp
similarity index 72%
rename from car-ui-lib/sharedlibrary/Android.bp
rename to car-uxr-client-lib/Android.bp
index 1abaa30..c112734 100644
--- a/car-ui-lib/sharedlibrary/Android.bp
+++ b/car-uxr-client-lib/Android.bp
@@ -1,4 +1,3 @@
-
 //
 // Copyright (C) 2020 The Android Open Source Project
 //
@@ -14,18 +13,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-android_app {
-    name: "car-ui-lib-sharedlibrary",
-    visibility: [
-        "//packages/apps/Car/libs/car-ui-lib/tests/PaintBooth:__pkg__",
-    ],
-    platform_apis: true,
-    resource_dirs: ["res"],
-    aaptflags: ["--shared-lib"],
+android_library {
+
+    name: "car-uxr-client-lib",
+
+    srcs: ["src/**/*.java"],
+
     optimize: {
         enabled: false,
     },
+
+    libs: [
+        "android.car-system-stubs",
+    ],
+    sdk_version: "system_current",
+
     static_libs: [
+        "androidx.recyclerview_recyclerview",
+        "androidx.lifecycle_lifecycle-common-java8",
         "car-ui-lib",
     ],
 }
diff --git a/car-uxr-client-lib/AndroidManifest.xml b/car-uxr-client-lib/AndroidManifest.xml
new file mode 100644
index 0000000..9550419
--- /dev/null
+++ b/car-uxr-client-lib/AndroidManifest.xml
@@ -0,0 +1,20 @@
+<?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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.car.uxr">
+</manifest>
diff --git a/car-uxr-client-lib/OWNERS b/car-uxr-client-lib/OWNERS
new file mode 100644
index 0000000..55f7d43
--- /dev/null
+++ b/car-uxr-client-lib/OWNERS
@@ -0,0 +1,9 @@
+# People who can approve changes for submission.
+johnchoi@google.com
+stenning@google.com
+igorr@google.com
+
+# Engs
+pardis@google.com
+jjoz@google.com
+
diff --git a/car-uxr-client-lib/README.md b/car-uxr-client-lib/README.md
new file mode 100644
index 0000000..7f57376
--- /dev/null
+++ b/car-uxr-client-lib/README.md
@@ -0,0 +1,7 @@
+# Android Automotive App-side User Experience Restriction (UXR) library
+Components and resources designed to reduce the amount of work needed by
+Automotive app developers to add User Experience Restriction Engine
+support to their apps.
+
+Source: /packages/apps/Car/libs/car-uxr-client-lib
+
diff --git a/car-uxr-client-lib/res/values/attrs.xml b/car-uxr-client-lib/res/values/attrs.xml
new file mode 100644
index 0000000..084e30d
--- /dev/null
+++ b/car-uxr-client-lib/res/values/attrs.xml
@@ -0,0 +1,41 @@
+<!--
+  ~ 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
+  -->
+<!--
+  ~ An example uxr_config.xml file would look like:
+  ~ <Mapping xmlns:app="http://schemas.android.com/apk/res-auto">
+  ~     <ListConfig
+  ~         app:id="@+id/call_log_list_uxr_config"
+  ~         app:maxLength="10"
+  ~         app:message="@string/call_log_scrolling_limited_message"
+  ~     />
+  ~ </Mapping>
+  -->
+<resources>
+    <!-- Global container of uxr related app configs -->
+    <declare-styleable name="CarUxRestrictionsAppConfig"/>
+    <!-- The mapping of lists to their uxr related override values. -->
+    <declare-styleable name="CarUxRestrictionsAppConfig_Mapping"/>
+
+    <!-- Uxr related overrides for a specific list -->
+    <declare-styleable name="CarUxRestrictionsAppConfig_ListConfig">
+        <!-- Id of ListConfig, used to differentiate them -->
+        <attr name="id" format="reference"/>
+        <!-- Used to limit the length of a list. -->
+        <attr name="maxLength" format="integer"/>
+        <!-- Used to educate users why their scrolling experience is limited. -->
+        <attr name="message" format="string"/>
+    </declare-styleable>
+</resources>
\ No newline at end of file
diff --git a/car-uxr-client-lib/src/com/android/car/uxr/CarUxRestrictionsAppConfig.java b/car-uxr-client-lib/src/com/android/car/uxr/CarUxRestrictionsAppConfig.java
new file mode 100644
index 0000000..49634ca
--- /dev/null
+++ b/car-uxr-client-lib/src/com/android/car/uxr/CarUxRestrictionsAppConfig.java
@@ -0,0 +1,181 @@
+/*
+ * 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.uxr;
+
+import android.content.Context;
+
+import androidx.annotation.IdRes;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.annotation.XmlRes;
+
+import java.util.Map;
+
+/**
+ * A container class for app specific Car User Experience Restriction override configurations.
+ *
+ * <p>{@link #getInstance(Context, int)} will returned a lazily populated cached reference to the
+ * configurations object that is read using
+ * {@link CarUxRestrictionsAppConfigParser#parseConfig(Context, int)}.
+ *
+ * <p>{@link #getMapping()} can be used to access the mapping of component IDs to configurations
+ * specific to that component.
+ */
+public class CarUxRestrictionsAppConfig {
+
+    private final Map<Integer, ListConfig> mMapping;
+    private static CarUxRestrictionsAppConfig sInstance;
+
+    CarUxRestrictionsAppConfig(Map<Integer, ListConfig> mapping) {
+        mMapping = mapping;
+    }
+
+    /**
+     * Returns a cached reference to the {@link CarUxRestrictionsAppConfig} object
+     * resulting from parsing the contents of {@code xmlRes} xml resource.
+     *
+     * @param context - the app context
+     * @param xmlRes  - the xml resource that contains the UXR override configs.
+     */
+    public static CarUxRestrictionsAppConfig getInstance(Context context, @XmlRes int xmlRes) {
+        if (sInstance == null) {
+            sInstance = CarUxRestrictionsAppConfigParser.parseConfig(context, xmlRes);
+        }
+
+        return sInstance;
+    }
+
+    /**
+     * Returns a {@link Map} of Resource Ids as ints to {@link ListConfig} objects.
+     */
+    public Map<Integer, ListConfig> getMapping() {
+        return mMapping;
+    }
+
+    /**
+     * A class representing Car User Experience Restriction override configurations for a list UI
+     * component.
+     */
+    public static class ListConfig {
+        @IdRes
+        private final int mId;
+        private final Integer mContentLimit;
+        @StringRes
+        private final Integer mScrollingLimitedMessageResId;
+
+        private ListConfig(@IdRes int id, @Nullable Integer contentLimit,
+                @StringRes Integer scrollingLimitedMessageResId) {
+            mId = id;
+            mContentLimit = contentLimit;
+            mScrollingLimitedMessageResId = scrollingLimitedMessageResId;
+        }
+
+        /**
+         * Returns a {@code Builder} that can be used to build a {@link ListConfig} object for a
+         * component identified with the provided {@code id}.
+         *
+         * @param id - an identifier for the component whose behavior needs to be overridden with
+         *           the configurations specified in the resulting {@link ListConfig} object.
+         */
+        public static Builder builder(@IdRes int id) {
+            return new Builder(id);
+        }
+
+        /**
+         * Returns the identifier for the component whose behavior needs to be overridden by this
+         * config object.
+         */
+        @IdRes
+        public int getId() {
+            return mId;
+        }
+
+        /**
+         * Returns the item limit to impose on the contents of the corresponding list component.
+         */
+        @Nullable
+        public Integer getContentLimit() {
+            return mContentLimit;
+        }
+
+        /**
+         * Returns the string resource ID to use when educating users about why the content in the
+         * list they're browsing has been limited.
+         */
+        @Nullable
+        @StringRes
+        public Integer getScrollingLimitedMessageResId() {
+            return mScrollingLimitedMessageResId;
+        }
+
+        /**
+         * A Builder for {@link ListConfig}.
+         */
+        public static class Builder {
+            @IdRes
+            private final int mId;
+            private Integer mContentLimit;
+            @StringRes
+            private Integer mScrollingLimitedMessageResId;
+
+
+            /**
+             * Constructs a {@code Builder} that can be used to build a {@link ListConfig} object
+             * for a component identified with the provided {@code id}.
+             *
+             * @param id - an identifier for the component whose behavior needs to be overridden
+             *           with the configurations specified in the resulting {@link ListConfig}
+             *           object.
+             */
+            private Builder(@IdRes int id) {
+                mId = id;
+            }
+
+            /**
+             * Sets the item limit to impose on the contents of the corresponding list component.
+             *
+             * @param contentLimit - the item limit
+             * @return this {@code Builder} object to facilitate chaining.
+             */
+            public Builder setContentLimit(int contentLimit) {
+                mContentLimit = contentLimit;
+                return this;
+            }
+
+            /**
+             * Sets the string resource ID to use when educating users about why the content in the
+             * * list they're browsing has been limited.
+             *
+             * @param scrollingLimitedMessageResId - an educational message string resource ID
+             * @return this {@code Builder} object to facilitate chaining.
+             */
+            public Builder setScrollingLimitedMessageResId(
+                    @StringRes int scrollingLimitedMessageResId) {
+                mScrollingLimitedMessageResId = scrollingLimitedMessageResId;
+                return this;
+            }
+
+            /**
+             * Build and return a {@link ListConfig} object with the values provided to this
+             * {@code Builder} object.
+             */
+            public ListConfig build() {
+                return new ListConfig(mId, mContentLimit, mScrollingLimitedMessageResId);
+            }
+        }
+    }
+}
diff --git a/car-uxr-client-lib/src/com/android/car/uxr/CarUxRestrictionsAppConfigParser.java b/car-uxr-client-lib/src/com/android/car/uxr/CarUxRestrictionsAppConfigParser.java
new file mode 100644
index 0000000..341e426
--- /dev/null
+++ b/car-uxr-client-lib/src/com/android/car/uxr/CarUxRestrictionsAppConfigParser.java
@@ -0,0 +1,118 @@
+/*
+ * 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.uxr;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+import android.view.View;
+
+import androidx.annotation.XmlRes;
+
+import com.android.car.uxr.CarUxRestrictionsAppConfig.ListConfig;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A parser that can read an XML resource file and construct the corresponding
+ * {@link CarUxRestrictionsAppConfig} object.
+ *
+ * See car-uxr-client-lib/res/values/attrs.xml for the definition of the relevant XML tags.
+ */
+public class CarUxRestrictionsAppConfigParser {
+    private static final String TAG = "UxrAppConfigParser";
+
+    static CarUxRestrictionsAppConfig parseConfig(Context context, @XmlRes int xmlRes) {
+        try (XmlResourceParser parser = context.getResources().getXml(xmlRes)) {
+            AttributeSet attrs = Xml.asAttributeSet(parser);
+            Map<Integer, ListConfig> mapping = new HashMap<>();
+
+            // Skip over the xml version tag
+            parser.next();
+            // Skip over the copyright comment block
+            parser.next();
+            parser.require(XmlPullParser.START_TAG, null, "Mapping");
+            while (parser.next() != XmlPullParser.END_TAG) {
+                ListConfig listConfig = parseListConfigItem(context, parser, attrs);
+                mapping.put(listConfig.getId(), listConfig);
+            }
+
+            return new CarUxRestrictionsAppConfig(mapping);
+        } catch (XmlPullParserException | IOException e) {
+            throw new RuntimeException("Unable to parse CarUxRestrictionsAppConfig", e);
+        }
+    }
+
+    private static ListConfig parseListConfigItem(
+            Context context, XmlResourceParser parser, AttributeSet attrs)
+            throws XmlPullParserException, IOException {
+
+        parser.require(XmlPullParser.START_TAG, null, "ListConfig");
+
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.CarUxRestrictionsAppConfig_ListConfig);
+
+        try {
+            int id = a.getResourceId(R.styleable.CarUxRestrictionsAppConfig_ListConfig_id,
+                    View.NO_ID);
+            if (id == View.NO_ID) {
+                throw new IllegalStateException("Id field is required");
+            }
+
+            boolean messageExists = a.hasValue(
+                    R.styleable.CarUxRestrictionsAppConfig_ListConfig_message);
+            int messageResId = a.getResourceId(
+                    R.styleable.CarUxRestrictionsAppConfig_ListConfig_message, View.NO_ID);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, messageExists
+                        ? "message field is set to " + messageResId
+                        : "message field not specified");
+            }
+
+            boolean maxLengthExists = a.hasValue(
+                    R.styleable.CarUxRestrictionsAppConfig_ListConfig_maxLength);
+            int maxLengthInt = a.getInt(
+                    R.styleable.CarUxRestrictionsAppConfig_ListConfig_maxLength, 0);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, maxLengthExists
+                        ? "maxLength field is set to " + maxLengthInt
+                        : "maxLength field not specified");
+            }
+
+            parser.next();
+            parser.require(XmlPullParser.END_TAG, null, "ListConfig");
+
+            ListConfig.Builder builder = ListConfig.builder(id);
+            if (maxLengthExists) {
+                builder.setContentLimit(maxLengthInt);
+            }
+            if (messageExists) {
+                builder.setScrollingLimitedMessageResId(messageResId);
+            }
+            return builder.build();
+        } finally {
+            a.recycle();
+        }
+    }
+}
diff --git a/car-uxr-client-lib/src/com/android/car/uxr/LifeCycleObserverUxrContentLimiter.java b/car-uxr-client-lib/src/com/android/car/uxr/LifeCycleObserverUxrContentLimiter.java
new file mode 100644
index 0000000..3c8905e
--- /dev/null
+++ b/car-uxr-client-lib/src/com/android/car/uxr/LifeCycleObserverUxrContentLimiter.java
@@ -0,0 +1,61 @@
+/*
+ * 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.uxr;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.DefaultLifecycleObserver;
+import androidx.lifecycle.LifecycleOwner;
+
+import com.android.car.ui.recyclerview.ContentLimiting;
+
+/**
+ * An implementation of {@link UxrContentLimiter} interface that also provides the functionality
+ * necessary for a {@link DefaultLifecycleObserver}.
+ *
+ * <p>Relies heavily on the {@link UxrContentLimiterImpl} implementation of the
+ * {@link UxrContentLimiter} interface.
+ *
+ * <p>For example, you could do the following to get yourself a lifecycle aware {@link
+ * UxrContentLimiter}:
+ * <pre>{@code
+ * new LifeCycleObserverUxrContentLimiter(new UxrContentLimiterImpl(context,xmlRes));
+ * }</pre>
+ */
+public class LifeCycleObserverUxrContentLimiter
+        implements UxrContentLimiter, DefaultLifecycleObserver {
+
+    private final UxrContentLimiterImpl mDelegate;
+
+    public LifeCycleObserverUxrContentLimiter(UxrContentLimiterImpl delegate) {
+        mDelegate = delegate;
+    }
+
+    @Override
+    public void onStart(@NonNull LifecycleOwner owner) {
+        mDelegate.start();
+    }
+
+    @Override
+    public void onStop(@NonNull LifecycleOwner owner) {
+        mDelegate.stop();
+    }
+
+    @Override
+    public void setAdapter(ContentLimiting adapter) {
+        mDelegate.setAdapter(adapter);
+    }
+}
diff --git a/car-uxr-client-lib/src/com/android/car/uxr/UxrContentLimiter.java b/car-uxr-client-lib/src/com/android/car/uxr/UxrContentLimiter.java
new file mode 100644
index 0000000..9fd877e
--- /dev/null
+++ b/car-uxr-client-lib/src/com/android/car/uxr/UxrContentLimiter.java
@@ -0,0 +1,37 @@
+/*
+ * 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.uxr;
+
+import com.android.car.ui.recyclerview.ContentLimiting;
+
+/**
+ * An interface to facilitate the content limiting ability of {@link ContentLimiting}
+ * {@link androidx.recyclerview.widget.RecyclerView.Adapter} objects based on changes to the state
+ * of the car.
+ */
+public interface UxrContentLimiter {
+
+    /**
+     * Registers the given {@link ContentLimiting} with this {@code UxrContentLimiter}.
+     *
+     * <p>That means that when the car state changes, if necessary, this
+     * {@code UxrContentLimiter} will limit the content in the given adapter.
+     *
+     * @param adapter - the adapter to associate with this content limiter.
+     */
+    void setAdapter(ContentLimiting adapter);
+}
diff --git a/car-uxr-client-lib/src/com/android/car/uxr/UxrContentLimiterImpl.java b/car-uxr-client-lib/src/com/android/car/uxr/UxrContentLimiterImpl.java
new file mode 100644
index 0000000..ce22cca
--- /dev/null
+++ b/car-uxr-client-lib/src/com/android/car/uxr/UxrContentLimiterImpl.java
@@ -0,0 +1,141 @@
+/*
+ * 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.uxr;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.XmlRes;
+
+import com.android.car.ui.recyclerview.ContentLimiting;
+import com.android.car.ui.utils.CarUxRestrictionsUtil;
+import com.android.car.uxr.CarUxRestrictionsAppConfig.ListConfig;
+
+/**
+ * A class that can work together with a {@link ContentLimiting} {@link
+ * androidx.recyclerview.widget.RecyclerView.Adapter} object to provide content limiting ability
+ * based on changes to the state of the car, by listening for the latest {@link CarUxRestrictions}.
+ *
+ * <p>This class manages 3 things:
+ * <ul>
+ *     <li> Communications with the User Experience Restriction Engine
+ *     <li> Looking up app-side overrides for customizing the content-limiting behavior of a given
+ *     list of items in a particular screen
+ *     <li> Relaying the relevant parts of that information to the registered
+ *     adapter at the right time
+ * </ul>
+ *
+ * <p>The app-side overrides are accessed via the {@link CarUxRestrictionsAppConfig} object.
+ *
+ * <p>Because all but one of the dependencies for this class can be instantiated as soon as a
+ * {@link Context} is available, we provide a separate {@link #setAdapter(ContentLimiting)}
+ * API for linking the targeted adapter. That way the registration can happen in a different part of
+ * code, and potentially in a different lifecycle method to provide maximum flexibility.
+ */
+public class UxrContentLimiterImpl implements UxrContentLimiter {
+
+    private ContentLimiting mAdapter;
+    private ListConfig mListConfig;
+
+    private final CarUxRestrictionsUtil mCarUxRestrictionsUtil;
+    private final CarUxRestrictionsAppConfig mCarUxRestrictionsAppConfig;
+    private final CarUxRestrictionsUtil.OnUxRestrictionsChangedListener mListener =
+            new Listener();
+
+    private class Listener implements CarUxRestrictionsUtil.OnUxRestrictionsChangedListener {
+        private static final String TAG = "ContentLimitListener";
+
+        @Override
+        public void onRestrictionsChanged(@NonNull CarUxRestrictions carUxRestrictions) {
+            if (mAdapter == null) {
+                Log.w(TAG, "No adapter registered.");
+                return;
+            }
+
+            int maxItems = getMaxItemsToUse(carUxRestrictions, mAdapter.getConfigurationId());
+            logD("New limit " + maxItems);
+            mAdapter.setMaxItems(maxItems);
+        }
+
+        private int getMaxItemsToUse(CarUxRestrictions carUxRestrictions, @IdRes int id) {
+            // Unrelated restrictions are active. Quit early.
+            if ((carUxRestrictions.getActiveRestrictions()
+                    & CarUxRestrictions.UX_RESTRICTIONS_LIMIT_CONTENT)
+                    == 0) {
+                logD("Lists are unrestricted.");
+                return ContentLimiting.UNLIMITED;
+            }
+
+            if (mListConfig == null || mListConfig.getContentLimit() == null) {
+                logD("No configs found for adapter with the ID: " + id
+                        + " Using the default limit");
+                return carUxRestrictions.getMaxCumulativeContentItems();
+            }
+
+            logD("Using the provided override.");
+            return mListConfig.getContentLimit();
+        }
+
+        private void logD(String s) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, s);
+            }
+        }
+    }
+
+    /**
+     * Constructs a {@link UxrContentLimiterImpl} object given the app context and the XML resource
+     * file to parse the User Experience Restriction override configs from.
+     *
+     * @param context - the app context
+     * @param xmlRes  - the UXR override config XML resource
+     */
+    public UxrContentLimiterImpl(Context context, @XmlRes int xmlRes) {
+        mCarUxRestrictionsUtil = CarUxRestrictionsUtil.getInstance(context);
+        mCarUxRestrictionsAppConfig = CarUxRestrictionsAppConfig.getInstance(context, xmlRes);
+    }
+
+    @Override
+    public void setAdapter(ContentLimiting adapter) {
+        mAdapter = adapter;
+        int key = mAdapter.getConfigurationId();
+        if (mCarUxRestrictionsAppConfig.getMapping().containsKey(key)) {
+            mListConfig = mCarUxRestrictionsAppConfig.getMapping().get(key);
+            Integer overriddenMessageResId = mListConfig.getScrollingLimitedMessageResId();
+            if (overriddenMessageResId != null) {
+                mAdapter.setScrollingLimitedMessageResId(overriddenMessageResId);
+            }
+        }
+    }
+
+    /**
+     * Start listening for changes to {@link CarUxRestrictions}.
+     */
+    public void start() {
+        mCarUxRestrictionsUtil.register(mListener);
+    }
+
+    /**
+     * Stop listening for changes to {@link CarUxRestrictions}.
+     */
+    public void stop() {
+        mCarUxRestrictionsUtil.unregister(mListener);
+    }
+}
diff --git a/connected-device-lib/Android.bp b/connected-device-lib/Android.bp
index 55ee640..4383a20 100644
--- a/connected-device-lib/Android.bp
+++ b/connected-device-lib/Android.bp
@@ -21,13 +21,11 @@
 
     manifest: "AndroidManifest.xml",
 
-    resource_dirs: ["res"],
-
     optimize: {
         enabled: false,
     },
 
-    libs: ["android.car"],
+    libs: ["android.car-system-stubs"],
 
     static_libs: [
         "androidx.room_room-runtime",
@@ -40,5 +38,6 @@
         "androidx.room_room-compiler-plugin",
     ],
 
-    platform_apis: true,
+    sdk_version: "system_current",
+    min_sdk_version: "28",
 }
diff --git a/connected-device-lib/proto/ble_device_message.proto b/connected-device-lib/proto/device_message.proto
similarity index 87%
rename from connected-device-lib/proto/ble_device_message.proto
rename to connected-device-lib/proto/device_message.proto
index 581d6a0..79b98df 100644
--- a/connected-device-lib/proto/ble_device_message.proto
+++ b/connected-device-lib/proto/device_message.proto
@@ -20,11 +20,11 @@
 
 import "packages/apps/Car/libs/connected-device-lib/proto/operation_type.proto";
 
-option java_package = "com.android.car.connecteddevice.BleStreamProtos";
-option java_outer_classname = "BleDeviceMessageProto";
+option java_package = "com.android.car.connecteddevice.StreamProtos";
+option java_outer_classname = "DeviceMessageProto";
 
 // A message between devices.
-message BleDeviceMessage {
+message Message {
   // The operation that this message represents.
   OperationType operation = 1;
 
diff --git a/connected-device-lib/proto/operation_type.proto b/connected-device-lib/proto/operation_type.proto
index d447ccc..3e38e27 100644
--- a/connected-device-lib/proto/operation_type.proto
+++ b/connected-device-lib/proto/operation_type.proto
@@ -18,8 +18,8 @@
 
 package com.android.car.connecteddevice.proto;
 
-option java_package = "com.android.car.connecteddevice.BleStreamProtos";
-option java_outer_classname = "BleOperationProto";
+option java_package = "com.android.car.connecteddevice.StreamProtos";
+option java_outer_classname = "OperationProto";
 
 // The different message types that indicate the content of the payload.
 //
diff --git a/connected-device-lib/proto/ble_packet.proto b/connected-device-lib/proto/packet.proto
similarity index 85%
rename from connected-device-lib/proto/ble_packet.proto
rename to connected-device-lib/proto/packet.proto
index c2ce262..f761622 100644
--- a/connected-device-lib/proto/ble_packet.proto
+++ b/connected-device-lib/proto/packet.proto
@@ -18,11 +18,11 @@
 
 package com.android.car.connecteddevice.proto;
 
-option java_package = "com.android.car.connecteddevice.BleStreamProtos";
-option java_outer_classname = "BlePacketProto";
+option java_package = "com.android.car.connecteddevice.StreamProtos";
+option java_outer_classname = "PacketProto";
 
-// A packet across a BLE channel.
-message BlePacket {
+// A packet across a stream.
+message Packet {
   // A 1-based packet number. The first message will have a value of "1" rather
   // than "0".
   fixed32 packet_number = 1;
diff --git a/connected-device-lib/proto/ble_version_exchange.proto b/connected-device-lib/proto/version_exchange.proto
similarity index 91%
rename from connected-device-lib/proto/ble_version_exchange.proto
rename to connected-device-lib/proto/version_exchange.proto
index a7e8021..a7c3493 100644
--- a/connected-device-lib/proto/ble_version_exchange.proto
+++ b/connected-device-lib/proto/version_exchange.proto
@@ -18,10 +18,10 @@
 
 package com.android.car.connecteddevice.proto;
 
-option java_package = "com.android.car.connecteddevice.BleStreamProtos";
+option java_package = "com.android.car.connecteddevice.StreamProtos";
 option java_outer_classname = "VersionExchangeProto";
 
-message BleVersionExchange {
+message VersionExchange {
   // Minimum supported protobuf version.
   int32 minSupportedMessagingVersion = 1;
 
diff --git a/connected-device-lib/res/values/config.xml b/connected-device-lib/res/values/config.xml
index b090b92..c719462 100644
--- a/connected-device-lib/res/values/config.xml
+++ b/connected-device-lib/res/values/config.xml
@@ -16,22 +16,5 @@
   -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- These values must be modified for the connected device lib to function properly.-->
-    <string name="car_service_uuid" translatable="false">00000000-0000-0000-0000-000000000000</string>
-    <string name="car_association_service_uuid" translatable="false">00000000-0000-0000-0000-000000000000</string>
-    <string name="car_reconnect_service_uuid" translatable="false">00000000-0000-0000-0000-000000000000</string>
-    <string name="car_reconnect_data_uuid" translatable="false">00000000-0000-0000-0000-000000000000</string>
-    <string name="car_bg_mask" translatable="false">00000000000000000000000000000000</string>
-
-    <string name="car_secure_read_uuid" translatable="false">5e2a68a6-27be-43f9-8d1e-4546976fabd7</string>
-    <string name="car_secure_write_uuid" translatable="false">5e2a68a5-27be-43f9-8d1e-4546976fabd7</string>
-
     <string name="connected_device_shared_preferences" translatable="false">com.android.car.connecteddevice</string>
-
-    <!--
-    This value must be between 23 and 185. 23 is the default MTU size for Android, and 185 is
-    the max MTU size supported for iOS. Verify your device and target companion devices support a
-    larger MTU prior to modifying.
-    -->
-    <integer name="car_default_mtu_size">23</integer>
 </resources>
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/AssociationCallback.java b/connected-device-lib/src/com/android/car/connecteddevice/AssociationCallback.java
index fb7000b..7697131 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/AssociationCallback.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/AssociationCallback.java
@@ -16,7 +16,7 @@
 
 package com.android.car.connecteddevice;
 
-import android.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /** Callbacks that will be invoked during associating a new client. */
 public interface AssociationCallback {
@@ -26,10 +26,10 @@
      *
      * @param deviceName The device name to identify the car.
      */
-    void onAssociationStartSuccess(@NonNull String deviceName);
+    default void onAssociationStartSuccess(String deviceName) {}
 
     /** Invoked when IHU failed to start advertising for association. */
-    void onAssociationStartFailure();
+    default void onAssociationStartFailure() {}
 
     /**
      * Invoked when a {@link ConnectedDeviceManager.DeviceError} has been encountered in attempting
@@ -37,7 +37,7 @@
      *
      * @param error The failure indication.
      */
-    void onAssociationError(@ConnectedDeviceManager.DeviceError int error);
+    default void onAssociationError(@ConnectedDeviceManager.DeviceError int error) {}
 
     /**
      * Invoked when a verification code needs to be displayed. The user needs to confirm, and
@@ -45,12 +45,12 @@
      *
      * @param code The verification code.
      */
-    void onVerificationCodeAvailable(@NonNull String code);
+    default void onVerificationCodeAvailable(@NonNull String code) {}
 
     /**
      * Invoked when the association has completed.
      *
      * @param deviceId The id of the newly associated device.
      */
-    void onAssociationCompleted(@NonNull String deviceId);
+    default void onAssociationCompleted(@NonNull String deviceId) {}
 }
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java b/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java
index 4add85e..b1397e2 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/ConnectedDeviceManager.java
@@ -22,29 +22,25 @@
 
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
-import android.annotation.CallbackExecutor;
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.content.Context;
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
 
-import com.android.car.connecteddevice.ble.BleCentralManager;
-import com.android.car.connecteddevice.ble.BlePeripheralManager;
-import com.android.car.connecteddevice.ble.CarBleCentralManager;
-import com.android.car.connecteddevice.ble.CarBleManager;
-import com.android.car.connecteddevice.ble.CarBlePeripheralManager;
-import com.android.car.connecteddevice.ble.DeviceMessage;
+import com.android.car.connecteddevice.connection.CarBluetoothManager;
+import com.android.car.connecteddevice.connection.DeviceMessage;
 import com.android.car.connecteddevice.model.AssociatedDevice;
 import com.android.car.connecteddevice.model.ConnectedDevice;
+import com.android.car.connecteddevice.model.OobEligibleDevice;
+import com.android.car.connecteddevice.oob.BluetoothRfcommChannel;
+import com.android.car.connecteddevice.oob.OobChannel;
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage.AssociatedDeviceCallback;
 import com.android.car.connecteddevice.util.ByteUtils;
 import com.android.car.connecteddevice.util.EventLog;
 import com.android.car.connecteddevice.util.ThreadSafeCallbacks;
-import com.android.internal.annotations.VisibleForTesting;
 
 import java.lang.annotation.Retention;
-import java.time.Duration;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -73,15 +69,9 @@
     // Subtracting 2 bytes used by header, we have 8 bytes for device name.
     private static final int DEVICE_NAME_LENGTH_LIMIT = 8;
 
-    // The mac address randomly rotates every 7-15 minutes. To be safe, we will rotate our
-    // reconnect advertisement every 6 minutes to avoid crossing a rotation.
-    private static final Duration MAX_ADVERTISEMENT_DURATION = Duration.ofMinutes(6);
-
     private final ConnectedDeviceStorage mStorage;
 
-    private final CarBleCentralManager mCentralManager;
-
-    private final CarBlePeripheralManager mPeripheralManager;
+    private final CarBluetoothManager mCarBluetoothManager;
 
     private final ThreadSafeCallbacks<DeviceAssociationCallback> mDeviceAssociationCallbacks =
             new ThreadSafeCallbacks<>();
@@ -97,7 +87,7 @@
             new ConcurrentHashMap<>();
 
     // deviceId -> device
-    private final Map<String, InternalConnectedDevice> mConnectedDevices =
+    private final Map<String, ConnectedDevice> mConnectedDevices =
             new ConcurrentHashMap<>();
 
     // recipientId -> (deviceId -> message bytes)
@@ -120,22 +110,23 @@
 
     private MessageDeliveryDelegate mMessageDeliveryDelegate;
 
+    private OobChannel mOobChannel;
+
     @Retention(SOURCE)
-    @IntDef(prefix = { "DEVICE_ERROR_" },
-            value = {
-                    DEVICE_ERROR_INVALID_HANDSHAKE,
-                    DEVICE_ERROR_INVALID_MSG,
-                    DEVICE_ERROR_INVALID_DEVICE_ID,
-                    DEVICE_ERROR_INVALID_VERIFICATION,
-                    DEVICE_ERROR_INVALID_CHANNEL_STATE,
-                    DEVICE_ERROR_INVALID_ENCRYPTION_KEY,
-                    DEVICE_ERROR_STORAGE_FAILURE,
-                    DEVICE_ERROR_INVALID_SECURITY_KEY,
-                    DEVICE_ERROR_INSECURE_RECIPIENT_ID_DETECTED,
-                    DEVICE_ERROR_UNEXPECTED_DISCONNECTION
-            }
-    )
+    @IntDef({
+            DEVICE_ERROR_INVALID_HANDSHAKE,
+            DEVICE_ERROR_INVALID_MSG,
+            DEVICE_ERROR_INVALID_DEVICE_ID,
+            DEVICE_ERROR_INVALID_VERIFICATION,
+            DEVICE_ERROR_INVALID_CHANNEL_STATE,
+            DEVICE_ERROR_INVALID_ENCRYPTION_KEY,
+            DEVICE_ERROR_STORAGE_FAILURE,
+            DEVICE_ERROR_INVALID_SECURITY_KEY,
+            DEVICE_ERROR_INSECURE_RECIPIENT_ID_DETECTED,
+            DEVICE_ERROR_UNEXPECTED_DISCONNECTION
+    })
     public @interface DeviceError {}
+
     public static final int DEVICE_ERROR_INVALID_HANDSHAKE = 0;
     public static final int DEVICE_ERROR_INVALID_MSG = 1;
     public static final int DEVICE_ERROR_INVALID_DEVICE_ID = 2;
@@ -147,53 +138,15 @@
     public static final int DEVICE_ERROR_INSECURE_RECIPIENT_ID_DETECTED = 8;
     public static final int DEVICE_ERROR_UNEXPECTED_DISCONNECTION = 9;
 
-    public ConnectedDeviceManager(@NonNull Context context) {
-        this(context, new ConnectedDeviceStorage(context), new BleCentralManager(context),
-                new BlePeripheralManager(context),
-                UUID.fromString(context.getString(R.string.car_service_uuid)),
-                UUID.fromString(context.getString(R.string.car_association_service_uuid)),
-                UUID.fromString(context.getString(R.string.car_reconnect_service_uuid)),
-                UUID.fromString(context.getString(R.string.car_reconnect_data_uuid)),
-                context.getString(R.string.car_bg_mask),
-                UUID.fromString(context.getString(R.string.car_secure_write_uuid)),
-                UUID.fromString(context.getString(R.string.car_secure_read_uuid)),
-                context.getResources().getInteger(R.integer.car_default_mtu_size));
-    }
-
-    private ConnectedDeviceManager(
-            @NonNull Context context,
-            @NonNull ConnectedDeviceStorage storage,
-            @NonNull BleCentralManager bleCentralManager,
-            @NonNull BlePeripheralManager blePeripheralManager,
-            @NonNull UUID serviceUuid,
-            @NonNull UUID associationServiceUuid,
-            @NonNull UUID reconnectServiceUuid,
-            @NonNull UUID reconnectDataUuid,
-            @NonNull String bgMask,
-            @NonNull UUID writeCharacteristicUuid,
-            @NonNull UUID readCharacteristicUuid,
-            int defaultMtuSize) {
-        this(storage,
-                new CarBleCentralManager(context, bleCentralManager, storage, serviceUuid, bgMask,
-                        writeCharacteristicUuid, readCharacteristicUuid),
-                new CarBlePeripheralManager(blePeripheralManager, storage, associationServiceUuid,
-                        reconnectServiceUuid, reconnectDataUuid, writeCharacteristicUuid,
-                        readCharacteristicUuid, MAX_ADVERTISEMENT_DURATION, defaultMtuSize));
-    }
-
-    @VisibleForTesting
-    ConnectedDeviceManager(
-            @NonNull ConnectedDeviceStorage storage,
-            @NonNull CarBleCentralManager centralManager,
-            @NonNull CarBlePeripheralManager peripheralManager) {
+    public ConnectedDeviceManager(@NonNull CarBluetoothManager carBluetoothManager,
+            @NonNull ConnectedDeviceStorage storage) {
         Executor callbackExecutor = Executors.newSingleThreadExecutor();
         mStorage = storage;
-        mCentralManager = centralManager;
-        mPeripheralManager = peripheralManager;
-        mCentralManager.registerCallback(generateCarBleCallback(centralManager), callbackExecutor);
-        mPeripheralManager.registerCallback(generateCarBleCallback(peripheralManager),
+        mCarBluetoothManager = carBluetoothManager;
+        mCarBluetoothManager.registerCallback(generateCarBleCallback(carBluetoothManager),
                 callbackExecutor);
         mStorage.setAssociatedDeviceCallback(mAssociatedDeviceCallback);
+        logd(TAG, "ConnectedDeviceManager created successfully.");
     }
 
     /**
@@ -207,29 +160,32 @@
             logd(TAG, "Starting ConnectedDeviceManager.");
             EventLog.onConnectedDeviceManagerStarted();
         }
-        // TODO (b/141312136) Start central manager
-        mPeripheralManager.start();
+        mCarBluetoothManager.start();
         connectToActiveUserDevice();
     }
 
     /** Reset internal processes and disconnect any active connections. */
     public void reset() {
         logd(TAG, "Resetting ConnectedDeviceManager.");
-        for (InternalConnectedDevice device : mConnectedDevices.values()) {
-            removeConnectedDevice(device.mConnectedDevice.getDeviceId(), device.mCarBleManager);
+        for (ConnectedDevice device : mConnectedDevices.values()) {
+            removeConnectedDevice(device.getDeviceId());
         }
-        mPeripheralManager.stop();
-        // TODO (b/141312136) Stop central manager
+        mCarBluetoothManager.stop();
         mIsConnectingToUserDevice.set(false);
+        if (mOobChannel != null) {
+            mOobChannel.interrupt();
+            mOobChannel = null;
+        }
+        mAssociationCallback = null;
     }
 
     /** Returns {@link List<ConnectedDevice>} of devices currently connected. */
     @NonNull
     public List<ConnectedDevice> getActiveUserConnectedDevices() {
         List<ConnectedDevice> activeUserConnectedDevices = new ArrayList<>();
-        for (InternalConnectedDevice device : mConnectedDevices.values()) {
-            if (device.mConnectedDevice.isAssociatedWithActiveUser()) {
-                activeUserConnectedDevices.add(device.mConnectedDevice);
+        for (ConnectedDevice device : mConnectedDevices.values()) {
+            if (device.isAssociatedWithActiveUser()) {
+                activeUserConnectedDevices.add(device);
             }
         }
         logd(TAG, "Returned " + activeUserConnectedDevices.size() + " active user devices.");
@@ -243,7 +199,7 @@
      * @param executor {@link Executor} to execute triggers on.
      */
     public void registerDeviceAssociationCallback(@NonNull DeviceAssociationCallback callback,
-            @NonNull @CallbackExecutor Executor executor) {
+            @NonNull Executor executor) {
         mDeviceAssociationCallbacks.add(callback, executor);
     }
 
@@ -264,7 +220,7 @@
      * @param executor {@link Executor} to execute triggers on.
      */
     public void registerActiveUserConnectionCallback(@NonNull ConnectionCallback callback,
-            @NonNull @CallbackExecutor Executor executor) {
+            @NonNull Executor executor) {
         mActiveUserConnectionCallbacks.add(callback, executor);
     }
 
@@ -289,7 +245,8 @@
 
     private void connectToActiveUserDeviceInternal() {
         try {
-            if (mIsConnectingToUserDevice.get()) {
+            boolean isLockAcquired = mIsConnectingToUserDevice.compareAndSet(false, true);
+            if (!isLockAcquired) {
                 logd(TAG, "A request has already been made to connect to this user's device. "
                         + "Ignoring redundant request.");
                 return;
@@ -297,6 +254,7 @@
             List<AssociatedDevice> userDevices = mStorage.getActiveUserAssociatedDevices();
             if (userDevices.isEmpty()) {
                 logw(TAG, "No devices associated with active user. Ignoring.");
+                mIsConnectingToUserDevice.set(false);
                 return;
             }
 
@@ -305,16 +263,17 @@
             AssociatedDevice userDevice = userDevices.get(0);
             if (!userDevice.isConnectionEnabled()) {
                 logd(TAG, "Connection is disabled on device " + userDevice + ".");
+                mIsConnectingToUserDevice.set(false);
                 return;
             }
             if (mConnectedDevices.containsKey(userDevice.getDeviceId())) {
                 logd(TAG, "Device has already been connected. No need to attempt connection "
                         + "again.");
+                mIsConnectingToUserDevice.set(false);
                 return;
             }
             EventLog.onStartDeviceSearchStarted();
-            mIsConnectingToUserDevice.set(true);
-            mPeripheralManager.connectToDevice(UUID.fromString(userDevice.getDeviceId()));
+            mCarBluetoothManager.connectToDevice(UUID.fromString(userDevice.getDeviceId()));
         } catch (Exception e) {
             loge(TAG, "Exception while attempting connection with active user's device.", e);
         }
@@ -329,19 +288,57 @@
         mAssociationCallback = callback;
         Executors.defaultThreadFactory().newThread(() -> {
             logd(TAG, "Received request to start association.");
-            mPeripheralManager.startAssociation(getNameForAssociation(),
+            mCarBluetoothManager.startAssociation(getNameForAssociation(),
                     mInternalAssociationCallback);
         }).start();
     }
 
+    /**
+     * Start association with an out of band device.
+     *
+     * @param device   The out of band eligible device.
+     * @param callback Callback for association events.
+     */
+    public void startOutOfBandAssociation(@NonNull OobEligibleDevice device,
+            @NonNull AssociationCallback callback) {
+        logd(TAG, "Received request to start out of band association.");
+        mAssociationCallback = callback;
+        mOobChannel = new BluetoothRfcommChannel();
+        mOobChannel.completeOobDataExchange(device, new OobChannel.Callback() {
+            @Override
+            public void onOobExchangeSuccess() {
+                logd(TAG, "Out of band exchange succeeded. Proceeding to association with device.");
+                Executors.defaultThreadFactory().newThread(() -> {
+                    mCarBluetoothManager.startOutOfBandAssociation(
+                            getNameForAssociation(),
+                            mOobChannel, mInternalAssociationCallback);
+                }).start();
+            }
+
+            @Override
+            public void onOobExchangeFailure() {
+                loge(TAG, "Out of band exchange failed.");
+                mInternalAssociationCallback.onAssociationError(
+                        DEVICE_ERROR_INVALID_ENCRYPTION_KEY);
+                mOobChannel = null;
+                mAssociationCallback = null;
+            }
+        });
+    }
+
     /** Stop the association with any device. */
     public void stopAssociation(@NonNull AssociationCallback callback) {
         if (mAssociationCallback != callback) {
             logd(TAG, "Stop association called with unrecognized callback. Ignoring.");
             return;
         }
+        logd(TAG, "Stopping association.");
         mAssociationCallback = null;
-        mPeripheralManager.stopAssociation(mInternalAssociationCallback);
+        mCarBluetoothManager.stopAssociation();
+        if (mOobChannel != null) {
+            mOobChannel.interrupt();
+        }
+        mOobChannel = null;
     }
 
     /**
@@ -356,7 +353,7 @@
 
     /** Notify that the user has accepted a pairing code or any out-of-band confirmation. */
     public void notifyOutOfBandAccepted() {
-        mPeripheralManager.notifyOutOfBandAccepted();
+        mCarBluetoothManager.notifyOutOfBandAccepted();
     }
 
     /**
@@ -378,6 +375,7 @@
         logd(TAG, "enableAssociatedDeviceConnection() called on " + deviceId);
         mStorage.updateAssociatedDeviceConnectionEnabled(deviceId,
                 /* isConnectionEnabled= */ true);
+
         connectToActiveUserDevice();
     }
 
@@ -394,23 +392,23 @@
     }
 
     private void disconnectDevice(String deviceId) {
-        InternalConnectedDevice device = mConnectedDevices.get(deviceId);
+        ConnectedDevice device = mConnectedDevices.get(deviceId);
         if (device != null) {
-            device.mCarBleManager.disconnectDevice(deviceId);
-            removeConnectedDevice(deviceId, device.mCarBleManager);
+            mCarBluetoothManager.disconnectDevice(deviceId);
+            removeConnectedDevice(deviceId);
         }
     }
 
     /**
      * Register a callback for a specific device and recipient.
      *
-     * @param device {@link ConnectedDevice} to register triggers on.
+     * @param device      {@link ConnectedDevice} to register triggers on.
      * @param recipientId {@link UUID} to register as recipient of.
-     * @param callback {@link DeviceCallback} to register.
-     * @param executor {@link Executor} on which to execute callback.
+     * @param callback    {@link DeviceCallback} to register.
+     * @param executor    {@link Executor} on which to execute callback.
      */
     public void registerDeviceCallback(@NonNull ConnectedDevice device, @NonNull UUID recipientId,
-            @NonNull DeviceCallback callback, @NonNull @CallbackExecutor Executor executor) {
+            @NonNull DeviceCallback callback, @NonNull Executor executor) {
         if (isRecipientBlacklisted(recipientId)) {
             notifyOfBlacklisting(device, recipientId, callback, executor);
             return;
@@ -419,7 +417,7 @@
                 + recipientId);
         String deviceId = device.getDeviceId();
         Map<UUID, ThreadSafeCallbacks<DeviceCallback>> recipientCallbacks =
-                mDeviceCallbacks.computeIfAbsent(deviceId, key -> new HashMap<>());
+                mDeviceCallbacks.computeIfAbsent(deviceId, key -> new ConcurrentHashMap<>());
 
         // Device already has a callback registered with this recipient UUID. For the
         // protection of the user, this UUID is now blacklisted from future subscriptions
@@ -474,9 +472,9 @@
      * registered.
      *
      * @param recipientId Recipient's id
-     * @param deviceId Device id
+     * @param deviceId    Device id
      * @return The missed {@code byte[]} messages, or {@code null} if no messages were
-     *         missed.
+     * missed.
      */
     @Nullable
     private List<byte[]> popMissedMessages(@NonNull UUID recipientId, @NonNull String deviceId) {
@@ -491,9 +489,9 @@
     /**
      * Unregister callback from device events.
      *
-     * @param device {@link ConnectedDevice} callback was registered on.
+     * @param device      {@link ConnectedDevice} callback was registered on.
      * @param recipientId {@link UUID} callback was registered under.
-     * @param callback {@link DeviceCallback} to unregister.
+     * @param callback    {@link DeviceCallback} to unregister.
      */
     public void unregisterDeviceCallback(@NonNull ConnectedDevice device,
             @NonNull UUID recipientId, @NonNull DeviceCallback callback) {
@@ -519,9 +517,9 @@
     /**
      * Securely send message to a device.
      *
-     * @param device {@link ConnectedDevice} to send the message to.
+     * @param device      {@link ConnectedDevice} to send the message to.
      * @param recipientId Recipient {@link UUID}.
-     * @param message Message to send.
+     * @param message     Message to send.
      * @throws IllegalStateException Secure channel has not been established.
      */
     public void sendMessageSecurely(@NonNull ConnectedDevice device, @NonNull UUID recipientId,
@@ -532,9 +530,9 @@
     /**
      * Send an unencrypted message to a device.
      *
-     * @param device {@link ConnectedDevice} to send the message to.
+     * @param device      {@link ConnectedDevice} to send the message to.
      * @param recipientId Recipient {@link UUID}.
-     * @param message Message to send.
+     * @param message     Message to send.
      */
     public void sendMessageUnsecurely(@NonNull ConnectedDevice device, @NonNull UUID recipientId,
             @NonNull byte[] message) {
@@ -548,19 +546,19 @@
                 + " containing " + message.length + ". Message will be sent securely: "
                 + isEncrypted + ".");
 
-        InternalConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
+        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
         if (connectedDevice == null) {
             loge(TAG, "Attempted to send message to unknown device " + deviceId + ". Ignoring.");
             return;
         }
 
-        if (isEncrypted && !connectedDevice.mConnectedDevice.hasSecureChannel()) {
+        if (isEncrypted && !connectedDevice.hasSecureChannel()) {
             throw new IllegalStateException("Cannot send a message securely to device that has not "
                     + "established a secure channel.");
         }
 
-        connectedDevice.mCarBleManager.sendMessage(deviceId,
-                new DeviceMessage(recipientId, isEncrypted, message));
+        mCarBluetoothManager.sendMessage(deviceId, new DeviceMessage(recipientId, isEncrypted,
+                message));
     }
 
     private boolean isRecipientBlacklisted(UUID recipientId) {
@@ -581,11 +579,11 @@
             return;
         }
 
-        InternalConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
+        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
         if (connectedDevice != null) {
             recipientCallbacks.get(recipientId).invoke(
                     callback ->
-                            callback.onDeviceError(connectedDevice.mConnectedDevice,
+                            callback.onDeviceError(connectedDevice,
                                     DEVICE_ERROR_INSECURE_RECIPIENT_ID_DETECTED)
             );
         }
@@ -595,7 +593,7 @@
     }
 
     @VisibleForTesting
-    void addConnectedDevice(@NonNull String deviceId, @NonNull CarBleManager bleManager) {
+    void addConnectedDevice(@NonNull String deviceId) {
         if (mConnectedDevices.containsKey(deviceId)) {
             // Device already connected. No-op until secure channel established.
             return;
@@ -608,30 +606,24 @@
                 /* hasSecureChannel= */ false
         );
 
-        mConnectedDevices.put(deviceId, new InternalConnectedDevice(connectedDevice, bleManager));
+        mConnectedDevices.put(deviceId, connectedDevice);
         invokeConnectionCallbacks(connectedDevice.isAssociatedWithActiveUser(),
                 callback -> callback.onDeviceConnected(connectedDevice));
     }
 
     @VisibleForTesting
-    void removeConnectedDevice(@NonNull String deviceId, @NonNull CarBleManager bleManager) {
-        logd(TAG, "Device " + deviceId + " disconnected from manager " + bleManager);
-        InternalConnectedDevice connectedDevice = getConnectedDeviceForManager(deviceId,
-                bleManager);
-
-        // If disconnect happened on peripheral, open for future requests to connect.
-        if (bleManager == mPeripheralManager) {
-            mIsConnectingToUserDevice.set(false);
-        }
-
+    void removeConnectedDevice(@NonNull String deviceId) {
+        logd(TAG, "Device " + deviceId + " disconnected.");
+        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
+        mIsConnectingToUserDevice.set(false);
         if (connectedDevice == null) {
             return;
         }
 
         mConnectedDevices.remove(deviceId);
-        boolean isAssociated = connectedDevice.mConnectedDevice.isAssociatedWithActiveUser();
+        boolean isAssociated = connectedDevice.isAssociatedWithActiveUser();
         invokeConnectionCallbacks(isAssociated,
-                callback -> callback.onDeviceDisconnected(connectedDevice.mConnectedDevice));
+                callback -> callback.onDeviceDisconnected(connectedDevice));
 
         if (isAssociated || mConnectedDevices.isEmpty()) {
             // Try to regain connection to active user's device.
@@ -640,25 +632,23 @@
     }
 
     @VisibleForTesting
-    void onSecureChannelEstablished(@NonNull String deviceId,
-            @NonNull CarBleManager bleManager) {
+    void onSecureChannelEstablished(@NonNull String deviceId) {
         if (mConnectedDevices.get(deviceId) == null) {
             loge(TAG, "Secure channel established on unknown device " + deviceId + ".");
             return;
         }
-        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId).mConnectedDevice;
+        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
         ConnectedDevice updatedConnectedDevice = new ConnectedDevice(connectedDevice.getDeviceId(),
                 connectedDevice.getDeviceName(), connectedDevice.isAssociatedWithActiveUser(),
                 /* hasSecureChannel= */ true);
 
-        boolean notifyCallbacks = getConnectedDeviceForManager(deviceId, bleManager) != null;
+        boolean notifyCallbacks = mConnectedDevices.get(deviceId) != null;
 
         // TODO (b/143088482) Implement interrupt
         // Ignore if central already holds the active device connection and interrupt the
         // connection.
 
-        mConnectedDevices.put(deviceId,
-                new InternalConnectedDevice(updatedConnectedDevice, bleManager));
+        mConnectedDevices.put(deviceId, updatedConnectedDevice);
         logd(TAG, "Secure channel established to " + deviceId + " . Notifying callbacks: "
                 + notifyCallbacks + ".");
         if (notifyCallbacks) {
@@ -673,7 +663,7 @@
                 + message.getRecipient() + " containing " + message.getMessage().length
                 + " bytes.");
 
-        InternalConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
+        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
         if (connectedDevice == null) {
             logw(TAG, "Received message from unknown device " + deviceId + "or to unknown "
                     + "recipient " + message.getRecipient() + ".");
@@ -681,8 +671,7 @@
         }
 
         if (mMessageDeliveryDelegate != null
-                && !mMessageDeliveryDelegate.shouldDeliverMessageForDevice(
-                        connectedDevice.mConnectedDevice)) {
+                && !mMessageDeliveryDelegate.shouldDeliverMessageForDevice(connectedDevice)) {
             logw(TAG, "The message delegate has rejected this message. It will not be "
                     + "delivered to the intended recipient.");
             return;
@@ -703,39 +692,36 @@
         }
 
         recipientCallbacks.invoke(
-                callback -> callback.onMessageReceived(connectedDevice.mConnectedDevice,
-                        message.getMessage()));
+                callback -> callback.onMessageReceived(connectedDevice, message.getMessage()));
     }
 
     @VisibleForTesting
     void deviceErrorOccurred(@NonNull String deviceId) {
-        InternalConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
+        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
         if (connectedDevice == null) {
             logw(TAG, "Failed to establish secure channel on unknown device " + deviceId + ".");
             return;
         }
 
-        notifyAllDeviceCallbacks(deviceId,
-                callback -> callback.onDeviceError(connectedDevice.mConnectedDevice,
+        notifyAllDeviceCallbacks(deviceId, callback -> callback.onDeviceError(connectedDevice,
                         DEVICE_ERROR_INVALID_SECURITY_KEY));
     }
 
     @VisibleForTesting
     void onAssociationCompleted(@NonNull String deviceId) {
-        InternalConnectedDevice connectedDevice =
-                getConnectedDeviceForManager(deviceId, mPeripheralManager);
+        ConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
         if (connectedDevice == null) {
             return;
         }
 
         // The previous device is now obsolete and should be replaced with a new one properly
         // reflecting the state of belonging to the active user and notify features.
-        if (connectedDevice.mConnectedDevice.isAssociatedWithActiveUser()) {
+        if (connectedDevice.isAssociatedWithActiveUser()) {
             // Device was already marked as belonging to active user. No need to reissue callbacks.
             return;
         }
-        removeConnectedDevice(deviceId, mPeripheralManager);
-        addConnectedDevice(deviceId, mPeripheralManager);
+        removeConnectedDevice(deviceId);
+        addConnectedDevice(deviceId);
     }
 
     @NonNull
@@ -743,17 +729,6 @@
         return mStorage.getActiveUserAssociatedDeviceIds();
     }
 
-    @Nullable
-    private InternalConnectedDevice getConnectedDeviceForManager(@NonNull String deviceId,
-            @NonNull CarBleManager bleManager) {
-        InternalConnectedDevice connectedDevice = mConnectedDevices.get(deviceId);
-        if (connectedDevice != null && connectedDevice.mCarBleManager == bleManager) {
-            return connectedDevice;
-        }
-
-        return null;
-    }
-
     private void invokeConnectionCallbacks(boolean belongsToActiveUser,
             @NonNull Consumer<ConnectionCallback> notification) {
         logd(TAG, "Notifying connection callbacks for device belonging to active user "
@@ -792,23 +767,24 @@
     }
 
     @NonNull
-    private CarBleManager.Callback generateCarBleCallback(@NonNull CarBleManager carBleManager) {
-        return new CarBleManager.Callback() {
+    private CarBluetoothManager.Callback generateCarBleCallback(
+            @NonNull CarBluetoothManager carBluetoothManager) {
+        return new CarBluetoothManager.Callback() {
             @Override
             public void onDeviceConnected(String deviceId) {
                 EventLog.onDeviceIdReceived();
-                addConnectedDevice(deviceId, carBleManager);
+                addConnectedDevice(deviceId);
             }
 
             @Override
             public void onDeviceDisconnected(String deviceId) {
-                removeConnectedDevice(deviceId, carBleManager);
+                removeConnectedDevice(deviceId);
             }
 
             @Override
             public void onSecureChannelEstablished(String deviceId) {
                 EventLog.onSecureChannelEstablished();
-                ConnectedDeviceManager.this.onSecureChannelEstablished(deviceId, carBleManager);
+                ConnectedDeviceManager.this.onSecureChannelEstablished(deviceId);
             }
 
             @Override
@@ -863,26 +839,25 @@
 
     private final AssociatedDeviceCallback mAssociatedDeviceCallback =
             new AssociatedDeviceCallback() {
-        @Override
-        public void onAssociatedDeviceAdded(
-                AssociatedDevice device) {
-            mDeviceAssociationCallbacks.invoke(callback ->
-                    callback.onAssociatedDeviceAdded(device));
-        }
+                @Override
+                public void onAssociatedDeviceAdded(AssociatedDevice device) {
+                    mDeviceAssociationCallbacks.invoke(callback ->
+                            callback.onAssociatedDeviceAdded(device));
+                }
 
-        @Override
-        public void onAssociatedDeviceRemoved(AssociatedDevice device) {
-            mDeviceAssociationCallbacks.invoke(callback ->
-                    callback.onAssociatedDeviceRemoved(device));
-            logd(TAG, "Successfully removed associated device " + device + ".");
-        }
+                @Override
+                public void onAssociatedDeviceRemoved(AssociatedDevice device) {
+                    mDeviceAssociationCallbacks.invoke(callback ->
+                            callback.onAssociatedDeviceRemoved(device));
+                    logd(TAG, "Successfully removed associated device " + device + ".");
+                }
 
-        @Override
-        public void onAssociatedDeviceUpdated(AssociatedDevice device) {
-            mDeviceAssociationCallbacks.invoke(callback ->
-                    callback.onAssociatedDeviceUpdated(device));
-        }
-    };
+                @Override
+                public void onAssociatedDeviceUpdated(AssociatedDevice device) {
+                    mDeviceAssociationCallbacks.invoke(callback ->
+                            callback.onAssociatedDeviceUpdated(device));
+                }
+            };
 
     /** Callback for triggered connection events from {@link ConnectedDeviceManager}. */
     public interface ConnectionCallback {
@@ -927,15 +902,4 @@
         /** Indicate whether a message should be delivered for the specified device. */
         boolean shouldDeliverMessageForDevice(@NonNull ConnectedDevice device);
     }
-
-    private static class InternalConnectedDevice {
-        private final ConnectedDevice mConnectedDevice;
-        private final CarBleManager mCarBleManager;
-
-        InternalConnectedDevice(@NonNull ConnectedDevice connectedDevice,
-                @NonNull CarBleManager carBleManager) {
-            mConnectedDevice = connectedDevice;
-            mCarBleManager = carBleManager;
-        }
-    }
 }
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java b/connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java
deleted file mode 100644
index 7ff3959..0000000
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/BleDeviceMessageStream.java
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- * 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.connecteddevice.ble;
-
-import static com.android.car.connecteddevice.BleStreamProtos.BleOperationProto.OperationType;
-import static com.android.car.connecteddevice.BleStreamProtos.BlePacketProto.BlePacket;
-import static com.android.car.connecteddevice.BleStreamProtos.VersionExchangeProto.BleVersionExchange;
-import static com.android.car.connecteddevice.util.SafeLog.logd;
-import static com.android.car.connecteddevice.util.SafeLog.loge;
-import static com.android.car.connecteddevice.util.SafeLog.logw;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.os.Handler;
-import android.os.Looper;
-
-import com.android.car.connecteddevice.BleStreamProtos.BleDeviceMessageProto.BleDeviceMessage;
-import com.android.car.connecteddevice.util.ByteUtils;
-import com.android.car.protobuf.ByteString;
-import com.android.car.protobuf.InvalidProtocolBufferException;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayDeque;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-
-/** BLE message stream to a device. */
-class BleDeviceMessageStream {
-
-    private static final String TAG = "BleDeviceMessageStream";
-
-    // Only version 2 of the messaging and version 2 of the security supported.
-    private static final int MESSAGING_VERSION = 2;
-    private static final int SECURITY_VERSION = 2;
-
-    /*
-     * During bandwidth testing, it was discovered that allowing the stream to send as fast as it
-     * can blocked outgoing notifications from being received by the connected device. Adding a
-     * throttle to the outgoing messages alleviated this block and allowed both sides to
-     * send/receive in parallel successfully.
-     */
-    private static final long THROTTLE_DEFAULT_MS = 10L;
-    private static final long THROTTLE_WAIT_MS = 75L;
-
-    private final ArrayDeque<BlePacket> mPacketQueue = new ArrayDeque<>();
-
-    private final Map<Integer, ByteArrayOutputStream> mPendingData = new HashMap<>();
-
-    // messageId -> nextExpectedPacketNumber
-    private final Map<Integer, Integer> mPendingPacketNumber = new HashMap<>();
-
-    private final MessageIdGenerator mMessageIdGenerator = new MessageIdGenerator();
-
-    private final Handler mHandler = new Handler(Looper.getMainLooper());
-
-    private final AtomicBoolean mIsVersionExchanged = new AtomicBoolean(false);
-
-    private final AtomicBoolean mIsSendingInProgress = new AtomicBoolean(false);
-
-    private final AtomicLong mThrottleDelay = new AtomicLong(THROTTLE_DEFAULT_MS);
-
-    private final BlePeripheralManager mBlePeripheralManager;
-
-    private final BluetoothDevice mDevice;
-
-    private final BluetoothGattCharacteristic mWriteCharacteristic;
-
-    private final BluetoothGattCharacteristic mReadCharacteristic;
-
-    private MessageReceivedListener mMessageReceivedListener;
-
-    private MessageReceivedErrorListener mMessageReceivedErrorListener;
-
-    private int mMaxWriteSize;
-
-    BleDeviceMessageStream(@NonNull BlePeripheralManager blePeripheralManager,
-            @NonNull BluetoothDevice device,
-            @NonNull BluetoothGattCharacteristic writeCharacteristic,
-            @NonNull BluetoothGattCharacteristic readCharacteristic,
-            int defaultMaxWriteSize) {
-        mBlePeripheralManager = blePeripheralManager;
-        mDevice = device;
-        mWriteCharacteristic = writeCharacteristic;
-        mReadCharacteristic = readCharacteristic;
-        mBlePeripheralManager.addOnCharacteristicWriteListener(this::onCharacteristicWrite);
-        mBlePeripheralManager.addOnCharacteristicReadListener(this::onCharacteristicRead);
-        mMaxWriteSize = defaultMaxWriteSize;
-    }
-
-    /**
-     * Writes the given message to the write characteristic of this stream with operation type
-     * {@code CLIENT_MESSAGE}.
-     *
-     * This method will handle the chunking of messages based on the max write size.
-     *
-     * @param deviceMessage The data object contains recipient, isPayloadEncrypted and message.
-     */
-    void writeMessage(@NonNull DeviceMessage deviceMessage) {
-        writeMessage(deviceMessage, OperationType.CLIENT_MESSAGE);
-    }
-
-    /**
-     * Writes the given message to the write characteristic of this stream.
-     *
-     * This method will handle the chunking of messages based on the max write size. If it is
-     * a handshake message, the message recipient should be {@code null} and it cannot be
-     * encrypted.
-     *
-     * @param deviceMessage The data object contains recipient, isPayloadEncrypted and message.
-     * @param operationType The {@link OperationType} of this message.
-     */
-    void writeMessage(@NonNull DeviceMessage deviceMessage, OperationType operationType) {
-        logd(TAG, "Writing message with " + deviceMessage.getMessage().length + " bytes to device: "
-                + mDevice.getAddress() + ".");
-        BleDeviceMessage.Builder builder = BleDeviceMessage.newBuilder()
-                .setOperation(operationType)
-                .setIsPayloadEncrypted(deviceMessage.isMessageEncrypted())
-                .setPayload(ByteString.copyFrom(deviceMessage.getMessage()));
-
-        UUID recipient = deviceMessage.getRecipient();
-        if (recipient != null) {
-            builder.setRecipient(ByteString.copyFrom(ByteUtils.uuidToBytes(recipient)));
-        }
-
-        BleDeviceMessage bleDeviceMessage = builder.build();
-        byte[] rawBytes = bleDeviceMessage.toByteArray();
-        List<BlePacket> blePackets;
-        try {
-            blePackets = BlePacketFactory.makeBlePackets(rawBytes, mMessageIdGenerator.next(),
-                    mMaxWriteSize);
-        } catch (BlePacketFactoryException e) {
-            loge(TAG, "Error while creating message packets.", e);
-            return;
-        }
-        mPacketQueue.addAll(blePackets);
-        writeNextMessageInQueue();
-    }
-
-    private void writeNextMessageInQueue() {
-        mHandler.postDelayed(() -> {
-            if (mPacketQueue.isEmpty()) {
-                logd(TAG, "No more packets to send.");
-                return;
-            }
-            if (mIsSendingInProgress.get()) {
-                logd(TAG, "Unable to send packet at this time.");
-                return;
-            }
-
-            mIsSendingInProgress.set(true);
-            BlePacket packet = mPacketQueue.remove();
-            logd(TAG, "Writing packet " + packet.getPacketNumber() + " of "
-                    + packet.getTotalPackets() + " for " + packet.getMessageId() + ".");
-            mWriteCharacteristic.setValue(packet.toByteArray());
-            mBlePeripheralManager.notifyCharacteristicChanged(mDevice, mWriteCharacteristic,
-                    /* confirm= */ false);
-        }, mThrottleDelay.get());
-    }
-
-    private void onCharacteristicRead(@NonNull BluetoothDevice device) {
-        if (!mDevice.equals(device)) {
-            logw(TAG, "Received a read notification from a device (" + device.getAddress()
-                    + ") that is not the expected device (" + mDevice.getAddress() + ") registered "
-                    + "to this stream. Ignoring.");
-            return;
-        }
-
-        logd(TAG, "Releasing lock on characteristic.");
-        mIsSendingInProgress.set(false);
-        writeNextMessageInQueue();
-    }
-
-    private void onCharacteristicWrite(@NonNull BluetoothDevice device,
-            @NonNull BluetoothGattCharacteristic characteristic, @NonNull byte[] value) {
-        logd(TAG, "Received a message from a device (" + device.getAddress() + ").");
-        if (!mDevice.equals(device)) {
-            logw(TAG, "Received a message from a device (" + device.getAddress() + ") that is not "
-                    + "the expected device (" + mDevice.getAddress() + ") registered to this "
-                    + "stream. Ignoring.");
-            return;
-        }
-
-        if (!characteristic.getUuid().equals(mReadCharacteristic.getUuid())) {
-            logw(TAG, "Received a write to a characteristic (" + characteristic.getUuid() + ") that"
-                    + " is not the expected UUID (" + mReadCharacteristic.getUuid() + "). "
-                    + "Ignoring.");
-            return;
-        }
-
-        if (!mIsVersionExchanged.get()) {
-            processVersionExchange(device, value);
-            return;
-        }
-
-        BlePacket packet;
-        try {
-            packet = BlePacket.parseFrom(value);
-        } catch (InvalidProtocolBufferException e) {
-            loge(TAG, "Can not parse Ble packet from client.", e);
-            if (mMessageReceivedErrorListener != null) {
-                mMessageReceivedErrorListener.onMessageReceivedError(e);
-            }
-            return;
-        }
-        processPacket(packet);
-    }
-
-    private void processVersionExchange(@NonNull BluetoothDevice device, @NonNull byte[] value) {
-        BleVersionExchange versionExchange;
-        try {
-            versionExchange = BleVersionExchange.parseFrom(value);
-        } catch (InvalidProtocolBufferException e) {
-            loge(TAG, "Could not parse version exchange message", e);
-            if (mMessageReceivedErrorListener != null) {
-                mMessageReceivedErrorListener.onMessageReceivedError(e);
-            }
-            return;
-        }
-        int minMessagingVersion = versionExchange.getMinSupportedMessagingVersion();
-        int maxMessagingVersion = versionExchange.getMaxSupportedMessagingVersion();
-        int minSecurityVersion = versionExchange.getMinSupportedSecurityVersion();
-        int maxSecurityVersion = versionExchange.getMaxSupportedSecurityVersion();
-        if (minMessagingVersion > MESSAGING_VERSION || maxMessagingVersion < MESSAGING_VERSION
-                || minSecurityVersion > SECURITY_VERSION || maxSecurityVersion < SECURITY_VERSION) {
-            loge(TAG, "Unsupported message version for min " + minMessagingVersion + " and max "
-                    + maxMessagingVersion + " or security version for " + minSecurityVersion
-                    + " and max " + maxSecurityVersion + ".");
-            if (mMessageReceivedErrorListener != null) {
-                mMessageReceivedErrorListener.onMessageReceivedError(
-                        new IllegalStateException("Unsupported version."));
-            }
-            return;
-        }
-
-        BleVersionExchange headunitVersion = BleVersionExchange.newBuilder()
-                .setMinSupportedMessagingVersion(MESSAGING_VERSION)
-                .setMaxSupportedMessagingVersion(MESSAGING_VERSION)
-                .setMinSupportedSecurityVersion(SECURITY_VERSION)
-                .setMaxSupportedSecurityVersion(SECURITY_VERSION)
-                .build();
-        mWriteCharacteristic.setValue(headunitVersion.toByteArray());
-        mBlePeripheralManager.notifyCharacteristicChanged(device, mWriteCharacteristic,
-                /* confirm= */ false);
-        mIsVersionExchanged.set(true);
-        logd(TAG, "Sent supported version to the phone.");
-    }
-
-    @VisibleForTesting
-    void processPacket(@NonNull BlePacket packet) {
-        // Messages are coming in. Need to throttle outgoing messages to allow outgoing
-        // notifications to make it to the device.
-        mThrottleDelay.set(THROTTLE_WAIT_MS);
-
-        int messageId = packet.getMessageId();
-        int packetNumber = packet.getPacketNumber();
-        int expectedPacket = mPendingPacketNumber.getOrDefault(messageId, 1);
-        if (packetNumber == expectedPacket - 1) {
-            logw(TAG, "Received duplicate packet " + packet.getPacketNumber() + " for message "
-                    + messageId + ". Ignoring.");
-            return;
-        }
-        if (packetNumber != expectedPacket) {
-            loge(TAG, "Received unexpected packet " + packetNumber + " for message "
-                    + messageId + ".");
-            if (mMessageReceivedErrorListener != null) {
-                mMessageReceivedErrorListener.onMessageReceivedError(
-                        new IllegalStateException("Packet received out of order."));
-            }
-            return;
-        }
-        mPendingPacketNumber.put(messageId, packetNumber + 1);
-
-        ByteArrayOutputStream currentPayloadStream =
-                mPendingData.getOrDefault(messageId, new ByteArrayOutputStream());
-        mPendingData.putIfAbsent(messageId, currentPayloadStream);
-
-        byte[] payload = packet.getPayload().toByteArray();
-        try {
-            currentPayloadStream.write(payload);
-        } catch (IOException e) {
-            loge(TAG, "Error writing packet to stream.", e);
-            if (mMessageReceivedErrorListener != null) {
-                mMessageReceivedErrorListener.onMessageReceivedError(e);
-            }
-            return;
-        }
-        logd(TAG, "Parsed packet " + packet.getPacketNumber() + " of "
-                + packet.getTotalPackets() + " for message " + messageId + ". Writing "
-                + payload.length + ".");
-
-        if (packet.getPacketNumber() != packet.getTotalPackets()) {
-            return;
-        }
-
-        byte[] messageBytes = currentPayloadStream.toByteArray();
-        mPendingData.remove(messageId);
-
-        // All message packets received. Resetting throttle back to default until next message
-        // started.
-        mThrottleDelay.set(THROTTLE_DEFAULT_MS);
-
-        logd(TAG, "Received complete device message " + messageId + " of " + messageBytes.length
-                + " bytes.");
-        BleDeviceMessage message;
-        try {
-            message = BleDeviceMessage.parseFrom(messageBytes);
-        } catch (InvalidProtocolBufferException e) {
-            loge(TAG, "Cannot parse device message from client.", e);
-            if (mMessageReceivedErrorListener != null) {
-                mMessageReceivedErrorListener.onMessageReceivedError(e);
-            }
-            return;
-        }
-
-        DeviceMessage deviceMessage = new DeviceMessage(
-                ByteUtils.bytesToUUID(message.getRecipient().toByteArray()),
-                message.getIsPayloadEncrypted(), message.getPayload().toByteArray());
-        if (mMessageReceivedListener != null) {
-            mMessageReceivedListener.onMessageReceived(deviceMessage, message.getOperation());
-        }
-    }
-
-    /** The maximum amount of bytes that can be written over BLE. */
-    void setMaxWriteSize(int maxWriteSize) {
-        if (maxWriteSize <= 0) {
-            return;
-        }
-        mMaxWriteSize = maxWriteSize;
-    }
-
-    /**
-     * Set the given listener to be notified when a new message was received from the
-     * client. If listener is {@code null}, clear.
-     */
-    void setMessageReceivedListener(@Nullable MessageReceivedListener listener) {
-        mMessageReceivedListener = listener;
-    }
-
-    /**
-     * Set the given listener to be notified when there was an error during receiving
-     * message from the client. If listener is {@code null}, clear.
-     */
-    void setMessageReceivedErrorListener(
-            @Nullable MessageReceivedErrorListener listener) {
-        mMessageReceivedErrorListener = listener;
-    }
-
-    /**
-     * Listener to be invoked when a complete message is received from the client.
-     */
-    interface MessageReceivedListener {
-
-        /**
-         * Called when a complete message is received from the client.
-         *
-         * @param deviceMessage The message received from the client.
-         * @param operationType The {@link OperationType} of the received message.
-         */
-        void onMessageReceived(@NonNull DeviceMessage deviceMessage, OperationType operationType);
-    }
-
-    /**
-     * Listener to be invoked when there was an error during receiving message from the client.
-     */
-    interface MessageReceivedErrorListener {
-        /**
-         * Called when there was an error during receiving message from the client.
-         *
-         * @param exception The error.
-         */
-        void onMessageReceivedError(@NonNull Exception exception);
-    }
-
-    /** A generator of unique IDs for messages. */
-    private static class MessageIdGenerator {
-        private final AtomicInteger mMessageId = new AtomicInteger(0);
-
-        int next() {
-            int current = mMessageId.getAndIncrement();
-            mMessageId.compareAndSet(Integer.MAX_VALUE, 0);
-            return current;
-        }
-    }
-}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBleManager.java b/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBleManager.java
deleted file mode 100644
index 2c32beb..0000000
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBleManager.java
+++ /dev/null
@@ -1,247 +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 com.android.car.connecteddevice.ble;
-
-import static com.android.car.connecteddevice.util.SafeLog.logd;
-import static com.android.car.connecteddevice.util.SafeLog.logw;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGatt;
-
-import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
-import com.android.car.connecteddevice.util.ThreadSafeCallbacks;
-
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.concurrent.Executor;
-
-/**
- * Generic BLE manager for a car that keeps track of connected devices and their associated
- * callbacks.
- */
-public abstract class CarBleManager {
-
-    private static final String TAG = "CarBleManager";
-
-    final ConnectedDeviceStorage mStorage;
-
-    final CopyOnWriteArraySet<BleDevice> mConnectedDevices = new CopyOnWriteArraySet<>();
-
-    final ThreadSafeCallbacks<Callback> mCallbacks = new ThreadSafeCallbacks<>();
-
-    protected CarBleManager(@NonNull ConnectedDeviceStorage connectedDeviceStorage) {
-        mStorage = connectedDeviceStorage;
-    }
-
-    /**
-     * Initialize and start the manager.
-     */
-    public void start() {
-    }
-
-    /**
-     * Stop the manager and clean up.
-     */
-    public void stop() {
-        for (BleDevice device : mConnectedDevices) {
-            if (device.mGatt != null) {
-                device.mGatt.close();
-            }
-        }
-        mConnectedDevices.clear();
-    }
-
-    /**
-     * Register a {@link Callback} to be notified on the {@link Executor}.
-     */
-    public void registerCallback(@NonNull Callback callback, @NonNull Executor executor) {
-        mCallbacks.add(callback, executor);
-    }
-
-    /**
-     * Unregister a callback.
-     *
-     * @param callback The {@link Callback} to unregister.
-     */
-    public void unregisterCallback(@NonNull Callback callback) {
-        mCallbacks.remove(callback);
-    }
-
-    /**
-     * Send a message to a connected device.
-     *
-     * @param deviceId Id of connected device.
-     * @param message  {@link DeviceMessage} to send.
-     */
-    public void sendMessage(@NonNull String deviceId, @NonNull DeviceMessage message) {
-        BleDevice device = getConnectedDevice(deviceId);
-        if (device == null) {
-            logw(TAG, "Attempted to send message to unknown device $deviceId. Ignored.");
-            return;
-        }
-
-        sendMessage(device, message);
-    }
-
-    /**
-     * Send a message to a connected device.
-     *
-     * @param device  The connected {@link BleDevice}.
-     * @param message {@link DeviceMessage} to send.
-     */
-    public void sendMessage(@NonNull BleDevice device, @NonNull DeviceMessage message) {
-        String deviceId = device.mDeviceId;
-        if (deviceId == null) {
-            deviceId = "Unidentified device";
-        }
-
-        logd(TAG, "Writing " + message.getMessage().length + " bytes to " + deviceId + ".");
-        device.mSecureChannel.sendClientMessage(message);
-    }
-
-    /**
-     * Get the {@link BleDevice} with matching {@link BluetoothGatt} if available. Returns
-     * {@code null} if no matches are found.
-     */
-    @Nullable
-    BleDevice getConnectedDevice(@NonNull BluetoothGatt gatt) {
-        for (BleDevice device : mConnectedDevices) {
-            if (device.mGatt == gatt) {
-                return device;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Get the {@link BleDevice} with matching {@link BluetoothDevice} if available. Returns
-     * {@code null} if no matches are found.
-     */
-    @Nullable
-    BleDevice getConnectedDevice(@NonNull BluetoothDevice device) {
-        for (BleDevice connectedDevice : mConnectedDevices) {
-            if (device.equals(connectedDevice.mDevice)) {
-                return connectedDevice;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Get the {@link BleDevice} with matching device id if available. Returns {@code null} if
-     * no matches are found.
-     */
-    @Nullable
-    BleDevice getConnectedDevice(@NonNull String deviceId) {
-        for (BleDevice device : mConnectedDevices) {
-            if (deviceId.equals(device.mDeviceId)) {
-                return device;
-            }
-        }
-
-        return null;
-    }
-
-    /** Add the {@link BleDevice} that has connected. */
-    void addConnectedDevice(@NonNull BleDevice device) {
-        mConnectedDevices.add(device);
-    }
-
-    /** Return the number of devices currently connected. */
-    int getConnectedDevicesCount() {
-        return mConnectedDevices.size();
-    }
-
-    /** Remove [@link BleDevice} that has been disconnected. */
-    void removeConnectedDevice(@NonNull BleDevice device) {
-        mConnectedDevices.remove(device);
-    }
-
-    /** Disconnect the provided device from this manager. */
-    public abstract void disconnectDevice(@NonNull String deviceId);
-
-    /** State for a connected device. */
-    enum BleDeviceState {
-        CONNECTING,
-        PENDING_VERIFICATION,
-        CONNECTED,
-        UNKNOWN
-    }
-
-    /**
-     * Container class to hold information about a connected device.
-     */
-    static class BleDevice {
-
-        BluetoothDevice mDevice;
-        BluetoothGatt mGatt;
-        BleDeviceState mState;
-        String mDeviceId;
-        SecureBleChannel mSecureChannel;
-
-        BleDevice(@NonNull BluetoothDevice device, @Nullable BluetoothGatt gatt) {
-            mDevice = device;
-            mGatt = gatt;
-            mState = BleDeviceState.UNKNOWN;
-        }
-    }
-
-    /**
-     * Callback for triggered events from {@link CarBleManager}.
-     */
-    public interface Callback {
-        /**
-         * Triggered when device is connected and device id retrieved. Device is now ready to
-         * receive messages.
-         *
-         * @param deviceId Id of device that has connected.
-         */
-        void onDeviceConnected(@NonNull String deviceId);
-
-        /**
-         * Triggered when device is disconnected.
-         *
-         * @param deviceId Id of device that has disconnected.
-         */
-        void onDeviceDisconnected(@NonNull String deviceId);
-
-        /**
-         * Triggered when device has established encryption for secure communication.
-         *
-         * @param deviceId Id of device that has established encryption.
-         */
-        void onSecureChannelEstablished(@NonNull String deviceId);
-
-        /**
-         * Triggered when a new message is received.
-         *
-         * @param deviceId Id of the device that sent the message.
-         * @param message  {@link DeviceMessage} received.
-         */
-        void onMessageReceived(@NonNull String deviceId, @NonNull DeviceMessage message);
-
-        /**
-         * Triggered when an error when establishing the secure channel.
-         *
-         * @param deviceId Id of the device that experienced the error.
-         */
-        void onSecureChannelError(@NonNull String deviceId);
-    }
-}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java b/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java
deleted file mode 100644
index 3fe8e3b..0000000
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBlePeripheralManager.java
+++ /dev/null
@@ -1,670 +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 com.android.car.connecteddevice.ble;
-
-import static com.android.car.connecteddevice.ConnectedDeviceManager.DEVICE_ERROR_INVALID_HANDSHAKE;
-import static com.android.car.connecteddevice.ConnectedDeviceManager.DEVICE_ERROR_UNEXPECTED_DISCONNECTION;
-import static com.android.car.connecteddevice.util.SafeLog.logd;
-import static com.android.car.connecteddevice.util.SafeLog.loge;
-import static com.android.car.connecteddevice.util.SafeLog.logw;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattDescriptor;
-import android.bluetooth.BluetoothGattService;
-import android.bluetooth.le.AdvertiseCallback;
-import android.bluetooth.le.AdvertiseData;
-import android.bluetooth.le.AdvertiseSettings;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.ParcelUuid;
-
-import com.android.car.connecteddevice.AssociationCallback;
-import com.android.car.connecteddevice.model.AssociatedDevice;
-import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
-import com.android.car.connecteddevice.util.ByteUtils;
-import com.android.car.connecteddevice.util.EventLog;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.time.Duration;
-import java.util.Arrays;
-import java.util.UUID;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Communication manager that allows for targeted connections to a specific device in the car.
- */
-public class CarBlePeripheralManager extends CarBleManager {
-
-    private static final String TAG = "CarBlePeripheralManager";
-
-    // Attribute protocol bytes attached to message. Available write size is MTU size minus att
-    // bytes.
-    private static final int ATT_PROTOCOL_BYTES = 3;
-
-    // Arbitrary delay time for a retry of association advertising if bluetooth adapter name change
-    // fails.
-    private static final long ASSOCIATE_ADVERTISING_DELAY_MS = 10L;
-
-    private static final UUID CLIENT_CHARACTERISTIC_CONFIG =
-            UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
-
-    private static final int SALT_BYTES = 8;
-
-    private static final int TOTAL_AD_DATA_BYTES = 16;
-
-    private static final int TRUNCATED_BYTES = 3;
-
-    private final BluetoothGattDescriptor mDescriptor =
-            new BluetoothGattDescriptor(CLIENT_CHARACTERISTIC_CONFIG,
-                    BluetoothGattDescriptor.PERMISSION_READ
-                            | BluetoothGattDescriptor.PERMISSION_WRITE);
-
-    private final ScheduledExecutorService mScheduler =
-            Executors.newSingleThreadScheduledExecutor();
-
-    private final BlePeripheralManager mBlePeripheralManager;
-
-    private final UUID mAssociationServiceUuid;
-
-    private final UUID mReconnectServiceUuid;
-
-    private final UUID mReconnectDataUuid;
-
-    private final BluetoothGattCharacteristic mWriteCharacteristic;
-
-    private final BluetoothGattCharacteristic mReadCharacteristic;
-
-    private final Handler mTimeoutHandler;
-
-    private final Duration mMaxReconnectAdvertisementDuration;
-
-    private final int mDefaultMtuSize;
-
-    private String mOriginalBluetoothName;
-
-    private String mClientDeviceName;
-
-    private String mClientDeviceAddress;
-
-    private String mReconnectDeviceId;
-
-    private byte[] mReconnectChallenge;
-
-    private AssociationCallback mAssociationCallback;
-
-    private AdvertiseCallback mAdvertiseCallback;
-
-    /**
-     * Initialize a new instance of manager.
-     *
-     * @param blePeripheralManager    {@link BlePeripheralManager} for establishing connection.
-     * @param connectedDeviceStorage  Shared {@link ConnectedDeviceStorage} for companion features.
-     * @param associationServiceUuid  {@link UUID} of association service.
-     * @param reconnectServiceUuid    {@link UUID} of reconnect service.
-     * @param reconnectDataUuid       {@link UUID} key of reconnect advertisement data.
-     * @param writeCharacteristicUuid {@link UUID} of characteristic the car will write to.
-     * @param readCharacteristicUuid  {@link UUID} of characteristic the device will write to.
-     * @param maxReconnectAdvertisementDuration Maximum duration to advertise for reconnect before
-     *                                          restarting.
-     * @param defaultMtuSize          Default MTU size for new channels.
-     */
-    public CarBlePeripheralManager(@NonNull BlePeripheralManager blePeripheralManager,
-            @NonNull ConnectedDeviceStorage connectedDeviceStorage,
-            @NonNull UUID associationServiceUuid,
-            @NonNull UUID reconnectServiceUuid,
-            @NonNull UUID reconnectDataUuid,
-            @NonNull UUID writeCharacteristicUuid,
-            @NonNull UUID readCharacteristicUuid,
-            @NonNull Duration maxReconnectAdvertisementDuration,
-            int defaultMtuSize) {
-        super(connectedDeviceStorage);
-        mBlePeripheralManager = blePeripheralManager;
-        mAssociationServiceUuid = associationServiceUuid;
-        mReconnectServiceUuid = reconnectServiceUuid;
-        mReconnectDataUuid = reconnectDataUuid;
-        mDescriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
-        mWriteCharacteristic = new BluetoothGattCharacteristic(writeCharacteristicUuid,
-                BluetoothGattCharacteristic.PROPERTY_NOTIFY,
-                BluetoothGattCharacteristic.PROPERTY_READ);
-        mReadCharacteristic = new BluetoothGattCharacteristic(readCharacteristicUuid,
-                BluetoothGattCharacteristic.PROPERTY_WRITE
-                        | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE,
-                BluetoothGattCharacteristic.PERMISSION_WRITE);
-        mReadCharacteristic.addDescriptor(mDescriptor);
-        mTimeoutHandler = new Handler(Looper.getMainLooper());
-        mMaxReconnectAdvertisementDuration = maxReconnectAdvertisementDuration;
-        mDefaultMtuSize = defaultMtuSize;
-    }
-
-    @Override
-    public void start() {
-        super.start();
-        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        if (adapter == null) {
-            return;
-        }
-        String originalBluetoothName = mStorage.getStoredBluetoothName();
-        if (originalBluetoothName == null) {
-            return;
-        }
-        if (originalBluetoothName.equals(adapter.getName())) {
-            mStorage.removeStoredBluetoothName();
-            return;
-        }
-
-        logw(TAG, "Discovered mismatch in bluetooth adapter name. Resetting back to "
-                + originalBluetoothName + ".");
-        adapter.setName(originalBluetoothName);
-        mScheduler.schedule(
-                () -> verifyBluetoothNameRestored(originalBluetoothName),
-                ASSOCIATE_ADVERTISING_DELAY_MS, TimeUnit.MILLISECONDS);
-    }
-
-    @Override
-    public void stop() {
-        super.stop();
-        reset();
-    }
-
-    @Override
-    public void disconnectDevice(@NonNull String deviceId) {
-        BleDevice connectedDevice = getConnectedDevice();
-        if (connectedDevice == null || !deviceId.equals(connectedDevice.mDeviceId)) {
-            return;
-        }
-        reset();
-    }
-
-    private void reset() {
-        resetBluetoothAdapterName();
-        mClientDeviceAddress = null;
-        mClientDeviceName = null;
-        mAssociationCallback = null;
-        mBlePeripheralManager.cleanup();
-        mConnectedDevices.clear();
-        mReconnectDeviceId = null;
-        mReconnectChallenge = null;
-    }
-
-    /** Attempt to connect to device with provided id. */
-    public void connectToDevice(@NonNull UUID deviceId) {
-        for (BleDevice device : mConnectedDevices) {
-            if (UUID.fromString(device.mDeviceId).equals(deviceId)) {
-                logd(TAG, "Already connected to device " + deviceId + ".");
-                // Already connected to this device. Ignore requests to connect again.
-                return;
-            }
-        }
-
-        // Clear any previous session before starting a new one.
-        reset();
-        mReconnectDeviceId = deviceId.toString();
-        mAdvertiseCallback = new AdvertiseCallback() {
-            @Override
-            public void onStartSuccess(AdvertiseSettings settingsInEffect) {
-                super.onStartSuccess(settingsInEffect);
-                mTimeoutHandler.postDelayed(mTimeoutRunnable,
-                        mMaxReconnectAdvertisementDuration.toMillis());
-                logd(TAG, "Successfully started advertising for device " + deviceId + ".");
-            }
-        };
-        mBlePeripheralManager.unregisterCallback(mAssociationPeripheralCallback);
-        mBlePeripheralManager.registerCallback(mReconnectPeripheralCallback);
-        mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
-        byte[] advertiseData = createReconnectData(mReconnectDeviceId);
-        if (advertiseData == null) {
-            loge(TAG, "Unable to create advertisement data. Aborting reconnect.");
-            return;
-        }
-        startAdvertising(mReconnectServiceUuid, mAdvertiseCallback, /* includeDeviceName= */ false,
-                advertiseData, mReconnectDataUuid);
-    }
-
-    /**
-     * Create data for reconnection advertisement.
-     *
-     * <p></p><p>Process:</p>
-     * <ol>
-     * <li>Generate random {@value SALT_BYTES} byte salt and zero-pad to
-     * {@value TOTAL_AD_DATA_BYTES} bytes.
-     * <li>Hash with stored challenge secret and truncate to {@value TRUNCATED_BYTES} bytes.
-     * <li>Concatenate hashed {@value TRUNCATED_BYTES} bytes with salt and return.
-     * </ol>
-     */
-    @Nullable
-    private byte[] createReconnectData(String deviceId) {
-        byte[] salt = ByteUtils.randomBytes(SALT_BYTES);
-        byte[] zeroPadded = ByteUtils.concatByteArrays(salt,
-                new byte[TOTAL_AD_DATA_BYTES - SALT_BYTES]);
-        mReconnectChallenge = mStorage.hashWithChallengeSecret(deviceId, zeroPadded);
-        if (mReconnectChallenge == null) {
-            return null;
-        }
-        return ByteUtils.concatByteArrays(Arrays.copyOf(mReconnectChallenge, TRUNCATED_BYTES),
-                salt);
-
-    }
-
-    @Nullable
-    private BleDevice getConnectedDevice() {
-        if (mConnectedDevices.isEmpty()) {
-            return null;
-        }
-        return mConnectedDevices.iterator().next();
-    }
-
-    /** Start the association with a new device */
-    public void startAssociation(@NonNull String nameForAssociation,
-            @NonNull AssociationCallback callback) {
-        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
-        if (adapter == null) {
-            loge(TAG, "Bluetooth is unavailable on this device. Unable to start associating.");
-            return;
-        }
-
-        reset();
-        mAssociationCallback = callback;
-        if (mOriginalBluetoothName == null) {
-            mOriginalBluetoothName = adapter.getName();
-            mStorage.storeBluetoothName(mOriginalBluetoothName);
-        }
-        adapter.setName(nameForAssociation);
-        logd(TAG, "Changing bluetooth adapter name from " + mOriginalBluetoothName + " to "
-                + nameForAssociation + ".");
-        mBlePeripheralManager.unregisterCallback(mReconnectPeripheralCallback);
-        mBlePeripheralManager.registerCallback(mAssociationPeripheralCallback);
-        mAdvertiseCallback = new AdvertiseCallback() {
-            @Override
-            public void onStartSuccess(AdvertiseSettings settingsInEffect) {
-                super.onStartSuccess(settingsInEffect);
-                callback.onAssociationStartSuccess(nameForAssociation);
-                logd(TAG, "Successfully started advertising for association.");
-            }
-
-            @Override
-            public void onStartFailure(int errorCode) {
-                super.onStartFailure(errorCode);
-                callback.onAssociationStartFailure();
-                logd(TAG, "Failed to start advertising for association. Error code: " + errorCode);
-            }
-        };
-        attemptAssociationAdvertising(nameForAssociation, callback);
-    }
-
-    /** Stop the association with any device. */
-    public void stopAssociation(@NonNull AssociationCallback callback) {
-        if (!isAssociating() || callback != mAssociationCallback) {
-            return;
-        }
-        reset();
-    }
-
-    private void attemptAssociationAdvertising(@NonNull String adapterName,
-            @NonNull AssociationCallback callback) {
-        if (mOriginalBluetoothName != null
-                && adapterName.equals(BluetoothAdapter.getDefaultAdapter().getName())) {
-            startAdvertising(mAssociationServiceUuid, mAdvertiseCallback,
-                    /* includeDeviceName= */ true, /* serviceData= */ null,
-                    /* serviceDataUuid= */ null);
-            return;
-        }
-
-        ScheduledFuture future = mScheduler.schedule(
-                () -> attemptAssociationAdvertising(adapterName, callback),
-                ASSOCIATE_ADVERTISING_DELAY_MS, TimeUnit.MILLISECONDS);
-        if (future.isCancelled()) {
-            // Association failed to start.
-            callback.onAssociationStartFailure();
-            return;
-        }
-        logd(TAG, "Adapter name change has not taken affect prior to advertising attempt. Trying "
-                + "again in " + ASSOCIATE_ADVERTISING_DELAY_MS + "  milliseconds.");
-    }
-
-    private void startAdvertising(@NonNull UUID serviceUuid, @NonNull AdvertiseCallback callback,
-            boolean includeDeviceName, @Nullable byte[] serviceData,
-            @Nullable UUID serviceDataUuid) {
-        BluetoothGattService gattService = new BluetoothGattService(serviceUuid,
-                BluetoothGattService.SERVICE_TYPE_PRIMARY);
-        gattService.addCharacteristic(mWriteCharacteristic);
-        gattService.addCharacteristic(mReadCharacteristic);
-
-        AdvertiseData.Builder builder = new AdvertiseData.Builder()
-                .setIncludeDeviceName(includeDeviceName);
-        ParcelUuid uuid = new ParcelUuid(serviceUuid);
-        builder.addServiceUuid(uuid);
-        if (serviceData != null) {
-            ParcelUuid dataUuid = uuid;
-            if (serviceDataUuid != null) {
-                dataUuid = new ParcelUuid(serviceDataUuid);
-            }
-            builder.addServiceData(dataUuid, serviceData);
-        }
-
-        mBlePeripheralManager.startAdvertising(gattService, builder.build(), callback);
-    }
-
-    /** Notify that the user has accepted a pairing code or other out-of-band confirmation. */
-    public void notifyOutOfBandAccepted() {
-        if (getConnectedDevice() == null) {
-            disconnectWithError("Null connected device found when out-of-band confirmation "
-                    + "received.");
-            return;
-        }
-
-        AssociationSecureChannel secureChannel =
-                (AssociationSecureChannel) getConnectedDevice().mSecureChannel;
-        if (secureChannel == null) {
-            disconnectWithError("Null SecureBleChannel found for the current connected device "
-                    + "when out-of-band confirmation received.");
-            return;
-        }
-
-        secureChannel.notifyOutOfBandAccepted();
-    }
-
-    @VisibleForTesting
-    @Nullable
-    SecureBleChannel getConnectedDeviceChannel() {
-        BleDevice connectedDevice = getConnectedDevice();
-        if (connectedDevice == null) {
-            return null;
-        }
-
-        return connectedDevice.mSecureChannel;
-    }
-
-    private void setDeviceId(@NonNull String deviceId) {
-        logd(TAG, "Setting device id: " + deviceId);
-        BleDevice connectedDevice = getConnectedDevice();
-        if (connectedDevice == null) {
-            disconnectWithError("Null connected device found when device id received.");
-            return;
-        }
-
-        connectedDevice.mDeviceId = deviceId;
-        mCallbacks.invoke(callback -> callback.onDeviceConnected(deviceId));
-    }
-
-    private void disconnectWithError(@NonNull String errorMessage) {
-        loge(TAG, errorMessage);
-        if (isAssociating()) {
-            mAssociationCallback.onAssociationError(DEVICE_ERROR_INVALID_HANDSHAKE);
-        }
-        reset();
-    }
-
-    private void resetBluetoothAdapterName() {
-        if (mOriginalBluetoothName == null) {
-            return;
-        }
-        logd(TAG, "Changing bluetooth adapter name back to " + mOriginalBluetoothName + ".");
-        BluetoothAdapter.getDefaultAdapter().setName(mOriginalBluetoothName);
-        mOriginalBluetoothName = null;
-    }
-
-    private void verifyBluetoothNameRestored(@NonNull String expectedName) {
-        String currentName = BluetoothAdapter.getDefaultAdapter().getName();
-        if (expectedName.equals(currentName)) {
-            logd(TAG, "Bluetooth adapter name restoration completed successfully. Removing stored "
-                    + "adapter name.");
-            mStorage.removeStoredBluetoothName();
-            return;
-        }
-        logd(TAG, "Bluetooth adapter name restoration has not taken affect yet. Checking again in "
-                + ASSOCIATE_ADVERTISING_DELAY_MS + " milliseconds.");
-        mScheduler.schedule(
-                () -> verifyBluetoothNameRestored(expectedName),
-                ASSOCIATE_ADVERTISING_DELAY_MS, TimeUnit.MILLISECONDS);
-    }
-
-    private void addConnectedDevice(BluetoothDevice device, boolean isReconnect) {
-        EventLog.onDeviceConnected();
-        mBlePeripheralManager.stopAdvertising(mAdvertiseCallback);
-        mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
-        mClientDeviceAddress = device.getAddress();
-        mClientDeviceName = device.getName();
-        if (mClientDeviceName == null) {
-            logd(TAG, "Device connected, but name is null; issuing request to retrieve device "
-                    + "name.");
-            mBlePeripheralManager.retrieveDeviceName(device);
-        }
-
-        BleDeviceMessageStream secureStream = new BleDeviceMessageStream(mBlePeripheralManager,
-                device, mWriteCharacteristic, mReadCharacteristic,
-                mDefaultMtuSize - ATT_PROTOCOL_BYTES);
-        secureStream.setMessageReceivedErrorListener(
-                exception -> {
-                    disconnectWithError("Error occurred in stream: " + exception.getMessage());
-                });
-        SecureBleChannel secureChannel;
-        if (isReconnect) {
-            secureChannel = new ReconnectSecureChannel(secureStream, mStorage, mReconnectDeviceId,
-                    mReconnectChallenge);
-        } else {
-            secureChannel = new AssociationSecureChannel(secureStream, mStorage);
-        }
-        secureChannel.registerCallback(mSecureChannelCallback);
-        BleDevice bleDevice = new BleDevice(device, /* gatt= */ null);
-        bleDevice.mSecureChannel = secureChannel;
-        addConnectedDevice(bleDevice);
-        if (isReconnect) {
-            setDeviceId(mReconnectDeviceId);
-            mReconnectDeviceId = null;
-            mReconnectChallenge = null;
-        }
-    }
-
-    private void setMtuSize(int mtuSize) {
-        BleDevice connectedDevice = getConnectedDevice();
-        if (connectedDevice != null
-                && connectedDevice.mSecureChannel != null
-                && connectedDevice.mSecureChannel.getStream() != null) {
-            connectedDevice.mSecureChannel.getStream()
-                    .setMaxWriteSize(mtuSize - ATT_PROTOCOL_BYTES);
-        }
-    }
-
-    private boolean isAssociating() {
-        return mAssociationCallback != null;
-    }
-
-    private final BlePeripheralManager.Callback mReconnectPeripheralCallback =
-            new BlePeripheralManager.Callback() {
-
-                @Override
-                public void onDeviceNameRetrieved(String deviceName) {
-                    // Ignored.
-                }
-
-                @Override
-                public void onMtuSizeChanged(int size) {
-                    setMtuSize(size);
-                }
-
-                @Override
-                public void onRemoteDeviceConnected(BluetoothDevice device) {
-                    addConnectedDevice(device, /* isReconnect= */ true);
-                }
-
-                @Override
-                public void onRemoteDeviceDisconnected(BluetoothDevice device) {
-                    String deviceId = mReconnectDeviceId;
-                    BleDevice connectedDevice = getConnectedDevice(device);
-                    // Reset before invoking callbacks to avoid a race condition with reconnect
-                    // logic.
-                    reset();
-                    if (connectedDevice != null) {
-                        deviceId = connectedDevice.mDeviceId;
-                    }
-                    final String finalDeviceId = deviceId;
-                    if (finalDeviceId != null) {
-                        logd(TAG, "Connected device " + finalDeviceId + " disconnected.");
-                        mCallbacks.invoke(callback -> callback.onDeviceDisconnected(finalDeviceId));
-                    }
-                }
-            };
-
-    private final BlePeripheralManager.Callback mAssociationPeripheralCallback =
-            new BlePeripheralManager.Callback() {
-                @Override
-                public void onDeviceNameRetrieved(String deviceName) {
-                    if (deviceName == null) {
-                        return;
-                    }
-                    mClientDeviceName = deviceName;
-                    BleDevice connectedDevice = getConnectedDevice();
-                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
-                        return;
-                    }
-                    mStorage.updateAssociatedDeviceName(connectedDevice.mDeviceId, deviceName);
-                }
-
-                @Override
-                public void onMtuSizeChanged(int size) {
-                    setMtuSize(size);
-                }
-
-                @Override
-                public void onRemoteDeviceConnected(BluetoothDevice device) {
-                    resetBluetoothAdapterName();
-                    addConnectedDevice(device, /* isReconnect= */ false);
-                    BleDevice connectedDevice = getConnectedDevice();
-                    if (connectedDevice == null || connectedDevice.mSecureChannel == null) {
-                        return;
-                    }
-                    ((AssociationSecureChannel) connectedDevice.mSecureChannel)
-                            .setShowVerificationCodeListener(
-                                    code -> {
-                                        if (!isAssociating()) {
-                                            loge(TAG, "No valid callback for association.");
-                                            return;
-                                        }
-                                        mAssociationCallback.onVerificationCodeAvailable(code);
-                                    });
-                }
-
-                @Override
-                public void onRemoteDeviceDisconnected(BluetoothDevice device) {
-                    BleDevice connectedDevice = getConnectedDevice(device);
-                    if (isAssociating()) {
-                        mAssociationCallback.onAssociationError(
-                                DEVICE_ERROR_UNEXPECTED_DISCONNECTION);
-                    }
-                    // Reset before invoking callbacks to avoid a race condition with reconnect
-                    // logic.
-                    reset();
-                    if (connectedDevice != null && connectedDevice.mDeviceId != null) {
-                        mCallbacks.invoke(callback -> callback.onDeviceDisconnected(
-                                connectedDevice.mDeviceId));
-                    }
-                }
-            };
-
-    private final SecureBleChannel.Callback mSecureChannelCallback =
-            new SecureBleChannel.Callback() {
-                @Override
-                public void onSecureChannelEstablished() {
-                    BleDevice connectedDevice = getConnectedDevice();
-                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
-                        disconnectWithError("Null device id found when secure channel "
-                                + "established.");
-                        return;
-                    }
-                    String deviceId = connectedDevice.mDeviceId;
-                    if (mClientDeviceAddress == null) {
-                        disconnectWithError("Null device address found when secure channel "
-                                + "established.");
-                        return;
-                    }
-                    if (isAssociating()) {
-                        logd(TAG, "Secure channel established for un-associated device. Saving "
-                                + "association of that device for current user.");
-                        mStorage.addAssociatedDeviceForActiveUser(
-                                new AssociatedDevice(deviceId, mClientDeviceAddress,
-                                        mClientDeviceName, /* isConnectionEnabled= */ true));
-                        if (mAssociationCallback != null) {
-                            mAssociationCallback.onAssociationCompleted(deviceId);
-                            mAssociationCallback = null;
-                        }
-                    }
-                    mCallbacks.invoke(callback -> callback.onSecureChannelEstablished(deviceId));
-                }
-
-                @Override
-                public void onEstablishSecureChannelFailure(int error) {
-                    BleDevice connectedDevice = getConnectedDevice();
-                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
-                        disconnectWithError("Null device id found when secure channel failed to "
-                                + "establish.");
-                        return;
-                    }
-                    String deviceId = connectedDevice.mDeviceId;
-                    mCallbacks.invoke(callback -> callback.onSecureChannelError(deviceId));
-
-                    if (isAssociating()) {
-                        mAssociationCallback.onAssociationError(error);
-                    }
-
-                    disconnectWithError("Error while establishing secure connection.");
-                }
-
-                @Override
-                public void onMessageReceived(DeviceMessage deviceMessage) {
-                    BleDevice connectedDevice = getConnectedDevice();
-                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
-                        disconnectWithError("Null device id found when message received.");
-                        return;
-                    }
-
-                    logd(TAG, "Received new message from " + connectedDevice.mDeviceId
-                            + " with " + deviceMessage.getMessage().length + " bytes in its "
-                            + "payload. Notifying " + mCallbacks.size() + " callbacks.");
-                    mCallbacks.invoke(
-                            callback -> callback.onMessageReceived(connectedDevice.mDeviceId,
-                                    deviceMessage));
-                }
-
-                @Override
-                public void onMessageReceivedError(Exception exception) {
-                    // TODO(b/143879960) Extend the message error from here to continue up the
-                    // chain.
-                    disconnectWithError("Error while receiving message.");
-                }
-
-                @Override
-                public void onDeviceIdReceived(String deviceId) {
-                    setDeviceId(deviceId);
-                }
-            };
-
-    private final Runnable mTimeoutRunnable = new Runnable() {
-        @Override
-        public void run() {
-            logd(TAG, "Timeout period expired without a connection. Restarting advertisement.");
-            mBlePeripheralManager.stopAdvertising(mAdvertiseCallback);
-            connectToDevice(UUID.fromString(mReconnectDeviceId));
-        }
-    };
-}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/AssociationSecureChannel.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/AssociationSecureChannel.java
similarity index 86%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/AssociationSecureChannel.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/AssociationSecureChannel.java
index 349af9e..65a05da 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/AssociationSecureChannel.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/AssociationSecureChannel.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
 import static android.car.encryptionrunner.EncryptionRunnerFactory.EncryptionRunnerType;
 import static android.car.encryptionrunner.EncryptionRunnerFactory.newRunner;
@@ -23,16 +23,17 @@
 import static com.android.car.connecteddevice.util.SafeLog.logd;
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.car.encryptionrunner.EncryptionRunner;
 import android.car.encryptionrunner.HandshakeException;
 import android.car.encryptionrunner.HandshakeMessage;
 import android.car.encryptionrunner.Key;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
 import com.android.car.connecteddevice.util.ByteUtils;
-import com.android.internal.annotations.VisibleForTesting;
 
 import java.security.InvalidParameterException;
 import java.util.Arrays;
@@ -41,7 +42,7 @@
 /**
  * A secure channel established with the association flow.
  */
-class AssociationSecureChannel extends SecureBleChannel {
+public class AssociationSecureChannel extends SecureChannel {
 
     private static final String TAG = "AssociationSecureChannel";
 
@@ -58,11 +59,11 @@
 
     private String mDeviceId;
 
-    AssociationSecureChannel(BleDeviceMessageStream stream, ConnectedDeviceStorage storage) {
+    public AssociationSecureChannel(DeviceMessageStream stream, ConnectedDeviceStorage storage) {
         this(stream, storage, newRunner(EncryptionRunnerType.UKEY2));
     }
 
-    AssociationSecureChannel(BleDeviceMessageStream stream, ConnectedDeviceStorage storage,
+    AssociationSecureChannel(DeviceMessageStream stream, ConnectedDeviceStorage storage,
             EncryptionRunner encryptionRunner) {
         super(stream, encryptionRunner);
         encryptionRunner.setIsReconnect(false);
@@ -98,7 +99,6 @@
         logd(TAG, "Continuing handshake.");
         HandshakeMessage handshakeMessage = getEncryptionRunner().continueHandshake(message);
         mState = handshakeMessage.getHandshakeState();
-
         if (mState != HandshakeState.VERIFICATION_NEEDED) {
             loge(TAG, "processHandshakeInProgress: Encountered unexpected handshake state: "
                     + mState + ".");
@@ -112,10 +112,15 @@
             notifySecureChannelFailure(CHANNEL_ERROR_INVALID_VERIFICATION);
             return;
         }
+        processVerificationCode(code);
+    }
 
+    private void processVerificationCode(@NonNull String code) {
         if (mShowVerificationCodeListener == null) {
-            loge(TAG, "No verification code listener has been set. Unable to display verification "
-                    + "code to user.");
+            loge(TAG,
+                    "No verification code listener has been set. Unable to display "
+                            + "verification "
+                            + "code to user.");
             notifySecureChannelFailure(CHANNEL_ERROR_INVALID_STATE);
             return;
         }
@@ -149,13 +154,13 @@
     }
 
     /** Set the listener that notifies to show verification code. {@code null} to clear. */
-    void setShowVerificationCodeListener(@Nullable ShowVerificationCodeListener listener) {
+    public void setShowVerificationCodeListener(@Nullable ShowVerificationCodeListener listener) {
         mShowVerificationCodeListener = listener;
     }
 
     @VisibleForTesting
     @Nullable
-    ShowVerificationCodeListener getShowVerificationCodeListener() {
+    public ShowVerificationCodeListener getShowVerificationCodeListener() {
         return mShowVerificationCodeListener;
     }
 
@@ -163,7 +168,7 @@
      * Called by the client to notify that the user has accepted a pairing code or any out-of-band
      * confirmation, and send confirmation signals to remote bluetooth device.
      */
-    void notifyOutOfBandAccepted() {
+    public void notifyOutOfBandAccepted() {
         HandshakeMessage message;
         try {
             message = getEncryptionRunner().verifyPin();
@@ -200,8 +205,17 @@
         sendHandshakeMessage(ByteUtils.uuidToBytes(uniqueId), /* isEncrypted= */ true);
     }
 
+    @HandshakeState
+    int getState() {
+        return mState;
+    }
+
+    void setState(@HandshakeState int state) {
+        mState = state;
+    }
+
     /** Listener that will be invoked to display verification code. */
-    interface ShowVerificationCodeListener {
+    public interface ShowVerificationCodeListener {
         /**
          * Invoke when a verification need to be displayed during device association.
          *
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/CarBluetoothManager.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/CarBluetoothManager.java
new file mode 100644
index 0000000..9ca699b
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/CarBluetoothManager.java
@@ -0,0 +1,485 @@
+/*
+ * 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.connecteddevice.connection;
+
+import static com.android.car.connecteddevice.ConnectedDeviceManager.DEVICE_ERROR_INVALID_HANDSHAKE;
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+import static com.android.car.connecteddevice.util.SafeLog.logw;
+
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothGatt;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.car.connecteddevice.AssociationCallback;
+import com.android.car.connecteddevice.model.AssociatedDevice;
+import com.android.car.connecteddevice.oob.OobChannel;
+import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
+import com.android.car.connecteddevice.util.ThreadSafeCallbacks;
+
+import java.util.UUID;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.Executor;
+
+/**
+ * Generic BLE manager for a car that keeps track of connected devices and their associated
+ * callbacks.
+ */
+public abstract class CarBluetoothManager {
+
+    private static final String TAG = "CarBluetoothManager";
+
+    protected final ConnectedDeviceStorage mStorage;
+
+    protected final CopyOnWriteArraySet<ConnectedRemoteDevice> mConnectedDevices =
+            new CopyOnWriteArraySet<>();
+
+    protected final ThreadSafeCallbacks<Callback> mCallbacks = new ThreadSafeCallbacks<>();
+
+    private String mClientDeviceName;
+
+    private String mClientDeviceAddress;
+
+    protected CarBluetoothManager(@NonNull ConnectedDeviceStorage connectedDeviceStorage) {
+        mStorage = connectedDeviceStorage;
+    }
+
+    /** Attempt to connect to device with provided id. */
+    public void connectToDevice(@NonNull UUID deviceId) {
+        for (ConnectedRemoteDevice device : mConnectedDevices) {
+            if (UUID.fromString(device.mDeviceId).equals(deviceId)) {
+                logd(TAG, "Already connected to device " + deviceId + ".");
+                // Already connected to this device. Ignore requests to connect again.
+                return;
+            }
+        }
+        // Clear any previous session before starting a new one.
+        reset();
+        initiateConnectionToDevice(deviceId);
+    }
+
+    /** Start to connect to associated devices */
+    public abstract void initiateConnectionToDevice(@NonNull UUID deviceId);
+
+    /** Start the association with a new device */
+    public abstract void startAssociation(@NonNull String nameForAssociation,
+            @NonNull AssociationCallback callback);
+
+    /** Start the association with a new device using out of band verification code exchange */
+    public abstract void startOutOfBandAssociation(
+            @NonNull String nameForAssociation,
+            @NonNull OobChannel oobChannel,
+            @NonNull AssociationCallback callback);
+
+    /** Disconnect the provided device from this manager. */
+    public abstract void disconnectDevice(@NonNull String deviceId);
+
+    /** Get current {@link AssociationCallback}. */
+    @Nullable
+    public abstract AssociationCallback getAssociationCallback();
+
+    /** Set current {@link AssociationCallback}. */
+    public abstract void setAssociationCallback(@Nullable AssociationCallback callback);
+
+    /** Set the value of the client device name */
+    public void setClientDeviceName(String deviceName) {
+        mClientDeviceName = deviceName;
+    }
+
+    /** Set the value of client device's mac address */
+    public void setClientDeviceAddress(String macAddress) {
+        mClientDeviceAddress = macAddress;
+    }
+
+    /**
+     * Initialize and start the manager.
+     */
+    @CallSuper
+    public void start() {}
+
+    /**
+     * Stop the manager and clean up.
+     */
+    public void stop() {
+        for (ConnectedRemoteDevice device : mConnectedDevices) {
+            if (device.mGatt != null) {
+                device.mGatt.close();
+            }
+        }
+        mConnectedDevices.clear();
+    }
+
+    /**
+     * Stop the association process with any device.
+     */
+    public void stopAssociation() {
+        if (!isAssociating()) {
+            return;
+        }
+        reset();
+    }
+
+    /**
+     * Register a {@link Callback} to be notified on the {@link Executor}.
+     */
+    public void registerCallback(@NonNull Callback callback, @NonNull Executor executor) {
+        mCallbacks.add(callback, executor);
+    }
+
+    /**
+     * Unregister a callback.
+     *
+     * @param callback The {@link Callback} to unregister.
+     */
+    public void unregisterCallback(@NonNull Callback callback) {
+        mCallbacks.remove(callback);
+    }
+
+    /**
+     * Send a message to a connected device.
+     *
+     * @param deviceId Id of connected device.
+     * @param message  {@link DeviceMessage} to send.
+     */
+    public void sendMessage(@NonNull String deviceId, @NonNull DeviceMessage message) {
+        ConnectedRemoteDevice device = getConnectedDevice(deviceId);
+        if (device == null) {
+            logw(TAG, "Attempted to send message to unknown device $deviceId. Ignored.");
+            return;
+        }
+
+        sendMessage(device, message);
+    }
+
+    /**
+     * Send a message to a connected device.
+     *
+     * @param device  The connected {@link ConnectedRemoteDevice}.
+     * @param message {@link DeviceMessage} to send.
+     */
+    public void sendMessage(@NonNull ConnectedRemoteDevice device, @NonNull DeviceMessage message) {
+        String deviceId = device.mDeviceId;
+        if (deviceId == null) {
+            deviceId = "Unidentified device";
+        }
+
+        logd(TAG, "Writing " + message.getMessage().length + " bytes to " + deviceId + ".");
+        device.mSecureChannel.sendClientMessage(message);
+    }
+
+    /** Clean manager status and callbacks. */
+    @CallSuper
+    public void reset() {
+        mClientDeviceAddress = null;
+        mClientDeviceName = null;
+        mConnectedDevices.clear();
+    }
+
+    /** Notify that the user has accepted a pairing code or other out-of-band confirmation. */
+    public void notifyOutOfBandAccepted() {
+        if (getConnectedDevice() == null) {
+            disconnectWithError("Null connected device found when out-of-band confirmation "
+                    + "received.");
+            return;
+        }
+
+        AssociationSecureChannel secureChannel =
+                (AssociationSecureChannel) getConnectedDevice().mSecureChannel;
+        if (secureChannel == null) {
+            disconnectWithError("Null SecureBleChannel found for the current connected device "
+                    + "when out-of-band confirmation received.");
+            return;
+        }
+
+        secureChannel.notifyOutOfBandAccepted();
+    }
+
+    /** Returns the secure channel of current connected device. */
+    @Nullable
+    public SecureChannel getConnectedDeviceChannel() {
+        ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+        if (connectedDevice == null) {
+            return null;
+        }
+
+        return connectedDevice.mSecureChannel;
+    }
+
+    /**
+     * Get the {@link ConnectedRemoteDevice} with matching {@link BluetoothGatt} if available.
+     * Returns
+     * {@code null} if no matches are found.
+     */
+    @Nullable
+    protected final ConnectedRemoteDevice getConnectedDevice(@NonNull BluetoothGatt gatt) {
+        for (ConnectedRemoteDevice device : mConnectedDevices) {
+            if (device.mGatt == gatt) {
+                return device;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Get the {@link ConnectedRemoteDevice} with matching {@link BluetoothDevice} if available.
+     * Returns
+     * {@code null} if no matches are found.
+     */
+    @Nullable
+    protected final ConnectedRemoteDevice getConnectedDevice(@NonNull BluetoothDevice device) {
+        for (ConnectedRemoteDevice connectedDevice : mConnectedDevices) {
+            if (device.equals(connectedDevice.mDevice)) {
+                return connectedDevice;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Get the {@link ConnectedRemoteDevice} with matching device id if available. Returns {@code
+     * null} if no matches are found.
+     */
+    @Nullable
+    protected final ConnectedRemoteDevice getConnectedDevice(@NonNull String deviceId) {
+        for (ConnectedRemoteDevice device : mConnectedDevices) {
+            if (deviceId.equals(device.mDeviceId)) {
+                return device;
+            }
+        }
+
+        return null;
+    }
+
+    /** Add the {@link ConnectedRemoteDevice} that has connected. */
+    protected final void addConnectedDevice(@NonNull ConnectedRemoteDevice device) {
+        mConnectedDevices.add(device);
+    }
+
+    /** Return the number of devices currently connected. */
+    protected final int getConnectedDevicesCount() {
+        return mConnectedDevices.size();
+    }
+
+    /** Remove [@link BleDevice} that has been disconnected. */
+    protected final void removeConnectedDevice(@NonNull ConnectedRemoteDevice device) {
+        mConnectedDevices.remove(device);
+    }
+
+    /** Return [@code true} if the manager is currently in an association process. */
+    protected final boolean isAssociating() {
+        return getAssociationCallback() != null;
+    }
+
+    /**
+     * Set the device id of {@link ConnectedRemoteDevice} and then notify device connected callback.
+     *
+     * @param deviceId The device id received from remote device.
+     */
+    protected final void setDeviceIdAndNotifyCallbacks(@NonNull String deviceId) {
+        logd(TAG, "Setting device id: " + deviceId);
+        ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+        if (connectedDevice == null) {
+            disconnectWithError("Null connected device found when device id received.");
+            return;
+        }
+
+        connectedDevice.mDeviceId = deviceId;
+        mCallbacks.invoke(callback -> callback.onDeviceConnected(deviceId));
+    }
+
+    /** Log error which causes the disconnect with {@link Exception} and notify callbacks. */
+    protected final void disconnectWithError(@NonNull String errorMessage, @Nullable Exception e) {
+        loge(TAG, errorMessage, e);
+        if (isAssociating()) {
+            getAssociationCallback().onAssociationError(DEVICE_ERROR_INVALID_HANDSHAKE);
+        }
+        reset();
+    }
+
+    /** Log error which cause the disconnection and notify callbacks. */
+    protected final void disconnectWithError(@NonNull String errorMessage) {
+        disconnectWithError(errorMessage, null);
+    }
+
+    /** Return the current connected device. */
+    @Nullable
+    protected final ConnectedRemoteDevice getConnectedDevice() {
+        if (mConnectedDevices.isEmpty()) {
+            return null;
+        }
+        // Directly return the next because there will only be one device connected at one time.
+        return mConnectedDevices.iterator().next();
+    }
+
+    protected final SecureChannel.Callback mSecureChannelCallback =
+            new SecureChannel.Callback() {
+                @Override
+                public void onSecureChannelEstablished() {
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
+                        disconnectWithError("Null device id found when secure channel "
+                                + "established.");
+                        return;
+                    }
+                    String deviceId = connectedDevice.mDeviceId;
+                    if (mClientDeviceAddress == null) {
+                        disconnectWithError("Null device address found when secure channel "
+                                + "established.");
+                        return;
+                    }
+
+                    if (isAssociating()) {
+                        logd(TAG, "Secure channel established for un-associated device. Saving "
+                                + "association of that device for current user.");
+                        mStorage.addAssociatedDeviceForActiveUser(
+                                new AssociatedDevice(deviceId, mClientDeviceAddress,
+                                        mClientDeviceName, /* isConnectionEnabled= */ true));
+                        AssociationCallback callback = getAssociationCallback();
+                        if (callback != null) {
+                            callback.onAssociationCompleted(deviceId);
+                            setAssociationCallback(null);
+                        }
+                    }
+                    mCallbacks.invoke(callback -> callback.onSecureChannelEstablished(deviceId));
+                }
+
+                @Override
+                public void onEstablishSecureChannelFailure(int error) {
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
+                        disconnectWithError("Null device id found when secure channel "
+                                + "failed to establish.");
+                        return;
+                    }
+                    String deviceId = connectedDevice.mDeviceId;
+                    mCallbacks.invoke(callback -> callback.onSecureChannelError(deviceId));
+
+                    if (isAssociating()) {
+                        getAssociationCallback().onAssociationError(error);
+                    }
+
+                    disconnectWithError("Error while establishing secure connection.");
+                }
+
+                @Override
+                public void onMessageReceived(DeviceMessage deviceMessage) {
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
+                        disconnectWithError("Null device id found when message received.");
+                        return;
+                    }
+
+                    logd(TAG, "Received new message from " + connectedDevice.mDeviceId
+                            + " with " + deviceMessage.getMessage().length + " bytes in its "
+                            + "payload. Notifying " + mCallbacks.size() + " callbacks.");
+                    mCallbacks.invoke(
+                            callback -> callback.onMessageReceived(connectedDevice.mDeviceId,
+                                    deviceMessage));
+                }
+
+                @Override
+                public void onMessageReceivedError(Exception exception) {
+                    // TODO(b/143879960) Extend the message error from here to continue up the
+                    // chain.
+                    disconnectWithError("Error while receiving message.");
+                }
+
+                @Override
+                public void onDeviceIdReceived(String deviceId) {
+                    setDeviceIdAndNotifyCallbacks(deviceId);
+                }
+            };
+
+
+    /** State for a connected device. */
+    public enum ConnectedDeviceState {
+        CONNECTING,
+        PENDING_VERIFICATION,
+        CONNECTED,
+        UNKNOWN
+    }
+
+    /**
+     * Container class to hold information about a connected device.
+     */
+    public static class ConnectedRemoteDevice {
+        @NonNull
+        public BluetoothDevice mDevice;
+        @Nullable
+        public BluetoothGatt mGatt;
+        @NonNull
+        public ConnectedDeviceState mState;
+        @Nullable
+        public String mDeviceId;
+        @Nullable
+        public SecureChannel mSecureChannel;
+
+        public ConnectedRemoteDevice(@NonNull BluetoothDevice device,
+                @Nullable BluetoothGatt gatt) {
+            mDevice = device;
+            mGatt = gatt;
+            mState = ConnectedDeviceState.UNKNOWN;
+        }
+    }
+
+    /**
+     * Callback for triggered events from {@link CarBluetoothManager}.
+     */
+    public interface Callback {
+        /**
+         * Triggered when device is connected and device id retrieved. Device is now ready to
+         * receive messages.
+         *
+         * @param deviceId Id of device that has connected.
+         */
+        void onDeviceConnected(@NonNull String deviceId);
+
+        /**
+         * Triggered when device is disconnected.
+         *
+         * @param deviceId Id of device that has disconnected.
+         */
+        void onDeviceDisconnected(@NonNull String deviceId);
+
+        /**
+         * Triggered when device has established encryption for secure communication.
+         *
+         * @param deviceId Id of device that has established encryption.
+         */
+        void onSecureChannelEstablished(@NonNull String deviceId);
+
+        /**
+         * Triggered when a new message is received.
+         *
+         * @param deviceId Id of the device that sent the message.
+         * @param message  {@link DeviceMessage} received.
+         */
+        void onMessageReceived(@NonNull String deviceId, @NonNull DeviceMessage message);
+
+        /**
+         * Triggered when an error when establishing the secure channel.
+         *
+         * @param deviceId Id of the device that experienced the error.
+         */
+        void onSecureChannelError(@NonNull String deviceId);
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/DeviceMessage.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/DeviceMessage.java
similarity index 89%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/DeviceMessage.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/DeviceMessage.java
index 9d3ac48..128decb 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/DeviceMessage.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/DeviceMessage.java
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
-import static com.android.car.connecteddevice.BleStreamProtos.BleDeviceMessageProto.BleDeviceMessage;
+import static com.android.car.connecteddevice.StreamProtos.DeviceMessageProto.Message;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 
 import java.util.Arrays;
 import java.util.Objects;
 import java.util.UUID;
 
-/** Holds the needed data from a {@link BleDeviceMessage}. */
+/** Holds the needed data from a {@link Message}. */
 public class DeviceMessage {
 
     private static final String TAG = "DeviceMessage";
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/DeviceMessageStream.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/DeviceMessageStream.java
new file mode 100644
index 0000000..c23618a
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/DeviceMessageStream.java
@@ -0,0 +1,362 @@
+/*
+ * 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.connecteddevice.connection;
+
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+import static com.android.car.connecteddevice.util.SafeLog.logw;
+
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.connecteddevice.StreamProtos.DeviceMessageProto.Message;
+import com.android.car.connecteddevice.StreamProtos.OperationProto.OperationType;
+import com.android.car.connecteddevice.StreamProtos.PacketProto.Packet;
+import com.android.car.connecteddevice.StreamProtos.VersionExchangeProto.VersionExchange;
+import com.android.car.connecteddevice.util.ByteUtils;
+import com.android.car.protobuf.ByteString;
+import com.android.car.protobuf.InvalidProtocolBufferException;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Abstract class which includes common logic of different types of {@link DeviceMessageStream}.
+ */
+public abstract class DeviceMessageStream {
+
+    private static final String TAG = "DeviceMessageStream";
+
+    // Only version 2 of the messaging and version 2 of the security supported.
+    @VisibleForTesting
+    public static final int MESSAGING_VERSION = 2;
+    @VisibleForTesting
+    public static final int SECURITY_VERSION = 2;
+
+    private final ArrayDeque<Packet> mPacketQueue = new ArrayDeque<>();
+
+    private final Map<Integer, ByteArrayOutputStream> mPendingData = new HashMap<>();
+
+    // messageId -> nextExpectedPacketNumber
+    private final Map<Integer, Integer> mPendingPacketNumber = new HashMap<>();
+
+    private final MessageIdGenerator mMessageIdGenerator = new MessageIdGenerator();
+
+    private final AtomicBoolean mIsVersionExchanged = new AtomicBoolean(false);
+
+    private final AtomicBoolean mIsSendingInProgress = new AtomicBoolean(false);
+
+    private int mMaxWriteSize;
+
+    /** Listener which will be notified when there is new {@link DeviceMessage} received. */
+    private MessageReceivedListener mMessageReceivedListener;
+
+    /** Listener which will be notified when there is error parsing the received message. */
+    private MessageReceivedErrorListener mMessageReceivedErrorListener;
+
+    public DeviceMessageStream(int defaultMaxWriteSize) {
+        mMaxWriteSize = defaultMaxWriteSize;
+    }
+
+    /**
+     * Send data to the connected device. Note: {@link #sendCompleted()} must be called when the
+     * bytes have successfully been sent to indicate the stream is ready to send more data.
+     */
+    protected abstract void send(byte[] data);
+
+    /**
+     * Set the given listener to be notified when a new message was received from the client. If
+     * listener is {@code null}, clear.
+     */
+    public final void setMessageReceivedListener(@Nullable MessageReceivedListener listener) {
+        mMessageReceivedListener = listener;
+    }
+
+    /**
+     * Set the given listener to be notified when there was an error during receiving message from
+     * the client. If listener is {@code null}, clear.
+     */
+    public final void setMessageReceivedErrorListener(
+            @Nullable MessageReceivedErrorListener listener) {
+        mMessageReceivedErrorListener = listener;
+    }
+
+    /**
+     * Notify the {@code mMessageReceivedListener} about the message received if it is  not {@code
+     * null}.
+     *
+     * @param deviceMessage The message received.
+     * @param operationType The operation type of the message.
+     */
+    protected final void notifyMessageReceivedListener(@NonNull DeviceMessage deviceMessage,
+            OperationType operationType) {
+        if (mMessageReceivedListener != null) {
+            mMessageReceivedListener.onMessageReceived(deviceMessage, operationType);
+        }
+    }
+
+    /**
+     * Notify the {@code mMessageReceivedErrorListener} about the message received if it is  not
+     * {@code null}.
+     *
+     * @param e The exception happened when parsing the received message.
+     */
+    protected final void notifyMessageReceivedErrorListener(Exception e) {
+        if (mMessageReceivedErrorListener != null) {
+            mMessageReceivedErrorListener.onMessageReceivedError(e);
+        }
+    }
+
+    /**
+     * Writes the given message to the write characteristic of this stream with operation type
+     * {@code CLIENT_MESSAGE}.
+     *
+     * This method will handle the chunking of messages based on the max write size.
+     *
+     * @param deviceMessage The data object contains recipient, isPayloadEncrypted and message.
+     */
+    public final void writeMessage(@NonNull DeviceMessage deviceMessage) {
+        writeMessage(deviceMessage, OperationType.CLIENT_MESSAGE);
+    }
+
+    /**
+     * Send {@link DeviceMessage} to remote connected devices.
+     *
+     * @param deviceMessage The message which need to be sent
+     * @param operationType The operation type of current message
+     */
+    public final void writeMessage(@NonNull DeviceMessage deviceMessage,
+            OperationType operationType) {
+        Message.Builder builder = Message.newBuilder()
+                .setOperation(operationType)
+                .setIsPayloadEncrypted(deviceMessage.isMessageEncrypted())
+                .setPayload(ByteString.copyFrom(deviceMessage.getMessage()));
+
+        UUID recipient = deviceMessage.getRecipient();
+        if (recipient != null) {
+            builder.setRecipient(ByteString.copyFrom(ByteUtils.uuidToBytes(recipient)));
+        }
+
+        Message message = builder.build();
+        byte[] rawBytes = message.toByteArray();
+        List<Packet> packets;
+        try {
+            packets = PacketFactory.makePackets(rawBytes, mMessageIdGenerator.next(),
+                    mMaxWriteSize);
+        } catch (PacketFactoryException e) {
+            loge(TAG, "Error while creating message packets.", e);
+            return;
+        }
+        mPacketQueue.addAll(packets);
+        writeNextMessageInQueue();
+    }
+
+    private void writeNextMessageInQueue() {
+        if (mPacketQueue.isEmpty()) {
+            logd(TAG, "No more packets to send.");
+            return;
+        }
+        boolean isLockAcquired = mIsSendingInProgress.compareAndSet(false, true);
+        if (!isLockAcquired) {
+            logd(TAG, "Unable to send packet at this time.");
+            return;
+        }
+
+        Packet packet = mPacketQueue.remove();
+        logd(TAG, "Writing packet " + packet.getPacketNumber() + " of "
+                + packet.getTotalPackets() + " for " + packet.getMessageId() + ".");
+        send(packet.toByteArray());
+    }
+
+    /** Process incoming data from stream. */
+    protected final void onDataReceived(byte[] data) {
+        if (!hasVersionBeenExchanged()) {
+            processVersionExchange(data);
+            return;
+        }
+
+        Packet packet;
+        try {
+            packet = Packet.parseFrom(data);
+        } catch (InvalidProtocolBufferException e) {
+            loge(TAG, "Can not parse packet from client.", e);
+            notifyMessageReceivedErrorListener(e);
+            return;
+        }
+        processPacket(packet);
+    }
+
+    protected final void processPacket(@NonNull Packet packet) {
+        int messageId = packet.getMessageId();
+        int packetNumber = packet.getPacketNumber();
+        int expectedPacket = mPendingPacketNumber.getOrDefault(messageId, 1);
+        if (packetNumber == expectedPacket - 1) {
+            logw(TAG, "Received duplicate packet " + packet.getPacketNumber() + " for message "
+                    + messageId + ". Ignoring.");
+            return;
+        }
+        if (packetNumber != expectedPacket) {
+            loge(TAG, "Received unexpected packet " + packetNumber + " for message "
+                    + messageId + ".");
+            notifyMessageReceivedErrorListener(
+                    new IllegalStateException("Packet received out of order."));
+            return;
+        }
+        mPendingPacketNumber.put(messageId, packetNumber + 1);
+
+        ByteArrayOutputStream currentPayloadStream =
+                mPendingData.getOrDefault(messageId, new ByteArrayOutputStream());
+        mPendingData.putIfAbsent(messageId, currentPayloadStream);
+
+        byte[] payload = packet.getPayload().toByteArray();
+        try {
+            currentPayloadStream.write(payload);
+        } catch (IOException e) {
+            loge(TAG, "Error writing packet to stream.", e);
+            notifyMessageReceivedErrorListener(e);
+            return;
+        }
+        logd(TAG, "Parsed packet " + packet.getPacketNumber() + " of "
+                + packet.getTotalPackets() + " for message " + messageId + ". Writing "
+                + payload.length + ".");
+
+        if (packet.getPacketNumber() != packet.getTotalPackets()) {
+            return;
+        }
+
+        byte[] messageBytes = currentPayloadStream.toByteArray();
+        mPendingData.remove(messageId);
+
+        logd(TAG, "Received complete device message " + messageId + " of " + messageBytes.length
+                + " bytes.");
+        Message message;
+        try {
+            message = Message.parseFrom(messageBytes);
+        } catch (InvalidProtocolBufferException e) {
+            loge(TAG, "Cannot parse device message from client.", e);
+            notifyMessageReceivedErrorListener(e);
+            return;
+        }
+
+        DeviceMessage deviceMessage = new DeviceMessage(
+                ByteUtils.bytesToUUID(message.getRecipient().toByteArray()),
+                message.getIsPayloadEncrypted(), message.getPayload().toByteArray());
+        notifyMessageReceivedListener(deviceMessage, message.getOperation());
+    }
+
+    /** The maximum amount of bytes that can be written in a single packet. */
+    public final void setMaxWriteSize(@IntRange(from = 1) int maxWriteSize) {
+        if (maxWriteSize <= 0) {
+            return;
+        }
+        mMaxWriteSize = maxWriteSize;
+    }
+
+    private boolean hasVersionBeenExchanged() {
+        return mIsVersionExchanged.get();
+    }
+
+    /** Indicate current send operation has completed. */
+    @VisibleForTesting
+    public final void sendCompleted() {
+        mIsSendingInProgress.set(false);
+        writeNextMessageInQueue();
+    }
+
+    private void processVersionExchange(@NonNull byte[] value) {
+        VersionExchange versionExchange;
+        try {
+            versionExchange = VersionExchange.parseFrom(value);
+        } catch (InvalidProtocolBufferException e) {
+            loge(TAG, "Could not parse version exchange message", e);
+            notifyMessageReceivedErrorListener(e);
+
+            return;
+        }
+        int minMessagingVersion = versionExchange.getMinSupportedMessagingVersion();
+        int maxMessagingVersion = versionExchange.getMaxSupportedMessagingVersion();
+        int minSecurityVersion = versionExchange.getMinSupportedSecurityVersion();
+        int maxSecurityVersion = versionExchange.getMaxSupportedSecurityVersion();
+        if (minMessagingVersion > MESSAGING_VERSION || maxMessagingVersion < MESSAGING_VERSION
+                || minSecurityVersion > SECURITY_VERSION || maxSecurityVersion < SECURITY_VERSION) {
+            loge(TAG, "Unsupported message version for min " + minMessagingVersion + " and max "
+                    + maxMessagingVersion + " or security version for " + minSecurityVersion
+                    + " and max " + maxSecurityVersion + ".");
+            notifyMessageReceivedErrorListener(new IllegalStateException("Unsupported version."));
+            return;
+        }
+
+        VersionExchange headunitVersion = VersionExchange.newBuilder()
+                .setMinSupportedMessagingVersion(MESSAGING_VERSION)
+                .setMaxSupportedMessagingVersion(MESSAGING_VERSION)
+                .setMinSupportedSecurityVersion(SECURITY_VERSION)
+                .setMaxSupportedSecurityVersion(SECURITY_VERSION)
+                .build();
+
+        send(headunitVersion.toByteArray());
+        mIsVersionExchanged.set(true);
+        logd(TAG, "Sent supported version to the phone.");
+    }
+
+
+    /** A generator of unique IDs for messages. */
+    private static class MessageIdGenerator {
+        private final AtomicInteger mMessageId = new AtomicInteger(0);
+
+        int next() {
+            int current = mMessageId.getAndIncrement();
+            mMessageId.compareAndSet(Integer.MAX_VALUE, 0);
+            return current;
+        }
+    }
+
+    /**
+     * Listener to be invoked when a complete message is received from the client.
+     */
+    public interface MessageReceivedListener {
+
+        /**
+         * Called when a complete message is received from the client.
+         *
+         * @param deviceMessage The message received from the client.
+         * @param operationType The {@link OperationType} of the received message.
+         */
+        void onMessageReceived(@NonNull DeviceMessage deviceMessage,
+                OperationType operationType);
+    }
+
+    /**
+     * Listener to be invoked when there was an error during receiving message from the client.
+     */
+    public interface MessageReceivedErrorListener {
+        /**
+         * Called when there was an error during receiving message from the client.
+         *
+         * @param exception The error.
+         */
+        void onMessageReceivedError(@NonNull Exception exception);
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/OobAssociationSecureChannel.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/OobAssociationSecureChannel.java
new file mode 100644
index 0000000..c6b0a7d
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/OobAssociationSecureChannel.java
@@ -0,0 +1,132 @@
+/*
+ * 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.connecteddevice.connection;
+
+import static android.car.encryptionrunner.HandshakeMessage.HandshakeState;
+
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+
+import android.car.encryptionrunner.EncryptionRunner;
+import android.car.encryptionrunner.EncryptionRunnerFactory;
+import android.car.encryptionrunner.HandshakeException;
+import android.car.encryptionrunner.HandshakeMessage;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.connecteddevice.oob.OobConnectionManager;
+import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
+
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.util.Arrays;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.IllegalBlockSizeException;
+
+/**
+ * A secure channel established with the association flow with an out-of-band verification.
+ */
+public class OobAssociationSecureChannel extends AssociationSecureChannel {
+
+    private static final String TAG = "OobAssociationSecureChannel";
+
+    private final OobConnectionManager mOobConnectionManager;
+
+    private byte[] mOobCode;
+
+    public OobAssociationSecureChannel(
+            DeviceMessageStream stream,
+            ConnectedDeviceStorage storage,
+            OobConnectionManager oobConnectionManager) {
+        this(stream, storage, oobConnectionManager, EncryptionRunnerFactory.newRunner(
+                EncryptionRunnerFactory.EncryptionRunnerType.OOB_UKEY2));
+    }
+
+    OobAssociationSecureChannel(
+            DeviceMessageStream stream,
+            ConnectedDeviceStorage storage,
+            OobConnectionManager oobConnectionManager,
+            EncryptionRunner encryptionRunner) {
+        super(stream, storage, encryptionRunner);
+        mOobConnectionManager = oobConnectionManager;
+    }
+
+    @Override
+    void processHandshake(@NonNull byte[] message) throws HandshakeException {
+        switch (getState()) {
+            case HandshakeState.IN_PROGRESS:
+                processHandshakeInProgress(message);
+                break;
+            case HandshakeState.OOB_VERIFICATION_NEEDED:
+                processHandshakeOobVerificationNeeded(message);
+                break;
+            default:
+                super.processHandshake(message);
+        }
+    }
+
+    private void processHandshakeInProgress(@NonNull byte[] message) throws HandshakeException {
+        HandshakeMessage handshakeMessage = getEncryptionRunner().continueHandshake(message);
+        setState(handshakeMessage.getHandshakeState());
+        int state = getState();
+        if (state != HandshakeState.OOB_VERIFICATION_NEEDED) {
+            loge(TAG, "processHandshakeInProgress: Encountered unexpected handshake state: "
+                    + state + ".");
+            notifySecureChannelFailure(CHANNEL_ERROR_INVALID_STATE);
+            return;
+        }
+
+        mOobCode = handshakeMessage.getOobVerificationCode();
+        if (mOobCode == null) {
+            loge(TAG, "Unable to get out of band verification code.");
+            notifySecureChannelFailure(CHANNEL_ERROR_INVALID_VERIFICATION);
+            return;
+        }
+
+        byte[] encryptedCode;
+        try {
+            encryptedCode = mOobConnectionManager.encryptVerificationCode(mOobCode);
+        } catch (InvalidKeyException | InvalidAlgorithmParameterException
+                | IllegalBlockSizeException | BadPaddingException e) {
+            loge(TAG, "Encryption failed for verification code exchange.", e);
+            notifySecureChannelFailure(CHANNEL_ERROR_INVALID_HANDSHAKE);
+            return;
+        }
+
+        sendHandshakeMessage(encryptedCode, /* isEncrypted= */ false);
+    }
+
+    private void processHandshakeOobVerificationNeeded(@NonNull byte[] message) {
+        byte[] decryptedCode;
+        try {
+            decryptedCode = mOobConnectionManager.decryptVerificationCode(message);
+        } catch (InvalidKeyException | InvalidAlgorithmParameterException
+                | IllegalBlockSizeException | BadPaddingException e) {
+            loge(TAG, "Decryption failed for verification code exchange", e);
+            notifySecureChannelFailure(CHANNEL_ERROR_INVALID_HANDSHAKE);
+            return;
+        }
+
+        if (!Arrays.equals(mOobCode, decryptedCode)) {
+            loge(TAG, "Exchanged verification codes do not match. Aborting secure channel.");
+            notifySecureChannelFailure(CHANNEL_ERROR_INVALID_VERIFICATION);
+            return;
+        }
+
+        notifyOutOfBandAccepted();
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/BlePacketFactory.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/PacketFactory.java
similarity index 79%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/BlePacketFactory.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/PacketFactory.java
index a0d0bb1..5036a18 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/BlePacketFactory.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/PacketFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -13,23 +13,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 
-import com.android.car.connecteddevice.BleStreamProtos.BlePacketProto.BlePacket;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.connecteddevice.StreamProtos.PacketProto.Packet;
 import com.android.car.protobuf.ByteString;
-import com.android.internal.annotations.VisibleForTesting;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 /**
- * Factory for creating {@link BlePacket} protos.
+ * Factory for creating {@link Packet} protos.
  */
-class BlePacketFactory {
-    private static final String TAG = "BlePacketFactory";
+class PacketFactory {
+    private static final String TAG = "PacketFactory";
 
     /**
      * The size in bytes of a {@code fixed32} field in the proto.
@@ -39,7 +40,7 @@
     /**
      * The bytes needed to encode the field number in the proto.
      *
-     * <p>Since the {@link BlePacket} only has 4 fields, it will only take 1 additional byte to
+     * <p>Since the {@link Packet} only has 4 fields, it will only take 1 additional byte to
      * encode.
      */
     private static final int FIELD_NUMBER_ENCODING_SIZE = 1;
@@ -53,15 +54,15 @@
     /**
      * Split given data if necessary to fit within the given {@code maxSize}.
      *
-     * @param payload The payload to potentially split across multiple {@link BlePacket}s.
+     * @param payload The payload to potentially split across multiple {@link Packet}s.
      * @param messageId The unique id for identifying message.
      * @param maxSize The maximum size of each chunk.
-     * @return A list of {@link BlePacket}s.
-     * @throws BlePacketFactoryException if an error occurred during the splitting of data.
+     * @return A list of {@link Packet}s.
+     * @throws PacketFactoryException if an error occurred during the splitting of data.
      */
-    static List<BlePacket> makeBlePackets(byte[] payload, int messageId, int maxSize)
-            throws BlePacketFactoryException {
-        List<BlePacket> blePackets = new ArrayList<>();
+    static List<Packet> makePackets(byte[] payload, int messageId, int maxSize)
+            throws PacketFactoryException {
+        List<Packet> blePackets = new ArrayList<>();
         int payloadSize = payload.length;
         int totalPackets = getTotalPacketNumber(messageId, payloadSize, maxSize);
         int maxPayloadSize = maxSize
@@ -70,7 +71,7 @@
         int start = 0;
         int end = Math.min(payloadSize, maxPayloadSize);
         for (int packetNum = 1; packetNum <= totalPackets; packetNum++) {
-            blePackets.add(BlePacket.newBuilder()
+            blePackets.add(Packet.newBuilder()
                     .setPacketNumber(packetNum)
                     .setTotalPackets(totalPackets)
                     .setMessageId(messageId)
@@ -83,7 +84,7 @@
     }
 
     /**
-     * Compute the header size for the {@link BlePacket} proto in bytes. This method assumes that
+     * Compute the header size for the {@link Packet} proto in bytes. This method assumes that
      * the proto contains a payload.
      */
     @VisibleForTesting
@@ -99,7 +100,7 @@
      */
     @VisibleForTesting
     static int getTotalPacketNumber(int messageId, int payloadSize, int maxSize)
-            throws BlePacketFactoryException {
+            throws PacketFactoryException {
         int headerSizeWithoutTotalPackets = FIXED_32_SIZE + FIELD_NUMBER_ENCODING_SIZE
                 + getEncodedSize(messageId) + FIELD_NUMBER_ENCODING_SIZE
                 + getEncodedSize(Math.min(payloadSize, maxSize)) + FIELD_NUMBER_ENCODING_SIZE;
@@ -109,7 +110,7 @@
                     + FIELD_NUMBER_ENCODING_SIZE;
             int maxPayloadSize = maxSize - packetHeaderSize;
             if (maxPayloadSize < 0) {
-                throw new BlePacketFactoryException("Packet header size too large.");
+                throw new PacketFactoryException("Packet header size too large.");
             }
             int totalPackets = (int) Math.ceil(payloadSize / (double) maxPayloadSize);
             if (getEncodedSize(totalPackets) == value) {
@@ -119,7 +120,7 @@
 
         loge(TAG, "Cannot get valid total packet number for message: messageId: "
                 + messageId + ", payloadSize: " + payloadSize + ", maxSize: " + maxSize);
-        throw new BlePacketFactoryException("No valid total packet number.");
+        throw new PacketFactoryException("No valid total packet number.");
     }
 
     /**
@@ -151,5 +152,5 @@
         return 5;
     }
 
-    private BlePacketFactory() {}
+    private PacketFactory() {}
 }
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/BlePacketFactoryException.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/PacketFactoryException.java
similarity index 70%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/BlePacketFactoryException.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/PacketFactoryException.java
index 690ce28..41c11fc 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/BlePacketFactoryException.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/PacketFactoryException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -13,13 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
 /**
- * Exception for signaling {@link BlePacketFactory} errors.
+ * Exception for signaling {@link PacketFactory} errors.
  */
-class BlePacketFactoryException extends Exception {
-    BlePacketFactoryException(String message) {
+class PacketFactoryException extends Exception {
+    PacketFactoryException(String message) {
         super(message);
     }
 }
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/ReconnectSecureChannel.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/ReconnectSecureChannel.java
similarity index 89%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/ReconnectSecureChannel.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/ReconnectSecureChannel.java
index 56eff5c..71c879a 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/ReconnectSecureChannel.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/ReconnectSecureChannel.java
@@ -14,13 +14,11 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
 import static com.android.car.connecteddevice.util.SafeLog.logd;
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.car.encryptionrunner.EncryptionRunner;
 import android.car.encryptionrunner.EncryptionRunnerFactory;
 import android.car.encryptionrunner.HandshakeException;
@@ -28,6 +26,9 @@
 import android.car.encryptionrunner.HandshakeMessage.HandshakeState;
 import android.car.encryptionrunner.Key;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
 import com.android.car.connecteddevice.util.ByteUtils;
 
@@ -37,7 +38,7 @@
 /**
  * A secure channel established with the reconnection flow.
  */
-class ReconnectSecureChannel extends SecureBleChannel {
+public class ReconnectSecureChannel extends SecureChannel {
 
     private static final String TAG = "ReconnectSecureChannel";
 
@@ -55,17 +56,23 @@
     /**
      * Create a new secure reconnection channel.
      *
-     * @param stream The {@link BleDeviceMessageStream} for communication with the device.
+     * @param stream The {@link DeviceMessageStream} for communication with the device.
      * @param storage {@link ConnectedDeviceStorage} for secure storage.
      * @param deviceId Id of the device being reconnected.
-     * @param expectedChallengeResponse Expected response to challenge issued in reconnect.
+     * @param expectedChallengeResponse Expected response to challenge issued in reconnect. Should
+     *                                  pass {@code null} when device verification is not needed
+     *                                  during the reconnection process.
      */
-    ReconnectSecureChannel(@NonNull BleDeviceMessageStream stream,
+    public ReconnectSecureChannel(@NonNull DeviceMessageStream stream,
             @NonNull ConnectedDeviceStorage storage, @NonNull String deviceId,
-            @NonNull byte[] expectedChallengeResponse) {
+            @Nullable byte[] expectedChallengeResponse) {
         super(stream, newReconnectRunner());
         mStorage = storage;
         mDeviceId = deviceId;
+        if (expectedChallengeResponse == null) {
+            // Skip the device verification step for spp reconnection
+            mHasVerifiedDevice.set(true);
+        }
         mExpectedChallengeResponse = expectedChallengeResponse;
     }
 
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/SecureBleChannel.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/SecureChannel.java
similarity index 87%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/SecureBleChannel.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/SecureChannel.java
index 858d7c8..e6ad290 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/SecureBleChannel.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/SecureChannel.java
@@ -14,20 +14,21 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
 import static com.android.car.connecteddevice.util.SafeLog.logd;
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.car.encryptionrunner.EncryptionRunner;
 import android.car.encryptionrunner.HandshakeException;
 import android.car.encryptionrunner.Key;
 
-import com.android.car.connecteddevice.BleStreamProtos.BleOperationProto.OperationType;
-import com.android.internal.annotations.VisibleForTesting;
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.connecteddevice.StreamProtos.OperationProto.OperationType;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -36,25 +37,23 @@
 import java.util.function.Consumer;
 
 /**
- * Establishes a secure channel with {@link EncryptionRunner} over {@link BleDeviceMessageStream} as
+ * Establishes a secure channel with {@link EncryptionRunner} over {@link DeviceMessageStream} as
  * server side, sends and receives messages securely after the secure channel has been established.
  */
-abstract class SecureBleChannel {
+public abstract class SecureChannel {
 
-    private static final String TAG = "SecureBleChannel";
+    private static final String TAG = "SecureChannel";
 
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef(prefix = { "CHANNEL_ERROR" },
-            value = {
-                    CHANNEL_ERROR_INVALID_HANDSHAKE,
-                    CHANNEL_ERROR_INVALID_MSG,
-                    CHANNEL_ERROR_INVALID_DEVICE_ID,
-                    CHANNEL_ERROR_INVALID_VERIFICATION,
-                    CHANNEL_ERROR_INVALID_STATE,
-                    CHANNEL_ERROR_INVALID_ENCRYPTION_KEY,
-                    CHANNEL_ERROR_STORAGE_ERROR
-            }
-    )
+    @IntDef({
+            CHANNEL_ERROR_INVALID_HANDSHAKE,
+            CHANNEL_ERROR_INVALID_MSG,
+            CHANNEL_ERROR_INVALID_DEVICE_ID,
+            CHANNEL_ERROR_INVALID_VERIFICATION,
+            CHANNEL_ERROR_INVALID_STATE,
+            CHANNEL_ERROR_INVALID_ENCRYPTION_KEY,
+            CHANNEL_ERROR_STORAGE_ERROR
+    })
     @interface ChannelError { }
 
     /** Indicates an error during a Handshake of EncryptionRunner. */
@@ -73,7 +72,7 @@
     static final int CHANNEL_ERROR_STORAGE_ERROR = 6;
 
 
-    private final BleDeviceMessageStream mStream;
+    private final DeviceMessageStream mStream;
 
     private final EncryptionRunner mEncryptionRunner;
 
@@ -81,7 +80,7 @@
 
     private Callback mCallback;
 
-    SecureBleChannel(@NonNull BleDeviceMessageStream stream,
+    SecureChannel(@NonNull DeviceMessageStream stream,
             @NonNull EncryptionRunner encryptionRunner) {
         mStream = stream;
         mEncryptionRunner = encryptionRunner;
@@ -119,7 +118,7 @@
      *
      * @param deviceMessage The {@link DeviceMessage} to send.
      */
-    void sendClientMessage(@NonNull DeviceMessage deviceMessage)
+    public void sendClientMessage(@NonNull DeviceMessage deviceMessage)
             throws IllegalStateException {
         if (deviceMessage.isMessageEncrypted()) {
             encryptMessage(deviceMessage);
@@ -139,12 +138,12 @@
 
     /** Get the BLE stream backing this channel. */
     @NonNull
-    BleDeviceMessageStream getStream() {
+    public DeviceMessageStream getStream() {
         return mStream;
     }
 
     /** Register a callback that notifies secure channel events. */
-    void registerCallback(Callback callback) {
+    public void registerCallback(Callback callback) {
         mCallback = callback;
     }
 
@@ -157,7 +156,7 @@
 
     @VisibleForTesting
     @Nullable
-    Callback getCallback() {
+    public Callback getCallback() {
         return mCallback;
     }
 
@@ -252,7 +251,7 @@
      * Callbacks that will be invoked during establishing secure channel, sending and receiving
      * messages securely.
      */
-    interface Callback {
+    public interface Callback {
         /**
          * Invoked when secure channel has been established successfully.
          */
@@ -264,7 +263,7 @@
          *
          * @param error The failure indication.
          */
-        default void onEstablishSecureChannelFailure(@SecureBleChannel.ChannelError int error) { }
+        default void onEstablishSecureChannelFailure(@SecureChannel.ChannelError int error) { }
 
         /**
          * Invoked when a complete message is received securely from the client and decrypted.
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/BleCentralManager.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BleCentralManager.java
similarity index 97%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/BleCentralManager.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BleCentralManager.java
index ca83a05..7a663f7 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/BleCentralManager.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BleCentralManager.java
@@ -14,15 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection.ble;
 
 import static com.android.car.connecteddevice.util.SafeLog.logd;
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 import static com.android.car.connecteddevice.util.SafeLog.logw;
 
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.le.BluetoothLeScanner;
 import android.bluetooth.le.ScanCallback;
@@ -33,6 +30,10 @@
 import android.content.pm.PackageManager;
 import android.os.Handler;
 
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.List;
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BleDeviceMessageStream.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BleDeviceMessageStream.java
new file mode 100644
index 0000000..864475f
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BleDeviceMessageStream.java
@@ -0,0 +1,110 @@
+/*
+ * 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.connecteddevice.connection.ble;
+
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.logw;
+
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.os.Handler;
+import android.os.Looper;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.connecteddevice.connection.DeviceMessageStream;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+/** BLE message stream to a device. */
+public class BleDeviceMessageStream extends DeviceMessageStream {
+
+    private static final String TAG = "BleDeviceMessageStream";
+
+    /*
+     * During bandwidth testing, it was discovered that allowing the stream to send as fast as it
+     * can blocked outgoing notifications from being received by the connected device. Adding a
+     * throttle to the outgoing messages alleviated this block and allowed both sides to
+     * send/receive in parallel successfully.
+     */
+    private static final long THROTTLE_DEFAULT_MS = 10L;
+    private static final long THROTTLE_WAIT_MS = 75L;
+
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+    private final AtomicLong mThrottleDelay = new AtomicLong(THROTTLE_DEFAULT_MS);
+
+    private final BlePeripheralManager mBlePeripheralManager;
+
+    private final BluetoothDevice mDevice;
+
+    private final BluetoothGattCharacteristic mWriteCharacteristic;
+
+    private final BluetoothGattCharacteristic mReadCharacteristic;
+
+    BleDeviceMessageStream(@NonNull BlePeripheralManager blePeripheralManager,
+            @NonNull BluetoothDevice device,
+            @NonNull BluetoothGattCharacteristic writeCharacteristic,
+            @NonNull BluetoothGattCharacteristic readCharacteristic,
+            int defaultMaxWriteSize) {
+        super(defaultMaxWriteSize);
+        mBlePeripheralManager = blePeripheralManager;
+        mDevice = device;
+        mWriteCharacteristic = writeCharacteristic;
+        mReadCharacteristic = readCharacteristic;
+        mBlePeripheralManager.addOnCharacteristicWriteListener(this::onCharacteristicWrite);
+        mBlePeripheralManager.addOnCharacteristicReadListener(this::onCharacteristicRead);
+    }
+
+    @Override
+    protected void send(byte[] data) {
+        mWriteCharacteristic.setValue(data);
+        mBlePeripheralManager.notifyCharacteristicChanged(mDevice, mWriteCharacteristic,
+                /* confirm= */ false);
+    }
+
+    private void onCharacteristicRead(@NonNull BluetoothDevice device) {
+        if (!mDevice.equals(device)) {
+            logw(TAG, "Received a read notification from a device (" + device.getAddress()
+                    + ") that is not the expected device (" + mDevice.getAddress() + ") registered "
+                    + "to this stream. Ignoring.");
+            return;
+        }
+
+        logd(TAG, "Releasing lock on characteristic.");
+        sendCompleted();
+    }
+
+    private void onCharacteristicWrite(@NonNull BluetoothDevice device,
+            @NonNull BluetoothGattCharacteristic characteristic, @NonNull byte[] value) {
+        logd(TAG, "Received a message from a device (" + device.getAddress() + ").");
+        if (!mDevice.equals(device)) {
+            logw(TAG, "Received a message from a device (" + device.getAddress() + ") that is not "
+                    + "the expected device (" + mDevice.getAddress() + ") registered to this "
+                    + "stream. Ignoring.");
+            return;
+        }
+
+        if (!characteristic.getUuid().equals(mReadCharacteristic.getUuid())) {
+            logw(TAG, "Received a write to a characteristic (" + characteristic.getUuid() + ") that"
+                    + " is not the expected UUID (" + mReadCharacteristic.getUuid() + "). "
+                    + "Ignoring.");
+            return;
+        }
+        onDataReceived(value);
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/BlePeripheralManager.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BlePeripheralManager.java
similarity index 92%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/BlePeripheralManager.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BlePeripheralManager.java
index 51da3d7..645cecb 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/BlePeripheralManager.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/BlePeripheralManager.java
@@ -14,14 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection.ble;
 
 import static com.android.car.connecteddevice.util.SafeLog.logd;
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 import static com.android.car.connecteddevice.util.SafeLog.logw;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothGatt;
@@ -41,6 +39,9 @@
 import android.content.pm.PackageManager;
 import android.os.Handler;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import com.android.car.connecteddevice.util.ByteUtils;
 
 import java.util.HashSet;
@@ -84,12 +85,13 @@
     private int mMtuSize = 20;
 
     private BluetoothManager mBluetoothManager;
-    private BluetoothLeAdvertiser mAdvertiser;
+    private AtomicReference<BluetoothLeAdvertiser> mAdvertiser = new AtomicReference<>();
     private int mAdvertiserStartCount;
     private int mGattServerRetryStartCount;
     private BluetoothGattService mBluetoothGattService;
     private AdvertiseCallback mAdvertiseCallback;
     private AdvertiseData mAdvertiseData;
+    private AdvertiseData mScanResponse;
 
     public BlePeripheralManager(Context context) {
         mContext = context;
@@ -168,11 +170,13 @@
      *
      * @param service           {@link BluetoothGattService} that will be discovered by clients
      * @param data              {@link AdvertiseData} data to advertise
+     * @param scanResponse      {@link AdvertiseData} scan response
      * @param advertiseCallback {@link AdvertiseCallback} callback for advertiser
      */
     void startAdvertising(
-            BluetoothGattService service, AdvertiseData data, AdvertiseCallback advertiseCallback) {
-        logd(TAG, "startAdvertising: " + service.getUuid());
+            BluetoothGattService service, AdvertiseData data,
+            AdvertiseData scanResponse, AdvertiseCallback advertiseCallback) {
+        logd(TAG, "Request to start advertising with service " + service.getUuid() + ".");
         if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
             loge(TAG, "Attempted start advertising, but system does not support BLE. Ignoring.");
             return;
@@ -182,6 +186,7 @@
         mBluetoothGattService = service;
         mAdvertiseCallback = advertiseCallback;
         mAdvertiseData = data;
+        mScanResponse = scanResponse;
         mGattServerRetryStartCount = 0;
         mBluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE);
         mGattServer.set(mBluetoothManager.openGattServer(mContext, mGattServerCallback));
@@ -194,9 +199,10 @@
      * @param advertiseCallback The callback that is associated with the advertisement.
      */
     void stopAdvertising(AdvertiseCallback advertiseCallback) {
-        if (mAdvertiser != null) {
-            logd(TAG, "Stop advertising.");
-            mAdvertiser.stopAdvertising(advertiseCallback);
+        BluetoothLeAdvertiser advertiser = mAdvertiser.getAndSet(null);
+        if (advertiser != null) {
+            advertiser.stopAdvertising(advertiseCallback);
+            logd(TAG, "Advertising stopped.");
         }
     }
 
@@ -228,14 +234,12 @@
      * Cleans up the BLE GATT server state.
      */
     void cleanup() {
+        logd(TAG, "Cleaning up manager.");
         // Stops the advertiser, scanner and GATT server. This needs to be done to avoid leaks.
-        if (mAdvertiser != null) {
-            mAdvertiser.stopAdvertising(mAdvertiseCallback);
-        }
+        stopAdvertising(mAdvertiseCallback);
         // Clears all registered listeners. IHU only supports single connection in peripheral role.
         mReadListeners.clear();
         mWriteListeners.clear();
-        mAdvertiser = null;
 
         BluetoothGattServer gattServer = mGattServer.getAndSet(null);
         if (gattServer == null) {
@@ -268,7 +272,7 @@
                             .setConnectable(true)
                             .build();
             mAdvertiserStartCount = 0;
-            startAdvertisingInternally(settings, mAdvertiseData, mAdvertiseCallback);
+            startAdvertisingInternally(settings, mAdvertiseData, mScanResponse, mAdvertiseCallback);
             mGattServerRetryStartCount = 0;
         } else if (mGattServerRetryStartCount < GATT_SERVER_RETRY_LIMIT) {
             mGattServer.set(mBluetoothManager.openGattServer(mContext, mGattServerCallback));
@@ -280,19 +284,21 @@
     }
 
     private void startAdvertisingInternally(
-            AdvertiseSettings settings, AdvertiseData data, AdvertiseCallback advertiseCallback) {
+            AdvertiseSettings settings, AdvertiseData advertisement,
+            AdvertiseData scanResponse, AdvertiseCallback advertiseCallback) {
         if (BluetoothAdapter.getDefaultAdapter() != null) {
-            mAdvertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
+            mAdvertiser.compareAndSet(null,
+                    BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser());
         }
-
-        if (mAdvertiser != null) {
+        BluetoothLeAdvertiser advertiser = mAdvertiser.get();
+        if (advertiser != null) {
             logd(TAG, "Advertiser created, retry count: " + mAdvertiserStartCount);
-            mAdvertiser.startAdvertising(settings, data, advertiseCallback);
+            advertiser.startAdvertising(settings, advertisement, scanResponse, advertiseCallback);
             mAdvertiserStartCount = 0;
         } else if (mAdvertiserStartCount < BLE_RETRY_LIMIT) {
             mHandler.postDelayed(
-                    () -> startAdvertisingInternally(settings, data, advertiseCallback),
-                    BLE_RETRY_INTERVAL_MS);
+                    () -> startAdvertisingInternally(settings, advertisement, scanResponse,
+                            advertiseCallback), BLE_RETRY_INTERVAL_MS);
             mAdvertiserStartCount += 1;
         } else {
             loge(TAG, "Cannot start BLE Advertisement. Advertise Retry count: "
@@ -305,9 +311,9 @@
                 @Override
                 public void onConnectionStateChange(BluetoothDevice device, int status,
                                                     int newState) {
-                    logd(TAG, "BLE Connection State Change: " + newState);
                     switch (newState) {
                         case BluetoothProfile.STATE_CONNECTED:
+                            logd(TAG, "BLE Connection State Change: CONNECTED");
                             BluetoothGattServer gattServer = mGattServer.get();
                             if (gattServer == null) {
                                 return;
@@ -318,6 +324,7 @@
                             }
                             break;
                         case BluetoothProfile.STATE_DISCONNECTED:
+                            logd(TAG, "BLE Connection State Change: DISCONNECTED");
                             for (Callback callback : mCallbacks) {
                                 callback.onRemoteDeviceDisconnected(device);
                             }
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBleCentralManager.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/CarBleCentralManager.java
similarity index 85%
rename from connected-device-lib/src/com/android/car/connecteddevice/ble/CarBleCentralManager.java
rename to connected-device-lib/src/com/android/car/connecteddevice/connection/ble/CarBleCentralManager.java
index b95458d..e8d17e5 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/ble/CarBleCentralManager.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/CarBleCentralManager.java
@@ -14,14 +14,13 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection.ble;
 
 import static com.android.car.connecteddevice.util.SafeLog.logd;
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 import static com.android.car.connecteddevice.util.SafeLog.logw;
 import static com.android.car.connecteddevice.util.ScanDataAnalyzer.containsUuidsInOverflow;
 
-import android.annotation.NonNull;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothGatt;
 import android.bluetooth.BluetoothGattCallback;
@@ -36,6 +35,11 @@
 import android.content.Context;
 import android.os.ParcelUuid;
 
+import androidx.annotation.NonNull;
+
+import com.android.car.connecteddevice.AssociationCallback;
+import com.android.car.connecteddevice.connection.CarBluetoothManager;
+import com.android.car.connecteddevice.oob.OobChannel;
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
 
 import java.math.BigInteger;
@@ -47,7 +51,7 @@
  * Communication manager for a car that maintains continuous connections with all devices in the car
  * for the duration of a drive.
  */
-public class CarBleCentralManager extends CarBleManager {
+public class CarBleCentralManager extends CarBluetoothManager {
 
     private static final String TAG = "CarBleCentralManager";
 
@@ -65,7 +69,8 @@
             .setMatchMode(ScanSettings.MATCH_MODE_AGGRESSIVE)
             .build();
 
-    private final CopyOnWriteArraySet<BleDevice> mIgnoredDevices = new CopyOnWriteArraySet<>();
+    private final CopyOnWriteArraySet<ConnectedRemoteDevice> mIgnoredDevices =
+            new CopyOnWriteArraySet<>();
 
     private final Context mContext;
 
@@ -122,7 +127,7 @@
     @Override
     public void disconnectDevice(String deviceId) {
         logd(TAG, "Request to disconnect from device " + deviceId + ".");
-        BleDevice device = getConnectedDevice(deviceId);
+        ConnectedRemoteDevice device = getConnectedDevice(deviceId);
         if (device == null) {
             return;
         }
@@ -130,13 +135,45 @@
         deviceDisconnected(device, STATUS_FORCED_DISCONNECT);
     }
 
-    private void ignoreDevice(@NonNull BleDevice device) {
+    //TODO(b/141312136): Support car central role
+    @Override
+    public AssociationCallback getAssociationCallback() {
+        return null;
+    }
+
+    @Override
+    public void setAssociationCallback(AssociationCallback callback) {
+
+    }
+
+    @Override
+    public void connectToDevice(UUID deviceId) {
+
+    }
+
+    @Override
+    public void initiateConnectionToDevice(UUID deviceId) {
+
+    }
+
+    @Override
+    public void startAssociation(String nameForAssociation, AssociationCallback callback) {
+
+    }
+
+    @Override
+    public void startOutOfBandAssociation(String nameForAssociation, OobChannel oobChannel,
+            AssociationCallback callback) {
+
+    }
+
+    private void ignoreDevice(@NonNull ConnectedRemoteDevice device) {
         mIgnoredDevices.add(device);
     }
 
     private boolean isDeviceIgnored(@NonNull BluetoothDevice device) {
-        for (BleDevice bleDevice : mIgnoredDevices) {
-            if (device.equals(bleDevice.mDevice)) {
+        for (ConnectedRemoteDevice connectedDevice : mIgnoredDevices) {
+            if (device.equals(connectedDevice.mDevice)) {
                 return true;
             }
         }
@@ -205,8 +242,8 @@
             return;
         }
 
-        BleDevice bleDevice = new BleDevice(device, gatt);
-        bleDevice.mState = BleDeviceState.CONNECTING;
+        ConnectedRemoteDevice bleDevice = new ConnectedRemoteDevice(device, gatt);
+        bleDevice.mState = ConnectedDeviceState.CONNECTING;
         addConnectedDevice(bleDevice);
 
         // Stop scanning if we have reached the maximum number of connections.
@@ -215,19 +252,19 @@
         }
     }
 
-    private void deviceConnected(@NonNull BleDevice device) {
+    private void deviceConnected(@NonNull ConnectedRemoteDevice device) {
         if (device.mGatt == null) {
             loge(TAG, "Device connected with null gatt. Disconnecting.");
             deviceDisconnected(device, BluetoothProfile.STATE_DISCONNECTED);
             return;
         }
-        device.mState = BleDeviceState.PENDING_VERIFICATION;
+        device.mState = ConnectedDeviceState.PENDING_VERIFICATION;
         device.mGatt.discoverServices();
         logd(TAG, "New device connected: " + device.mGatt.getDevice().getAddress()
                 + ". Active connections: " + getConnectedDevicesCount() + ".");
     }
 
-    private void deviceDisconnected(@NonNull BleDevice device, int status) {
+    private void deviceDisconnected(@NonNull ConnectedRemoteDevice device, int status) {
         removeConnectedDevice(device);
         if (device.mGatt != null) {
             device.mGatt.close();
@@ -264,7 +301,7 @@
                 return;
             }
 
-            BleDevice connectedDevice = getConnectedDevice(gatt);
+            ConnectedRemoteDevice connectedDevice = getConnectedDevice(gatt);
             if (connectedDevice == null) {
                 return;
             }
@@ -290,7 +327,7 @@
                 return;
             }
 
-            BleDevice connectedDevice = getConnectedDevice(gatt);
+            ConnectedRemoteDevice connectedDevice = getConnectedDevice(gatt);
             if (connectedDevice == null) {
                 return;
             }
@@ -301,7 +338,7 @@
                 return;
             }
 
-            connectedDevice.mState = BleDeviceState.CONNECTED;
+            connectedDevice.mState = ConnectedDeviceState.CONNECTED;
             BluetoothGattCharacteristic writeCharacteristic =
                     service.getCharacteristic(mWriteCharacteristicUuid);
             BluetoothGattCharacteristic readCharacteristic =
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/CarBlePeripheralManager.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/CarBlePeripheralManager.java
new file mode 100644
index 0000000..a05b5f7
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/ble/CarBlePeripheralManager.java
@@ -0,0 +1,510 @@
+/*
+ * 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 com.android.car.connecteddevice.connection.ble;
+
+import static com.android.car.connecteddevice.ConnectedDeviceManager.DEVICE_ERROR_UNEXPECTED_DISCONNECTION;
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+import static com.android.car.connecteddevice.util.SafeLog.logw;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattDescriptor;
+import android.bluetooth.BluetoothGattService;
+import android.bluetooth.le.AdvertiseCallback;
+import android.bluetooth.le.AdvertiseData;
+import android.bluetooth.le.AdvertiseSettings;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.ParcelUuid;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.car.connecteddevice.AssociationCallback;
+import com.android.car.connecteddevice.connection.AssociationSecureChannel;
+import com.android.car.connecteddevice.connection.CarBluetoothManager;
+import com.android.car.connecteddevice.connection.OobAssociationSecureChannel;
+import com.android.car.connecteddevice.connection.ReconnectSecureChannel;
+import com.android.car.connecteddevice.connection.SecureChannel;
+import com.android.car.connecteddevice.oob.OobChannel;
+import com.android.car.connecteddevice.oob.OobConnectionManager;
+import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
+import com.android.car.connecteddevice.util.ByteUtils;
+import com.android.car.connecteddevice.util.EventLog;
+
+import java.time.Duration;
+import java.util.Arrays;
+import java.util.UUID;
+
+/**
+ * Communication manager that allows for targeted connections to a specific device in the car.
+ */
+public class CarBlePeripheralManager extends CarBluetoothManager {
+
+    private static final String TAG = "CarBlePeripheralManager";
+
+    // Attribute protocol bytes attached to message. Available write size is MTU size minus att
+    // bytes.
+    private static final int ATT_PROTOCOL_BYTES = 3;
+
+    private static final UUID CLIENT_CHARACTERISTIC_CONFIG =
+            UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
+
+    private static final int SALT_BYTES = 8;
+
+    private static final int TOTAL_AD_DATA_BYTES = 16;
+
+    private static final int TRUNCATED_BYTES = 3;
+
+    private static final String TIMEOUT_HANDLER_THREAD_NAME = "peripheralThread";
+
+    private final BluetoothGattDescriptor mDescriptor =
+            new BluetoothGattDescriptor(CLIENT_CHARACTERISTIC_CONFIG,
+                    BluetoothGattDescriptor.PERMISSION_READ
+                            | BluetoothGattDescriptor.PERMISSION_WRITE);
+
+    private final BlePeripheralManager mBlePeripheralManager;
+
+    private final UUID mAssociationServiceUuid;
+
+    private final UUID mReconnectServiceUuid;
+
+    private final UUID mReconnectDataUuid;
+
+    private final BluetoothGattCharacteristic mWriteCharacteristic;
+
+    private final BluetoothGattCharacteristic mReadCharacteristic;
+
+    private HandlerThread mTimeoutHandlerThread;
+
+    private Handler mTimeoutHandler;
+
+    private final Duration mMaxReconnectAdvertisementDuration;
+
+    private final int mDefaultMtuSize;
+
+    private String mReconnectDeviceId;
+
+    private byte[] mReconnectChallenge;
+
+    private AdvertiseCallback mAdvertiseCallback;
+
+    private OobConnectionManager mOobConnectionManager;
+
+    private AssociationCallback mAssociationCallback;
+
+    /**
+     * Initialize a new instance of manager.
+     *
+     * @param blePeripheralManager    {@link BlePeripheralManager} for establishing connection.
+     * @param connectedDeviceStorage  Shared {@link ConnectedDeviceStorage} for companion features.
+     * @param associationServiceUuid  {@link UUID} of association service.
+     * @param reconnectServiceUuid    {@link UUID} of reconnect service.
+     * @param reconnectDataUuid       {@link UUID} key of reconnect advertisement data.
+     * @param writeCharacteristicUuid {@link UUID} of characteristic the car will write to.
+     * @param readCharacteristicUuid  {@link UUID} of characteristic the device will write to.
+     * @param maxReconnectAdvertisementDuration Maximum duration to advertise for reconnect before
+     *                                          restarting.
+     * @param defaultMtuSize          Default MTU size for new channels.
+     */
+    public CarBlePeripheralManager(@NonNull BlePeripheralManager blePeripheralManager,
+            @NonNull ConnectedDeviceStorage connectedDeviceStorage,
+            @NonNull UUID associationServiceUuid,
+            @NonNull UUID reconnectServiceUuid,
+            @NonNull UUID reconnectDataUuid,
+            @NonNull UUID writeCharacteristicUuid,
+            @NonNull UUID readCharacteristicUuid,
+            @NonNull Duration maxReconnectAdvertisementDuration,
+            int defaultMtuSize) {
+        super(connectedDeviceStorage);
+        mBlePeripheralManager = blePeripheralManager;
+        mAssociationServiceUuid = associationServiceUuid;
+        mReconnectServiceUuid = reconnectServiceUuid;
+        mReconnectDataUuid = reconnectDataUuid;
+        mDescriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
+        mWriteCharacteristic = new BluetoothGattCharacteristic(writeCharacteristicUuid,
+                BluetoothGattCharacteristic.PROPERTY_NOTIFY,
+                BluetoothGattCharacteristic.PROPERTY_READ);
+        mReadCharacteristic = new BluetoothGattCharacteristic(readCharacteristicUuid,
+                BluetoothGattCharacteristic.PROPERTY_WRITE
+                        | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE,
+                BluetoothGattCharacteristic.PERMISSION_WRITE);
+        mReadCharacteristic.addDescriptor(mDescriptor);
+        mMaxReconnectAdvertisementDuration = maxReconnectAdvertisementDuration;
+        mDefaultMtuSize = defaultMtuSize;
+    }
+
+    @Override
+    public void start() {
+        super.start();
+        mTimeoutHandlerThread = new HandlerThread(TIMEOUT_HANDLER_THREAD_NAME);
+        mTimeoutHandlerThread.start();
+        mTimeoutHandler = new Handler(mTimeoutHandlerThread.getLooper());
+    }
+
+    @Override
+    public void stop() {
+        super.stop();
+        if (mTimeoutHandlerThread != null) {
+            mTimeoutHandlerThread.quit();
+        }
+        reset();
+    }
+
+    @Override
+    public void disconnectDevice(@NonNull String deviceId) {
+        if (deviceId.equals(mReconnectDeviceId)) {
+            logd(TAG, "Reconnection canceled for device " + deviceId + ".");
+            reset();
+            return;
+        }
+        ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+        if (connectedDevice == null || !deviceId.equals(connectedDevice.mDeviceId)) {
+            return;
+        }
+        reset();
+    }
+
+    @Override
+    public AssociationCallback getAssociationCallback() {
+        return mAssociationCallback;
+    }
+
+    @Override
+    public void setAssociationCallback(AssociationCallback callback) {
+        mAssociationCallback = callback;
+    }
+
+    @Override
+    public void reset() {
+        super.reset();
+        logd(TAG, "Resetting state.");
+        mBlePeripheralManager.cleanup();
+        mReconnectDeviceId = null;
+        mReconnectChallenge = null;
+        mOobConnectionManager = null;
+        mAssociationCallback = null;
+    }
+
+    @Override
+    public void initiateConnectionToDevice(@NonNull UUID deviceId) {
+        mReconnectDeviceId = deviceId.toString();
+        mAdvertiseCallback = new AdvertiseCallback() {
+            @Override
+            public void onStartSuccess(AdvertiseSettings settingsInEffect) {
+                super.onStartSuccess(settingsInEffect);
+                mTimeoutHandler.postDelayed(mTimeoutRunnable,
+                        mMaxReconnectAdvertisementDuration.toMillis());
+                logd(TAG, "Successfully started advertising for device " + deviceId + ".");
+            }
+        };
+        mBlePeripheralManager.unregisterCallback(mAssociationPeripheralCallback);
+        mBlePeripheralManager.registerCallback(mReconnectPeripheralCallback);
+        mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
+        byte[] advertiseData = createReconnectData(mReconnectDeviceId);
+        if (advertiseData == null) {
+            loge(TAG, "Unable to create advertisement data. Aborting reconnect.");
+            return;
+        }
+        startAdvertising(mReconnectServiceUuid, mAdvertiseCallback, advertiseData,
+                mReconnectDataUuid, /* scanResponse= */ null, /* scanResponseUuid= */ null);
+    }
+
+    /**
+     * Create data for reconnection advertisement.
+     *
+     * <p></p><p>Process:</p>
+     * <ol>
+     * <li>Generate random {@value SALT_BYTES} byte salt and zero-pad to
+     * {@value TOTAL_AD_DATA_BYTES} bytes.
+     * <li>Hash with stored challenge secret and truncate to {@value TRUNCATED_BYTES} bytes.
+     * <li>Concatenate hashed {@value TRUNCATED_BYTES} bytes with salt and return.
+     * </ol>
+     */
+    @Nullable
+    private byte[] createReconnectData(String deviceId) {
+        byte[] salt = ByteUtils.randomBytes(SALT_BYTES);
+        byte[] zeroPadded = ByteUtils.concatByteArrays(salt,
+                new byte[TOTAL_AD_DATA_BYTES - SALT_BYTES]);
+        mReconnectChallenge = mStorage.hashWithChallengeSecret(deviceId, zeroPadded);
+        if (mReconnectChallenge == null) {
+            return null;
+        }
+        return ByteUtils.concatByteArrays(Arrays.copyOf(mReconnectChallenge, TRUNCATED_BYTES),
+                salt);
+
+    }
+
+    @Override
+    public void startAssociation(@NonNull String nameForAssociation,
+            @NonNull AssociationCallback callback) {
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        if (adapter == null) {
+            loge(TAG, "Bluetooth is unavailable on this device. Unable to start associating.");
+            return;
+        }
+
+        reset();
+        mAssociationCallback = callback;
+        mBlePeripheralManager.unregisterCallback(mReconnectPeripheralCallback);
+        mBlePeripheralManager.registerCallback(mAssociationPeripheralCallback);
+        mAdvertiseCallback = new AdvertiseCallback() {
+            @Override
+            public void onStartSuccess(AdvertiseSettings settingsInEffect) {
+                super.onStartSuccess(settingsInEffect);
+                callback.onAssociationStartSuccess(nameForAssociation);
+                logd(TAG, "Successfully started advertising for association.");
+            }
+
+            @Override
+            public void onStartFailure(int errorCode) {
+                super.onStartFailure(errorCode);
+                callback.onAssociationStartFailure();
+                logd(TAG, "Failed to start advertising for association. Error code: " + errorCode);
+            }
+        };
+        startAdvertising(mAssociationServiceUuid, mAdvertiseCallback, /* advertiseData= */null,
+                /* advertiseDataUuid= */ null, nameForAssociation.getBytes(), mReconnectDataUuid);
+    }
+
+    /** Start the association with a new device using out of band verification code exchange */
+    @Override
+    public void startOutOfBandAssociation(
+            @NonNull String nameForAssociation,
+            @NonNull OobChannel oobChannel,
+            @NonNull AssociationCallback callback) {
+
+        logd(TAG, "Starting out of band association.");
+        startAssociation(nameForAssociation, new AssociationCallback() {
+            @Override
+            public void onAssociationStartSuccess(String deviceName) {
+                mAssociationCallback = callback;
+                boolean success = mOobConnectionManager.startOobExchange(oobChannel);
+                if (!success) {
+                    callback.onAssociationStartFailure();
+                    return;
+                }
+                callback.onAssociationStartSuccess(deviceName);
+            }
+
+            @Override
+            public void onAssociationStartFailure() {
+                callback.onAssociationStartFailure();
+            }
+        });
+        mOobConnectionManager = new OobConnectionManager();
+    }
+
+    private void startAdvertising(@NonNull UUID serviceUuid, @NonNull AdvertiseCallback callback,
+            @Nullable byte[] advertiseData,
+            @Nullable UUID advertiseDataUuid, @Nullable byte[] scanResponse,
+            @Nullable UUID scanResponseUuid) {
+        BluetoothGattService gattService = new BluetoothGattService(serviceUuid,
+                BluetoothGattService.SERVICE_TYPE_PRIMARY);
+        gattService.addCharacteristic(mWriteCharacteristic);
+        gattService.addCharacteristic(mReadCharacteristic);
+
+        AdvertiseData.Builder advertisementBuilder =
+                new AdvertiseData.Builder();
+        ParcelUuid uuid = new ParcelUuid(serviceUuid);
+        advertisementBuilder.addServiceUuid(uuid);
+        if (advertiseData != null) {
+            ParcelUuid dataUuid = uuid;
+            if (advertiseDataUuid != null) {
+                dataUuid = new ParcelUuid(advertiseDataUuid);
+            }
+            advertisementBuilder.addServiceData(dataUuid, advertiseData);
+        }
+
+        AdvertiseData.Builder scanResponseBuilder =
+                new AdvertiseData.Builder();
+        if (scanResponse != null && scanResponseUuid != null) {
+            ParcelUuid scanResponseParcelUuid = new ParcelUuid(scanResponseUuid);
+            scanResponseBuilder.addServiceData(scanResponseParcelUuid, scanResponse);
+        }
+
+        mBlePeripheralManager.startAdvertising(gattService, advertisementBuilder.build(),
+                scanResponseBuilder.build(), callback);
+    }
+
+    private void addConnectedDevice(BluetoothDevice device, boolean isReconnect) {
+        addConnectedDevice(device, isReconnect, /* oobConnectionManager= */ null);
+    }
+
+    private void addConnectedDevice(@NonNull BluetoothDevice device, boolean isReconnect,
+            @Nullable OobConnectionManager oobConnectionManager) {
+        EventLog.onDeviceConnected();
+        mBlePeripheralManager.stopAdvertising(mAdvertiseCallback);
+        if (mTimeoutHandler != null) {
+            mTimeoutHandler.removeCallbacks(mTimeoutRunnable);
+        }
+
+        if (device.getName() == null) {
+            logd(TAG, "Device connected, but name is null; issuing request to retrieve device "
+                    + "name.");
+            mBlePeripheralManager.retrieveDeviceName(device);
+        } else {
+            setClientDeviceName(device.getName());
+        }
+        setClientDeviceAddress(device.getAddress());
+
+        BleDeviceMessageStream secureStream = new BleDeviceMessageStream(mBlePeripheralManager,
+                device, mWriteCharacteristic, mReadCharacteristic,
+                mDefaultMtuSize - ATT_PROTOCOL_BYTES);
+        secureStream.setMessageReceivedErrorListener(
+                exception -> {
+                    disconnectWithError("Error occurred in stream: " + exception.getMessage());
+                });
+        SecureChannel secureChannel;
+        if (isReconnect) {
+            secureChannel = new ReconnectSecureChannel(secureStream, mStorage, mReconnectDeviceId,
+                    mReconnectChallenge);
+        } else if (oobConnectionManager != null) {
+            secureChannel = new OobAssociationSecureChannel(secureStream, mStorage,
+                    oobConnectionManager);
+        } else {
+            secureChannel = new AssociationSecureChannel(secureStream, mStorage);
+        }
+        secureChannel.registerCallback(mSecureChannelCallback);
+        ConnectedRemoteDevice connectedDevice = new ConnectedRemoteDevice(device, /* gatt= */ null);
+        connectedDevice.mSecureChannel = secureChannel;
+        addConnectedDevice(connectedDevice);
+        if (isReconnect) {
+            setDeviceIdAndNotifyCallbacks(mReconnectDeviceId);
+            mReconnectDeviceId = null;
+            mReconnectChallenge = null;
+        }
+    }
+
+    private void setMtuSize(int mtuSize) {
+        ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+        if (connectedDevice != null
+                && connectedDevice.mSecureChannel != null
+                && connectedDevice.mSecureChannel.getStream() != null) {
+            ((BleDeviceMessageStream) connectedDevice.mSecureChannel.getStream())
+                    .setMaxWriteSize(mtuSize - ATT_PROTOCOL_BYTES);
+        }
+    }
+
+    private final BlePeripheralManager.Callback mReconnectPeripheralCallback =
+            new BlePeripheralManager.Callback() {
+
+                @Override
+                public void onDeviceNameRetrieved(String deviceName) {
+                    // Ignored.
+                }
+
+                @Override
+                public void onMtuSizeChanged(int size) {
+                    setMtuSize(size);
+                }
+
+                @Override
+                public void onRemoteDeviceConnected(BluetoothDevice device) {
+                    addConnectedDevice(device, /* isReconnect= */ true);
+                }
+
+                @Override
+                public void onRemoteDeviceDisconnected(BluetoothDevice device) {
+                    String deviceId = mReconnectDeviceId;
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice(device);
+                    // Reset before invoking callbacks to avoid a race condition with reconnect
+                    // logic.
+                    reset();
+                    if (connectedDevice != null) {
+                        deviceId = connectedDevice.mDeviceId;
+                    }
+                    final String finalDeviceId = deviceId;
+                    if (finalDeviceId == null) {
+                        logw(TAG, "Callbacks were not issued for disconnect because the device id "
+                                + "was null.");
+                        return;
+                    }
+                    logd(TAG, "Connected device " + finalDeviceId + " disconnected.");
+                    mCallbacks.invoke(callback -> callback.onDeviceDisconnected(finalDeviceId));
+                }
+            };
+
+    private final BlePeripheralManager.Callback mAssociationPeripheralCallback =
+            new BlePeripheralManager.Callback() {
+                @Override
+                public void onDeviceNameRetrieved(String deviceName) {
+                    if (deviceName == null) {
+                        return;
+                    }
+                    setClientDeviceName(deviceName);
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
+                        return;
+                    }
+                    mStorage.updateAssociatedDeviceName(connectedDevice.mDeviceId, deviceName);
+                }
+
+                @Override
+                public void onMtuSizeChanged(int size) {
+                    setMtuSize(size);
+                }
+
+                @Override
+                public void onRemoteDeviceConnected(BluetoothDevice device) {
+                    addConnectedDevice(device, /* isReconnect= */ false, mOobConnectionManager);
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+                    if (connectedDevice == null || connectedDevice.mSecureChannel == null) {
+                        return;
+                    }
+                    ((AssociationSecureChannel) connectedDevice.mSecureChannel)
+                            .setShowVerificationCodeListener(
+                                    code -> {
+                                        if (!isAssociating()) {
+                                            loge(TAG, "No valid callback for association.");
+                                            return;
+                                        }
+                                        mAssociationCallback.onVerificationCodeAvailable(code);
+                                    });
+                }
+
+                @Override
+                public void onRemoteDeviceDisconnected(BluetoothDevice device) {
+                    logd(TAG, "Remote device disconnected.");
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice(device);
+                    if (isAssociating()) {
+                        mAssociationCallback.onAssociationError(
+                                DEVICE_ERROR_UNEXPECTED_DISCONNECTION);
+                    }
+                    // Reset before invoking callbacks to avoid a race condition with reconnect
+                    // logic.
+                    reset();
+                    if (connectedDevice == null || connectedDevice.mDeviceId == null) {
+                        logw(TAG, "Callbacks were not issued for disconnect.");
+                        return;
+                    }
+                    mCallbacks.invoke(callback -> callback.onDeviceDisconnected(
+                            connectedDevice.mDeviceId));
+                }
+            };
+
+    private final Runnable mTimeoutRunnable = new Runnable() {
+        @Override
+        public void run() {
+            logd(TAG, "Timeout period expired without a connection. Restarting advertisement.");
+            mBlePeripheralManager.stopAdvertising(mAdvertiseCallback);
+            connectToDevice(UUID.fromString(mReconnectDeviceId));
+        }
+    };
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/AcceptTask.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/AcceptTask.java
new file mode 100644
index 0000000..2ada256
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/AcceptTask.java
@@ -0,0 +1,116 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothServerSocket;
+import android.bluetooth.BluetoothSocket;
+
+import androidx.annotation.Nullable;
+
+import java.io.IOException;
+import java.util.UUID;
+
+/**
+ * This task runs while listening for incoming connections. It behaves like a server. It runs until
+ * a connection is accepted (or until cancelled).
+ */
+public class AcceptTask implements Runnable {
+    private static final String TAG = "AcceptTask";
+    private static final String SERVICE_NAME_SECURE = "NAME_SECURE";
+    private static final String SERVICE_NAME_INSECURE = "NAME_INSECURE";
+    private final UUID mServiceUuid;
+    private final boolean mIsSecure;
+    private final OnTaskCompletedListener mListener;
+    private final BluetoothAdapter mAdapter;
+    private BluetoothServerSocket mServerSocket;
+
+    AcceptTask(BluetoothAdapter adapter, boolean isSecure, UUID serviceUuid,
+            OnTaskCompletedListener listener) {
+        mListener = listener;
+        mAdapter = adapter;
+        mServiceUuid = serviceUuid;
+        mIsSecure = isSecure;
+    }
+
+    /**
+     * Start the socket to listen to any incoming connection request.
+     *
+     * @return {@code true} if listening is started successfully.
+     */
+    boolean startListening() {
+        // Create a new listening server socket
+        try {
+            if (mIsSecure) {
+                mServerSocket = mAdapter.listenUsingRfcommWithServiceRecord(SERVICE_NAME_SECURE,
+                        mServiceUuid);
+            } else {
+                mServerSocket = mAdapter.listenUsingInsecureRfcommWithServiceRecord(
+                        SERVICE_NAME_INSECURE, mServiceUuid);
+            }
+        } catch (IOException e) {
+            loge(TAG, "Socket listen() failed", e);
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public void run() {
+        logd(TAG, "BEGIN AcceptTask: " + this);
+        BluetoothSocket socket = null;
+
+        // Listen to the server socket if we're not connected
+        while (true) {
+            try {
+                socket = mServerSocket.accept();
+            } catch (IOException e) {
+                loge(TAG, "accept() failed", e);
+                break;
+            }
+            if (socket != null) {
+                break;
+            }
+        }
+
+        mListener.onTaskCompleted(socket, mIsSecure);
+    }
+
+    void cancel() {
+        logd(TAG, "CANCEL AcceptTask: " + this);
+        try {
+            if (mServerSocket != null) {
+                mServerSocket.close();
+            }
+        } catch (IOException e) {
+            loge(TAG, "close() of server failed", e);
+        }
+    }
+
+    interface OnTaskCompletedListener {
+        /**
+         * Will be called when the accept task is completed.
+         *
+         * @param socket   will be {@code null} if the task failed.
+         * @param isSecure is {@code true} when it is listening to a secure RFCOMM channel.
+         */
+        void onTaskCompleted(@Nullable BluetoothSocket socket, boolean isSecure);
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/CarSppManager.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/CarSppManager.java
new file mode 100644
index 0000000..e9f0cc1
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/CarSppManager.java
@@ -0,0 +1,276 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.android.car.connecteddevice.ConnectedDeviceManager.DEVICE_ERROR_UNEXPECTED_DISCONNECTION;
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.connecteddevice.AssociationCallback;
+import com.android.car.connecteddevice.connection.AssociationSecureChannel;
+import com.android.car.connecteddevice.connection.CarBluetoothManager;
+import com.android.car.connecteddevice.connection.DeviceMessageStream;
+import com.android.car.connecteddevice.connection.ReconnectSecureChannel;
+import com.android.car.connecteddevice.connection.SecureChannel;
+import com.android.car.connecteddevice.oob.OobChannel;
+import com.android.car.connecteddevice.oob.OobConnectionManager;
+import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
+import com.android.car.connecteddevice.util.EventLog;
+
+import java.util.UUID;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+
+/**
+ * Communication manager that allows for targeted connections to a specific device from the car
+ * using {@link SppManager} .
+ */
+public class CarSppManager extends CarBluetoothManager {
+
+    private static final String TAG = "CarSppManager";
+
+    private final SppManager mSppManager;
+
+    private final UUID mAssociationServiceUuid;
+
+    private final int mPacketMaxBytes;
+
+    private String mReconnectDeviceId;
+
+    private OobConnectionManager mOobConnectionManager;
+
+    private Executor mCallbackExecutor;
+
+    private AssociationCallback mAssociationCallback;
+
+    /**
+     * Initialize a new instance of manager.
+     *
+     * @param sppManager             {@link SppManager} for establishing connection.
+     * @param connectedDeviceStorage Shared {@link ConnectedDeviceStorage} for companion features.
+     * @param packetMaxBytes         Maximum size in bytes to write in one packet.
+     */
+    public CarSppManager(@NonNull SppManager sppManager,
+            @NonNull ConnectedDeviceStorage connectedDeviceStorage,
+            @NonNull UUID associationServiceUuid,
+            int packetMaxBytes) {
+        super(connectedDeviceStorage);
+        mSppManager = sppManager;
+        mCallbackExecutor = Executors.newSingleThreadExecutor();
+        mAssociationServiceUuid = associationServiceUuid;
+        mPacketMaxBytes = packetMaxBytes;
+    }
+
+    @Override
+    public void stop() {
+        super.stop();
+        reset();
+    }
+
+    @Override
+    public void disconnectDevice(@NonNull String deviceId) {
+        ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+        if (connectedDevice == null || !deviceId.equals(connectedDevice.mDeviceId)) {
+            return;
+        }
+        reset();
+    }
+
+    @Override
+    public AssociationCallback getAssociationCallback() {
+        return mAssociationCallback;
+    }
+
+    @Override
+    public void setAssociationCallback(AssociationCallback callback) {
+        mAssociationCallback = callback;
+    }
+
+    @Override
+    public void initiateConnectionToDevice(@NonNull UUID deviceId) {
+        logd(TAG, "Start spp reconnection listening for device with id: " + deviceId.toString());
+        mReconnectDeviceId = deviceId.toString();
+        mSppManager.unregisterCallback(mAssociationSppCallback);
+        mSppManager.registerCallback(mReconnectSppCallback, mCallbackExecutor);
+        mSppManager.startListening(deviceId);
+    }
+
+    @Override
+    public void reset() {
+        super.reset();
+        mReconnectDeviceId = null;
+        mAssociationCallback = null;
+        mSppManager.cleanup();
+    }
+
+    /**
+     * Start the association by listening to incoming connect request.
+     */
+    @Override
+    public void startAssociation(@NonNull String nameForAssociation,
+            @NonNull AssociationCallback callback) {
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        if (adapter == null) {
+            loge(TAG, "Bluetooth is unavailable on this device. Unable to start associating.");
+            return;
+        }
+
+        reset();
+        mAssociationCallback = callback;
+        mSppManager.unregisterCallback(mReconnectSppCallback);
+        mSppManager.registerCallback(mAssociationSppCallback, mCallbackExecutor);
+        if (mSppManager.startListening(mAssociationServiceUuid)) {
+            callback.onAssociationStartSuccess(/* deviceName= */ null);
+        } else {
+            callback.onAssociationStartFailure();
+        }
+    }
+
+    /**
+     * Start the association with a new device using out of band verification code exchange
+     */
+    @Override
+    public void startOutOfBandAssociation(@NonNull String nameForAssociation,
+            @NonNull OobChannel oobChannel,
+            @NonNull AssociationCallback callback) {
+
+        logd(TAG, "Starting out of band association.");
+        startAssociation(nameForAssociation, new AssociationCallback() {
+            @Override
+            public void onAssociationStartSuccess(String deviceName) {
+                mAssociationCallback = callback;
+                boolean success = mOobConnectionManager.startOobExchange(oobChannel);
+                if (!success) {
+                    callback.onAssociationStartFailure();
+                    return;
+                }
+                callback.onAssociationStartSuccess(deviceName);
+            }
+
+            @Override
+            public void onAssociationStartFailure() {
+                callback.onAssociationStartFailure();
+            }
+        });
+        mOobConnectionManager = new OobConnectionManager();
+    }
+
+    private void onDeviceConnected(BluetoothDevice device, boolean isReconnect) {
+        onDeviceConnected(device, isReconnect, /* isOob= */ false);
+    }
+
+    private void onDeviceConnected(BluetoothDevice device, boolean isReconnect, boolean isOob) {
+        EventLog.onDeviceConnected();
+        setClientDeviceAddress(device.getAddress());
+        setClientDeviceName(device.getName());
+        DeviceMessageStream secureStream = new SppDeviceMessageStream(mSppManager, device,
+                mPacketMaxBytes);
+        secureStream.setMessageReceivedErrorListener(
+                exception -> {
+                    disconnectWithError("Error occurred in stream: " + exception.getMessage(),
+                            exception);
+                });
+        SecureChannel secureChannel;
+        // TODO(b/157492943): Define an out of band version of ReconnectSecureChannel
+        if (isReconnect) {
+            secureChannel = new ReconnectSecureChannel(secureStream, mStorage, mReconnectDeviceId,
+                    /* expectedChallengeResponse= */ null);
+        } else if (isOob) {
+            // TODO(b/160901821): Integrate Oob with Spp channel
+            loge(TAG, "Oob verification is currently not available for Spp");
+            return;
+        } else {
+            secureChannel = new AssociationSecureChannel(secureStream, mStorage);
+        }
+        secureChannel.registerCallback(mSecureChannelCallback);
+        ConnectedRemoteDevice connectedDevice = new ConnectedRemoteDevice(device, /* gatt= */ null);
+        connectedDevice.mSecureChannel = secureChannel;
+        addConnectedDevice(connectedDevice);
+        if (isReconnect) {
+            setDeviceIdAndNotifyCallbacks(mReconnectDeviceId);
+            mReconnectDeviceId = null;
+        }
+    }
+
+    private final SppManager.ConnectionCallback mReconnectSppCallback =
+            new SppManager.ConnectionCallback() {
+                @Override
+                public void onRemoteDeviceConnected(BluetoothDevice device) {
+                    onDeviceConnected(device, /* isReconnect= */ true);
+                }
+
+                @Override
+                public void onRemoteDeviceDisconnected(BluetoothDevice device) {
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice(device);
+                    // Reset before invoking callbacks to avoid a race condition with reconnect
+                    // logic.
+                    reset();
+                    String deviceId = connectedDevice == null ? mReconnectDeviceId
+                            : connectedDevice.mDeviceId;
+                    if (deviceId != null) {
+                        logd(TAG, "Connected device " + deviceId + " disconnected.");
+                        mCallbacks.invoke(callback -> callback.onDeviceDisconnected(deviceId));
+                    }
+                }
+            };
+
+    private final SppManager.ConnectionCallback mAssociationSppCallback =
+            new SppManager.ConnectionCallback() {
+                @Override
+                public void onRemoteDeviceConnected(BluetoothDevice device) {
+                    onDeviceConnected(device, /* isReconnect= */ false);
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice();
+                    if (connectedDevice == null || connectedDevice.mSecureChannel == null) {
+                        loge(TAG,
+                                "No connected device or secure channel found when try to "
+                                        + "associate.");
+                        return;
+                    }
+                    ((AssociationSecureChannel) connectedDevice.mSecureChannel)
+                            .setShowVerificationCodeListener(
+                                    code -> {
+                                        if (mAssociationCallback == null) {
+                                            loge(TAG, "No valid callback for association.");
+                                            return;
+                                        }
+                                        mAssociationCallback.onVerificationCodeAvailable(code);
+                                    });
+                }
+
+                @Override
+                public void onRemoteDeviceDisconnected(BluetoothDevice device) {
+                    ConnectedRemoteDevice connectedDevice = getConnectedDevice(device);
+                    if (isAssociating()) {
+                        mAssociationCallback.onAssociationError(
+                                DEVICE_ERROR_UNEXPECTED_DISCONNECTION);
+                    }
+                    // Reset before invoking callbacks to avoid a race condition with reconnect
+                    // logic.
+                    reset();
+                    if (connectedDevice != null && connectedDevice.mDeviceId != null) {
+                        mCallbacks.invoke(callback -> callback.onDeviceDisconnected(
+                                connectedDevice.mDeviceId));
+                    }
+                }
+            };
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/ConnectedTask.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/ConnectedTask.java
new file mode 100644
index 0000000..2318e69
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/ConnectedTask.java
@@ -0,0 +1,104 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+import static com.android.car.connecteddevice.util.SafeLog.logi;
+
+import android.bluetooth.BluetoothSocket;
+
+import androidx.annotation.NonNull;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * This task runs during a connection with a remote device. It handles all incoming and outgoing
+ * data.
+ */
+public class ConnectedTask implements Runnable {
+    private static final String TAG = "ConnectedTask";
+    private final BluetoothSocket mSocket;
+    private final InputStream mInputStream;
+    private final OutputStream mOutputStream;
+    private Callback mCallback;
+
+    ConnectedTask(@NonNull InputStream inputStream, @NonNull OutputStream outputStream,
+            @NonNull BluetoothSocket socket,
+            @NonNull Callback callback) {
+        mInputStream = inputStream;
+        mOutputStream = outputStream;
+        mSocket = socket;
+        mCallback = callback;
+    }
+
+    @Override
+    public void run() {
+        logi(TAG, "Begin ConnectedTask: started to listen to incoming messages.");
+        // Keep listening to the InputStream when task started.
+        while (true) {
+            try {
+                int dataLength = mInputStream.available();
+                if (dataLength == 0) {
+                    continue;
+                }
+                byte[] buffer = new byte[dataLength];
+                // Read from the InputStream
+                mInputStream.read(buffer);
+                mCallback.onMessageReceived(buffer);
+                logd(TAG, "received raw bytes from remote device with length: " + dataLength);
+            } catch (IOException e) {
+                loge(TAG,
+                        "Encountered an exception when listening for incoming message, "
+                                + "disconnected", e);
+                mCallback.onDisconnected();
+                break;
+            }
+        }
+    }
+
+    /**
+     * Write to the connected OutputStream.
+     *
+     * @param buffer The bytes to write
+     */
+    void write(@NonNull byte[] buffer) {
+        try {
+            mOutputStream.write(buffer);
+            logd(TAG, "Sent buffer to remote device with length: " + buffer.length);
+        } catch (IOException e) {
+            loge(TAG, "Exception during write", e);
+        }
+    }
+
+    void cancel() {
+        logd(TAG, "cancel connected task: close connected socket.");
+        try {
+            mSocket.close();
+        } catch (IOException e) {
+            loge(TAG, "close() of connected socket failed", e);
+        }
+    }
+
+    interface Callback {
+        void onMessageReceived(@NonNull byte[] message);
+
+        void onDisconnected();
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppDeviceMessageStream.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppDeviceMessageStream.java
new file mode 100644
index 0000000..d92ddca
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppDeviceMessageStream.java
@@ -0,0 +1,70 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.logw;
+
+import android.bluetooth.BluetoothDevice;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.connecteddevice.connection.DeviceMessageStream;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+/**
+ * Spp message stream to a device.
+ */
+class SppDeviceMessageStream extends DeviceMessageStream {
+
+    private static final String TAG = "SppDeviceMessageStream";
+
+    private final SppManager mSppManager;
+    private final BluetoothDevice mDevice;
+    private final Executor mCallbackExecutor = Executors.newSingleThreadExecutor();
+
+
+    SppDeviceMessageStream(@NonNull SppManager sppManager,
+            @NonNull BluetoothDevice device, int maxWriteSize) {
+        super(maxWriteSize);
+        mSppManager = sppManager;
+        mDevice = device;
+        mSppManager.addOnMessageReceivedListener(this::onMessageReceived, mCallbackExecutor);
+    }
+
+    @Override
+    protected void send(byte[] data) {
+        mSppManager.write(data);
+        sendCompleted();
+    }
+
+    @VisibleForTesting
+    void onMessageReceived(@NonNull BluetoothDevice device, @NonNull byte[] value) {
+        logd(TAG, "Received a message from a device (" + device.getAddress() + ").");
+        if (!mDevice.equals(device)) {
+            logw(TAG, "Received a message from a device (" + device.getAddress() + ") that is not "
+                    + "the expected device (" + mDevice.getAddress() + ") registered to this "
+                    + "stream. Ignoring.");
+            return;
+        }
+
+        onDataReceived(value);
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppManager.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppManager.java
new file mode 100644
index 0000000..57a9c89
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppManager.java
@@ -0,0 +1,331 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothSocket;
+
+import androidx.annotation.GuardedBy;
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.connecteddevice.util.ThreadSafeCallbacks;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.UUID;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * A generic class that handles all the Spp connection events including:
+ * <ol>
+ *     <li>listen and accept connection request from client.
+ *     <li>send a message through an established connection.
+ *     <li>notify any connection or message events happening during the connection.
+ * </ol>
+ */
+public class SppManager {
+    private static final String TAG = "SppManager";
+    // Service names and UUIDs of SDP(Service Discovery Protocol) record, need to keep it consistent
+    // among client and server.
+    private final BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter();
+    private final boolean mIsSecure;
+    private Object mLock = new Object();
+    /**
+     * Task to listen to secure RFCOMM channel.
+     */
+    @VisibleForTesting
+    AcceptTask mAcceptTask;
+    /**
+     * Task to start and maintain a connection.
+     */
+    @VisibleForTesting
+    ConnectedTask mConnectedTask;
+    @VisibleForTesting
+    ExecutorService mConnectionExecutor = Executors.newSingleThreadExecutor();
+    private BluetoothDevice mDevice;
+    @GuardedBy("mLock")
+    private final SppPayloadStream mPayloadStream = new SppPayloadStream();
+    @GuardedBy("mLock")
+    @VisibleForTesting
+    ConnectionState mState;
+    private final ThreadSafeCallbacks<ConnectionCallback> mCallbacks = new ThreadSafeCallbacks<>();
+    private final ThreadSafeCallbacks<OnMessageReceivedListener> mReceivedListeners =
+            new ThreadSafeCallbacks<>();
+
+    public SppManager(@NonNull boolean isSecure) {
+        mPayloadStream.setMessageCompletedListener(this::onMessageCompleted);
+        mIsSecure = isSecure;
+    }
+
+    @VisibleForTesting
+    enum ConnectionState {
+        NONE,
+        LISTEN,
+        CONNECTING,
+        CONNECTED,
+        DISCONNECTED,
+    }
+
+    /**
+     * Registers the given callback to be notified of various events within the {@link SppManager}.
+     *
+     * @param callback The callback to be notified.
+     */
+    void registerCallback(@NonNull ConnectionCallback callback, @NonNull Executor executor) {
+        mCallbacks.add(callback, executor);
+    }
+
+    /**
+     * Unregisters a previously registered callback.
+     *
+     * @param callback The callback to unregister.
+     */
+    void unregisterCallback(@NonNull ConnectionCallback callback) {
+        mCallbacks.remove(callback);
+    }
+
+    /**
+     * Adds a listener to be notified of a write to characteristics.
+     *
+     * @param listener The listener to invoke.
+     */
+    void addOnMessageReceivedListener(@NonNull OnMessageReceivedListener listener,
+            @NonNull Executor executor) {
+        mReceivedListeners.add(listener, executor);
+    }
+
+    /**
+     * Removes the given listener from being notified of characteristic writes.
+     *
+     * @param listener The listener to remove.
+     */
+    void removeOnMessageReceivedListener(@NonNull OnMessageReceivedListener listener) {
+        mReceivedListeners.remove(listener);
+    }
+
+    /**
+     * Start listening to connection request from the client.
+     *
+     * @param serviceUuid The Uuid which the accept task is listening on.
+     * @return {@code true} if listening is started successfully
+     */
+    boolean startListening(@NonNull UUID serviceUuid) {
+        logd(TAG, "Start socket to listening to incoming connection request.");
+        if (mConnectedTask != null) {
+            mConnectedTask.cancel();
+            mConnectedTask = null;
+        }
+
+        // Start the task to listen on a BluetoothServerSocket
+        if (mAcceptTask != null) {
+            mAcceptTask.cancel();
+        }
+        mAcceptTask = new AcceptTask(mAdapter, mIsSecure, serviceUuid, mAcceptTaskListener);
+        if (!mAcceptTask.startListening()) {
+            // TODO(b/159376003): Handle listening error.
+            mAcceptTask.cancel();
+            mAcceptTask = null;
+            return false;
+        }
+        synchronized (mLock) {
+            mState = ConnectionState.LISTEN;
+        }
+        mConnectionExecutor.execute(mAcceptTask);
+        return true;
+    }
+
+    /**
+     * Send data to remote connected bluetooth device.
+     *
+     * @param data the raw data that wait to be sent
+     * @return {@code true} if the message is sent to client successfully.
+     */
+    boolean write(@NonNull byte[] data) {
+        ConnectedTask connectedTask;
+        // Synchronize a copy of the ConnectedTask
+        synchronized (mLock) {
+            if (mState != ConnectionState.CONNECTED) {
+                loge(TAG, "Try to send data when device is disconnected");
+                return false;
+            }
+            connectedTask = mConnectedTask;
+        }
+        byte[] dataReadyToSend = SppPayloadStream.wrapWithArrayLength(data);
+        if (dataReadyToSend == null) {
+            loge(TAG, "Wrapping data with array length failed.");
+            return false;
+        }
+        connectedTask.write(dataReadyToSend);
+        return true;
+    }
+
+    /**
+     * Cleans up the registered listeners.
+     */
+    void cleanup() {
+        // Clears all registered listeners. IHU only supports single connection.
+        mReceivedListeners.clear();
+    }
+
+    /**
+     * Start the ConnectedTask to begin and maintain a RFCOMM channel.
+     *
+     * @param socket   The BluetoothSocket on which the connection was made
+     * @param device   The BluetoothDevice that has been connected
+     * @param isSecure The type of current established channel
+     */
+    @GuardedBy("mLock")
+    private void startConnectionLocked(BluetoothSocket socket, BluetoothDevice device,
+            boolean isSecure) {
+        logd(TAG, "Get accepted bluetooth socket, start listening to incoming messages.");
+
+        // Cancel any task currently running a connection
+        if (mConnectedTask != null) {
+            mConnectedTask.cancel();
+            mConnectedTask = null;
+        }
+
+        // Cancel the accept task because we only want to connect to one device
+        if (mAcceptTask != null) {
+            mAcceptTask.cancel();
+            mAcceptTask = null;
+        }
+        logd(TAG, "Create ConnectedTask: is secure? " + isSecure);
+        InputStream inputStream;
+        OutputStream outputStream;
+        mDevice = device;
+
+        // Get the BluetoothSocket input and output streams
+        try {
+            inputStream = socket.getInputStream();
+            outputStream = socket.getOutputStream();
+        } catch (IOException e) {
+            loge(TAG, "Can not get stream from BluetoothSocket. Connection failed.", e);
+            return;
+        }
+        mState = ConnectionState.CONNECTED;
+        mCallbacks.invoke(callback -> callback.onRemoteDeviceConnected(device));
+
+        // Start the task to manage the connection and perform transmissions
+        mConnectedTask = new ConnectedTask(inputStream, outputStream, socket,
+                mConnectedTaskCallback);
+        mConnectionExecutor.execute(mConnectedTask);
+    }
+
+    private void onMessageCompleted(@NonNull byte[] message) {
+        mReceivedListeners.invoke(listener -> listener.onMessageReceived(mDevice, message));
+    }
+
+    @VisibleForTesting
+    final AcceptTask.OnTaskCompletedListener mAcceptTaskListener =
+            new AcceptTask.OnTaskCompletedListener() {
+                @Override
+                public void onTaskCompleted(BluetoothSocket socket, boolean isSecure) {
+                    if (socket == null) {
+                        loge(TAG, "AcceptTask failed getting the socket");
+                        return;
+                    }
+                    // Connection accepted
+                    synchronized (mLock) {
+                        switch (mState) {
+                            case LISTEN:
+                            case CONNECTING:
+                                startConnectionLocked(socket, socket.getRemoteDevice(), isSecure);
+                                break;
+                            case NONE:
+                                loge(TAG, "AcceptTask is done while in NONE state.");
+                                break;
+                            case CONNECTED:
+                                // Already connected. Terminate new socket.
+                                try {
+                                    socket.close();
+                                } catch (IOException e) {
+                                    loge(TAG, "Could not close unwanted socket", e);
+                                }
+                                break;
+                            case DISCONNECTED:
+                                loge(TAG, "AcceptTask is done while in DISCONNECTED state.");
+                                break;
+                        }
+                    }
+                }
+            };
+
+    @VisibleForTesting
+    final ConnectedTask.Callback mConnectedTaskCallback = new ConnectedTask.Callback() {
+        @Override
+        public void onMessageReceived(byte[] message) {
+            synchronized (mLock) {
+                try {
+                    mPayloadStream.write(message);
+                } catch (IOException e) {
+                    loge(TAG, "Error writes message to spp payload stream: " + e.getMessage());
+                }
+            }
+        }
+
+        @Override
+        public void onDisconnected() {
+            synchronized (mLock) {
+                mState = ConnectionState.DISCONNECTED;
+                mCallbacks.invoke(callback -> callback.onRemoteDeviceDisconnected(mDevice));
+            }
+        }
+    };
+
+    /**
+     * Interface to be notified of various events within the {@link SppManager}.
+     */
+    interface ConnectionCallback {
+
+        /**
+         * Triggered when a bluetooth device connected.
+         *
+         * @param device Remote device that connected on Spp.
+         */
+        void onRemoteDeviceConnected(@NonNull BluetoothDevice device);
+
+        /**
+         * Triggered when a bluetooth device disconnected.
+         *
+         * @param device Remote device that disconnected on Spp.
+         */
+        void onRemoteDeviceDisconnected(@NonNull BluetoothDevice device);
+    }
+
+    /**
+     * An interface for classes that wish to be notified of incoming messages.
+     */
+    interface OnMessageReceivedListener {
+        /**
+         * Triggered when this SppManager receives a write request from a remote device.
+         *
+         * @param device The bluetooth device that sending the message.
+         * @param value  The value that was written.
+         */
+        void onMessageReceived(@NonNull BluetoothDevice device, @NonNull byte[] value);
+    }
+
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppPayloadStream.java b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppPayloadStream.java
new file mode 100644
index 0000000..f05a76f
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/connection/spp/SppPayloadStream.java
@@ -0,0 +1,121 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Arrays;
+
+/**
+ * For spp stream will be segmented to several parts, a completed message length need to be prepend
+ * to any message sent. This class will take care of the decode and encode of the incoming and
+ * outgoing message.
+ */
+class SppPayloadStream {
+    private static final String TAG = "SppPayloadStream";
+    // An int will take 4 bytes.
+    private static final int LENGTH_BYTES_SIZE = 4;
+    private final ByteArrayOutputStream mPendingStream = new ByteArrayOutputStream();
+    private OnMessageCompletedListener mOnMessageCompletedListener;
+    private int mCurrentMessageTotalLength;
+
+    /**
+     * Writes data to the {@code pendingStream}, inform the {@code messageCompletedListener} when
+     * the message is completed, otherwise store the data into {@code pendingStream} and waiting for
+     * the following parts.
+     *
+     * @param data Received byte array
+     * @throws IOException If there are some errors writing data to {@code pendingStream}
+     */
+    public void write(@NonNull byte[] data) throws IOException {
+        if (mPendingStream.size() == 0) {
+            int currentLength = data.length;
+            // Arbitrarily choose a byte order, need to use the same byte order for server and
+            // client.
+            mCurrentMessageTotalLength = ByteBuffer.wrap(
+                    Arrays.copyOf(data, LENGTH_BYTES_SIZE)).order(
+                    ByteOrder.LITTLE_ENDIAN).getInt();
+            byte[] payload = Arrays.copyOfRange(data, LENGTH_BYTES_SIZE, currentLength);
+            mPendingStream.write(payload);
+        } else {
+            mPendingStream.write(data);
+        }
+
+        if (mPendingStream.size() > mCurrentMessageTotalLength) {
+            // TODO(b/159712861): Handle this situation, e.g. disconnect.
+            loge(TAG, "Received invalid message: " + mPendingStream.toByteArray());
+            return;
+        }
+
+        if (mPendingStream.size() < mCurrentMessageTotalLength) {
+            return;
+        }
+        if (mOnMessageCompletedListener != null) {
+            mOnMessageCompletedListener.onMessageCompleted(mPendingStream.toByteArray());
+        }
+        mPendingStream.reset();
+
+    }
+
+    /**
+     * Register the given listener to be notified when a completed message is received.
+     *
+     * @param listener The listener to be notified
+     */
+    public void setMessageCompletedListener(@Nullable OnMessageCompletedListener listener) {
+        mOnMessageCompletedListener = listener;
+    }
+
+    /**
+     * Wrap the raw byte array with array length.
+     * <p>
+     * Should be called every time when server wants to send a message to client.
+     *
+     * @param rawData Original data
+     * @return The wrapped data
+     * @throws IOException If there are some errors writing data to {@code outputStream}
+     */
+    @Nullable
+    public static byte[] wrapWithArrayLength(@NonNull byte[] rawData) {
+        int length = rawData.length;
+        byte[] lengthBytes = ByteBuffer.allocate(LENGTH_BYTES_SIZE).order(
+                ByteOrder.LITTLE_ENDIAN).putInt(length).array();
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        try {
+            outputStream.write(lengthBytes);
+            outputStream.write(rawData);
+        } catch (IOException e) {
+            loge(TAG, "Error wrap data with array length");
+            return null;
+        }
+        return outputStream.toByteArray();
+    }
+
+    /**
+     * Interface to be notified when a completed message has been received.
+     */
+    interface OnMessageCompletedListener {
+        void onMessageCompleted(@NonNull byte[] message);
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/model/AssociatedDevice.java b/connected-device-lib/src/com/android/car/connecteddevice/model/AssociatedDevice.java
index 88fce6c..8622617 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/model/AssociatedDevice.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/model/AssociatedDevice.java
@@ -16,8 +16,8 @@
 
 package com.android.car.connecteddevice.model;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 
 import java.util.Objects;
 
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/model/ConnectedDevice.java b/connected-device-lib/src/com/android/car/connecteddevice/model/ConnectedDevice.java
index d65f97d..9e49a37 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/model/ConnectedDevice.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/model/ConnectedDevice.java
@@ -16,8 +16,8 @@
 
 package com.android.car.connecteddevice.model;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 
 import java.util.Objects;
 
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/model/OobEligibleDevice.java b/connected-device-lib/src/com/android/car/connecteddevice/model/OobEligibleDevice.java
new file mode 100644
index 0000000..6e910d3
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/model/OobEligibleDevice.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.connecteddevice.model;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+
+import java.lang.annotation.Retention;
+import java.util.Objects;
+
+/** Device that may be used for an out-of-band channel. */
+public class OobEligibleDevice {
+
+    @Retention(SOURCE)
+    @IntDef(value = { OOB_TYPE_BLUETOOTH })
+    public @interface OobType {}
+    public static final int OOB_TYPE_BLUETOOTH = 0;
+
+    private final String mDeviceAddress;
+
+    @OobType
+    private final int mOobType;
+
+    public OobEligibleDevice(@NonNull String deviceAddress, @OobType int oobType) {
+        mDeviceAddress = deviceAddress;
+        mOobType = oobType;
+    }
+
+    @NonNull
+    public String getDeviceAddress() {
+        return mDeviceAddress;
+    }
+
+    @OobType
+    public int getOobType() {
+        return mOobType;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof OobEligibleDevice)) {
+            return false;
+        }
+        OobEligibleDevice device = (OobEligibleDevice) obj;
+        return Objects.equals(device.mDeviceAddress, mDeviceAddress)
+                && device.mOobType == mOobType;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mDeviceAddress, mOobType);
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/oob/BluetoothRfcommChannel.java b/connected-device-lib/src/com/android/car/connecteddevice/oob/BluetoothRfcommChannel.java
new file mode 100644
index 0000000..1325f11
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/oob/BluetoothRfcommChannel.java
@@ -0,0 +1,159 @@
+/*
+ * 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.connecteddevice.oob;
+
+import static com.android.car.connecteddevice.util.SafeLog.logd;
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothSocket;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.car.connecteddevice.model.OobEligibleDevice;
+
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.time.Duration;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Handles out of band data exchange over a secure RFCOMM channel.
+ */
+public class BluetoothRfcommChannel implements OobChannel {
+    private static final String TAG = "BluetoothRfcommChannel";
+    // TODO (b/159500330) Generate random UUID.
+    private static final UUID RFCOMM_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
+    private static final Duration CONNECT_RETRY_WAIT = Duration.ofSeconds(1);
+    private BluetoothSocket mBluetoothSocket;
+    private AtomicBoolean mIsInterrupted = new AtomicBoolean();
+    @VisibleForTesting
+    Callback mCallback;
+
+    @Override
+    public void completeOobDataExchange(@NonNull OobEligibleDevice device,
+            @NonNull Callback callback) {
+        completeOobDataExchange(device, callback, BluetoothAdapter.getDefaultAdapter());
+    }
+
+    @VisibleForTesting
+    void completeOobDataExchange(OobEligibleDevice device, Callback callback,
+            BluetoothAdapter bluetoothAdapter) {
+        mCallback = callback;
+
+        BluetoothDevice remoteDevice = bluetoothAdapter.getRemoteDevice(device.getDeviceAddress());
+
+        try {
+            mBluetoothSocket = remoteDevice.createRfcommSocketToServiceRecord(RFCOMM_UUID);
+        } catch (IOException e) {
+            notifyFailure("Rfcomm socket creation with " + remoteDevice.getName() + " failed.", e);
+            return;
+        }
+
+        bluetoothAdapter.cancelDiscovery();
+
+        new Thread() {
+            @Override
+            public void run() {
+                while (!isInterrupted()) {
+                    try {
+                        mBluetoothSocket.connect();
+                        break;
+                    } catch (IOException e) {
+                        logd(TAG, "Unable to connect, trying again in "
+                                + CONNECT_RETRY_WAIT.toMillis() + " ms.");
+                    }
+                    try {
+                        Thread.sleep(CONNECT_RETRY_WAIT.toMillis());
+                    } catch (InterruptedException e) {
+                        loge(TAG, "Thread was interrupted before connection could be made.", e);
+                        Thread.currentThread().interrupt();
+                        return;
+                    }
+                }
+
+                notifySuccess();
+            }
+        }.start();
+    }
+
+    @Override
+    public void sendOobData(byte[] oobData) {
+        if (isInterrupted()) {
+            return;
+        }
+        if (mBluetoothSocket == null) {
+            notifyFailure("Bluetooth socket is null, oob data cannot be sent",
+                    /* exception= */ null);
+            return;
+        }
+        try {
+            OutputStream stream = mBluetoothSocket.getOutputStream();
+            stream.write(oobData);
+            stream.flush();
+            stream.close();
+        } catch (IOException e) {
+            notifyFailure("Sending oob data failed", e);
+        }
+    }
+
+    @Override
+    public void interrupt() {
+        logd(TAG, "Interrupt received.");
+        mIsInterrupted.set(true);
+    }
+
+    @VisibleForTesting
+    boolean isInterrupted() {
+        if (!mIsInterrupted.get()) {
+            return false;
+        }
+
+        if (mBluetoothSocket == null) {
+            return true;
+        }
+
+        try {
+            OutputStream stream = mBluetoothSocket.getOutputStream();
+            stream.flush();
+            stream.close();
+        } catch (IOException e) {
+            loge(TAG, "Unable to clean up bluetooth socket on interrupt.", e);
+        }
+
+        mBluetoothSocket = null;
+        return true;
+    }
+
+    private void notifyFailure(@NonNull String message, @Nullable Exception exception) {
+        loge(TAG, message, exception);
+        if (mCallback != null && !isInterrupted()) {
+            mCallback.onOobExchangeFailure();
+        }
+    }
+
+    private void notifySuccess() {
+        if (mCallback != null && !isInterrupted()) {
+            mCallback.onOobExchangeSuccess();
+        }
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/oob/OobChannel.java b/connected-device-lib/src/com/android/car/connecteddevice/oob/OobChannel.java
new file mode 100644
index 0000000..9be7941
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/oob/OobChannel.java
@@ -0,0 +1,68 @@
+/*
+ * 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.connecteddevice.oob;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.connecteddevice.model.OobEligibleDevice;
+
+/**
+ * An interface for handling out of band data exchange. This interface should be implemented for
+ * every out of band channel that is supported in device association.
+ *
+ * Usage is:
+ * <pre>
+ *     1. Define success and failure responses in {@link Callback}
+ *     2. Call {@link OobChannel#completeOobDataExchange(OobEligibleDevice, Callback)}
+ * </pre>
+ */
+public interface OobChannel {
+    /**
+     * Exchange out of band data with a remote device. This must be done prior to the start of the
+     * association with that device.
+     *
+     * @param device The remote device to exchange out of band data with
+     */
+    void completeOobDataExchange(@NonNull OobEligibleDevice device, @NonNull Callback callback);
+
+    /**
+     * Send raw data over the out of band channel
+     *
+     * @param oobData to be sent
+     */
+    void sendOobData(@NonNull byte[] oobData);
+
+    /** Interrupt the current data exchange and prevent callbacks from being issued. */
+    void interrupt();
+
+    /**
+     * Callbacks for {@link OobChannel#completeOobDataExchange(OobEligibleDevice, Callback)}
+     */
+    interface Callback {
+        /**
+         * Called when {@link OobChannel#completeOobDataExchange(OobEligibleDevice, Callback)}
+         * finishes successfully.
+         */
+        void onOobExchangeSuccess();
+
+        /**
+         * Called when {@link OobChannel#completeOobDataExchange(OobEligibleDevice, Callback)}
+         * fails.
+         */
+        void onOobExchangeFailure();
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/oob/OobConnectionManager.java b/connected-device-lib/src/com/android/car/connecteddevice/oob/OobConnectionManager.java
new file mode 100644
index 0000000..f1564dd
--- /dev/null
+++ b/connected-device-lib/src/com/android/car/connecteddevice/oob/OobConnectionManager.java
@@ -0,0 +1,158 @@
+/*
+ * 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.connecteddevice.oob;
+
+import static com.android.car.connecteddevice.util.SafeLog.loge;
+
+import android.security.keystore.KeyProperties;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+
+import com.google.common.primitives.Bytes;
+
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.Arrays;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.KeyGenerator;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * This is a class that manages a token--{@link OobConnectionManager#mEncryptionKey}-- passed via
+ * an out of band {@link OobChannel} that is distinct from the channel that is currently being
+ * secured.
+ * <p>Intended usage:
+*  <pre>{@code
+ *  OobConnectionManager oobConncetionManager = new OobConnectionManager();
+ *  oobConnectionManager.startOobExchange(channel);
+ *  }</pre>
+ * <pre>{@code When a message is received:
+ *   verificationCode = OobConnectionManager#decryptVerificationCode(byte[])
+ *   check that verification code is valid
+ *   if it is:
+ *     encryptedMessage =  OobConnectionManager#encryptVerificationCode(byte[])
+ *     send encryptedMessage
+ *     verify handshake
+ *   otherwise:
+ *     fail handshake
+ * }</pre>
+ *
+ * <pre>{@code
+ * when oobData is received via the out of band channel:
+ *   OobConnectionManager#setOobData(byte[])
+ *
+ * encryptedMessage = OobConnectionManager#encryptVerificationCode(byte[])
+ * sendMessage
+ * when a message is received:
+ *   verificationCode = OobConnectionManager#decryptVerificationCode(byte[])
+ *   check that verification code is valid
+ *   if it is:
+ *     verify handshake
+ *   otherwise:
+ *     fail handshake
+ * }</pre>
+ */
+public class OobConnectionManager {
+    private static final String TAG = "OobConnectionManager";
+    private static final String ALGORITHM = "AES/GCM/NoPadding";
+    // The nonce length is chosen to be consistent with the standard specification:
+    // Section 8.2 of https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf
+    @VisibleForTesting
+    static final int NONCE_LENGTH_BYTES = 12;
+
+    private final Cipher mCipher;
+    @VisibleForTesting
+    byte[] mEncryptionIv = new byte[NONCE_LENGTH_BYTES];
+    @VisibleForTesting
+    byte[] mDecryptionIv = new byte[NONCE_LENGTH_BYTES];
+    @VisibleForTesting
+    SecretKey mEncryptionKey;
+
+    public OobConnectionManager() {
+        try {
+            mCipher = Cipher.getInstance(ALGORITHM);
+        } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
+            loge(TAG, "Unable to create cipher with " + ALGORITHM + ".", e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Encrypts {@param verificationCode} using {@link OobConnectionManager#mEncryptionKey}
+     */
+    @NonNull
+    public byte[] encryptVerificationCode(@NonNull byte[] verificationCode)
+            throws InvalidAlgorithmParameterException,
+            BadPaddingException, InvalidKeyException, IllegalBlockSizeException {
+        mCipher.init(Cipher.ENCRYPT_MODE, mEncryptionKey, new IvParameterSpec(mEncryptionIv));
+        return mCipher.doFinal(verificationCode);
+    }
+
+    /**
+     * Decrypts {@param encryptedMessage} using {@link OobConnectionManager#mEncryptionKey}
+     */
+    @NonNull
+    public byte[] decryptVerificationCode(@NonNull byte[] encryptedMessage)
+            throws InvalidAlgorithmParameterException, BadPaddingException, InvalidKeyException,
+            IllegalBlockSizeException {
+        mCipher.init(Cipher.DECRYPT_MODE, mEncryptionKey, new IvParameterSpec(mDecryptionIv));
+        return mCipher.doFinal(encryptedMessage);
+    }
+
+    void setOobData(@NonNull byte[] oobData) {
+        mEncryptionIv = Arrays.copyOfRange(oobData, 0, NONCE_LENGTH_BYTES);
+        mDecryptionIv = Arrays.copyOfRange(oobData, NONCE_LENGTH_BYTES,
+                NONCE_LENGTH_BYTES * 2);
+        mEncryptionKey = new SecretKeySpec(
+                Arrays.copyOfRange(oobData, NONCE_LENGTH_BYTES * 2, oobData.length),
+                KeyProperties.KEY_ALGORITHM_AES);
+    }
+
+    /**
+     * Start the out of band exchange with a given {@link OobChannel}.
+     *
+     * @param oobChannel Channel to be used for exchange.
+     * @return {@code true} if exchange started successfully. {@code false} if an error occurred.
+     */
+    public boolean startOobExchange(@NonNull OobChannel oobChannel) {
+        KeyGenerator keyGenerator = null;
+        try {
+            keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES);
+        } catch (NoSuchAlgorithmException e) {
+            loge(TAG, "Unable to get AES key generator.", e);
+            return false;
+        }
+        mEncryptionKey = keyGenerator.generateKey();
+
+        SecureRandom secureRandom = new SecureRandom();
+        secureRandom.nextBytes(mEncryptionIv);
+        secureRandom.nextBytes(mDecryptionIv);
+
+        oobChannel.sendOobData(
+                Bytes.concat(mDecryptionIv, mEncryptionIv, mEncryptionKey.getEncoded()));
+        return true;
+    }
+}
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/storage/ConnectedDeviceStorage.java b/connected-device-lib/src/com/android/car/connecteddevice/storage/ConnectedDeviceStorage.java
index 19d894e..b62a43c 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/storage/ConnectedDeviceStorage.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/storage/ConnectedDeviceStorage.java
@@ -20,8 +20,6 @@
 import static com.android.car.connecteddevice.util.SafeLog.loge;
 import static com.android.car.connecteddevice.util.SafeLog.logw;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.content.Context;
 import android.content.SharedPreferences;
@@ -29,11 +27,13 @@
 import android.security.keystore.KeyProperties;
 import android.util.Base64;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
 import androidx.room.Room;
 
 import com.android.car.connecteddevice.R;
 import com.android.car.connecteddevice.model.AssociatedDevice;
-import com.android.internal.annotations.VisibleForTesting;
 
 import java.io.IOException;
 import java.security.InvalidAlgorithmParameterException;
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/util/ByteUtils.java b/connected-device-lib/src/com/android/car/connecteddevice/util/ByteUtils.java
index 3d07227..adffa73 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/util/ByteUtils.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/util/ByteUtils.java
@@ -16,10 +16,11 @@
 
 package com.android.car.connecteddevice.util;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.annotation.SuppressLint;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/util/RemoteCallbackBinder.java b/connected-device-lib/src/com/android/car/connecteddevice/util/RemoteCallbackBinder.java
index e18366b..98ad4db 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/util/RemoteCallbackBinder.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/util/RemoteCallbackBinder.java
@@ -64,7 +64,14 @@
 
     @Override
     public boolean equals(Object obj) {
-        return mCallbackBinder.equals(obj);
+        if (obj == this) {
+            return true;
+        }
+        if (!(obj instanceof RemoteCallbackBinder)) {
+            return false;
+        }
+        RemoteCallbackBinder remoteCallbackBinder = (RemoteCallbackBinder) obj;
+        return mCallbackBinder.equals(remoteCallbackBinder.mCallbackBinder);
     }
 
     @Override
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/util/SafeLog.java b/connected-device-lib/src/com/android/car/connecteddevice/util/SafeLog.java
index 1efae3e..8419e0f 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/util/SafeLog.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/util/SafeLog.java
@@ -16,10 +16,11 @@
 
 package com.android.car.connecteddevice.util;
 
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 /**
  * Convenience logging methods that respect whitelisted tags.
  */
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/util/ScanDataAnalyzer.java b/connected-device-lib/src/com/android/car/connecteddevice/util/ScanDataAnalyzer.java
index 6748bba..fcd6dc5 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/util/ScanDataAnalyzer.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/util/ScanDataAnalyzer.java
@@ -18,9 +18,10 @@
 
 import static com.android.car.connecteddevice.util.SafeLog.logw;
 
-import android.annotation.NonNull;
 import android.bluetooth.le.ScanResult;
 
+import androidx.annotation.NonNull;
+
 import java.math.BigInteger;
 
 /**
diff --git a/connected-device-lib/src/com/android/car/connecteddevice/util/ThreadSafeCallbacks.java b/connected-device-lib/src/com/android/car/connecteddevice/util/ThreadSafeCallbacks.java
index b3d3ef1..152c464 100644
--- a/connected-device-lib/src/com/android/car/connecteddevice/util/ThreadSafeCallbacks.java
+++ b/connected-device-lib/src/com/android/car/connecteddevice/util/ThreadSafeCallbacks.java
@@ -16,8 +16,7 @@
 
 package com.android.car.connecteddevice.util;
 
-import android.annotation.CallbackExecutor;
-import android.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
@@ -33,7 +32,7 @@
     private final ConcurrentHashMap<T, Executor> mCallbacks = new ConcurrentHashMap<>();
 
     /** Add a callback to be notified on its executor. */
-    public void add(@NonNull T callback, @NonNull @CallbackExecutor Executor executor) {
+    public void add(@NonNull T callback, @NonNull Executor executor) {
         mCallbacks.put(callback, executor);
     }
 
diff --git a/connected-device-lib/tests/unit/Android.bp b/connected-device-lib/tests/unit/Android.bp
index e550b54..92810a4 100644
--- a/connected-device-lib/tests/unit/Android.bp
+++ b/connected-device-lib/tests/unit/Android.bp
@@ -45,7 +45,8 @@
         "libstaticjvmtiagent",
     ],
 
-    platform_apis: true,
+    sdk_version: "system_current",
+    min_sdk_version: "28",
 
     certificate: "platform",
 
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ConnectedDeviceManagerTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ConnectedDeviceManagerTest.java
index 3e345c2..fe0386c 100644
--- a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ConnectedDeviceManagerTest.java
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ConnectedDeviceManagerTest.java
@@ -31,18 +31,15 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.annotation.NonNull;
-
+import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
 import com.android.car.connecteddevice.ConnectedDeviceManager.ConnectionCallback;
 import com.android.car.connecteddevice.ConnectedDeviceManager.DeviceAssociationCallback;
 import com.android.car.connecteddevice.ConnectedDeviceManager.DeviceCallback;
 import com.android.car.connecteddevice.ConnectedDeviceManager.MessageDeliveryDelegate;
-import com.android.car.connecteddevice.ble.CarBleCentralManager;
-import com.android.car.connecteddevice.ble.CarBleManager;
-import com.android.car.connecteddevice.ble.CarBlePeripheralManager;
-import com.android.car.connecteddevice.ble.DeviceMessage;
+import com.android.car.connecteddevice.connection.CarBluetoothManager;
+import com.android.car.connecteddevice.connection.DeviceMessage;
 import com.android.car.connecteddevice.model.AssociatedDevice;
 import com.android.car.connecteddevice.model.ConnectedDevice;
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
@@ -87,10 +84,7 @@
     private ConnectedDeviceStorage mMockStorage;
 
     @Mock
-    private CarBlePeripheralManager mMockPeripheralManager;
-
-    @Mock
-    private CarBleCentralManager mMockCentralManager;
+    private CarBluetoothManager mMockCarBluetoothManager;
 
     private ConnectedDeviceManager mConnectedDeviceManager;
 
@@ -106,8 +100,8 @@
                 .startMocking();
         ArgumentCaptor<AssociatedDeviceCallback> callbackCaptor = ArgumentCaptor
                 .forClass(AssociatedDeviceCallback.class);
-        mConnectedDeviceManager = new ConnectedDeviceManager(mMockStorage, mMockCentralManager,
-            mMockPeripheralManager);
+        mConnectedDeviceManager = new ConnectedDeviceManager(mMockCarBluetoothManager,
+                mMockStorage);
         verify(mMockStorage).setAssociatedDeviceCallback(callbackCaptor.capture());
         when(mMockStorage.getActiveUserAssociatedDevices()).thenReturn(mUserDevices);
         when(mMockStorage.getActiveUserAssociatedDeviceIds()).thenReturn(mUserDeviceIds);
@@ -129,7 +123,7 @@
 
     @Test
     public void getActiveUserConnectedDevices_includesNewlyConnectedDevice() {
-        String deviceId = connectNewDevice(mMockCentralManager);
+        String deviceId = connectNewDevice();
         List<ConnectedDevice> activeUserDevices =
                 mConnectedDeviceManager.getActiveUserConnectedDevices();
         ConnectedDevice expectedDevice = new ConnectedDevice(deviceId, /* deviceName= */ null,
@@ -143,14 +137,14 @@
         String otherUserDeviceId = UUID.randomUUID().toString();
         when(mMockStorage.getActiveUserAssociatedDeviceIds()).thenReturn(
                 Collections.singletonList(otherUserDeviceId));
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockCentralManager);
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
         assertThat(mConnectedDeviceManager.getActiveUserConnectedDevices()).isEmpty();
     }
 
     @Test
     public void getActiveUserConnectedDevices_reflectsSecureChannelEstablished() {
-        String deviceId = connectNewDevice(mMockCentralManager);
-        mConnectedDeviceManager.onSecureChannelEstablished(deviceId, mMockCentralManager);
+        String deviceId = connectNewDevice();
+        mConnectedDeviceManager.onSecureChannelEstablished(deviceId);
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         assertThat(connectedDevice.hasSecureChannel()).isTrue();
@@ -158,21 +152,14 @@
 
     @Test
     public void getActiveUserConnectedDevices_excludesDisconnectedDevice() {
-        String deviceId = connectNewDevice(mMockCentralManager);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockCentralManager);
+        String deviceId = connectNewDevice();
+        mConnectedDeviceManager.removeConnectedDevice(deviceId);
         assertThat(mConnectedDeviceManager.getActiveUserConnectedDevices()).isEmpty();
     }
 
-    @Test
-    public void getActiveUserConnectedDevices_unaffectedByOtherManagerDisconnect() {
-        String deviceId = connectNewDevice(mMockCentralManager);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockPeripheralManager);
-        assertThat(mConnectedDeviceManager.getActiveUserConnectedDevices()).hasSize(1);
-    }
-
     @Test(expected = IllegalStateException.class)
     public void sendMessageSecurely_throwsIllegalStateExceptionIfNoSecureChannel() {
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice device = mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         UUID recipientId = UUID.randomUUID();
         byte[] message = ByteUtils.randomBytes(10);
@@ -181,37 +168,38 @@
 
     @Test
     public void sendMessageSecurely_sendsEncryptedMessage() {
-        String deviceId = connectNewDevice(mMockCentralManager);
-        mConnectedDeviceManager.onSecureChannelEstablished(deviceId, mMockCentralManager);
+        String deviceId = connectNewDevice();
+        mConnectedDeviceManager.onSecureChannelEstablished(deviceId);
         ConnectedDevice device = mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         UUID recipientId = UUID.randomUUID();
         byte[] message = ByteUtils.randomBytes(10);
         mConnectedDeviceManager.sendMessageSecurely(device, recipientId, message);
         ArgumentCaptor<DeviceMessage> messageCaptor = ArgumentCaptor.forClass(DeviceMessage.class);
-        verify(mMockCentralManager).sendMessage(eq(deviceId), messageCaptor.capture());
+        verify(mMockCarBluetoothManager).sendMessage(eq(deviceId), messageCaptor.capture());
         assertThat(messageCaptor.getValue().isMessageEncrypted()).isTrue();
     }
 
     @Test
     public void sendMessageSecurely_doesNotSendIfDeviceDisconnected() {
-        String deviceId = connectNewDevice(mMockCentralManager);
+        String deviceId = connectNewDevice();
         ConnectedDevice device = mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockCentralManager);
+        mConnectedDeviceManager.removeConnectedDevice(deviceId);
         UUID recipientId = UUID.randomUUID();
         byte[] message = ByteUtils.randomBytes(10);
         mConnectedDeviceManager.sendMessageSecurely(device, recipientId, message);
-        verify(mMockCentralManager, times(0)).sendMessage(eq(deviceId), any(DeviceMessage.class));
+        verify(mMockCarBluetoothManager, times(0)).sendMessage(eq(deviceId),
+                any(DeviceMessage.class));
     }
 
     @Test
     public void sendMessageUnsecurely_sendsMessageWithoutEncryption() {
-        String deviceId = connectNewDevice(mMockCentralManager);
+        String deviceId = connectNewDevice();
         ConnectedDevice device = mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         UUID recipientId = UUID.randomUUID();
         byte[] message = ByteUtils.randomBytes(10);
         mConnectedDeviceManager.sendMessageUnsecurely(device, recipientId, message);
         ArgumentCaptor<DeviceMessage> messageCaptor = ArgumentCaptor.forClass(DeviceMessage.class);
-        verify(mMockCentralManager).sendMessage(eq(deviceId), messageCaptor.capture());
+        verify(mMockCarBluetoothManager).sendMessage(eq(deviceId), messageCaptor.capture());
         assertThat(messageCaptor.getValue().isMessageEncrypted()).isFalse();
     }
 
@@ -222,7 +210,7 @@
         ConnectionCallback connectionCallback = createConnectionCallback(semaphore);
         mConnectedDeviceManager.registerActiveUserConnectionCallback(connectionCallback,
                 mCallbackExecutor);
-        String deviceId = connectNewDevice(mMockCentralManager);
+        String deviceId = connectNewDevice();
         assertThat(tryAcquire(semaphore)).isTrue();
         ArgumentCaptor<ConnectedDevice> deviceCaptor =
                 ArgumentCaptor.forClass(ConnectedDevice.class);
@@ -243,7 +231,7 @@
         String otherUserDeviceId = UUID.randomUUID().toString();
         when(mMockStorage.getActiveUserAssociatedDeviceIds()).thenReturn(
                 Collections.singletonList(otherUserDeviceId));
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockCentralManager);
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
         assertThat(tryAcquire(semaphore)).isFalse();
     }
 
@@ -251,11 +239,11 @@
     public void connectionCallback_onDeviceConnectedNotInvokedForDifferentBleManager()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        String deviceId = connectNewDevice(mMockPeripheralManager);
+        String deviceId = connectNewDevice();
         ConnectionCallback connectionCallback = createConnectionCallback(semaphore);
         mConnectedDeviceManager.registerActiveUserConnectionCallback(connectionCallback,
                 mCallbackExecutor);
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockCentralManager);
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
         assertThat(tryAcquire(semaphore)).isFalse();
     }
 
@@ -263,11 +251,11 @@
     public void connectionCallback_onDeviceDisconnectedInvokedForActiveUserDevice()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        String deviceId = connectNewDevice(mMockCentralManager);
+        String deviceId = connectNewDevice();
         ConnectionCallback connectionCallback = createConnectionCallback(semaphore);
         mConnectedDeviceManager.registerActiveUserConnectionCallback(connectionCallback,
                 mCallbackExecutor);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockCentralManager);
+        mConnectedDeviceManager.removeConnectedDevice(deviceId);
         assertThat(tryAcquire(semaphore)).isTrue();
         ArgumentCaptor<ConnectedDevice> deviceCaptor =
                 ArgumentCaptor.forClass(ConnectedDevice.class);
@@ -280,11 +268,11 @@
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
         String deviceId = UUID.randomUUID().toString();
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockCentralManager);
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
         ConnectionCallback connectionCallback = createConnectionCallback(semaphore);
         mConnectedDeviceManager.registerActiveUserConnectionCallback(connectionCallback,
                 mCallbackExecutor);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockCentralManager);
+        mConnectedDeviceManager.removeConnectedDevice(deviceId);
         assertThat(tryAcquire(semaphore)).isFalse();
     }
 
@@ -296,14 +284,14 @@
         mConnectedDeviceManager.registerActiveUserConnectionCallback(connectionCallback,
                 mCallbackExecutor);
         mConnectedDeviceManager.unregisterConnectionCallback(connectionCallback);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         assertThat(tryAcquire(semaphore)).isFalse();
     }
 
     @Test
     public void registerDeviceCallback_blacklistsDuplicateRecipientId()
             throws InterruptedException {
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         Semaphore firstSemaphore = new Semaphore(0);
@@ -344,14 +332,13 @@
     @Test
     public void deviceCallback_onSecureChannelEstablishedInvoked() throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         DeviceCallback deviceCallback = createDeviceCallback(semaphore);
         mConnectedDeviceManager.registerDeviceCallback(connectedDevice, mRecipientId,
                 deviceCallback, mCallbackExecutor);
-        mConnectedDeviceManager.onSecureChannelEstablished(connectedDevice.getDeviceId(),
-                mMockCentralManager);
+        mConnectedDeviceManager.onSecureChannelEstablished(connectedDevice.getDeviceId());
         connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         assertThat(tryAcquire(semaphore)).isTrue();
@@ -359,27 +346,10 @@
     }
 
     @Test
-    public void deviceCallback_onSecureChannelEstablishedNotInvokedWithSecondBleManager()
-            throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
-        ConnectedDevice connectedDevice =
-                mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
-        mConnectedDeviceManager.onSecureChannelEstablished(connectedDevice.getDeviceId(),
-                mMockCentralManager);
-        DeviceCallback deviceCallback = createDeviceCallback(semaphore);
-        mConnectedDeviceManager.registerDeviceCallback(connectedDevice, mRecipientId,
-                deviceCallback, mCallbackExecutor);
-        mConnectedDeviceManager.onSecureChannelEstablished(connectedDevice.getDeviceId(),
-                mMockPeripheralManager);
-        assertThat(tryAcquire(semaphore)).isFalse();
-    }
-
-    @Test
     public void deviceCallback_onMessageReceivedInvokedForSameRecipientId()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         DeviceCallback deviceCallback = createDeviceCallback(semaphore);
@@ -396,7 +366,7 @@
     public void deviceCallback_onMessageReceivedNotInvokedForDifferentRecipientId()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         DeviceCallback deviceCallback = createDeviceCallback(semaphore);
@@ -411,7 +381,7 @@
     @Test
     public void deviceCallback_onDeviceErrorInvokedOnChannelError() throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         DeviceCallback deviceCallback = createDeviceCallback(semaphore);
@@ -426,7 +396,7 @@
     public void unregisterDeviceCallback_removesCallbackAndNotInvoked()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         DeviceCallback deviceCallback = createDeviceCallback(semaphore);
@@ -434,8 +404,7 @@
                 deviceCallback, mCallbackExecutor);
         mConnectedDeviceManager.unregisterDeviceCallback(connectedDevice, mRecipientId,
                 deviceCallback);
-        mConnectedDeviceManager.onSecureChannelEstablished(connectedDevice.getDeviceId(),
-                mMockPeripheralManager);
+        mConnectedDeviceManager.onSecureChannelEstablished(connectedDevice.getDeviceId());
         assertThat(tryAcquire(semaphore)).isFalse();
     }
 
@@ -443,7 +412,7 @@
     public void registerDeviceCallback_sendsMissedMessageAfterRegistration()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         byte[] payload = ByteUtils.randomBytes(10);
@@ -460,7 +429,7 @@
     public void registerDeviceCallback_sendsMultipleMissedMessagesAfterRegistration()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         byte[] payload1 = ByteUtils.randomBytes(10);
@@ -481,7 +450,7 @@
     public void registerDeviceCallback_doesNotSendMissedMessageForDifferentRecipient()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         byte[] payload = ByteUtils.randomBytes(10);
@@ -497,8 +466,8 @@
     public void registerDeviceCallback_doesNotSendMissedMessageForDifferentDevice()
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        connectNewDevice(mMockCentralManager);
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
+        connectNewDevice();
         List<ConnectedDevice> connectedDevices =
                 mConnectedDeviceManager.getActiveUserConnectedDevices();
         ConnectedDevice connectedDevice = connectedDevices.get(0);
@@ -516,7 +485,7 @@
     public void onAssociationCompleted_disconnectsOriginalDeviceAndReconnectsAsActiveUser()
             throws InterruptedException {
         String deviceId = UUID.randomUUID().toString();
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockPeripheralManager);
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
         Semaphore semaphore = new Semaphore(0);
         ConnectionCallback connectionCallback = createConnectionCallback(semaphore);
         mConnectedDeviceManager.registerActiveUserConnectionCallback(connectionCallback,
@@ -579,10 +548,10 @@
                 TEST_DEVICE_NAME, /* isConnectionEnabled= */ true);
         when(mMockStorage.getActiveUserAssociatedDevices()).thenReturn(
                 Collections.singletonList(device));
-        clearInvocations(mMockPeripheralManager);
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockPeripheralManager);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockPeripheralManager);
-        verify(mMockPeripheralManager, timeout(1000))
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
+        clearInvocations(mMockCarBluetoothManager);
+        mConnectedDeviceManager.removeConnectedDevice(deviceId);
+        verify(mMockCarBluetoothManager, timeout(1000))
                 .connectToDevice(eq(UUID.fromString(deviceId)));
     }
 
@@ -596,15 +565,15 @@
                 TEST_DEVICE_NAME, /* isConnectionEnabled= */ true);
         when(mMockStorage.getActiveUserAssociatedDevices()).thenReturn(
                 Collections.singletonList(userDevice));
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockPeripheralManager);
-        clearInvocations(mMockPeripheralManager);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockPeripheralManager);
-        verify(mMockPeripheralManager, timeout(1000))
-                .connectToDevice(eq(UUID.fromString(userDeviceId)));
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
+        clearInvocations(mMockCarBluetoothManager);
+        mConnectedDeviceManager.removeConnectedDevice(deviceId);
+        verify(mMockCarBluetoothManager, timeout(1000)).connectToDevice(
+                eq(UUID.fromString(userDeviceId)));
     }
 
     @Test
-    public void removeConnectedDevice__doesNotAdvertiseForNonActiveUserDeviceNotLastDevice() {
+    public void removeConnectedDevice_doesNotAdvertiseForNonActiveUserDeviceNotLastDevice() {
         String deviceId = UUID.randomUUID().toString();
         String userDeviceId = UUID.randomUUID().toString();
         when(mMockStorage.getActiveUserAssociatedDeviceIds()).thenReturn(
@@ -613,11 +582,11 @@
                 TEST_DEVICE_NAME, /* isConnectionEnabled= */ true);
         when(mMockStorage.getActiveUserAssociatedDevices()).thenReturn(
                 Collections.singletonList(userDevice));
-        clearInvocations(mMockPeripheralManager);
-        mConnectedDeviceManager.addConnectedDevice(deviceId, mMockPeripheralManager);
-        mConnectedDeviceManager.addConnectedDevice(userDeviceId, mMockCentralManager);
-        mConnectedDeviceManager.removeConnectedDevice(deviceId, mMockPeripheralManager);
-        verify(mMockPeripheralManager, timeout(1000).times(0))
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
+        mConnectedDeviceManager.addConnectedDevice(userDeviceId);
+        clearInvocations(mMockCarBluetoothManager);
+        mConnectedDeviceManager.removeConnectedDevice(deviceId);
+        verify(mMockCarBluetoothManager, timeout(1000).times(0))
                 .connectToDevice(any());
     }
 
@@ -630,9 +599,9 @@
 
     @Test
     public void removeActiveUserAssociatedDevice_disconnectsIfConnected() {
-        String deviceId = connectNewDevice(mMockPeripheralManager);
+        String deviceId = connectNewDevice();
         mConnectedDeviceManager.removeActiveUserAssociatedDevice(deviceId);
-        verify(mMockPeripheralManager).disconnectDevice(deviceId);
+        verify(mMockCarBluetoothManager).disconnectDevice(deviceId);
     }
 
     @Test
@@ -651,14 +620,14 @@
 
     @Test
     public void disableAssociatedDeviceConnection_disconnectsIfConnected() {
-        String deviceId = connectNewDevice(mMockPeripheralManager);
+        String deviceId = connectNewDevice();
         mConnectedDeviceManager.disableAssociatedDeviceConnection(deviceId);
-        verify(mMockPeripheralManager).disconnectDevice(deviceId);
+        verify(mMockCarBluetoothManager).disconnectDevice(deviceId);
     }
 
     @Test
     public void onMessageReceived_deliversMessageIfDelegateIsNull() throws InterruptedException {
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         Semaphore semaphore = new Semaphore(0);
@@ -673,7 +642,7 @@
 
     @Test
     public void onMessageReceived_deliversMessageIfDelegateAccepts() throws InterruptedException {
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         Semaphore semaphore = new Semaphore(0);
@@ -690,7 +659,7 @@
     @Test
     public void onMessageReceived_doesNotDeliverMessageIfDelegateRejects()
             throws InterruptedException {
-        connectNewDevice(mMockCentralManager);
+        connectNewDevice();
         ConnectedDevice connectedDevice =
                 mConnectedDeviceManager.getActiveUserConnectedDevices().get(0);
         Semaphore semaphore = new Semaphore(0);
@@ -705,13 +674,13 @@
     }
 
     @NonNull
-    private String connectNewDevice(@NonNull CarBleManager carBleManager) {
+    private String connectNewDevice() {
         String deviceId = UUID.randomUUID().toString();
         AssociatedDevice device = new AssociatedDevice(deviceId, TEST_DEVICE_ADDRESS,
                 TEST_DEVICE_NAME, /* isConnectionEnabled= */ true);
         mUserDeviceIds.add(deviceId);
         mUserDevices.add(device);
-        mConnectedDeviceManager.addConnectedDevice(deviceId, carBleManager);
+        mConnectedDeviceManager.addConnectedDevice(deviceId);
         return deviceId;
     }
 
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/CarBlePeripheralManagerTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/CarBlePeripheralManagerTest.java
deleted file mode 100644
index ac58a97..0000000
--- a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/CarBlePeripheralManagerTest.java
+++ /dev/null
@@ -1,281 +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 com.android.car.connecteddevice.ble;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mockitoSession;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.annotation.NonNull;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.le.AdvertiseCallback;
-import android.bluetooth.le.AdvertiseData;
-import android.bluetooth.le.AdvertiseSettings;
-import android.car.encryptionrunner.EncryptionRunnerFactory;
-import android.car.encryptionrunner.Key;
-import android.os.ParcelUuid;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.car.connecteddevice.AssociationCallback;
-import com.android.car.connecteddevice.model.AssociatedDevice;
-import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
-import com.android.car.connecteddevice.util.ByteUtils;
-
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoSession;
-import org.mockito.quality.Strictness;
-
-import java.time.Duration;
-import java.util.UUID;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-
-@RunWith(AndroidJUnit4.class)
-public class CarBlePeripheralManagerTest {
-    private static final UUID ASSOCIATION_SERVICE_UUID = UUID.randomUUID();
-    private static final UUID RECONNECT_SERVICE_UUID = UUID.randomUUID();
-    private static final UUID RECONNECT_DATA_UUID = UUID.randomUUID();
-    private static final UUID WRITE_UUID = UUID.randomUUID();
-    private static final UUID READ_UUID = UUID.randomUUID();
-    private static final int DEVICE_NAME_LENGTH_LIMIT = 8;
-    private static final String TEST_REMOTE_DEVICE_ADDRESS = "00:11:22:33:AA:BB";
-    private static final UUID TEST_REMOTE_DEVICE_ID = UUID.randomUUID();
-    private static final String TEST_VERIFICATION_CODE = "000000";
-    private static final byte[] TEST_KEY = "Key".getBytes();
-    private static final Duration RECONNECT_ADVERTISEMENT_DURATION = Duration.ofSeconds(2);
-    private static final int DEFAULT_MTU_SIZE = 23;
-
-    private static String sAdapterName;
-
-    @Mock
-    private BlePeripheralManager mMockPeripheralManager;
-    @Mock
-    private ConnectedDeviceStorage mMockStorage;
-
-    private CarBlePeripheralManager mCarBlePeripheralManager;
-
-    private MockitoSession mMockitoSession;
-
-    @BeforeClass
-    public static void beforeSetUp() {
-        sAdapterName = BluetoothAdapter.getDefaultAdapter().getName();
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        mMockitoSession = mockitoSession()
-                .initMocks(this)
-                .strictness(Strictness.WARN)
-                .startMocking();
-        mCarBlePeripheralManager = new CarBlePeripheralManager(mMockPeripheralManager, mMockStorage,
-                ASSOCIATION_SERVICE_UUID, RECONNECT_SERVICE_UUID, RECONNECT_DATA_UUID,
-                WRITE_UUID, READ_UUID, RECONNECT_ADVERTISEMENT_DURATION, DEFAULT_MTU_SIZE);
-    }
-
-    @After
-    public void tearDown() {
-        if (mCarBlePeripheralManager != null) {
-            mCarBlePeripheralManager.stop();
-        }
-        if (mMockitoSession != null) {
-            mMockitoSession.finishMocking();
-        }
-    }
-
-    @AfterClass
-    public static void afterTearDown() {
-        BluetoothAdapter.getDefaultAdapter().setName(sAdapterName);
-    }
-
-    @Test
-    public void testStartAssociationAdvertisingSuccess() {
-        Semaphore semaphore = new Semaphore(0);
-        AssociationCallback callback = createAssociationCallback(semaphore);
-        String testDeviceName = getNameForAssociation();
-        startAssociation(callback, testDeviceName);
-        ArgumentCaptor<AdvertiseData> dataCaptor = ArgumentCaptor.forClass(AdvertiseData.class);
-        verify(mMockPeripheralManager, timeout(3000)).startAdvertising(any(),
-                dataCaptor.capture(), any());
-        AdvertiseData data = dataCaptor.getValue();
-        assertThat(data.getIncludeDeviceName()).isTrue();
-        ParcelUuid expected = new ParcelUuid(ASSOCIATION_SERVICE_UUID);
-        assertThat(data.getServiceUuids().get(0)).isEqualTo(expected);
-        assertThat(BluetoothAdapter.getDefaultAdapter().getName()).isEqualTo(testDeviceName);
-    }
-
-    @Test
-    public void testStartAssociationAdvertisingFailure() throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        AssociationCallback callback = createAssociationCallback(semaphore);
-        startAssociation(callback, getNameForAssociation());
-        ArgumentCaptor<AdvertiseCallback> callbackCaptor =
-                ArgumentCaptor.forClass(AdvertiseCallback.class);
-        verify(mMockPeripheralManager, timeout(3000))
-                .startAdvertising(any(), any(), callbackCaptor.capture());
-        AdvertiseCallback advertiseCallback = callbackCaptor.getValue();
-        int testErrorCode = 2;
-        advertiseCallback.onStartFailure(testErrorCode);
-        assertThat(tryAcquire(semaphore)).isTrue();
-        verify(callback).onAssociationStartFailure();
-    }
-
-    @Test
-    public void testNotifyAssociationSuccess() throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        AssociationCallback callback = createAssociationCallback(semaphore);
-        String testDeviceName = getNameForAssociation();
-        startAssociation(callback, testDeviceName);
-        ArgumentCaptor<AdvertiseCallback> callbackCaptor =
-                ArgumentCaptor.forClass(AdvertiseCallback.class);
-        verify(mMockPeripheralManager, timeout(3000))
-                .startAdvertising(any(), any(), callbackCaptor.capture());
-        AdvertiseCallback advertiseCallback = callbackCaptor.getValue();
-        AdvertiseSettings settings = new AdvertiseSettings.Builder().build();
-        advertiseCallback.onStartSuccess(settings);
-        assertThat(tryAcquire(semaphore)).isTrue();
-        verify(callback).onAssociationStartSuccess(eq(testDeviceName));
-    }
-
-    @Test
-    public void testShowVerificationCode() throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        AssociationCallback callback = createAssociationCallback(semaphore);
-        AssociationSecureChannel channel = getChannelForAssociation(callback);
-        channel.getShowVerificationCodeListener().showVerificationCode(TEST_VERIFICATION_CODE);
-        assertThat(tryAcquire(semaphore)).isTrue();
-        verify(callback).onVerificationCodeAvailable(eq(TEST_VERIFICATION_CODE));
-    }
-
-    @Test
-    public void testAssociationSuccess() throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        AssociationCallback callback = createAssociationCallback(semaphore);
-        SecureBleChannel channel = getChannelForAssociation(callback);
-        SecureBleChannel.Callback channelCallback = channel.getCallback();
-        assertThat(channelCallback).isNotNull();
-        channelCallback.onDeviceIdReceived(TEST_REMOTE_DEVICE_ID.toString());
-        Key key = EncryptionRunnerFactory.newDummyRunner().keyOf(TEST_KEY);
-        channelCallback.onSecureChannelEstablished();
-        ArgumentCaptor<AssociatedDevice> deviceCaptor =
-                ArgumentCaptor.forClass(AssociatedDevice.class);
-        verify(mMockStorage).addAssociatedDeviceForActiveUser(deviceCaptor.capture());
-        AssociatedDevice device = deviceCaptor.getValue();
-        assertThat(device.getDeviceId()).isEqualTo(TEST_REMOTE_DEVICE_ID.toString());
-        assertThat(tryAcquire(semaphore)).isTrue();
-        verify(callback).onAssociationCompleted(eq(TEST_REMOTE_DEVICE_ID.toString()));
-    }
-
-    @Test
-    public void testAssociationFailure_channelError() throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        AssociationCallback callback = createAssociationCallback(semaphore);
-        SecureBleChannel channel = getChannelForAssociation(callback);
-        SecureBleChannel.Callback channelCallback = channel.getCallback();
-        int testErrorCode = 1;
-        assertThat(channelCallback).isNotNull();
-        channelCallback.onDeviceIdReceived(TEST_REMOTE_DEVICE_ID.toString());
-        channelCallback.onEstablishSecureChannelFailure(testErrorCode);
-        assertThat(tryAcquire(semaphore)).isTrue();
-        verify(callback).onAssociationError(eq(testErrorCode));
-    }
-
-    @Test
-    public void connectToDevice_stopsAdvertisingAfterTimeout() {
-        when(mMockStorage.hashWithChallengeSecret(any(), any()))
-                .thenReturn(ByteUtils.randomBytes(32));
-        mCarBlePeripheralManager.connectToDevice(UUID.randomUUID());
-        ArgumentCaptor<AdvertiseCallback> callbackCaptor =
-                ArgumentCaptor.forClass(AdvertiseCallback.class);
-        verify(mMockPeripheralManager).startAdvertising(any(), any(), callbackCaptor.capture());
-        callbackCaptor.getValue().onStartSuccess(null);
-        verify(mMockPeripheralManager,
-                timeout(RECONNECT_ADVERTISEMENT_DURATION.plusSeconds(1).toMillis()))
-                .stopAdvertising(any(AdvertiseCallback.class));
-    }
-
-    private BlePeripheralManager.Callback startAssociation(AssociationCallback callback,
-            String deviceName) {
-        ArgumentCaptor<BlePeripheralManager.Callback> callbackCaptor =
-                ArgumentCaptor.forClass(BlePeripheralManager.Callback.class);
-        mCarBlePeripheralManager.startAssociation(deviceName, callback);
-        verify(mMockPeripheralManager, timeout(3000)).registerCallback(callbackCaptor.capture());
-        return callbackCaptor.getValue();
-    }
-
-    private AssociationSecureChannel getChannelForAssociation(AssociationCallback callback) {
-        BlePeripheralManager.Callback bleManagerCallback = startAssociation(callback,
-                getNameForAssociation());
-        BluetoothDevice bluetoothDevice = BluetoothAdapter.getDefaultAdapter()
-                .getRemoteDevice(TEST_REMOTE_DEVICE_ADDRESS);
-        bleManagerCallback.onRemoteDeviceConnected(bluetoothDevice);
-        return (AssociationSecureChannel) mCarBlePeripheralManager.getConnectedDeviceChannel();
-    }
-
-    private boolean tryAcquire(Semaphore semaphore) throws InterruptedException {
-        return semaphore.tryAcquire(100, TimeUnit.MILLISECONDS);
-    }
-
-    private String getNameForAssociation() {
-        return ByteUtils.generateRandomNumberString(DEVICE_NAME_LENGTH_LIMIT);
-
-    }
-
-    @NonNull
-    private AssociationCallback createAssociationCallback(@NonNull final Semaphore semaphore) {
-        return spy(new AssociationCallback() {
-            @Override
-            public void onAssociationStartSuccess(String deviceName) {
-                semaphore.release();
-            }
-
-            @Override
-            public void onAssociationStartFailure() {
-                semaphore.release();
-            }
-
-            @Override
-            public void onAssociationError(int error) {
-                semaphore.release();
-            }
-
-            @Override
-            public void onVerificationCodeAvailable(String code) {
-                semaphore.release();
-            }
-
-            @Override
-            public void onAssociationCompleted(String deviceId) {
-                semaphore.release();
-            }
-        });
-    }
-}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/AssociationSecureChannelTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/AssociationSecureChannelTest.java
similarity index 87%
rename from connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/AssociationSecureChannelTest.java
rename to connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/AssociationSecureChannelTest.java
index 1a4941c..118eca9 100644
--- a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/AssociationSecureChannelTest.java
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/AssociationSecureChannelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -27,14 +27,14 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.car.encryptionrunner.DummyEncryptionRunner;
 import android.car.encryptionrunner.EncryptionRunner;
 import android.car.encryptionrunner.EncryptionRunnerFactory;
+import android.car.encryptionrunner.FakeEncryptionRunner;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
-import com.android.car.connecteddevice.BleStreamProtos.BleOperationProto.OperationType;
-import com.android.car.connecteddevice.ble.BleDeviceMessageStream.MessageReceivedListener;
+import com.android.car.connecteddevice.StreamProtos.OperationProto.OperationType;
+import com.android.car.connecteddevice.connection.ble.BleDeviceMessageStream;
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
 import com.android.car.connecteddevice.util.ByteUtils;
 
@@ -68,7 +68,7 @@
     private MockitoSession mMockitoSession;
 
     private AssociationSecureChannel mChannel;
-    private MessageReceivedListener mMessageReceivedListener;
+    private DeviceMessageStream.MessageReceivedListener mMessageReceivedListener;
 
     @Before
     public void setUp() {
@@ -90,7 +90,7 @@
     public void testEncryptionHandshake_Association() throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
         ChannelCallback callbackSpy = spy(new ChannelCallback(semaphore));
-        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newDummyRunner);
+        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newFakeRunner);
         ArgumentCaptor<String> deviceIdCaptor = ArgumentCaptor.forClass(String.class);
         ArgumentCaptor<DeviceMessage> messageCaptor =
                 ArgumentCaptor.forClass(DeviceMessage.class);
@@ -98,7 +98,7 @@
         initHandshakeMessage();
         verify(mStreamMock).writeMessage(messageCaptor.capture(), any());
         byte[] response = messageCaptor.getValue().getMessage();
-        assertThat(response).isEqualTo(DummyEncryptionRunner.INIT_RESPONSE.getBytes());
+        assertThat(response).isEqualTo(FakeEncryptionRunner.INIT_RESPONSE.getBytes());
 
         respondToContinueMessage();
         verify(mShowVerificationCodeListenerMock).showVerificationCode(anyString());
@@ -123,13 +123,13 @@
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
         ChannelCallback callbackSpy = spy(new ChannelCallback(semaphore));
-        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newDummyRunner);
+        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newFakeRunner);
 
         // Wrong init handshake message
         respondToContinueMessage();
         assertThat(semaphore.tryAcquire(100, TimeUnit.MILLISECONDS)).isTrue();
         verify(callbackSpy).onEstablishSecureChannelFailure(
-                eq(SecureBleChannel.CHANNEL_ERROR_INVALID_HANDSHAKE)
+                eq(SecureChannel.CHANNEL_ERROR_INVALID_HANDSHAKE)
         );
     }
 
@@ -138,7 +138,7 @@
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
         ChannelCallback callbackSpy = spy(new ChannelCallback(semaphore));
-        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newDummyRunner);
+        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newFakeRunner);
 
         initHandshakeMessage();
 
@@ -146,7 +146,7 @@
         initHandshakeMessage();
         assertThat(semaphore.tryAcquire(100, TimeUnit.MILLISECONDS)).isTrue();
         verify(callbackSpy).onEstablishSecureChannelFailure(
-                eq(SecureBleChannel.CHANNEL_ERROR_INVALID_HANDSHAKE)
+                eq(SecureChannel.CHANNEL_ERROR_INVALID_HANDSHAKE)
         );
     }
 
@@ -156,8 +156,8 @@
                 encryptionRunnerProvider.getEncryptionRunner());
         mChannel.registerCallback(callback);
         mChannel.setShowVerificationCodeListener(mShowVerificationCodeListenerMock);
-        ArgumentCaptor<MessageReceivedListener> listenerCaptor =
-                ArgumentCaptor.forClass(MessageReceivedListener.class);
+        ArgumentCaptor<DeviceMessageStream.MessageReceivedListener> listenerCaptor =
+                ArgumentCaptor.forClass(DeviceMessageStream.MessageReceivedListener.class);
         verify(mStreamMock).setMessageReceivedListener(listenerCaptor.capture());
         mMessageReceivedListener = listenerCaptor.getValue();
     }
@@ -175,7 +175,7 @@
         DeviceMessage message = new DeviceMessage(
                 /* recipient= */ null,
                 /* isMessageEncrypted= */ false,
-                DummyEncryptionRunner.INIT.getBytes()
+                FakeEncryptionRunner.INIT.getBytes()
         );
         mMessageReceivedListener.onMessageReceived(message, OperationType.ENCRYPTION_HANDSHAKE);
     }
@@ -184,20 +184,20 @@
         DeviceMessage message = new DeviceMessage(
                 /* recipient= */ null,
                 /* isMessageEncrypted= */ false,
-                DummyEncryptionRunner.CLIENT_RESPONSE.getBytes()
+                FakeEncryptionRunner.CLIENT_RESPONSE.getBytes()
         );
         mMessageReceivedListener.onMessageReceived(message, OperationType.ENCRYPTION_HANDSHAKE);
     }
 
     /**
-     * Add the thread control logic into {@link SecureBleChannel.Callback} only for spy purpose.
+     * Add the thread control logic into {@link SecureChannel.Callback} only for spy purpose.
      *
      * <p>The callback will release the semaphore which hold by one test when this callback
      * is called, telling the test that it can verify certain behaviors which will only occurred
      * after the callback is notified. This is needed mainly because of the callback is notified
      * in a different thread.
      */
-    private static class ChannelCallback implements SecureBleChannel.Callback {
+    private static class ChannelCallback implements SecureChannel.Callback {
         private final Semaphore mSemaphore;
 
         ChannelCallback(Semaphore semaphore) {
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/BleDeviceMessageStreamTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/DeviceMessageStreamTest.java
similarity index 71%
rename from connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/BleDeviceMessageStreamTest.java
rename to connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/DeviceMessageStreamTest.java
index ed6fb44..661bece 100644
--- a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/BleDeviceMessageStreamTest.java
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/DeviceMessageStreamTest.java
@@ -14,39 +14,31 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
-import static com.android.car.connecteddevice.BleStreamProtos.BleDeviceMessageProto.BleDeviceMessage;
-import static com.android.car.connecteddevice.BleStreamProtos.BleOperationProto.OperationType;
-import static com.android.car.connecteddevice.BleStreamProtos.BlePacketProto.BlePacket;
-import static com.android.car.connecteddevice.ble.BleDeviceMessageStream.MessageReceivedErrorListener;
-import static com.android.car.connecteddevice.ble.BleDeviceMessageStream.MessageReceivedListener;
+import static com.android.car.connecteddevice.StreamProtos.DeviceMessageProto.Message;
+import static com.android.car.connecteddevice.StreamProtos.OperationProto.OperationType;
+import static com.android.car.connecteddevice.StreamProtos.PacketProto.Packet;
+import static com.android.car.connecteddevice.connection.DeviceMessageStream.MessageReceivedErrorListener;
+import static com.android.car.connecteddevice.connection.DeviceMessageStream.MessageReceivedListener;
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mockitoSession;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
-import android.annotation.NonNull;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-
+import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
 import com.android.car.connecteddevice.util.ByteUtils;
 import com.android.car.protobuf.ByteString;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoSession;
-import org.mockito.quality.Strictness;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -56,42 +48,18 @@
 import java.util.concurrent.TimeUnit;
 
 @RunWith(AndroidJUnit4.class)
-public class BleDeviceMessageStreamTest {
+public class DeviceMessageStreamTest {
 
-    private static final int PACKET_SIZE = 500;
+    private static final int WRITE_SIZE = 500;
 
-    private BleDeviceMessageStream mStream;
-
-    @Mock
-    private BlePeripheralManager mMockBlePeripheralManager;
-
-    @Mock
-    private BluetoothDevice mMockBluetoothDevice;
-
-    @Mock
-    private BluetoothGattCharacteristic mMockWriteCharacteristic;
-
-    @Mock
-    private BluetoothGattCharacteristic mMockReadCharacteristic;
-
-    private MockitoSession mMockingSession;
+    private DeviceMessageStream mStream;
 
     @Before
     public void setup() {
-        mMockingSession = mockitoSession()
-                .initMocks(this)
-                .strictness(Strictness.LENIENT)
-                .startMocking();
-
-        mStream = new BleDeviceMessageStream(mMockBlePeripheralManager, mMockBluetoothDevice,
-                mMockWriteCharacteristic, mMockReadCharacteristic, PACKET_SIZE);
-    }
-
-    @After
-    public void cleanup() {
-        if (mMockingSession != null) {
-            mMockingSession.finishMocking();
-        }
+        mStream = spy(new DeviceMessageStream(WRITE_SIZE) {
+            @Override
+            protected void send(byte[] data) { }
+        });
     }
 
     @Test
@@ -127,9 +95,9 @@
         Semaphore semaphore = new Semaphore(0);
         MessageReceivedListener listener = createMessageReceivedListener(semaphore);
         mStream.setMessageReceivedListener(listener);
-        byte[] data = ByteUtils.randomBytes((int) (PACKET_SIZE * 1.5));
-        List<BlePacket> packets1 = createPackets(data);
-        List<BlePacket> packets2 = createPackets(data);
+        byte[] data = ByteUtils.randomBytes((int) (WRITE_SIZE * 1.5));
+        List<Packet> packets1 = createPackets(data);
+        List<Packet> packets2 = createPackets(data);
 
         for (int i = 0; i < packets1.size(); i++) {
             mStream.processPacket(packets1.get(i));
@@ -157,8 +125,8 @@
         Semaphore semaphore = new Semaphore(0);
         mStream.setMessageReceivedListener(createMessageReceivedListener(semaphore));
         mStream.setMessageReceivedErrorListener(createMessageReceivedErrorListener(semaphore));
-        byte[] data = ByteUtils.randomBytes((int) (PACKET_SIZE * 1.5));
-        List<BlePacket> packets = createPackets(data);
+        byte[] data = ByteUtils.randomBytes((int) (WRITE_SIZE * 1.5));
+        List<Packet> packets = createPackets(data);
         for (int i = 0; i < packets.size() - 1; i++) {
             mStream.processPacket(packets.get(i));
         }
@@ -168,11 +136,11 @@
     @Test
     public void processPacket_ignoresDuplicatePacket() {
         Semaphore semaphore = new Semaphore(0);
-        byte[] data = ByteUtils.randomBytes((int) (PACKET_SIZE * 2.5));
+        byte[] data = ByteUtils.randomBytes((int) (WRITE_SIZE * 2.5));
         MessageReceivedListener listener = createMessageReceivedListener(semaphore);
         mStream.setMessageReceivedListener(listener);
         ArgumentCaptor<DeviceMessage> messageCaptor = ArgumentCaptor.forClass(DeviceMessage.class);
-        List<BlePacket> packets = createPackets(data);
+        List<Packet> packets = createPackets(data);
         for (int i = 0; i < packets.size(); i++) {
             mStream.processPacket(packets.get(i));
             mStream.processPacket(packets.get(i)); // Process each packet twice.
@@ -186,7 +154,7 @@
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
         mStream.setMessageReceivedErrorListener(createMessageReceivedErrorListener(semaphore));
-        List<BlePacket> packets = createPackets(ByteUtils.randomBytes((int) (PACKET_SIZE * 2.5)));
+        List<Packet> packets = createPackets(ByteUtils.randomBytes((int) (WRITE_SIZE * 2.5)));
         mStream.processPacket(packets.get(0));
         mStream.processPacket(packets.get(1));
         mStream.processPacket(packets.get(0));
@@ -198,20 +166,20 @@
             throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
         mStream.setMessageReceivedErrorListener(createMessageReceivedErrorListener(semaphore));
-        List<BlePacket> packets = createPackets(ByteUtils.randomBytes((int) (PACKET_SIZE * 1.5)));
+        List<Packet> packets = createPackets(ByteUtils.randomBytes((int) (WRITE_SIZE * 1.5)));
         mStream.processPacket(packets.get(1));
         assertThat(tryAcquire(semaphore)).isTrue();
     }
 
     @NonNull
-    private List<BlePacket> createPackets(byte[] data) {
+    private List<Packet> createPackets(byte[] data) {
         try {
-            BleDeviceMessage message = BleDeviceMessage.newBuilder()
+            Message message = Message.newBuilder()
                     .setPayload(ByteString.copyFrom(data))
                     .setOperation(OperationType.CLIENT_MESSAGE)
                     .build();
-            return BlePacketFactory.makeBlePackets(message.toByteArray(),
-                    ThreadLocalRandom.current().nextInt(), PACKET_SIZE);
+            return PacketFactory.makePackets(message.toByteArray(),
+                    ThreadLocalRandom.current().nextInt(), WRITE_SIZE);
         } catch (Exception e) {
             assertWithMessage("Uncaught exception while making packets.").fail();
             return new ArrayList<>();
@@ -219,8 +187,8 @@
     }
 
     private void processMessage(byte[] data) {
-        List<BlePacket> packets = createPackets(data);
-        for (BlePacket packet : packets) {
+        List<Packet> packets = createPackets(data);
+        for (Packet packet : packets) {
             mStream.processPacket(packet);
         }
     }
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/AssociationSecureChannelTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/OobAssociationSecureChannelTest.java
similarity index 62%
copy from connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/AssociationSecureChannelTest.java
copy to connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/OobAssociationSecureChannelTest.java
index 1a4941c..3ad2a8d 100644
--- a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/AssociationSecureChannelTest.java
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/OobAssociationSecureChannelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -14,61 +14,69 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
+
+import static com.android.car.connecteddevice.StreamProtos.OperationProto.OperationType;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyString;
 import static org.mockito.Mockito.mockitoSession;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.car.encryptionrunner.DummyEncryptionRunner;
-import android.car.encryptionrunner.EncryptionRunner;
 import android.car.encryptionrunner.EncryptionRunnerFactory;
+import android.car.encryptionrunner.FakeEncryptionRunner;
 
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.car.connecteddevice.BleStreamProtos.BleOperationProto.OperationType;
-import com.android.car.connecteddevice.ble.BleDeviceMessageStream.MessageReceivedListener;
+import com.android.car.connecteddevice.connection.ble.BleDeviceMessageStream;
+import com.android.car.connecteddevice.oob.OobConnectionManager;
 import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
 import com.android.car.connecteddevice.util.ByteUtils;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
 import java.util.UUID;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
-@RunWith(AndroidJUnit4.class)
-public final class AssociationSecureChannelTest {
+import javax.crypto.BadPaddingException;
+import javax.crypto.IllegalBlockSizeException;
+
+public class OobAssociationSecureChannelTest {
     private static final UUID CLIENT_DEVICE_ID =
             UUID.fromString("a5645523-3280-410a-90c1-582a6c6f4969");
+
     private static final UUID SERVER_DEVICE_ID =
             UUID.fromString("a29f0c74-2014-4b14-ac02-be6ed15b545a");
+
     private static final byte[] CLIENT_SECRET = ByteUtils.randomBytes(32);
 
     @Mock
     private BleDeviceMessageStream mStreamMock;
+
     @Mock
     private ConnectedDeviceStorage mStorageMock;
-    @Mock
-    private AssociationSecureChannel.ShowVerificationCodeListener mShowVerificationCodeListenerMock;
-    private MockitoSession mMockitoSession;
 
-    private AssociationSecureChannel mChannel;
-    private MessageReceivedListener mMessageReceivedListener;
+    @Mock
+    private OobConnectionManager mOobConnectionManagerMock;
+
+    private OobAssociationSecureChannel mChannel;
+
+    private BleDeviceMessageStream.MessageReceivedListener mMessageReceivedListener;
+
+    private MockitoSession mMockitoSession;
 
     @Before
     public void setUp() {
@@ -87,10 +95,11 @@
     }
 
     @Test
-    public void testEncryptionHandshake_Association() throws InterruptedException {
+    public void testEncryptionHandshake_oobAssociation() throws InterruptedException {
         Semaphore semaphore = new Semaphore(0);
-        ChannelCallback callbackSpy = spy(new ChannelCallback(semaphore));
-        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newDummyRunner);
+        ChannelCallback
+                callbackSpy = spy(new ChannelCallback(semaphore));
+        setupOobAssociationSecureChannel(callbackSpy);
         ArgumentCaptor<String> deviceIdCaptor = ArgumentCaptor.forClass(String.class);
         ArgumentCaptor<DeviceMessage> messageCaptor =
                 ArgumentCaptor.forClass(DeviceMessage.class);
@@ -98,12 +107,13 @@
         initHandshakeMessage();
         verify(mStreamMock).writeMessage(messageCaptor.capture(), any());
         byte[] response = messageCaptor.getValue().getMessage();
-        assertThat(response).isEqualTo(DummyEncryptionRunner.INIT_RESPONSE.getBytes());
-
+        assertThat(response).isEqualTo(FakeEncryptionRunner.INIT_RESPONSE.getBytes());
+        reset(mStreamMock);
         respondToContinueMessage();
-        verify(mShowVerificationCodeListenerMock).showVerificationCode(anyString());
-
-        mChannel.notifyOutOfBandAccepted();
+        verify(mStreamMock).writeMessage(messageCaptor.capture(), any());
+        byte[] oobCodeResponse = messageCaptor.getValue().getMessage();
+        assertThat(oobCodeResponse).isEqualTo(FakeEncryptionRunner.VERIFICATION_CODE.getBytes());
+        respondToOobCode();
         sendDeviceId();
         assertThat(semaphore.tryAcquire(100, TimeUnit.MILLISECONDS)).isTrue();
         verify(callbackSpy).onDeviceIdReceived(deviceIdCaptor.capture());
@@ -118,48 +128,26 @@
         verify(callbackSpy).onSecureChannelEstablished();
     }
 
-    @Test
-    public void testEncryptionHandshake_Association_wrongInitHandshakeMessage()
-            throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        ChannelCallback callbackSpy = spy(new ChannelCallback(semaphore));
-        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newDummyRunner);
-
-        // Wrong init handshake message
-        respondToContinueMessage();
-        assertThat(semaphore.tryAcquire(100, TimeUnit.MILLISECONDS)).isTrue();
-        verify(callbackSpy).onEstablishSecureChannelFailure(
-                eq(SecureBleChannel.CHANNEL_ERROR_INVALID_HANDSHAKE)
-        );
-    }
-
-    @Test
-    public void testEncryptionHandshake_Association_wrongRespondToContinueMessage()
-            throws InterruptedException {
-        Semaphore semaphore = new Semaphore(0);
-        ChannelCallback callbackSpy = spy(new ChannelCallback(semaphore));
-        setupAssociationSecureChannel(callbackSpy, EncryptionRunnerFactory::newDummyRunner);
-
-        initHandshakeMessage();
-
-        // Wrong respond to continue message
-        initHandshakeMessage();
-        assertThat(semaphore.tryAcquire(100, TimeUnit.MILLISECONDS)).isTrue();
-        verify(callbackSpy).onEstablishSecureChannelFailure(
-                eq(SecureBleChannel.CHANNEL_ERROR_INVALID_HANDSHAKE)
-        );
-    }
-
-    private void setupAssociationSecureChannel(ChannelCallback callback,
-            EncryptionRunnerProvider encryptionRunnerProvider) {
-        mChannel = new AssociationSecureChannel(mStreamMock, mStorageMock,
-                encryptionRunnerProvider.getEncryptionRunner());
+    private void setupOobAssociationSecureChannel(ChannelCallback callback) {
+        mChannel = new OobAssociationSecureChannel(mStreamMock, mStorageMock,
+                mOobConnectionManagerMock, EncryptionRunnerFactory.newOobFakeRunner());
         mChannel.registerCallback(callback);
-        mChannel.setShowVerificationCodeListener(mShowVerificationCodeListenerMock);
-        ArgumentCaptor<MessageReceivedListener> listenerCaptor =
-                ArgumentCaptor.forClass(MessageReceivedListener.class);
+        ArgumentCaptor<BleDeviceMessageStream.MessageReceivedListener> listenerCaptor =
+                ArgumentCaptor.forClass(BleDeviceMessageStream.MessageReceivedListener.class);
         verify(mStreamMock).setMessageReceivedListener(listenerCaptor.capture());
         mMessageReceivedListener = listenerCaptor.getValue();
+        try {
+            when(mOobConnectionManagerMock.encryptVerificationCode(any()))
+                    .thenReturn(FakeEncryptionRunner.VERIFICATION_CODE.getBytes());
+        } catch (InvalidAlgorithmParameterException | BadPaddingException | InvalidKeyException
+                | IllegalBlockSizeException e) {
+        }
+        try {
+            when(mOobConnectionManagerMock.decryptVerificationCode(any()))
+                    .thenReturn(FakeEncryptionRunner.VERIFICATION_CODE.getBytes());
+        } catch (InvalidAlgorithmParameterException | BadPaddingException | InvalidKeyException
+                | IllegalBlockSizeException e) {
+        }
     }
 
     private void sendDeviceId() {
@@ -175,7 +163,7 @@
         DeviceMessage message = new DeviceMessage(
                 /* recipient= */ null,
                 /* isMessageEncrypted= */ false,
-                DummyEncryptionRunner.INIT.getBytes()
+                FakeEncryptionRunner.INIT.getBytes()
         );
         mMessageReceivedListener.onMessageReceived(message, OperationType.ENCRYPTION_HANDSHAKE);
     }
@@ -184,20 +172,29 @@
         DeviceMessage message = new DeviceMessage(
                 /* recipient= */ null,
                 /* isMessageEncrypted= */ false,
-                DummyEncryptionRunner.CLIENT_RESPONSE.getBytes()
+                FakeEncryptionRunner.CLIENT_RESPONSE.getBytes()
+        );
+        mMessageReceivedListener.onMessageReceived(message, OperationType.ENCRYPTION_HANDSHAKE);
+    }
+
+    private void respondToOobCode() {
+        DeviceMessage message = new DeviceMessage(
+                /* recipient= */ null,
+                /* isMessageEncrypted= */ false,
+                FakeEncryptionRunner.VERIFICATION_CODE.getBytes()
         );
         mMessageReceivedListener.onMessageReceived(message, OperationType.ENCRYPTION_HANDSHAKE);
     }
 
     /**
-     * Add the thread control logic into {@link SecureBleChannel.Callback} only for spy purpose.
+     * Add the thread control logic into {@link SecureChannel.Callback} only for spy purpose.
      *
      * <p>The callback will release the semaphore which hold by one test when this callback
      * is called, telling the test that it can verify certain behaviors which will only occurred
      * after the callback is notified. This is needed mainly because of the callback is notified
      * in a different thread.
      */
-    private static class ChannelCallback implements SecureBleChannel.Callback {
+    private static class ChannelCallback implements SecureChannel.Callback {
         private final Semaphore mSemaphore;
 
         ChannelCallback(Semaphore semaphore) {
@@ -229,8 +226,4 @@
             mSemaphore.release();
         }
     }
-
-    interface EncryptionRunnerProvider {
-        EncryptionRunner getEncryptionRunner();
-    }
 }
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/BlePacketFactoryTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/PacketFactoryTest.java
similarity index 81%
rename from connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/BlePacketFactoryTest.java
rename to connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/PacketFactoryTest.java
index 8e8682f..d5fdc03 100644
--- a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/BlePacketFactoryTest.java
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/PacketFactoryTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
 import static com.google.common.truth.Truth.assertThat;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
-import com.android.car.connecteddevice.BleStreamProtos.BlePacketProto.BlePacket;
+import com.android.car.connecteddevice.StreamProtos.PacketProto.Packet;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -30,7 +30,7 @@
 import java.util.Random;
 
 @RunWith(AndroidJUnit4.class)
-public class BlePacketFactoryTest {
+public class PacketFactoryTest {
     @Test
     public void testGetHeaderSize() {
         // 1 byte to encode the ID, 1 byte for the field number.
@@ -51,13 +51,13 @@
         int expectedHeaderSize = messageIdEncodingSize + payloadSizeEncodingSize
                 + totalPacketsEncodingSize + packetNumberEncodingSize;
 
-        assertThat(BlePacketFactory.getPacketHeaderSize(totalPackets, messageId, payloadSize))
+        assertThat(PacketFactory.getPacketHeaderSize(totalPackets, messageId, payloadSize))
                 .isEqualTo(expectedHeaderSize);
     }
 
     @Test
     public void testGetTotalPackets_withVarintSize1_returnsCorrectPackets()
-            throws BlePacketFactoryException {
+            throws PacketFactoryException {
         int messageId = 1;
         int maxSize = 49;
         int payloadSize = 100;
@@ -67,13 +67,13 @@
         // payload. ceil(payloadSize/38) gives the total packets.
         int expectedTotalPackets = 3;
 
-        assertThat(BlePacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
+        assertThat(PacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
                 .isEqualTo(expectedTotalPackets);
     }
 
     @Test
     public void testGetTotalPackets_withVarintSize2_returnsCorrectPackets()
-            throws BlePacketFactoryException {
+            throws PacketFactoryException {
         int messageId = 1;
         int maxSize = 49;
         int payloadSize = 6000;
@@ -83,13 +83,13 @@
         // payload. ceil(payloadSize/37) gives the total packets.
         int expectedTotalPackets = 163;
 
-        assertThat(BlePacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
+        assertThat(PacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
                 .isEqualTo(expectedTotalPackets);
     }
 
     @Test
     public void testGetTotalPackets_withVarintSize3_returnsCorrectPackets()
-            throws BlePacketFactoryException {
+            throws PacketFactoryException {
         int messageId = 1;
         int maxSize = 49;
         int payloadSize = 1000000;
@@ -99,13 +99,13 @@
         // payload. ceil(payloadSize/36) gives the total packets.
         int expectedTotalPackets = 27778;
 
-        assertThat(BlePacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
+        assertThat(PacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
                 .isEqualTo(expectedTotalPackets);
     }
 
     @Test
     public void testGetTotalPackets_withVarintSize4_returnsCorrectPackets()
-            throws BlePacketFactoryException {
+            throws PacketFactoryException {
         int messageId = 1;
         int maxSize = 49;
         int payloadSize = 178400320;
@@ -115,7 +115,7 @@
         // payload. ceil(payloadSize/35) gives the total packets.
         int expectedTotalPackets = 5097152;
 
-        assertThat(BlePacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
+        assertThat(PacketFactory.getTotalPacketNumber(messageId, payloadSize, maxSize))
                 .isEqualTo(expectedTotalPackets);
     }
 
@@ -125,15 +125,15 @@
         byte[] payload = makePayload(/* length= */ 100);
         int maxSize = 1000;
 
-        List<BlePacket> packets =
-                BlePacketFactory.makeBlePackets(payload, /* mesageId= */ 1, maxSize);
+        List<Packet> packets =
+                PacketFactory.makePackets(payload, /* messageId= */ 1, maxSize);
 
         assertThat(packets).hasSize(1);
 
         ByteArrayOutputStream reconstructedPayload = new ByteArrayOutputStream();
 
         // Combine together all the payloads within the BlePackets.
-        for (BlePacket packet : packets) {
+        for (Packet packet : packets) {
             reconstructedPayload.write(packet.getPayload().toByteArray());
         }
 
@@ -146,15 +146,15 @@
         byte[] payload = makePayload(/* length= */ 10000);
         int maxSize = 50;
 
-        List<BlePacket> packets =
-                BlePacketFactory.makeBlePackets(payload, /* mesageId= */ 1, maxSize);
+        List<Packet> packets =
+                PacketFactory.makePackets(payload, /* messageId= */ 1, maxSize);
 
         assertThat(packets.size()).isGreaterThan(1);
 
         ByteArrayOutputStream reconstructedPayload = new ByteArrayOutputStream();
 
         // Combine together all the payloads within the BlePackets.
-        for (BlePacket packet : packets) {
+        for (Packet packet : packets) {
             reconstructedPayload.write(packet.getPayload().toByteArray());
         }
 
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/SecureBleChannelTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/SecureChannelTest.java
similarity index 78%
rename from connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/SecureBleChannelTest.java
rename to connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/SecureChannelTest.java
index e8f4da4..ce56ebb 100644
--- a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/ble/SecureBleChannelTest.java
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/SecureChannelTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.car.connecteddevice.ble;
+package com.android.car.connecteddevice.connection;
 
-import static com.android.car.connecteddevice.BleStreamProtos.BleOperationProto.OperationType.CLIENT_MESSAGE;
-import static com.android.car.connecteddevice.BleStreamProtos.BleOperationProto.OperationType.ENCRYPTION_HANDSHAKE;
-import static com.android.car.connecteddevice.ble.SecureBleChannel.CHANNEL_ERROR_INVALID_HANDSHAKE;
-import static com.android.car.connecteddevice.ble.SecureBleChannel.Callback;
+import static com.android.car.connecteddevice.StreamProtos.OperationProto.OperationType.CLIENT_MESSAGE;
+import static com.android.car.connecteddevice.StreamProtos.OperationProto.OperationType.ENCRYPTION_HANDSHAKE;
+import static com.android.car.connecteddevice.connection.SecureChannel.CHANNEL_ERROR_INVALID_HANDSHAKE;
+import static com.android.car.connecteddevice.connection.SecureChannel.Callback;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -29,13 +29,14 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
-import android.car.encryptionrunner.DummyEncryptionRunner;
 import android.car.encryptionrunner.EncryptionRunnerFactory;
+import android.car.encryptionrunner.FakeEncryptionRunner;
 import android.car.encryptionrunner.HandshakeException;
 import android.car.encryptionrunner.Key;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 
+import com.android.car.connecteddevice.connection.ble.BleDeviceMessageStream;
 import com.android.car.connecteddevice.util.ByteUtils;
 
 import org.junit.After;
@@ -53,7 +54,7 @@
 import java.util.concurrent.TimeUnit;
 
 @RunWith(AndroidJUnit4.class)
-public class SecureBleChannelTest {
+public class SecureChannelTest {
 
     @Mock private BleDeviceMessageStream mMockStream;
 
@@ -81,7 +82,7 @@
 
     private MockitoSession mMockitoSession;
 
-    private SecureBleChannel mSecureBleChannel;
+    private SecureChannel mSecureChannel;
 
     @Before
     public void setUp() throws SignatureException {
@@ -90,12 +91,12 @@
                 .strictness(Strictness.WARN)
                 .startMocking();
 
-        mSecureBleChannel = new SecureBleChannel(mMockStream,
-                EncryptionRunnerFactory.newDummyRunner()) {
+        mSecureChannel = new SecureChannel(mMockStream,
+                EncryptionRunnerFactory.newFakeRunner()) {
             @Override
             void processHandshake(byte[] message) { }
         };
-        mSecureBleChannel.setEncryptionKey(mKey);
+        mSecureChannel.setEncryptionKey(mKey);
     }
 
     @After
@@ -110,7 +111,7 @@
         byte[] payload = ByteUtils.randomBytes(10);
         DeviceMessage message = new DeviceMessage(UUID.randomUUID(), /* isEncrypted= */ false,
                 payload);
-        mSecureBleChannel.processMessage(message);
+        mSecureChannel.processMessage(message);
         assertThat(message.getMessage()).isEqualTo(payload);
         verify(mKey, times(0)).decryptData(any());
     }
@@ -120,7 +121,7 @@
         byte[] payload = ByteUtils.randomBytes(10);
         DeviceMessage message = new DeviceMessage(UUID.randomUUID(), /* isEncrypted= */ true,
                 payload);
-        mSecureBleChannel.processMessage(message);
+        mSecureChannel.processMessage(message);
         verify(mKey).decryptData(any());
     }
 
@@ -131,14 +132,14 @@
         DeviceMessage message = new DeviceMessage(UUID.randomUUID(), /* isEncrypted= */ true,
                 ByteUtils.randomBytes(10));
 
-        mSecureBleChannel.setEncryptionKey(null);
-        mSecureBleChannel.registerCallback(new Callback() {
+        mSecureChannel.setEncryptionKey(null);
+        mSecureChannel.registerCallback(new Callback() {
             @Override
             public void onMessageReceivedError(Exception exception) {
                 semaphore.release();
             }
         });
-        mSecureBleChannel.processMessage(message);
+        mSecureChannel.processMessage(message);
         assertThat(tryAcquire(semaphore)).isTrue();
         assertThat(message.getMessage()).isNull();
     }
@@ -150,15 +151,15 @@
         DeviceMessage message = new DeviceMessage(UUID.randomUUID(), /* isEncrypted= */ true,
                 ByteUtils.randomBytes(10));
 
-        mSecureBleChannel.setEncryptionKey(null);
-        mSecureBleChannel.registerCallback(new Callback() {
+        mSecureChannel.setEncryptionKey(null);
+        mSecureChannel.registerCallback(new Callback() {
             @Override
             public void onEstablishSecureChannelFailure(int error) {
                 assertThat(error).isEqualTo(CHANNEL_ERROR_INVALID_HANDSHAKE);
                 semaphore.release();
             }
         });
-        mSecureBleChannel.onMessageReceived(message, ENCRYPTION_HANDSHAKE);
+        mSecureChannel.onMessageReceived(message, ENCRYPTION_HANDSHAKE);
         assertThat(tryAcquire(semaphore)).isTrue();
     }
 
@@ -169,24 +170,24 @@
         DeviceMessage message = new DeviceMessage(UUID.randomUUID(), /* isEncrypted= */ false,
                 /* message= */ null);
 
-        mSecureBleChannel.registerCallback(new Callback() {
+        mSecureChannel.registerCallback(new Callback() {
             @Override
             public void onMessageReceived(DeviceMessage message) {
                 semaphore.release();
             }
         });
-        mSecureBleChannel.onMessageReceived(message, CLIENT_MESSAGE);
+        mSecureChannel.onMessageReceived(message, CLIENT_MESSAGE);
         assertThat(tryAcquire(semaphore)).isFalse();
     }
 
     @Test
     public void onMessageReceived_processHandshakeExceptionIssuesSecureChannelFailureCallback()
             throws InterruptedException {
-        SecureBleChannel secureChannel = new SecureBleChannel(mMockStream,
-                EncryptionRunnerFactory.newDummyRunner()) {
+        SecureChannel secureChannel = new SecureChannel(mMockStream,
+                EncryptionRunnerFactory.newFakeRunner()) {
             @Override
             void processHandshake(byte[] message) throws HandshakeException {
-                DummyEncryptionRunner.throwHandshakeException("test");
+                FakeEncryptionRunner.throwHandshakeException("test");
             }
         };
         Semaphore semaphore = new Semaphore(0);
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/ble/CarBlePeripheralManagerTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/ble/CarBlePeripheralManagerTest.java
new file mode 100644
index 0000000..b4a229e
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/ble/CarBlePeripheralManagerTest.java
@@ -0,0 +1,244 @@
+/*
+ * 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 com.android.car.connecteddevice.connection.ble;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mockitoSession;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.le.AdvertiseCallback;
+import android.bluetooth.le.AdvertiseData;
+import android.bluetooth.le.AdvertiseSettings;
+import android.os.ParcelUuid;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.connecteddevice.AssociationCallback;
+import com.android.car.connecteddevice.connection.AssociationSecureChannel;
+import com.android.car.connecteddevice.connection.SecureChannel;
+import com.android.car.connecteddevice.model.AssociatedDevice;
+import com.android.car.connecteddevice.oob.OobConnectionManager;
+import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
+import com.android.car.connecteddevice.util.ByteUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+import java.time.Duration;
+import java.util.UUID;
+
+@RunWith(AndroidJUnit4.class)
+public class CarBlePeripheralManagerTest {
+    private static final UUID ASSOCIATION_SERVICE_UUID = UUID.randomUUID();
+    private static final UUID RECONNECT_SERVICE_UUID = UUID.randomUUID();
+    private static final UUID RECONNECT_DATA_UUID = UUID.randomUUID();
+    private static final UUID WRITE_UUID = UUID.randomUUID();
+    private static final UUID READ_UUID = UUID.randomUUID();
+    private static final int DEVICE_NAME_LENGTH_LIMIT = 8;
+    private static final String TEST_REMOTE_DEVICE_ADDRESS = "00:11:22:33:AA:BB";
+    private static final UUID TEST_REMOTE_DEVICE_ID = UUID.randomUUID();
+    private static final String TEST_VERIFICATION_CODE = "000000";
+    private static final String TEST_ENCRYPTED_VERIFICATION_CODE = "12345";
+    private static final Duration RECONNECT_ADVERTISEMENT_DURATION = Duration.ofSeconds(2);
+    private static final int DEFAULT_MTU_SIZE = 23;
+
+    @Mock
+    private BlePeripheralManager mMockPeripheralManager;
+    @Mock
+    private ConnectedDeviceStorage mMockStorage;
+    @Mock
+    private OobConnectionManager mMockOobConnectionManager;
+    @Mock
+    private AssociationCallback mAssociationCallback;
+
+    private CarBlePeripheralManager mCarBlePeripheralManager;
+
+    private MockitoSession mMockitoSession;
+
+    @Before
+    public void setUp() throws Exception {
+        mMockitoSession = mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.WARN)
+                .startMocking();
+        mCarBlePeripheralManager = new CarBlePeripheralManager(mMockPeripheralManager, mMockStorage,
+                ASSOCIATION_SERVICE_UUID, RECONNECT_SERVICE_UUID,
+                RECONNECT_DATA_UUID, WRITE_UUID, READ_UUID, RECONNECT_ADVERTISEMENT_DURATION,
+                DEFAULT_MTU_SIZE);
+
+        when(mMockOobConnectionManager.encryptVerificationCode(
+                TEST_VERIFICATION_CODE.getBytes())).thenReturn(
+                TEST_ENCRYPTED_VERIFICATION_CODE.getBytes());
+        when(mMockOobConnectionManager.decryptVerificationCode(
+                TEST_ENCRYPTED_VERIFICATION_CODE.getBytes())).thenReturn(
+                TEST_VERIFICATION_CODE.getBytes());
+        mCarBlePeripheralManager.start();
+    }
+
+    @After
+    public void tearDown() {
+        if (mCarBlePeripheralManager != null) {
+            mCarBlePeripheralManager.stop();
+        }
+        if (mMockitoSession != null) {
+            mMockitoSession.finishMocking();
+        }
+    }
+
+    @Test
+    public void testStartAssociationAdvertisingSuccess() {
+        String testDeviceName = getNameForAssociation();
+        startAssociation(mAssociationCallback, testDeviceName);
+        ArgumentCaptor<AdvertiseData> advertisementDataCaptor =
+                ArgumentCaptor.forClass(AdvertiseData.class);
+        ArgumentCaptor<AdvertiseData> scanResponseDataCaptor =
+                ArgumentCaptor.forClass(AdvertiseData.class);
+        verify(mMockPeripheralManager).startAdvertising(any(), advertisementDataCaptor.capture(),
+                scanResponseDataCaptor.capture(), any());
+        AdvertiseData advertisementData = advertisementDataCaptor.getValue();
+        ParcelUuid serviceUuid = new ParcelUuid(ASSOCIATION_SERVICE_UUID);
+        assertThat(advertisementData.getServiceUuids()).contains(serviceUuid);
+        AdvertiseData scanResponseData = scanResponseDataCaptor.getValue();
+        assertThat(scanResponseData.getIncludeDeviceName()).isFalse();
+        ParcelUuid dataUuid = new ParcelUuid(RECONNECT_DATA_UUID);
+        assertThat(scanResponseData.getServiceData().get(dataUuid)).isEqualTo(
+                testDeviceName.getBytes());
+    }
+
+    @Test
+    public void testStartAssociationAdvertisingFailure() {
+        startAssociation(mAssociationCallback, getNameForAssociation());
+        ArgumentCaptor<AdvertiseCallback> callbackCaptor =
+                ArgumentCaptor.forClass(AdvertiseCallback.class);
+        verify(mMockPeripheralManager).startAdvertising(any(), any(), any(),
+                callbackCaptor.capture());
+        AdvertiseCallback advertiseCallback = callbackCaptor.getValue();
+        int testErrorCode = 2;
+        advertiseCallback.onStartFailure(testErrorCode);
+        verify(mAssociationCallback).onAssociationStartFailure();
+    }
+
+    @Test
+    public void testNotifyAssociationSuccess() {
+        String testDeviceName = getNameForAssociation();
+        startAssociation(mAssociationCallback, testDeviceName);
+        ArgumentCaptor<AdvertiseCallback> callbackCaptor =
+                ArgumentCaptor.forClass(AdvertiseCallback.class);
+        verify(mMockPeripheralManager).startAdvertising(any(), any(), any(),
+                callbackCaptor.capture());
+        AdvertiseCallback advertiseCallback = callbackCaptor.getValue();
+        AdvertiseSettings settings = new AdvertiseSettings.Builder().build();
+        advertiseCallback.onStartSuccess(settings);
+        verify(mAssociationCallback).onAssociationStartSuccess(eq(testDeviceName));
+    }
+
+    @Test
+    public void testShowVerificationCode() {
+        AssociationSecureChannel channel = getChannelForAssociation(mAssociationCallback);
+        channel.getShowVerificationCodeListener().showVerificationCode(TEST_VERIFICATION_CODE);
+        verify(mAssociationCallback).onVerificationCodeAvailable(eq(TEST_VERIFICATION_CODE));
+    }
+
+    @Test
+    public void testAssociationSuccess() {
+        SecureChannel channel = getChannelForAssociation(mAssociationCallback);
+        SecureChannel.Callback channelCallback = channel.getCallback();
+        assertThat(channelCallback).isNotNull();
+        channelCallback.onDeviceIdReceived(TEST_REMOTE_DEVICE_ID.toString());
+        channelCallback.onSecureChannelEstablished();
+        ArgumentCaptor<AssociatedDevice> deviceCaptor =
+                ArgumentCaptor.forClass(AssociatedDevice.class);
+        verify(mMockStorage).addAssociatedDeviceForActiveUser(deviceCaptor.capture());
+        AssociatedDevice device = deviceCaptor.getValue();
+        assertThat(device.getDeviceId()).isEqualTo(TEST_REMOTE_DEVICE_ID.toString());
+        verify(mAssociationCallback).onAssociationCompleted(eq(TEST_REMOTE_DEVICE_ID.toString()));
+    }
+
+    @Test
+    public void testAssociationFailure_channelError() {
+        SecureChannel channel = getChannelForAssociation(mAssociationCallback);
+        SecureChannel.Callback channelCallback = channel.getCallback();
+        int testErrorCode = 1;
+        assertThat(channelCallback).isNotNull();
+        channelCallback.onDeviceIdReceived(TEST_REMOTE_DEVICE_ID.toString());
+        channelCallback.onEstablishSecureChannelFailure(testErrorCode);
+        verify(mAssociationCallback).onAssociationError(eq(testErrorCode));
+    }
+
+    @Test
+    public void connectToDevice_stopsAdvertisingAfterTimeout() {
+        when(mMockStorage.hashWithChallengeSecret(any(), any()))
+                .thenReturn(ByteUtils.randomBytes(32));
+        mCarBlePeripheralManager.connectToDevice(UUID.randomUUID());
+        ArgumentCaptor<AdvertiseCallback> callbackCaptor =
+                ArgumentCaptor.forClass(AdvertiseCallback.class);
+        verify(mMockPeripheralManager).startAdvertising(any(), any(), any(),
+                callbackCaptor.capture());
+        callbackCaptor.getValue().onStartSuccess(null);
+        verify(mMockPeripheralManager,
+                timeout(RECONNECT_ADVERTISEMENT_DURATION.plusSeconds(1).toMillis()))
+                .stopAdvertising(any(AdvertiseCallback.class));
+    }
+
+    @Test
+    public void disconnectDevice_stopsAdvertisingForPendingReconnect() {
+        when(mMockStorage.hashWithChallengeSecret(any(), any()))
+                .thenReturn(ByteUtils.randomBytes(32));
+        UUID deviceId = UUID.randomUUID();
+        mCarBlePeripheralManager.connectToDevice(deviceId);
+        reset(mMockPeripheralManager);
+        mCarBlePeripheralManager.disconnectDevice(deviceId.toString());
+        verify(mMockPeripheralManager).cleanup();
+    }
+
+    private BlePeripheralManager.Callback startAssociation(AssociationCallback callback,
+            String deviceName) {
+        ArgumentCaptor<BlePeripheralManager.Callback> callbackCaptor =
+                ArgumentCaptor.forClass(BlePeripheralManager.Callback.class);
+        mCarBlePeripheralManager.startAssociation(deviceName, callback);
+        verify(mMockPeripheralManager, timeout(3000)).registerCallback(callbackCaptor.capture());
+        return callbackCaptor.getValue();
+    }
+
+    private AssociationSecureChannel getChannelForAssociation(AssociationCallback callback) {
+        BlePeripheralManager.Callback bleManagerCallback = startAssociation(callback,
+                getNameForAssociation());
+        BluetoothDevice bluetoothDevice = BluetoothAdapter.getDefaultAdapter()
+                .getRemoteDevice(TEST_REMOTE_DEVICE_ADDRESS);
+        bleManagerCallback.onRemoteDeviceConnected(bluetoothDevice);
+        return (AssociationSecureChannel) mCarBlePeripheralManager.getConnectedDeviceChannel();
+    }
+
+    private String getNameForAssociation() {
+        return ByteUtils.generateRandomNumberString(DEVICE_NAME_LENGTH_LIMIT);
+
+    }
+}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/CarSppManagerTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/CarSppManagerTest.java
new file mode 100644
index 0000000..ef0ee85
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/CarSppManagerTest.java
@@ -0,0 +1,188 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mockitoSession;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.connecteddevice.AssociationCallback;
+import com.android.car.connecteddevice.connection.AssociationSecureChannel;
+import com.android.car.connecteddevice.connection.SecureChannel;
+import com.android.car.connecteddevice.model.AssociatedDevice;
+import com.android.car.connecteddevice.storage.ConnectedDeviceStorage;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+import java.util.UUID;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+public class CarSppManagerTest {
+    private static final String TEST_REMOTE_DEVICE_ADDRESS = "00:11:22:33:AA:BB";
+    private static final UUID TEST_REMOTE_DEVICE_ID = UUID.randomUUID();
+    private static final UUID TEST_SERVICE_UUID = UUID.randomUUID();
+    private static final String TEST_VERIFICATION_CODE = "000000";
+    private static final int MAX_PACKET_SIZE = 700;
+    @Mock
+    private SppManager mMockSppManager;
+    @Mock
+    private ConnectedDeviceStorage mMockStorage;
+
+    private CarSppManager mCarSppManager;
+
+    private MockitoSession mMockitoSession;
+
+    @Before
+    public void setUp() throws Exception {
+        mMockitoSession = mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.WARN)
+                .startMocking();
+        mCarSppManager = new CarSppManager(mMockSppManager, mMockStorage, TEST_SERVICE_UUID,
+                MAX_PACKET_SIZE);
+    }
+
+    @After
+    public void tearDown() {
+        if (mCarSppManager != null) {
+            mCarSppManager.stop();
+        }
+        if (mMockitoSession != null) {
+            mMockitoSession.finishMocking();
+        }
+    }
+
+    @Test
+    public void testStartAssociationSuccess() throws InterruptedException {
+        Semaphore semaphore = new Semaphore(0);
+        AssociationCallback callback = createAssociationCallback(semaphore);
+        when(mMockSppManager.startListening(TEST_SERVICE_UUID)).thenReturn(true);
+
+        mCarSppManager.startAssociation(null, callback);
+
+        verify(mMockSppManager).startListening(TEST_SERVICE_UUID);
+        assertThat(tryAcquire(semaphore)).isTrue();
+        verify(callback).onAssociationStartSuccess(eq(null));
+    }
+
+    @Test
+    public void testStartAssociationFailure() throws InterruptedException {
+        Semaphore semaphore = new Semaphore(0);
+        AssociationCallback callback = createAssociationCallback(semaphore);
+        when(mMockSppManager.startListening(TEST_SERVICE_UUID)).thenReturn(false);
+
+        mCarSppManager.startAssociation(null, callback);
+
+        assertThat(tryAcquire(semaphore)).isTrue();
+        verify(callback).onAssociationStartFailure();
+    }
+
+    @Test
+    public void testShowVerificationCode() throws InterruptedException {
+        Semaphore semaphore = new Semaphore(0);
+        AssociationCallback callback = createAssociationCallback(semaphore);
+        AssociationSecureChannel channel = getChannelForAssociation(callback);
+
+        channel.getShowVerificationCodeListener().showVerificationCode(TEST_VERIFICATION_CODE);
+
+        assertThat(tryAcquire(semaphore)).isTrue();
+        verify(callback).onVerificationCodeAvailable(eq(TEST_VERIFICATION_CODE));
+    }
+
+    @Test
+    public void testAssociationSuccess() throws InterruptedException {
+        Semaphore semaphore = new Semaphore(0);
+        AssociationCallback callback = createAssociationCallback(semaphore);
+        SecureChannel channel = getChannelForAssociation(callback);
+        SecureChannel.Callback channelCallback = channel.getCallback();
+
+        assertThat(channelCallback).isNotNull();
+
+        channelCallback.onDeviceIdReceived(TEST_REMOTE_DEVICE_ID.toString());
+        channelCallback.onSecureChannelEstablished();
+        ArgumentCaptor<AssociatedDevice> deviceCaptor =
+                ArgumentCaptor.forClass(AssociatedDevice.class);
+        verify(mMockStorage).addAssociatedDeviceForActiveUser(deviceCaptor.capture());
+        AssociatedDevice device = deviceCaptor.getValue();
+
+        assertThat(device.getDeviceId()).isEqualTo(TEST_REMOTE_DEVICE_ID.toString());
+        assertThat(tryAcquire(semaphore)).isTrue();
+        verify(callback).onAssociationCompleted(eq(TEST_REMOTE_DEVICE_ID.toString()));
+    }
+
+    private boolean tryAcquire(Semaphore semaphore) throws InterruptedException {
+        return semaphore.tryAcquire(100, TimeUnit.MILLISECONDS);
+    }
+
+    private AssociationSecureChannel getChannelForAssociation(AssociationCallback callback) {
+        ArgumentCaptor<SppManager.ConnectionCallback> callbackCaptor =
+                ArgumentCaptor.forClass(SppManager.ConnectionCallback.class);
+        mCarSppManager.startAssociation(null, callback);
+        verify(mMockSppManager).registerCallback(callbackCaptor.capture(), any());
+        BluetoothDevice bluetoothDevice = BluetoothAdapter.getDefaultAdapter()
+                .getRemoteDevice(TEST_REMOTE_DEVICE_ADDRESS);
+        callbackCaptor.getValue().onRemoteDeviceConnected(bluetoothDevice);
+        return (AssociationSecureChannel) mCarSppManager.getConnectedDeviceChannel();
+    }
+
+    @NonNull
+    private AssociationCallback createAssociationCallback(@NonNull final Semaphore semaphore) {
+        return spy(new AssociationCallback() {
+            @Override
+            public void onAssociationStartSuccess(String deviceName) {
+                semaphore.release();
+            }
+
+            @Override
+            public void onAssociationStartFailure() {
+                semaphore.release();
+            }
+
+            @Override
+            public void onAssociationError(int error) {
+                semaphore.release();
+            }
+
+            @Override
+            public void onVerificationCodeAvailable(String code) {
+                semaphore.release();
+            }
+
+            @Override
+            public void onAssociationCompleted(String deviceId) {
+                semaphore.release();
+            }
+        });
+    }
+}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/ConnectedTaskTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/ConnectedTaskTest.java
new file mode 100644
index 0000000..7ae8192
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/ConnectedTaskTest.java
@@ -0,0 +1,83 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(AndroidJUnit4.class)
+public class ConnectedTaskTest {
+
+    private final byte[] mTestData = "testData".getBytes();
+    private ConnectedTask mConnectedTask;
+    private InputStream mInputStream = new ByteArrayInputStream(mTestData);
+    private OutputStream mOutputStream = new ByteArrayOutputStream();
+    private ConnectedTask.Callback mCallback;
+    private Executor mExecutor = Executors.newSingleThreadExecutor();
+    private Semaphore mSemaphore = new Semaphore(0);
+
+
+    @Before
+    public void setUp() {
+        mCallback = spy(new ConnectedTask.Callback() {
+            @Override
+            public void onMessageReceived(byte[] message) {
+                mSemaphore.release();
+            }
+
+            @Override
+            public void onDisconnected() {
+
+            }
+        });
+        mConnectedTask = new ConnectedTask(mInputStream, mOutputStream, null, mCallback);
+    }
+
+    @Test
+    public void testTaskRun_InformCallback() throws InterruptedException {
+        mExecutor.execute(mConnectedTask);
+        assertThat(tryAcquire(mSemaphore)).isTrue();
+        verify(mCallback).onMessageReceived(mTestData);
+    }
+
+    @Test
+    public void testWrite_WriteToOutputStream() {
+        mConnectedTask.write(mTestData);
+        assertThat(mOutputStream.toString()).isEqualTo(new String(mTestData));
+    }
+
+    private boolean tryAcquire(Semaphore semaphore) throws InterruptedException {
+        return semaphore.tryAcquire(100, TimeUnit.MILLISECONDS);
+    }
+}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppDeviceMessageStreamTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppDeviceMessageStreamTest.java
new file mode 100644
index 0000000..a126d04
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppDeviceMessageStreamTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static org.mockito.Mockito.mockitoSession;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.connecteddevice.util.ByteUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+@RunWith(AndroidJUnit4.class)
+public class SppDeviceMessageStreamTest {
+    private static final int MAX_WRITE_SIZE = 700;
+
+    @Mock
+    private SppManager mMockSppManager;
+    private BluetoothDevice mBluetoothDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(
+            "00:11:22:33:44:55");
+    private MockitoSession mMockingSession;
+    private SppDeviceMessageStream mSppDeviceMessageStream;
+
+    @Before
+    public void setUp() {
+        mMockingSession = mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.WARN)
+                .startMocking();
+        mSppDeviceMessageStream = spy(
+                new SppDeviceMessageStream(mMockSppManager, mBluetoothDevice, MAX_WRITE_SIZE));
+    }
+
+    @After
+    public void tearDown() {
+        if (mMockingSession != null) {
+            mMockingSession.finishMocking();
+        }
+    }
+
+    @Test
+    public void send_callsWriteAndSendCompleted() {
+        byte[] data = ByteUtils.randomBytes(10);
+        mSppDeviceMessageStream.send(data);
+        verify(mMockSppManager).write(data);
+        verify(mSppDeviceMessageStream).sendCompleted();
+    }
+}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppManagerTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppManagerTest.java
new file mode 100644
index 0000000..a99fc6b
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppManagerTest.java
@@ -0,0 +1,144 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mockitoSession;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.bluetooth.BluetoothDevice;
+
+import androidx.annotation.NonNull;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+import java.io.IOException;
+import java.util.UUID;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+@RunWith(AndroidJUnit4.class)
+public class SppManagerTest {
+    private static final UUID TEST_SERVICE_UUID = UUID.randomUUID();
+    private final boolean mIsSecureRfcommChannel = true;
+    private final byte[] mTestData = "testData".getBytes();
+    private SppManager mSppManager;
+    private Executor mCallbackExecutor = Executors.newSingleThreadExecutor();
+    private byte[] mCompletedMessage = SppPayloadStream.wrapWithArrayLength(mTestData);
+    @Mock
+    private ConnectedTask mMockConnectedTask;
+
+    @Mock
+    private ExecutorService mMockExecutorService;
+    private MockitoSession mMockitoSession;
+
+
+    @Before
+    public void setUp() throws IOException {
+        mSppManager = new SppManager(mIsSecureRfcommChannel);
+        mMockitoSession = mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.WARN)
+                .startMocking();
+    }
+
+    @After
+    public void tearDown() {
+        if (mMockitoSession != null) {
+            mMockitoSession.finishMocking();
+        }
+    }
+
+    @Test
+    public void testStartListen_StartAcceptTask() {
+        mSppManager.mConnectionExecutor = mMockExecutorService;
+        mSppManager.startListening(TEST_SERVICE_UUID);
+        assertThat(mSppManager.mAcceptTask).isNotNull();
+        verify(mMockExecutorService).execute(mSppManager.mAcceptTask);
+    }
+
+    @Test
+    public void testWrite_CallConnectedTaskToWrite() {
+        mSppManager.mConnectedTask = mMockConnectedTask;
+        mSppManager.mState = SppManager.ConnectionState.CONNECTED;
+        mSppManager.write(mTestData);
+        verify(mMockConnectedTask).write(SppPayloadStream.wrapWithArrayLength(mTestData));
+    }
+
+    @Test
+    public void testConnectedTaskCallback_onMessageReceived_CallOnMessageReceivedListener()
+            throws InterruptedException {
+        Semaphore semaphore = new Semaphore(0);
+        SppManager.OnMessageReceivedListener listener = createOnMessageReceivedListener(semaphore);
+        mSppManager.addOnMessageReceivedListener(listener, mCallbackExecutor);
+        mSppManager.mConnectedTaskCallback.onMessageReceived(mCompletedMessage);
+        assertThat(tryAcquire(semaphore)).isTrue();
+        verify(listener).onMessageReceived(any(), eq(mTestData));
+    }
+
+    @Test
+    public void testConnectedTaskCallback_onDisconnected_CallOnRemoteDeviceDisconnected()
+            throws InterruptedException {
+        Semaphore semaphore = new Semaphore(0);
+        SppManager.ConnectionCallback callback = createConnectionCallback(semaphore);
+        mSppManager.registerCallback(callback, mCallbackExecutor);
+        mSppManager.mConnectedTaskCallback.onDisconnected();
+        assertThat(tryAcquire(semaphore)).isTrue();
+        verify(callback).onRemoteDeviceDisconnected(any());
+    }
+
+    @NonNull
+    private SppManager.ConnectionCallback createConnectionCallback(
+            @NonNull final Semaphore semaphore) {
+        return spy(new SppManager.ConnectionCallback() {
+
+            @Override
+            public void onRemoteDeviceConnected(BluetoothDevice device) {
+                semaphore.release();
+            }
+
+            @Override
+            public void onRemoteDeviceDisconnected(BluetoothDevice device) {
+                semaphore.release();
+            }
+        });
+    }
+
+    @NonNull
+    private SppManager.OnMessageReceivedListener createOnMessageReceivedListener(
+            @NonNull final Semaphore semaphore) {
+        return spy((device, value) -> semaphore.release());
+    }
+
+    private boolean tryAcquire(Semaphore semaphore) throws InterruptedException {
+        return semaphore.tryAcquire(100, TimeUnit.MILLISECONDS);
+    }
+}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppPayloadStreamTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppPayloadStreamTest.java
new file mode 100644
index 0000000..9f0b42b
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/connection/spp/SppPayloadStreamTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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.connecteddevice.connection.spp;
+
+import static org.mockito.Mockito.mockitoSession;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+@RunWith(AndroidJUnit4.class)
+public class SppPayloadStreamTest {
+    private SppPayloadStream mSppPayloadStream;
+    private MockitoSession mMockitoSession;
+    private final byte[] mTestData = "testData".getBytes();
+    private byte[] mCompletedMessage = SppPayloadStream.wrapWithArrayLength(mTestData);
+    ;
+    private byte[] mCompletedMessageSplit1;
+    private byte[] mCompletedMessageSplit2;
+    @Mock
+    private SppPayloadStream.OnMessageCompletedListener mMockListener;
+
+
+    @Before
+    public void setUp() {
+        mMockitoSession = mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.WARN)
+                .startMocking();
+        mSppPayloadStream = new SppPayloadStream();
+        mSppPayloadStream.setMessageCompletedListener(mMockListener);
+        int length = mCompletedMessage.length;
+        mCompletedMessageSplit1 = Arrays.copyOfRange(mCompletedMessage, 0, (length + 1) / 2);
+        mCompletedMessageSplit2 = Arrays.copyOfRange(mCompletedMessage, (length + 1) / 2, length);
+    }
+
+    @After
+    public void tearDown() {
+        if (mMockitoSession != null) {
+            mMockitoSession.finishMocking();
+        }
+    }
+
+    @Test
+    public void testWriteCompletedMessage_InformListener() throws IOException {
+        mSppPayloadStream.write(mCompletedMessage);
+        verify(mMockListener).onMessageCompleted(mTestData);
+    }
+
+    @Test
+    public void testWriteIncompleteMessage_DoNotInformListener() throws IOException {
+        mSppPayloadStream.write(mCompletedMessageSplit1);
+        verify(mMockListener, never()).onMessageCompleted(mTestData);
+    }
+
+    @Test
+    public void testWriteTwoMessage_InformListenerCompletedMessage() throws IOException {
+        mSppPayloadStream.write(mCompletedMessageSplit1);
+        mSppPayloadStream.write(mCompletedMessageSplit2);
+
+        verify(mMockListener).onMessageCompleted(mTestData);
+    }
+}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/oob/BluetoothRfcommChannelTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/oob/BluetoothRfcommChannelTest.java
new file mode 100644
index 0000000..9628afa
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/oob/BluetoothRfcommChannelTest.java
@@ -0,0 +1,185 @@
+/*
+ * 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.connecteddevice.oob;
+
+
+import static com.android.car.connecteddevice.model.OobEligibleDevice.OOB_TYPE_BLUETOOTH;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mockitoSession;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothSocket;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.connecteddevice.model.OobEligibleDevice;
+import com.android.car.connecteddevice.util.ByteUtils;
+
+import com.google.common.primitives.Bytes;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoSession;
+import org.mockito.quality.Strictness;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.UUID;
+
+@RunWith(AndroidJUnit4.class)
+public class BluetoothRfcommChannelTest {
+    private BluetoothRfcommChannel mBluetoothRfcommChannel;
+    private OobEligibleDevice mOobEligibleDevice;
+    @Mock
+    private OobChannel.Callback mMockCallback;
+    @Mock
+    private BluetoothAdapter mMockBluetoothAdapter;
+    @Mock
+    private BluetoothDevice mMockBluetoothDevice;
+    @Mock
+    private BluetoothSocket mMockBluetoothSocket;
+    @Mock
+    private OutputStream mMockOutputStream;
+
+    private MockitoSession mMockingSession;
+
+    @Before
+    public void setUp() {
+        mMockingSession = mockitoSession()
+                .initMocks(this)
+                .strictness(Strictness.WARN)
+                .startMocking();
+
+
+        mBluetoothRfcommChannel = new BluetoothRfcommChannel();
+
+        mOobEligibleDevice = new OobEligibleDevice("00:11:22:33:44:55", OOB_TYPE_BLUETOOTH);
+
+        when(mMockBluetoothAdapter.getRemoteDevice(
+                mOobEligibleDevice.getDeviceAddress())).thenReturn(mMockBluetoothDevice);
+    }
+
+    @After
+    public void tearDown() {
+        if (mMockingSession != null) {
+            mMockingSession.finishMocking();
+        }
+    }
+
+    @Test
+    public void completeOobExchange_success() throws Exception {
+        when(mMockBluetoothSocket.getOutputStream()).thenReturn(mMockOutputStream);
+        when(mMockBluetoothDevice.createRfcommSocketToServiceRecord(any(UUID.class))).thenReturn(
+                mMockBluetoothSocket);
+        mBluetoothRfcommChannel.completeOobDataExchange(mOobEligibleDevice, mMockCallback,
+                mMockBluetoothAdapter);
+
+        verify(mMockCallback, timeout(1000)).onOobExchangeSuccess();
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        oobConnectionManager.startOobExchange(mBluetoothRfcommChannel);
+
+        ArgumentCaptor<byte[]> oobDataCaptor = ArgumentCaptor.forClass(byte[].class);
+        verify(mMockOutputStream).write(oobDataCaptor.capture());
+        byte[] oobData = oobDataCaptor.getValue();
+
+        assertThat(oobData).isEqualTo(Bytes.concat(oobConnectionManager.mDecryptionIv,
+                oobConnectionManager.mEncryptionIv,
+                oobConnectionManager.mEncryptionKey.getEncoded()));
+    }
+
+    @Test
+    public void completeOobExchange_ioExceptionCausesRetry() throws Exception {
+        doThrow(IOException.class).doAnswer(invocation -> null)
+                .when(mMockBluetoothSocket).connect();
+        when(mMockBluetoothDevice.createRfcommSocketToServiceRecord(any(UUID.class))).thenReturn(
+                mMockBluetoothSocket);
+        mBluetoothRfcommChannel.completeOobDataExchange(mOobEligibleDevice, mMockCallback,
+                mMockBluetoothAdapter);
+        verify(mMockBluetoothSocket, timeout(3000).times(2)).connect();
+    }
+
+    @Test
+    public void completeOobExchange_createRfcommSocketFails_callOnFailed() throws Exception {
+        when(mMockBluetoothDevice.createRfcommSocketToServiceRecord(any(UUID.class))).thenThrow(
+                IOException.class);
+
+        mBluetoothRfcommChannel.completeOobDataExchange(mOobEligibleDevice, mMockCallback,
+                mMockBluetoothAdapter);
+        verify(mMockCallback).onOobExchangeFailure();
+    }
+
+    @Test
+    public void sendOobData_nullBluetoothDevice_callOnFailed() {
+        mBluetoothRfcommChannel.mCallback = mMockCallback;
+
+        mBluetoothRfcommChannel.sendOobData("someData".getBytes());
+        verify(mMockCallback).onOobExchangeFailure();
+    }
+
+    @Test
+    public void sendOobData_writeFails_callOnFailed() throws Exception {
+        byte[] testMessage = "testMessage".getBytes();
+        completeOobExchange_success();
+        doThrow(IOException.class).when(mMockOutputStream).write(testMessage);
+
+        mBluetoothRfcommChannel.sendOobData(testMessage);
+        verify(mMockCallback).onOobExchangeFailure();
+    }
+
+    @Test
+    public void interrupt_closesSocket() throws Exception {
+        when(mMockBluetoothSocket.getOutputStream()).thenReturn(mMockOutputStream);
+        when(mMockBluetoothDevice.createRfcommSocketToServiceRecord(any(UUID.class))).thenReturn(
+                mMockBluetoothSocket);
+        mBluetoothRfcommChannel.completeOobDataExchange(mOobEligibleDevice, mMockCallback,
+                mMockBluetoothAdapter);
+        mBluetoothRfcommChannel.interrupt();
+        mBluetoothRfcommChannel.sendOobData(ByteUtils.randomBytes(10));
+        verify(mMockOutputStream, times(0)).write(any());
+        verify(mMockOutputStream).flush();
+        verify(mMockOutputStream).close();
+    }
+
+    @Test
+    public void interrupt_preventsCallbacks() throws Exception {
+        when(mMockBluetoothSocket.getOutputStream()).thenReturn(mMockOutputStream);
+        when(mMockBluetoothDevice.createRfcommSocketToServiceRecord(any(UUID.class))).thenReturn(
+                mMockBluetoothSocket);
+        doAnswer(invocation -> {
+            mBluetoothRfcommChannel.interrupt();
+            return invocation.callRealMethod();
+        }).when(mMockBluetoothSocket).connect();
+        mBluetoothRfcommChannel.completeOobDataExchange(mOobEligibleDevice, mMockCallback,
+                mMockBluetoothAdapter);
+        verify(mMockCallback, times(0)).onOobExchangeSuccess();
+        verify(mMockCallback, times(0)).onOobExchangeFailure();
+    }
+}
diff --git a/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/oob/OobConnectionManagerTest.java b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/oob/OobConnectionManagerTest.java
new file mode 100644
index 0000000..13f93c9
--- /dev/null
+++ b/connected-device-lib/tests/unit/src/com/android/car/connecteddevice/oob/OobConnectionManagerTest.java
@@ -0,0 +1,176 @@
+/*
+ * 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.connecteddevice.oob;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.testng.Assert.assertThrows;
+
+import android.security.keystore.KeyProperties;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.car.connecteddevice.model.OobEligibleDevice;
+
+import com.google.common.primitives.Bytes;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.security.InvalidKeyException;
+import java.security.SecureRandom;
+
+import javax.crypto.AEADBadTagException;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+
+@RunWith(AndroidJUnit4.class)
+public class OobConnectionManagerTest {
+    private static final byte[] TEST_MESSAGE = "testMessage".getBytes();
+    private TestChannel mTestChannel;
+    private SecretKey mTestKey;
+    private byte[] mTestEncryptionIv = new byte[OobConnectionManager.NONCE_LENGTH_BYTES];
+    private byte[] mTestDecryptionIv = new byte[OobConnectionManager.NONCE_LENGTH_BYTES];
+    private byte[] mTestOobData;
+
+    @Before
+    public void setUp() throws Exception {
+        mTestChannel = new TestChannel();
+        mTestKey = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES).generateKey();
+
+        SecureRandom secureRandom = new SecureRandom();
+        secureRandom.nextBytes(mTestEncryptionIv);
+        secureRandom.nextBytes(mTestDecryptionIv);
+
+        mTestOobData = Bytes.concat(mTestDecryptionIv, mTestEncryptionIv, mTestKey.getEncoded());
+    }
+
+    @Test
+    public void testInitAsServer_keyIsNull() {
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        assertThat(oobConnectionManager.mEncryptionKey).isNull();
+    }
+
+    @Test
+    public void testServer_onSetOobData_setsKeyAndNonce() {
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        oobConnectionManager.setOobData(mTestOobData);
+        assertThat(oobConnectionManager.mEncryptionKey).isEqualTo(mTestKey);
+        // The decryption IV for the server is the encryption IV for the client and vice versa
+        assertThat(oobConnectionManager.mDecryptionIv).isEqualTo(mTestEncryptionIv);
+        assertThat(oobConnectionManager.mEncryptionIv).isEqualTo(mTestDecryptionIv);
+    }
+
+    @Test
+    public void testInitAsClient_keyAndNoncesAreNonNullAndSent() {
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        oobConnectionManager.startOobExchange(mTestChannel);
+        assertThat(oobConnectionManager.mEncryptionKey).isNotNull();
+        assertThat(oobConnectionManager.mEncryptionIv).isNotNull();
+        assertThat(oobConnectionManager.mDecryptionIv).isNotNull();
+        assertThat(mTestChannel.mSentOobData).isEqualTo(Bytes.concat(
+                oobConnectionManager.mDecryptionIv,
+                oobConnectionManager.mEncryptionIv,
+                oobConnectionManager.mEncryptionKey.getEncoded()
+        ));
+    }
+
+    @Test
+    public void testServerEncryptAndClientDecrypt() throws Exception {
+        OobConnectionManager clientOobConnectionManager = new OobConnectionManager();
+        clientOobConnectionManager.startOobExchange(mTestChannel);
+        OobConnectionManager serverOobConnectionManager = new OobConnectionManager();
+        serverOobConnectionManager.setOobData(mTestChannel.mSentOobData);
+
+        byte[] encryptedTestMessage = clientOobConnectionManager.encryptVerificationCode(
+                TEST_MESSAGE);
+        byte[] decryptedTestMessage = serverOobConnectionManager.decryptVerificationCode(
+                encryptedTestMessage);
+
+        assertThat(decryptedTestMessage).isEqualTo(TEST_MESSAGE);
+    }
+
+    @Test
+    public void testClientEncryptAndServerDecrypt() throws Exception {
+        OobConnectionManager clientOobConnectionManager = new OobConnectionManager();
+        clientOobConnectionManager.startOobExchange(mTestChannel);
+        OobConnectionManager serverOobConnectionManager = new OobConnectionManager();
+        serverOobConnectionManager.setOobData(mTestChannel.mSentOobData);
+
+        byte[] encryptedTestMessage = serverOobConnectionManager.encryptVerificationCode(
+                TEST_MESSAGE);
+        byte[] decryptedTestMessage = clientOobConnectionManager.decryptVerificationCode(
+                encryptedTestMessage);
+
+        assertThat(decryptedTestMessage).isEqualTo(TEST_MESSAGE);
+    }
+
+    @Test
+    public void testEncryptAndDecryptWithDifferentNonces_throwsAEADBadTagException()
+            throws Exception {
+        // The OobConnectionManager stores a different nonce for encryption and decryption, so it
+        // can't decrypt messages that it encrypted itself. It can only send encrypted messages to
+        // an OobConnectionManager on another device that share its nonces and encryption key.
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        oobConnectionManager.startOobExchange(mTestChannel);
+        byte[] encryptedMessage = oobConnectionManager.encryptVerificationCode(TEST_MESSAGE);
+        assertThrows(AEADBadTagException.class,
+                () -> oobConnectionManager.decryptVerificationCode(encryptedMessage));
+    }
+
+    @Test
+    public void testDecryptWithShortMessage_throwsAEADBadTagException() {
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        oobConnectionManager.startOobExchange(mTestChannel);
+        assertThrows(AEADBadTagException.class,
+                () -> oobConnectionManager.decryptVerificationCode("short".getBytes()));
+    }
+
+    @Test
+    public void testEncryptWithNullKey_throwsInvalidKeyException() {
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        assertThrows(InvalidKeyException.class,
+                () -> oobConnectionManager.encryptVerificationCode(TEST_MESSAGE));
+    }
+
+    @Test
+    public void testDecryptWithNullKey_throwsInvalidKeyException() {
+        OobConnectionManager oobConnectionManager = new OobConnectionManager();
+        assertThrows(InvalidKeyException.class,
+                () -> oobConnectionManager.decryptVerificationCode(TEST_MESSAGE));
+    }
+
+    private static class TestChannel implements OobChannel {
+        byte[] mSentOobData = null;
+
+        @Override
+        public void completeOobDataExchange(OobEligibleDevice device, Callback callback) {
+
+        }
+
+        @Override
+        public void sendOobData(byte[] oobData) {
+            mSentOobData = oobData;
+        }
+
+        @Override
+        public void interrupt() {
+
+        }
+    }
+}
diff --git a/encryption-runner/Android.bp b/encryption-runner/Android.bp
index 2522d2d..c507c56 100644
--- a/encryption-runner/Android.bp
+++ b/encryption-runner/Android.bp
@@ -14,13 +14,15 @@
 
 android_library {
     name: "encryption-runner",
-    min_sdk_version: "23",
+    sdk_version: "current",
+    min_sdk_version: "28",
     product_variables: {
         pdk: {
             enabled: false,
         },
     },
     static_libs: [
+      "androidx.annotation_annotation",
       "ukey2",
     ],
     srcs: [
diff --git a/encryption-runner/src/android/car/encryptionrunner/EncryptionRunner.java b/encryption-runner/src/android/car/encryptionrunner/EncryptionRunner.java
index 5721218..6a2b6d6 100644
--- a/encryption-runner/src/android/car/encryptionrunner/EncryptionRunner.java
+++ b/encryption-runner/src/android/car/encryptionrunner/EncryptionRunner.java
@@ -16,7 +16,7 @@
 
 package android.car.encryptionrunner;
 
-import android.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * A generalized interface that allows for generating shared secrets as well as encrypting
diff --git a/encryption-runner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java b/encryption-runner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
index d11ed4e..b479b50 100644
--- a/encryption-runner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
+++ b/encryption-runner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
@@ -16,9 +16,8 @@
 
 package android.car.encryptionrunner;
 
-import android.annotation.IntDef;
-
-import com.android.internal.annotations.VisibleForTesting;
+import androidx.annotation.IntDef;
+import androidx.annotation.VisibleForTesting;
 
 /**
  * Factory that creates encryption runner.
@@ -29,10 +28,12 @@
         // prevent instantiation.
     }
 
-    @IntDef({EncryptionRunnerType.UKEY2})
+    @IntDef({EncryptionRunnerType.UKEY2, EncryptionRunnerType.OOB_UKEY2})
     public @interface EncryptionRunnerType {
         /** Use Ukey2 as underlying key exchange. */
         int UKEY2 = 0;
+        /** Use Ukey2 and an out of band channel as underlying key exchange. */
+        int OOB_UKEY2 = 1;
     }
 
     /**
@@ -42,6 +43,8 @@
         switch (type) {
             case EncryptionRunnerType.UKEY2:
                 return new Ukey2EncryptionRunner();
+            case EncryptionRunnerType.OOB_UKEY2:
+                return new OobUkey2EncryptionRunner();
             default:
                 throw new IllegalArgumentException("Unknown EncryptionRunnerType: " + type);
         }
@@ -62,7 +65,16 @@
      * for testing.
      */
     @VisibleForTesting
-    public static EncryptionRunner newDummyRunner() {
-        return new DummyEncryptionRunner();
+    public static EncryptionRunner newFakeRunner() {
+        return new FakeEncryptionRunner();
+    }
+
+    /**
+     * Creates a new {@link EncryptionRunner} that doesn't actually do encryption but is useful
+     * for out of band association testing.
+     */
+    @VisibleForTesting
+    public static EncryptionRunner newOobFakeRunner() {
+        return new OobFakeEncryptionRunner();
     }
 }
diff --git a/encryption-runner/src/android/car/encryptionrunner/DummyEncryptionRunner.java b/encryption-runner/src/android/car/encryptionrunner/FakeEncryptionRunner.java
similarity index 87%
rename from encryption-runner/src/android/car/encryptionrunner/DummyEncryptionRunner.java
rename to encryption-runner/src/android/car/encryptionrunner/FakeEncryptionRunner.java
index d247967..5fd1ff2 100644
--- a/encryption-runner/src/android/car/encryptionrunner/DummyEncryptionRunner.java
+++ b/encryption-runner/src/android/car/encryptionrunner/FakeEncryptionRunner.java
@@ -16,9 +16,8 @@
 
 package android.car.encryptionrunner;
 
-import android.annotation.IntDef;
-
-import com.android.internal.annotations.VisibleForTesting;
+import androidx.annotation.IntDef;
+import androidx.annotation.VisibleForTesting;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -28,10 +27,10 @@
  * production environments.
  */
 @VisibleForTesting
-public class DummyEncryptionRunner implements EncryptionRunner {
+public class FakeEncryptionRunner implements EncryptionRunner {
 
     private static final String KEY = "key";
-    private static final byte[] DUMMY_MESSAGE = "Dummy Message".getBytes();
+    private static final byte[] PLACEHOLDER_MESSAGE = "Placeholder Message".getBytes();
     @VisibleForTesting
     public static final String INIT = "init";
     @VisibleForTesting
@@ -42,7 +41,7 @@
 
     @Retention(RetentionPolicy.SOURCE)
     @IntDef({Mode.UNKNOWN, Mode.CLIENT, Mode.SERVER})
-    private @interface Mode {
+    @interface Mode {
 
         int UNKNOWN = 0;
         int CLIENT = 1;
@@ -51,7 +50,7 @@
 
     private boolean mIsReconnect;
     private boolean mInitReconnectVerification;
-    private Key mCurrentDummyKey;
+    private Key mCurrentFakeKey;
     @Mode
     private int mMode;
     @HandshakeMessage.HandshakeState
@@ -83,6 +82,20 @@
                 .build();
     }
 
+    @Mode
+    protected int getMode() {
+        return mMode;
+    }
+
+    @HandshakeMessage.HandshakeState
+    protected int getState() {
+        return mState;
+    }
+
+    protected void setState(@HandshakeMessage.HandshakeState int state) {
+        mState = state;
+    }
+
     private void checkRunnerIsNew() {
         if (mState != HandshakeMessage.HandshakeState.UNKNOWN) {
             throw new IllegalStateException("runner already initialized.");
@@ -130,12 +143,12 @@
     @Override
     public HandshakeMessage authenticateReconnection(byte[] message, byte[] previousKey)
             throws HandshakeException {
-        mCurrentDummyKey = new DummyKey();
-        // Blindly verify the reconnection because this is a dummy encryption runner.
+        mCurrentFakeKey = new FakeKey();
+        // Blindly verify the reconnection because this is a fake encryption runner.
         return HandshakeMessage.newBuilder()
                 .setHandshakeState(HandshakeMessage.HandshakeState.FINISHED)
-                .setKey(mCurrentDummyKey)
-                .setNextMessage(mInitReconnectVerification ? null : DUMMY_MESSAGE)
+                .setKey(mCurrentFakeKey)
+                .setNextMessage(mInitReconnectVerification ? null : PLACEHOLDER_MESSAGE)
                 .build();
     }
 
@@ -146,13 +159,13 @@
         mState = HandshakeMessage.HandshakeState.RESUMING_SESSION;
         return HandshakeMessage.newBuilder()
                 .setHandshakeState(mState)
-                .setNextMessage(DUMMY_MESSAGE)
+                .setNextMessage(PLACEHOLDER_MESSAGE)
                 .build();
     }
 
     @Override
     public Key keyOf(byte[] serialized) {
-        return new DummyKey();
+        return new FakeKey();
     }
 
     @Override
@@ -161,7 +174,7 @@
             throw new IllegalStateException("asking to verify pin, state = " + mState);
         }
         mState = HandshakeMessage.HandshakeState.FINISHED;
-        return HandshakeMessage.newBuilder().setKey(new DummyKey()).setHandshakeState(
+        return HandshakeMessage.newBuilder().setKey(new FakeKey()).setHandshakeState(
                 mState).build();
     }
 
@@ -180,7 +193,7 @@
         throw new HandshakeException(message);
     }
 
-    private class DummyKey implements Key {
+    class FakeKey implements Key {
         @Override
         public byte[] asBytes() {
             return KEY.getBytes();
diff --git a/encryption-runner/src/android/car/encryptionrunner/HandshakeMessage.java b/encryption-runner/src/android/car/encryptionrunner/HandshakeMessage.java
index d7c9765..a79c64e 100644
--- a/encryption-runner/src/android/car/encryptionrunner/HandshakeMessage.java
+++ b/encryption-runner/src/android/car/encryptionrunner/HandshakeMessage.java
@@ -16,11 +16,12 @@
 
 package android.car.encryptionrunner;
 
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.text.TextUtils;
 
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
diff --git a/encryption-runner/src/android/car/encryptionrunner/Key.java b/encryption-runner/src/android/car/encryptionrunner/Key.java
index e13585f..e80be25 100644
--- a/encryption-runner/src/android/car/encryptionrunner/Key.java
+++ b/encryption-runner/src/android/car/encryptionrunner/Key.java
@@ -16,7 +16,7 @@
 
 package android.car.encryptionrunner;
 
-import android.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.security.NoSuchAlgorithmException;
 import java.security.SignatureException;
diff --git a/encryption-runner/src/android/car/encryptionrunner/OobFakeEncryptionRunner.java b/encryption-runner/src/android/car/encryptionrunner/OobFakeEncryptionRunner.java
new file mode 100644
index 0000000..3ab17d2
--- /dev/null
+++ b/encryption-runner/src/android/car/encryptionrunner/OobFakeEncryptionRunner.java
@@ -0,0 +1,68 @@
+/*
+ * 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 android.car.encryptionrunner;
+
+/**
+ * An encryption runner that doesn't actually do encryption. Useful for debugging out of band
+ * association. Do not use in production environments.
+ */
+public class OobFakeEncryptionRunner extends FakeEncryptionRunner {
+
+    @Override
+    public HandshakeMessage continueHandshake(byte[] response) throws HandshakeException {
+        if (getState() != HandshakeMessage.HandshakeState.IN_PROGRESS) {
+            throw new HandshakeException("not waiting for response but got one");
+        }
+
+        @HandshakeMessage.HandshakeState int newState =
+                HandshakeMessage.HandshakeState.OOB_VERIFICATION_NEEDED;
+        switch (getMode()) {
+            case Mode.SERVER:
+                if (!CLIENT_RESPONSE.equals(new String(response))) {
+                    throw new HandshakeException("unexpected response: " + new String(response));
+                }
+                setState(newState);
+                return HandshakeMessage.newBuilder()
+                        .setOobVerificationCode(VERIFICATION_CODE.getBytes())
+                        .setHandshakeState(newState)
+                        .build();
+            case Mode.CLIENT:
+                if (!INIT_RESPONSE.equals(new String(response))) {
+                    throw new HandshakeException("unexpected response: " + new String(response));
+                }
+                setState(newState);
+                return HandshakeMessage.newBuilder()
+                        .setHandshakeState(newState)
+                        .setNextMessage(CLIENT_RESPONSE.getBytes())
+                        .setOobVerificationCode(VERIFICATION_CODE.getBytes())
+                        .build();
+            default:
+                throw new IllegalStateException("unexpected role: " + getMode());
+        }
+    }
+
+    @Override
+    public HandshakeMessage verifyPin() throws HandshakeException {
+        @HandshakeMessage.HandshakeState int state = getState();
+        if (state != HandshakeMessage.HandshakeState.OOB_VERIFICATION_NEEDED) {
+            throw new IllegalStateException("asking to verify pin, state = " + state);
+        }
+        state = HandshakeMessage.HandshakeState.FINISHED;
+        return HandshakeMessage.newBuilder().setKey(new FakeKey()).setHandshakeState(
+                state).build();
+    }
+}
diff --git a/encryption-runner/src/android/car/encryptionrunner/OobUkey2EncryptionRunner.java b/encryption-runner/src/android/car/encryptionrunner/OobUkey2EncryptionRunner.java
new file mode 100644
index 0000000..9474bd4
--- /dev/null
+++ b/encryption-runner/src/android/car/encryptionrunner/OobUkey2EncryptionRunner.java
@@ -0,0 +1,139 @@
+/*
+ * 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 android.car.encryptionrunner;
+
+import com.google.security.cryptauth.lib.securegcm.Ukey2Handshake;
+
+/**
+ * An {@link EncryptionRunner} that uses Ukey2 as the underlying implementation, and generates a
+ * longer token for the out of band verification step.
+ *
+ * <p>To use this class:
+ *
+ * <p>1. As a client.
+ *
+ * <p>{@code
+ * HandshakeMessage initialClientMessage = clientRunner.initHandshake();
+ * sendToServer(initialClientMessage.getNextMessage());
+ * byte message = getServerResponse();
+ * HandshakeMessage message = clientRunner.continueHandshake(message);
+ * }
+ *
+ * <p>If it is a first-time connection,
+ *
+ * <p>{@code message.getHandshakeState()} should be OOB_VERIFICATION_NEEDED. Wait for an encrypted
+ * message sent from the server, and decrypt that message with an out of band key that was generated
+ * before the start of the handshake.
+ *
+ * <p>After confirming that the decrypted message matches the verification code, send an encrypted
+ * message back to the server, and call {@code HandshakeMessage lastMessage =
+ * clientRunner.verifyPin();} otherwise {@code clientRunner.invalidPin(); }
+ *
+ * <p>Use {@code lastMessage.getKey()} to get the key for encryption.
+ *
+ * <p>If it is a reconnection,
+ *
+ * <p>{@code message.getHandshakeState()} should be RESUMING_SESSION, PIN has been verified blindly,
+ * send the authentication message over to server, then authenticate the message from server.
+ *
+ * <p>{@code
+ * clientMessage = clientRunner.initReconnectAuthentication(previousKey)
+ * sendToServer(clientMessage.getNextMessage());
+ * HandshakeMessage lastMessage = clientRunner.authenticateReconnection(previousKey, message)
+ * }
+ *
+ * <p>{@code lastMessage.getHandshakeState()} should be FINISHED if reconnection handshake is done.
+ *
+ * <p>2. As a server.
+ *
+ * <p>{@code
+ * byte[] initialMessage = getClientMessageBytes();
+ * HandshakeMessage message = serverRunner.respondToInitRequest(initialMessage);
+ * sendToClient(message.getNextMessage());
+ * byte[] clientMessage = getClientResponse();
+ * HandshakeMessage message = serverRunner.continueHandshake(clientMessage);}
+ *
+ * <p>if it is a first-time connection,
+ *
+ * <p>{@code message.getHandshakeState()} should be OOB_VERIFICATION_NEEDED, send the verification
+ * code to the client, encrypted using an out of band key generated before the start of the
+ * handshake, and wait for a response from the client.
+ * If the decrypted message from the client matches the verification code, call {@code
+ * HandshakeMessage lastMessage = serverRunner.verifyPin}, otherwise
+ * {@code clientRunner.invalidPin(); }
+ * Use {@code lastMessage.getKey()} to get the key for encryption.
+ *
+ * <p>If it is a reconnection,
+ *
+ * <p>{@code message.getHandshakeState()} should be RESUMING_SESSION,PIN has been verified blindly,
+ * waiting for client message.
+ * After client message been received,
+ * {@code serverMessage = serverRunner.authenticateReconnection(previousKey, message);
+ * sendToClient(serverMessage.getNextMessage());}
+ * {@code serverMessage.getHandshakeState()} should be FINISHED if reconnection handshake is done.
+ *
+ * <p>Also see {@link EncryptionRunnerTest} for examples.
+ */
+public final class OobUkey2EncryptionRunner extends Ukey2EncryptionRunner {
+    // Choose max verification string length supported by Ukey2
+    private static final int VERIFICATION_STRING_LENGTH = 32;
+
+    @Override
+    public HandshakeMessage continueHandshake(byte[] response) throws HandshakeException {
+        checkInitialized();
+
+        Ukey2Handshake uKey2Client = getUkey2Client();
+
+        try {
+            if (uKey2Client.getHandshakeState() != Ukey2Handshake.State.IN_PROGRESS) {
+                throw new IllegalStateException(
+                        "handshake is not in progress, state =" + uKey2Client.getHandshakeState());
+            }
+            uKey2Client.parseHandshakeMessage(response);
+
+            // Not obvious from ukey2 api, but getting the next message can change the state.
+            // calling getNext message might go from in progress to verification needed, on
+            // the assumption that we already send this message to the peer.
+            byte[] nextMessage = null;
+            if (uKey2Client.getHandshakeState() == Ukey2Handshake.State.IN_PROGRESS) {
+                nextMessage = uKey2Client.getNextHandshakeMessage();
+            }
+
+            byte[] verificationCode = null;
+            if (uKey2Client.getHandshakeState() == Ukey2Handshake.State.VERIFICATION_NEEDED) {
+                // getVerificationString() needs to be called before notifyPinVerified().
+                verificationCode = uKey2Client.getVerificationString(VERIFICATION_STRING_LENGTH);
+                if (isReconnect()) {
+                    HandshakeMessage handshakeMessage = verifyPin();
+                    return HandshakeMessage.newBuilder()
+                            .setHandshakeState(handshakeMessage.getHandshakeState())
+                            .setNextMessage(nextMessage)
+                            .build();
+                }
+            }
+
+            return HandshakeMessage.newBuilder()
+                    .setHandshakeState(HandshakeMessage.HandshakeState.OOB_VERIFICATION_NEEDED)
+                    .setNextMessage(nextMessage)
+                    .setOobVerificationCode(verificationCode)
+                    .build();
+        } catch (com.google.security.cryptauth.lib.securegcm.HandshakeException
+                | Ukey2Handshake.AlertException e) {
+            throw new HandshakeException(e);
+        }
+    }
+}
diff --git a/encryption-runner/src/android/car/encryptionrunner/Ukey2EncryptionRunner.java b/encryption-runner/src/android/car/encryptionrunner/Ukey2EncryptionRunner.java
index f4ee5a7..ac1bf91 100644
--- a/encryption-runner/src/android/car/encryptionrunner/Ukey2EncryptionRunner.java
+++ b/encryption-runner/src/android/car/encryptionrunner/Ukey2EncryptionRunner.java
@@ -16,12 +16,12 @@
 
 package android.car.encryptionrunner;
 
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.util.Log;
 
-import com.android.internal.annotations.VisibleForTesting;
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
 
 import com.google.security.cryptauth.lib.securegcm.D2DConnectionContext;
 import com.google.security.cryptauth.lib.securegcm.Ukey2Handshake;
