Merge Android10 QPR1 into AOSP master

Bug: 145570283
Change-Id: Idf59a52fdc74034813ce48a7ed2c35d097a7ca92
diff --git a/OWNERS b/OWNERS
index 610f429..c1e7ec6 100644
--- a/OWNERS
+++ b/OWNERS
@@ -5,6 +5,7 @@
 rlagos@google.com
 stenning@google.com
 yizheng@google.com
+robertoalexis@google.com
 
 # TLMs
 johnchoi@google.com
diff --git a/car-apps-common/res/values-af/strings.xml b/car-apps-common/res/values-af/strings.xml
index 0771610..bea072f 100644
--- a/car-apps-common/res/values-af/strings.xml
+++ b/car-apps-common/res/values-af/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Vou knoppie in of uit"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Maak laai oop"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Maak laai toe"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Kenmerk is nie beskikbaar terwyl jy bestuur nie."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Rollees af"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Rollees op"</string>
 </resources>
diff --git a/car-apps-common/res/values-am/strings.xml b/car-apps-common/res/values-am/strings.xml
index c3c5933..6adcf20 100644
--- a/car-apps-common/res/values-am/strings.xml
+++ b/car-apps-common/res/values-am/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"አዝራርን ዘርጋ/ሰብስብ"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"መሳቢያን ክፈት"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"መሳቢያን ዝጋ"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"እየነዱ ሳለ ባህሪ አይገኝም።"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"ወደ ታች ይሸብልሉ"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ወደ ላይ ይሸብልሉ"</string>
 </resources>
diff --git a/car-apps-common/res/values-ar/strings.xml b/car-apps-common/res/values-ar/strings.xml
index c16969b..735997e 100644
--- a/car-apps-common/res/values-ar/strings.xml
+++ b/car-apps-common/res/values-ar/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"زر التوسيع/التصغير"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"فتح الدُرج"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"إغلاق الدُرج"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"لا تتوفَّر الميزة أثناء القيادة."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"التمرير للأسفل"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"التمرير للأعلى"</string>
 </resources>
diff --git a/car-apps-common/res/values-as/strings.xml b/car-apps-common/res/values-as/strings.xml
index bdb14e9..e5480aa 100644
--- a/car-apps-common/res/values-as/strings.xml
+++ b/car-apps-common/res/values-as/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"সম্প্ৰসাৰণ/সংকোচন বুটাম"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ড্ৰৱাৰ খোলক"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ড্ৰৱাৰ বন্ধ কৰক"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"গাড়ী চলোৱাৰ সময়ত এই সুবিধাটো উপলব্ধ নহয়।"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"তললৈ স্ক্ৰল কৰক"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ওপৰলৈ স্ক্ৰল কৰক"</string>
 </resources>
diff --git a/car-apps-common/res/values-az/strings.xml b/car-apps-common/res/values-az/strings.xml
index 7a705ca..bcc20d0 100644
--- a/car-apps-common/res/values-az/strings.xml
+++ b/car-apps-common/res/values-az/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Düyməni genişləndirin/yığcamlaşdırın"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Çəkməcəni açın"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Çəkməcəni bağlayın"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Xüsusiyyət avtomobil idarə edərkən əlçatan deyil."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Aşağı sürüşdürün"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Yuxarı sürüşdürün"</string>
 </resources>
diff --git a/car-apps-common/res/values-b+sr+Latn/strings.xml b/car-apps-common/res/values-b+sr+Latn/strings.xml
index 4b64909..90e7cbb 100644
--- a/car-apps-common/res/values-b+sr+Latn/strings.xml
+++ b/car-apps-common/res/values-b+sr+Latn/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Dugme Proširi/skupi"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Otvori fioku"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Zatvori fioku"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkcija nije dostupna tokom vožnje."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Pomerite nadole"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Pomerite nagore"</string>
 </resources>
diff --git a/car-apps-common/res/values-be/strings.xml b/car-apps-common/res/values-be/strings.xml
index 8c0ae61..10acc73 100644
--- a/car-apps-common/res/values-be/strings.xml
+++ b/car-apps-common/res/values-be/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Кнопка \"Разгарнуць/згарнуць\""</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Адкрыць высоўнае меню"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Закрыць высоўнае меню"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Функцыя недаступная, калі вы за рулём."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Прагартаць уніз"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Прагартаць уверх"</string>
 </resources>
diff --git a/car-apps-common/res/values-bg/strings.xml b/car-apps-common/res/values-bg/strings.xml
index 4c8dfad..9762b33 100644
--- a/car-apps-common/res/values-bg/strings.xml
+++ b/car-apps-common/res/values-bg/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Бутон за разгъване/свиване"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Отваряне на слоя"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Затваряне на слоя"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Функцията не е налице по време на шофиране."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Превъртане надолу"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Превъртане нагоре"</string>
 </resources>
diff --git a/car-apps-common/res/values-bn/strings.xml b/car-apps-common/res/values-bn/strings.xml
index 8c8f5eb..937834b 100644
--- a/car-apps-common/res/values-bn/strings.xml
+++ b/car-apps-common/res/values-bn/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"বড় করা/আড়াল করার বোতাম"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ড্রয়ার খুলুন"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ড্রয়ার বন্ধ করুন"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ড্রাইভ করার সময় এই ফিচার কাজ করবে না।"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"নিচে স্ক্রল করুন"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"উপরে স্ক্রল করুন"</string>
 </resources>
diff --git a/car-apps-common/res/values-bs/strings.xml b/car-apps-common/res/values-bs/strings.xml
index 0d3bcc9..299c4e1 100644
--- a/car-apps-common/res/values-bs/strings.xml
+++ b/car-apps-common/res/values-bs/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Dugme proširi/suzi"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Otvori ladicu"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Zatvori ladicu"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkcija nije dostupna tokom vožnje."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Klizni prema dolje"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Klizni prema gore"</string>
 </resources>
diff --git a/car-apps-common/res/values-ca/strings.xml b/car-apps-common/res/values-ca/strings.xml
index df3b477..48d7ba8 100644
--- a/car-apps-common/res/values-ca/strings.xml
+++ b/car-apps-common/res/values-ca/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Botó per desplegar o replegar"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Obre el tauler"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Tanca el tauler"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Aquesta funció no està disponible mentre condueixes."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Desplaça cap avall"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Desplaça cap amunt"</string>
 </resources>
diff --git a/car-apps-common/res/values-cs/strings.xml b/car-apps-common/res/values-cs/strings.xml
index 6872e31..db6cedd 100644
--- a/car-apps-common/res/values-cs/strings.xml
+++ b/car-apps-common/res/values-cs/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Tlačítko rozbalení/sbalení"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Otevřít vysouvací panel"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Zavřít vysouvací panel"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkce při řízení není dostupná."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Posunout dolů"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Posunout nahoru"</string>
 </resources>
diff --git a/car-apps-common/res/values-da/strings.xml b/car-apps-common/res/values-da/strings.xml
index 49b1021..cc9a4e7 100644
--- a/car-apps-common/res/values-da/strings.xml
+++ b/car-apps-common/res/values-da/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Knappen Udvid/skjul"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Åbn skuffen"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Luk skuffen"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funktionen er ikke tilgængelig under kørsel."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Rul ned"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Rul op"</string>
 </resources>
diff --git a/car-apps-common/res/values-de/strings.xml b/car-apps-common/res/values-de/strings.xml
index 25cc654..67cea75 100644
--- a/car-apps-common/res/values-de/strings.xml
+++ b/car-apps-common/res/values-de/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Schaltfläche zum Maximieren/Minimieren"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Leiste öffnen"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Leiste schließen"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funktion während der Fahrt nicht verfügbar."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Nach unten scrollen"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Nach oben scrollen"</string>
 </resources>
diff --git a/car-apps-common/res/values-el/strings.xml b/car-apps-common/res/values-el/strings.xml
index 43bcbda..39f4206 100644
--- a/car-apps-common/res/values-el/strings.xml
+++ b/car-apps-common/res/values-el/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Κουμπί ανάπτυξης/σύμπτυξης"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Άνοιγμα συρταριού"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Κλείσιμο συρταριού"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Η λειτουργία δεν διατίθεται κατά τη διάρκεια της οδήγησης."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Κύλιση προς τα κάτω"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Κύλιση προς τα επάνω"</string>
 </resources>
diff --git a/car-apps-common/res/values-en-rAU/strings.xml b/car-apps-common/res/values-en-rAU/strings.xml
index 691ae06..1f7e3ee 100644
--- a/car-apps-common/res/values-en-rAU/strings.xml
+++ b/car-apps-common/res/values-en-rAU/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Expand/collapse button"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Open drawer"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Close drawer"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Feature not available while driving."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Scroll down"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Scroll up"</string>
 </resources>
diff --git a/car-apps-common/res/values-en-rGB/strings.xml b/car-apps-common/res/values-en-rGB/strings.xml
index 691ae06..1f7e3ee 100644
--- a/car-apps-common/res/values-en-rGB/strings.xml
+++ b/car-apps-common/res/values-en-rGB/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Expand/collapse button"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Open drawer"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Close drawer"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Feature not available while driving."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Scroll down"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Scroll up"</string>
 </resources>
diff --git a/car-apps-common/res/values-en-rIN/strings.xml b/car-apps-common/res/values-en-rIN/strings.xml
index 691ae06..1f7e3ee 100644
--- a/car-apps-common/res/values-en-rIN/strings.xml
+++ b/car-apps-common/res/values-en-rIN/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Expand/collapse button"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Open drawer"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Close drawer"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Feature not available while driving."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Scroll down"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Scroll up"</string>
 </resources>
diff --git a/car-apps-common/res/values-es-rUS/strings.xml b/car-apps-common/res/values-es-rUS/strings.xml
index df2217f..3cb67f5 100644
--- a/car-apps-common/res/values-es-rUS/strings.xml
+++ b/car-apps-common/res/values-es-rUS/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Botón Expandir/contraer"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Abrir panel lateral"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Cerrar panel lateral"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Esta función no está disponible mientras conduces."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Desplazarse hacia abajo"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Desplazarse hacia arriba"</string>
 </resources>
diff --git a/car-apps-common/res/values-es/strings.xml b/car-apps-common/res/values-es/strings.xml
index 23fcbc5..af625e4 100644
--- a/car-apps-common/res/values-es/strings.xml
+++ b/car-apps-common/res/values-es/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Botón para mostrar u ocultar"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Abrir panel"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Cerrar panel"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Esta función no está disponible mientras conduces."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Desplazarse hacia abajo"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Desplazarse hacia arriba"</string>
 </resources>
diff --git a/car-apps-common/res/values-et/strings.xml b/car-apps-common/res/values-et/strings.xml
index 7475c1a..67a19a1 100644
--- a/car-apps-common/res/values-et/strings.xml
+++ b/car-apps-common/res/values-et/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Nupp Laienda/Ahenda"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Ava sahtel"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Sule sahtel"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funktsioon pole sõidu ajal saadaval."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Keri alla"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Keri üles"</string>
 </resources>
diff --git a/car-apps-common/res/values-eu/strings.xml b/car-apps-common/res/values-eu/strings.xml
index a974c40..5de1636 100644
--- a/car-apps-common/res/values-eu/strings.xml
+++ b/car-apps-common/res/values-eu/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Zabaltzeko/Tolesteko botoia"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Ireki panel lerrakorra"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Itxi panel lerrakorra"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Eginbide hau ezin da erabili gidatu bitartean."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Egin behera"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Egin gora"</string>
 </resources>
diff --git a/car-apps-common/res/values-fa/strings.xml b/car-apps-common/res/values-fa/strings.xml
index 5586b6d..44bdebc 100644
--- a/car-apps-common/res/values-fa/strings.xml
+++ b/car-apps-common/res/values-fa/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"دکمه بزرگ کردن/کوچک کردن"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"باز کردن کشو"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"بستن کشو"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"هنگام رانندگی، این ویژگی در دسترس نیست."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"پیمایش به پایین"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"پیمایش به بالا"</string>
 </resources>
diff --git a/car-apps-common/res/values-fi/strings.xml b/car-apps-common/res/values-fi/strings.xml
index baa420f..c83f79d 100644
--- a/car-apps-common/res/values-fi/strings.xml
+++ b/car-apps-common/res/values-fi/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Laajennus- ja tiivistyspainike"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Avaa vetopaneeli"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Sulje vetopaneeli"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Ominaisuus ei ole käytettävissä ajon aikana."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Vieritä alas"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Vieritä ylös"</string>
 </resources>
diff --git a/car-apps-common/res/values-fr-rCA/strings.xml b/car-apps-common/res/values-fr-rCA/strings.xml
index 5876f75..054a3dd 100644
--- a/car-apps-common/res/values-fr-rCA/strings.xml
+++ b/car-apps-common/res/values-fr-rCA/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Bouton Développer/Réduire"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Ouvrir le tiroir"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Fermer le tiroir"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Cette fonction n\'est pas accessible durant la conduite."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Faire défiler vers le bas"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Faire défiler vers le haut"</string>
 </resources>
diff --git a/car-apps-common/res/values-fr/strings.xml b/car-apps-common/res/values-fr/strings.xml
index 454c27d..a19a5e9 100644
--- a/car-apps-common/res/values-fr/strings.xml
+++ b/car-apps-common/res/values-fr/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Bouton Développer/Réduire"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Ouvrir le panneau"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Fermer le panneau"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Fonctionnalité non disponible lorsque vous conduisez."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Faire défiler l\'écran vers le bas"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Faire défiler l\'écran vers le haut"</string>
 </resources>
diff --git a/car-apps-common/res/values-gl/strings.xml b/car-apps-common/res/values-gl/strings.xml
index bd2b8ae..d4b9015 100644
--- a/car-apps-common/res/values-gl/strings.xml
+++ b/car-apps-common/res/values-gl/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Botón despregar/contraer"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Abrir panel"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Pecha panel"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Esta función non está dispoñible mentres conduces."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Desprazarse cara abaixo"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Desprazarse cara arriba"</string>
 </resources>
diff --git a/car-apps-common/res/values-gu/strings.xml b/car-apps-common/res/values-gu/strings.xml
index ed142d2..6156522 100644
--- a/car-apps-common/res/values-gu/strings.xml
+++ b/car-apps-common/res/values-gu/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"મોટું કરો/નાનું કરો બટન"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ડ્રોઅર ખોલો"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ડ્રોઅર બંધ કરો"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ડ્રાઇવિંગ કરતી વખતે આ સુવિધા ઉપલબ્ધ રહેશે નહીં."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"નીચેની તરફ સ્ક્રોલ કરો"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ઉપરની તરફ સ્ક્રોલ કરો"</string>
 </resources>
diff --git a/car-apps-common/res/values-hi/strings.xml b/car-apps-common/res/values-hi/strings.xml
index d703af5..1949838 100644
--- a/car-apps-common/res/values-hi/strings.xml
+++ b/car-apps-common/res/values-hi/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"बड़ा/छोटा करने वाला बटन"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"दराज खोलें"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"दराज बंद करें"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"गाड़ी चलाते समय इस सुविधा का इस्तेमाल नहीं किया जा सकता."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"नीचे स्क्रोल करें"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ऊपर स्क्रोल करें"</string>
 </resources>
diff --git a/car-apps-common/res/values-hr/strings.xml b/car-apps-common/res/values-hr/strings.xml
index d51f1da..0f58e0a 100644
--- a/car-apps-common/res/values-hr/strings.xml
+++ b/car-apps-common/res/values-hr/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Gumb za proširivanje/sažimanje"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Otvori ladicu"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Zatvori ladicu"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Značajka nije dostupna tijekom vožnje."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Pomakni prema dolje"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Pomakni prema gore"</string>
 </resources>
diff --git a/car-apps-common/res/values-hu/strings.xml b/car-apps-common/res/values-hu/strings.xml
index 072f171..33460ab 100644
--- a/car-apps-common/res/values-hu/strings.xml
+++ b/car-apps-common/res/values-hu/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Gomb kibontása/összecsukása"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Fiók megnyitása"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Fiók bezárása"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Vezetés közben nem áll rendelkezésre a funkció."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Görgetés lefelé"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Görgetés felfelé"</string>
 </resources>
diff --git a/car-apps-common/res/values-hy/strings.xml b/car-apps-common/res/values-hy/strings.xml
index 83ec434..ac21642 100644
--- a/car-apps-common/res/values-hy/strings.xml
+++ b/car-apps-common/res/values-hy/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"«Ծավալել/ծալել» կոճակ"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Բացել դարակը"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Փակել դարակը"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Վարելու ընթացքում գործառույթը հասանելի չէ:"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Ոլորել վար"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Ոլորել վեր"</string>
 </resources>
diff --git a/car-apps-common/res/values-in/strings.xml b/car-apps-common/res/values-in/strings.xml
index bf170e7..6c47078 100644
--- a/car-apps-common/res/values-in/strings.xml
+++ b/car-apps-common/res/values-in/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Tombol luaskan/ciutkan"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Buka panel samping"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Tutup panel samping"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Fitur tidak tersedia saat mengemudi."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Scroll ke bawah"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Scroll ke atas"</string>
 </resources>
diff --git a/car-apps-common/res/values-is/strings.xml b/car-apps-common/res/values-is/strings.xml
index 2c4c07d..363679e 100644
--- a/car-apps-common/res/values-is/strings.xml
+++ b/car-apps-common/res/values-is/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Hnappur til að stækka/minnka"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Opna skúffu"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Loka skúffu"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Þessi eiginleiki er ekki í boði á meðan þú ekur."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Fletta niður"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Fletta upp"</string>
 </resources>
diff --git a/car-apps-common/res/values-it/strings.xml b/car-apps-common/res/values-it/strings.xml
index 37635fd..53b635f 100644
--- a/car-apps-common/res/values-it/strings.xml
+++ b/car-apps-common/res/values-it/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Pulsante Espandi/Comprimi"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Apri riquadro a scomparsa"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Chiudi riquadro a scomparsa"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funzione non disponibile durante la guida."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Scorri verso il basso"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Scorri verso l\'alto"</string>
 </resources>
diff --git a/car-apps-common/res/values-iw/strings.xml b/car-apps-common/res/values-iw/strings.xml
index 417b016..6ebeda2 100644
--- a/car-apps-common/res/values-iw/strings.xml
+++ b/car-apps-common/res/values-iw/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"לחצן הרחבה וכיווץ"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"פתיחת חלונית ההזזה"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"סגירת חלונית ההזזה"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"התכונה לא זמינה במהלך הנהיגה."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"גלילה למטה"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"גלילה למעלה"</string>
 </resources>
diff --git a/car-apps-common/res/values-ja/strings.xml b/car-apps-common/res/values-ja/strings.xml
index 6a7ace0..5ee06b4 100644
--- a/car-apps-common/res/values-ja/strings.xml
+++ b/car-apps-common/res/values-ja/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"展開 / 折りたたみボタン"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ドロワーを開く"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ドロワーを閉じる"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"この機能は運転中は利用できません。"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"下にスクロール"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"上にスクロール"</string>
 </resources>
diff --git a/car-apps-common/res/values-ka/strings.xml b/car-apps-common/res/values-ka/strings.xml
index d95190b..17a25b1 100644
--- a/car-apps-common/res/values-ka/strings.xml
+++ b/car-apps-common/res/values-ka/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"გაშლის/ჩაკეცვის ღილაკი"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"უჯრის გახსნა"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"უჯრის დახურვა"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ფუნქცია მიუწვდომელია მანქანის მართვისას."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"ქვემოთ გადაადგილება"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ზემოთ გადაადგილება"</string>
 </resources>
diff --git a/car-apps-common/res/values-kk/strings.xml b/car-apps-common/res/values-kk/strings.xml
index 1366c3b..be6baac 100644
--- a/car-apps-common/res/values-kk/strings.xml
+++ b/car-apps-common/res/values-kk/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"\"Жаю/Жию\" түймесі"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Тартпаны ашу"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Тартпаны жабу"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Көлік жүргізу кезінде бұл функция жұмыс істемейді."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Төмен қарай айналдыру"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Жоғары қарай айналдыру"</string>
 </resources>
diff --git a/car-apps-common/res/values-km/strings.xml b/car-apps-common/res/values-km/strings.xml
index 4a695e0..4c19ca7 100644
--- a/car-apps-common/res/values-km/strings.xml
+++ b/car-apps-common/res/values-km/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"ប៊ូតុង​ពង្រីក/បង្រួម"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"បើកថត"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"បិទថត"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"មិនអាច​ប្រើមុខងារ​នេះបានទេ ខណៈពេល​កំពុង​បើកបរ។"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"រំកិលចុះក្រោម"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"រំកិល​​ឡើង​លើ"</string>
 </resources>
diff --git a/car-apps-common/res/values-kn/strings.xml b/car-apps-common/res/values-kn/strings.xml
index f7bdb7f..0cb37ec 100644
--- a/car-apps-common/res/values-kn/strings.xml
+++ b/car-apps-common/res/values-kn/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"ವಿಸ್ತರಿಸಿ/ಕುಗ್ಗಿಸಿ ಬಟನ್"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ಡ್ರಾಯರ್ ತೆರೆಯಿರಿ"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ಡ್ರಾಯರ್ ಮುಚ್ಚಿರಿ"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ಈ ವೈಶಿಷ್ಟ್ಯ ಲಭ್ಯವಿಲ್ಲ."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"ಕೆಳಗೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ಮೇಲೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
 </resources>
diff --git a/car-apps-common/res/values-ko/strings.xml b/car-apps-common/res/values-ko/strings.xml
index 526c776..3a4a36a 100644
--- a/car-apps-common/res/values-ko/strings.xml
+++ b/car-apps-common/res/values-ko/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"펼치기/접기 버튼"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"창 열기"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"창 닫기"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"운전 중 기능 사용 불가"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"아래로 스크롤"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"위로 스크롤"</string>
 </resources>
diff --git a/car-apps-common/res/values-ky/strings.xml b/car-apps-common/res/values-ky/strings.xml
index 23ac2c0..1ab6f75 100644
--- a/car-apps-common/res/values-ky/strings.xml
+++ b/car-apps-common/res/values-ky/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Жайып көрсөтүү/жыйыштыруу баскычы"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Суурманы ачуу"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Суурманы жабуу"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Унаа айдаганда бул функция жеткиликтүү эмес."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Төмөн сыдыруу"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Жогору сыдыруу"</string>
 </resources>
diff --git a/car-apps-common/res/values-lo/strings.xml b/car-apps-common/res/values-lo/strings.xml
index d52a414..55e68ba 100644
--- a/car-apps-common/res/values-lo/strings.xml
+++ b/car-apps-common/res/values-lo/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"ປຸ່ມຫຍໍ້/ຂະຫຍາຍ"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ເປີດລິ້ນ​ຊັກ"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ປິດ​ລິ້ນ​ຊັກ"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ຄຸນສົມບັດບໍ່ສາມາດໃຊ້ໄດ້ໃນເວລາຂັບລົດ."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"ເລື່ອນລົງ"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ເລື່ອນຂຶ້ນ"</string>
 </resources>
diff --git a/car-apps-common/res/values-lt/strings.xml b/car-apps-common/res/values-lt/strings.xml
index db4a28d..daf7367 100644
--- a/car-apps-common/res/values-lt/strings.xml
+++ b/car-apps-common/res/values-lt/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Mygtukas „Išskleisti / sutraukti“"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Atidaryti skydelį"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Uždaryti skydelį"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkcija nepasiekiama vairuojant."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Slinkti žemyn"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Slinkti aukštyn"</string>
 </resources>
diff --git a/car-apps-common/res/values-lv/strings.xml b/car-apps-common/res/values-lv/strings.xml
index 3b72539..df04f11 100644
--- a/car-apps-common/res/values-lv/strings.xml
+++ b/car-apps-common/res/values-lv/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Izvēršanas/sakļaušanas poga"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Atvērt atvilktni"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Aizvērt atvilktni"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkcija nav pieejama braukšanas laikā."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Ritināt uz leju"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Ritināt uz augšu"</string>
 </resources>
diff --git a/car-apps-common/res/values-mk/strings.xml b/car-apps-common/res/values-mk/strings.xml
index b43a4d1..1584020 100644
--- a/car-apps-common/res/values-mk/strings.xml
+++ b/car-apps-common/res/values-mk/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Копче за проширување/собирање"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Отвори ја фиоката"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Затвори ја фиоката"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Функцијата не е достапна при возење."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Оди надолу"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Оди нагоре"</string>
 </resources>
diff --git a/car-apps-common/res/values-ml/strings.xml b/car-apps-common/res/values-ml/strings.xml
index 6b6c309..b223e67 100644
--- a/car-apps-common/res/values-ml/strings.xml
+++ b/car-apps-common/res/values-ml/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"വികസിപ്പിക്കുക/ചുരുക്കുക ബട്ടൺ"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"വലിപ്പ് തുറക്കുക"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"വലിപ്പ് അടയ്ക്കുക"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ഡ്രൈവ് ചെയ്യുമ്പോൾ ഫീച്ചർ ലഭ്യമല്ല."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"താഴോട്ട് സ്‌ക്രോൾ ചെയ്യുക"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"മുകളിലോട്ട് സ്‌ക്രോൾ ചെയ്യുക"</string>
 </resources>
diff --git a/car-apps-common/res/values-mn/strings.xml b/car-apps-common/res/values-mn/strings.xml
index 92a8dae..4729d39 100644
--- a/car-apps-common/res/values-mn/strings.xml
+++ b/car-apps-common/res/values-mn/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Дэлгэх/буулгах товчлуур"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Шургуулгыг нээх"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Шургуулгыг хаах"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Жолоо барьж байх үед онцлог боломжгүй."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Доош гүйлгэх"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Дээш гүйлгэх"</string>
 </resources>
diff --git a/car-apps-common/res/values-mr/strings.xml b/car-apps-common/res/values-mr/strings.xml
index 671b387..e8077d5 100644
--- a/car-apps-common/res/values-mr/strings.xml
+++ b/car-apps-common/res/values-mr/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"बटण विस्‍तृत करा/कोलॅप्‍स करा"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ड्रॉवर उघडा"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ड्रॉवर बंद करा"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ड्राइव्ह करताना वैशिष्ट्य उपलब्ध नाही."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"खाली स्क्रोल करा"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"वर स्क्रोल करा"</string>
 </resources>
diff --git a/car-apps-common/res/values-ms/strings.xml b/car-apps-common/res/values-ms/strings.xml
index 4a5c1e6..2b59158 100644
--- a/car-apps-common/res/values-ms/strings.xml
+++ b/car-apps-common/res/values-ms/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Butang kembangkan/runtuhkan"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Buka laci"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Tutup laci"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Ciri tidak tersedia semasa anda memandu."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Tatal ke bawah"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Tatal ke atas"</string>
 </resources>
diff --git a/car-apps-common/res/values-my/strings.xml b/car-apps-common/res/values-my/strings.xml
index cf2fcf6..7223458 100644
--- a/car-apps-common/res/values-my/strings.xml
+++ b/car-apps-common/res/values-my/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"ချဲ့ရန်/လျှော့ပြရန် ခလုတ်"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"အံဆွဲ ဖွင့်ရန်"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"အံဆွဲ ပိတ်ရန်"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ကားမောင်းနေစဉ် ဝန်ဆောင်မှု မရနိုင်ပါ။"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"အောက်သို့ လှိမ့်ရန်"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"အပေါ်သို့ လှိမ့်ရန်"</string>
 </resources>
diff --git a/car-apps-common/res/values-nb/strings.xml b/car-apps-common/res/values-nb/strings.xml
index 0fb9039..435f397 100644
--- a/car-apps-common/res/values-nb/strings.xml
+++ b/car-apps-common/res/values-nb/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Vis/skjul-knapp"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Åpne uttrekksmenyen"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Lukk uttrekksmenyen"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funksjonen er ikke tilgjengelig når du kjører."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Rull ned"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Rull opp"</string>
 </resources>
diff --git a/car-apps-common/res/values-ne/strings.xml b/car-apps-common/res/values-ne/strings.xml
index 1599bc8..13e4f75 100644
--- a/car-apps-common/res/values-ne/strings.xml
+++ b/car-apps-common/res/values-ne/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"विस्तृत/संक्षिप्त गर्ने बटन"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ड्रअर खोल्नुहोस्"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ड्रअर बन्द गर्नुहोस्"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"सवारी साधन चलाइरहेका बेला यो सुविधा उपलब्ध छैन।"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"तल स्क्रोल गर्नुहोस्"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"माथितिर स्क्रोल गर्नुहोस्"</string>
 </resources>
diff --git a/car-apps-common/res/values-nl/strings.xml b/car-apps-common/res/values-nl/strings.xml
index 0c7f378..749174f 100644
--- a/car-apps-common/res/values-nl/strings.xml
+++ b/car-apps-common/res/values-nl/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Knop voor uitvouwen/samenvouwen"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Lade openen"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Lade sluiten"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Functie niet beschikbaar tijdens het rijden."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Omlaag scrollen"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Omhoog scrollen"</string>
 </resources>
diff --git a/car-apps-common/res/values-or/strings.xml b/car-apps-common/res/values-or/strings.xml
index b921f45..b0dbe9d 100644
--- a/car-apps-common/res/values-or/strings.xml
+++ b/car-apps-common/res/values-or/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"ବିସ୍ତାର/ସଂକୋଚନ ବଟନ୍"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ଡ୍ରୟର୍ ଖୋଲନ୍ତୁ"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ଡ୍ରୟର୍ ବନ୍ଦ କରନ୍ତୁ"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ଗାଡ଼ି ଚଲାଇବା ସମୟରେ ଫିଚର୍ ଉପଲବ୍ଧ ହେବ ନାହିଁ।"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"ତଳକୁ ସ୍କ୍ରୋଲ୍ କରନ୍ତୁ"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ଉପରକୁ ସ୍କ୍ରୋଲ୍ କରନ୍ତୁ"</string>
 </resources>
diff --git a/car-apps-common/res/values-pa/strings.xml b/car-apps-common/res/values-pa/strings.xml
index f6c1657..3dcd926 100644
--- a/car-apps-common/res/values-pa/strings.xml
+++ b/car-apps-common/res/values-pa/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"ਵਿਸਤਾਰ ਕਰੋ/ਸਮੇਟੋ ਬਟਨ"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ਦਰਾਜ਼ ਖੋਲ੍ਹੋ"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ਦਰਾਜ਼ ਬੰਦ ਕਰੋ"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ਗੱਡੀ ਚਲਾਉਣ ਵੇਲੇ ਵਿਸ਼ੇਸ਼ਤਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"ਹੇਠਾਂ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ਉੱਪਰ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
 </resources>
diff --git a/car-apps-common/res/values-pl/strings.xml b/car-apps-common/res/values-pl/strings.xml
index 2ad6309..e42a2ee 100644
--- a/car-apps-common/res/values-pl/strings.xml
+++ b/car-apps-common/res/values-pl/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Przycisk zwijania/rozwijania"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Otwórz panel"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Zamknij panel"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkcja niedostępna podczas jazdy."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Przewiń w dół"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Przewiń w górę"</string>
 </resources>
diff --git a/car-apps-common/res/values-pt-rPT/strings.xml b/car-apps-common/res/values-pt-rPT/strings.xml
index 0d461e3..37114f5 100644
--- a/car-apps-common/res/values-pt-rPT/strings.xml
+++ b/car-apps-common/res/values-pt-rPT/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Botão Expandir/reduzir"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Abrir gaveta"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Fechar gaveta"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funcionalidade não disponível durante a condução."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Deslocar para baixo"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Deslocar para cima"</string>
 </resources>
diff --git a/car-apps-common/res/values-pt/strings.xml b/car-apps-common/res/values-pt/strings.xml
index 118bf92..f38bff3 100644
--- a/car-apps-common/res/values-pt/strings.xml
+++ b/car-apps-common/res/values-pt/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Botão \"Expandir/Recolher\""</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Abrir gaveta"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Fechar gaveta"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Recurso não disponível enquanto você dirige."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Rolar para baixo"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Rolar para cima"</string>
 </resources>
diff --git a/car-apps-common/res/values-ro/strings.xml b/car-apps-common/res/values-ro/strings.xml
index 6a78b9c..18d6d2c 100644
--- a/car-apps-common/res/values-ro/strings.xml
+++ b/car-apps-common/res/values-ro/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Butonul de extindere/restrângere"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Deschideți panoul"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Închideți panoul"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funcția nu este disponibilă când conduceți."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Derulați în jos"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Derulați în sus"</string>
 </resources>
diff --git a/car-apps-common/res/values-ru/strings.xml b/car-apps-common/res/values-ru/strings.xml
index 11e0f3e..f806465 100644
--- a/car-apps-common/res/values-ru/strings.xml
+++ b/car-apps-common/res/values-ru/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Кнопка \"Развернуть/свернуть\""</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Открыть панель"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Закрыть панель"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Эта функция недоступна, когда вы за рулем."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Прокрутить вниз"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Прокрутить вверх"</string>
 </resources>
diff --git a/car-apps-common/res/values-si/strings.xml b/car-apps-common/res/values-si/strings.xml
index 8d2f5d6..0a90820 100644
--- a/car-apps-common/res/values-si/strings.xml
+++ b/car-apps-common/res/values-si/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"දිග හැරීමේ/හැකිළීමේ බොත්තම"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"ලාච්චුව විවෘත කරන්න"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ලාච්චුව වසන්න"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"විශේෂාංගය රිය පැදවීමේ දී නොමැත."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"පහළට අනුචලනය කරන්න"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"ඉහළට අනුචලනය කරන්න"</string>
 </resources>
diff --git a/car-apps-common/res/values-sk/strings.xml b/car-apps-common/res/values-sk/strings.xml
index 3159fb6..42522e1 100644
--- a/car-apps-common/res/values-sk/strings.xml
+++ b/car-apps-common/res/values-sk/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Tlačidlo rozbalenia/zbalenia"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Otvoriť vysúvací panel"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Zavrieť vysúvací panel"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkcia nie je k dispozícii počas jazdy."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Posunúť nadol"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Posunúť nahor"</string>
 </resources>
diff --git a/car-apps-common/res/values-sl/strings.xml b/car-apps-common/res/values-sl/strings.xml
index 14457c2..fbb4daf 100644
--- a/car-apps-common/res/values-sl/strings.xml
+++ b/car-apps-common/res/values-sl/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Gumb za razširitev/strnitev"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Odpri predal"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Zapri predal"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funkcija med vožnjo ni na voljo."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Pomik navzdol"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Pomik navzgor"</string>
 </resources>
diff --git a/car-apps-common/res/values-sq/strings.xml b/car-apps-common/res/values-sq/strings.xml
index 4b980c3..1e92a82 100644
--- a/car-apps-common/res/values-sq/strings.xml
+++ b/car-apps-common/res/values-sq/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Butoni i zgjerimit/palosjes"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Hap sirtarin"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Mbyll sirtarin"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funksioni nuk ofrohet gjatë drejtimit të makinës."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Lëviz poshtë"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Lëviz lart"</string>
 </resources>
diff --git a/car-apps-common/res/values-sr/strings.xml b/car-apps-common/res/values-sr/strings.xml
index 60b1615..65257dd 100644
--- a/car-apps-common/res/values-sr/strings.xml
+++ b/car-apps-common/res/values-sr/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Дугме Прошири/скупи"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Отвори фиоку"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Затвори фиоку"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Функција није доступна током вожње."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Померите надоле"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Померите нагоре"</string>
 </resources>
diff --git a/car-apps-common/res/values-sv/strings.xml b/car-apps-common/res/values-sv/strings.xml
index 84d19f1..b13c40e 100644
--- a/car-apps-common/res/values-sv/strings.xml
+++ b/car-apps-common/res/values-sv/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Knappen Utöka/komprimera"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Öppna utdragbar panel"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Stäng utdragbar panel"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Funktionen är inte tillgänglig när du kör."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Skrolla nedåt"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Skrolla uppåt"</string>
 </resources>
diff --git a/car-apps-common/res/values-sw/strings.xml b/car-apps-common/res/values-sw/strings.xml
index 04ccada..57bca14 100644
--- a/car-apps-common/res/values-sw/strings.xml
+++ b/car-apps-common/res/values-sw/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Kitufe cha kupanua/kukunja"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Fungua droo"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Funga droo"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Kipengele hakipatikani unapoendesha gari."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Sogeza chini"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Sogeza juu"</string>
 </resources>
diff --git a/car-apps-common/res/values-ta/strings.xml b/car-apps-common/res/values-ta/strings.xml
index c88f072..86ce09b 100644
--- a/car-apps-common/res/values-ta/strings.xml
+++ b/car-apps-common/res/values-ta/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"விரிவாக்குவதற்கான/சுருக்குவதற்கான பட்டன்"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"டிராயரைத் திற"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"டிராயரை மூடுக"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"வாகனம் ஓட்டும்போது இந்த அம்சத்தைப் பயன்படுத்த இயலாது."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"கீழே நகர்த்துவதற்கான பட்டன்"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"மேலே நகர்த்துவதற்கான பட்டன்"</string>
 </resources>
diff --git a/car-apps-common/res/values-te/strings.xml b/car-apps-common/res/values-te/strings.xml
index b2fce0a..741d734 100644
--- a/car-apps-common/res/values-te/strings.xml
+++ b/car-apps-common/res/values-te/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"విస్తరించు/కుదించు బటన్"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"డ్రాయర్‌ని తెరవండి"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"డ్రాయర్‌ను మూసివేయండి"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"డ్రైవింగ్ చేస్తున్నప్పుడు ఈ ఫీచర్ అందుబాటులో ఉండదు."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"కిందకు స్క్రోల్ చేయి"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"పైకి స్క్రోల్ చేయి"</string>
 </resources>
diff --git a/car-apps-common/res/values-th/strings.xml b/car-apps-common/res/values-th/strings.xml
index 93a7943..06f6ea9 100644
--- a/car-apps-common/res/values-th/strings.xml
+++ b/car-apps-common/res/values-th/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"ปุ่มขยาย/ยุบ"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"เปิดลิ้นชัก"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"ปิดลิ้นชัก"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ฟีเจอร์ไม่พร้อมใช้งานขณะขับรถ"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"เลื่อนลง"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"เลื่อนขึ้น"</string>
 </resources>
diff --git a/car-apps-common/res/values-tl/strings.xml b/car-apps-common/res/values-tl/strings.xml
index ef72afb..ed9e4a3 100644
--- a/car-apps-common/res/values-tl/strings.xml
+++ b/car-apps-common/res/values-tl/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Button na palawakin/i-collapse"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Buksan ang drawer"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Isara ang drawer"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Hindi available ang feature habang nagmamaneho."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Mag-scroll pababa"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Mag-scroll pataas"</string>
 </resources>
diff --git a/car-apps-common/res/values-tr/strings.xml b/car-apps-common/res/values-tr/strings.xml
index db95a8b..ffa0541 100644
--- a/car-apps-common/res/values-tr/strings.xml
+++ b/car-apps-common/res/values-tr/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Genişlet/daralt düğmesi"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Çekmeceyi aç"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Çekmeceyi kapat"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Sürüş sırasında bu özellik kullanılamaz."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Aşağı kaydır"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Yukarı kaydır"</string>
 </resources>
diff --git a/car-apps-common/res/values-uk/strings.xml b/car-apps-common/res/values-uk/strings.xml
index 879da02..56b6f6b 100644
--- a/car-apps-common/res/values-uk/strings.xml
+++ b/car-apps-common/res/values-uk/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Кнопка \"Розгорнути\" або \"Згорнути\""</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Відкрити висувну панель"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Закрити висувну панель"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Функція недоступна під час руху автомобіля."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Прокрутити вниз"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Прокрутити вгору"</string>
 </resources>
diff --git a/car-apps-common/res/values-ur/strings.xml b/car-apps-common/res/values-ur/strings.xml
index a9ab004..23de779 100644
--- a/car-apps-common/res/values-ur/strings.xml
+++ b/car-apps-common/res/values-ur/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"پھیلائیں/سکیڑیں بٹن"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"دراز کھولیں"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"دراز بند کریں"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"ڈرائیونگ کے دوران یہ خصوصیت دستیاب نہیں ہے۔"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"نیچے اسکرول کریں"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"اوپر اسکرول کریں"</string>
 </resources>
diff --git a/car-apps-common/res/values-uz/strings.xml b/car-apps-common/res/values-uz/strings.xml
index 65d2811..685207c 100644
--- a/car-apps-common/res/values-uz/strings.xml
+++ b/car-apps-common/res/values-uz/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Yoyish/yigʻish tugmasi"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Panelni ochish"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Panelni yopish"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Avtomobilda harakatlanayotganda bu funksiya ishlamaydi."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Pastga tushish"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Tepaga chiqish"</string>
 </resources>
diff --git a/car-apps-common/res/values-vi/strings.xml b/car-apps-common/res/values-vi/strings.xml
index 044b905..58edc17 100644
--- a/car-apps-common/res/values-vi/strings.xml
+++ b/car-apps-common/res/values-vi/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Nút mở rộng/thu gọn"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Mở ngăn"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Đóng ngăn"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Bạn không sử dụng được tính năng này khi đang lái xe."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Cuộn xuống"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Cuộn lên"</string>
 </resources>
diff --git a/car-apps-common/res/values-zh-rCN/strings.xml b/car-apps-common/res/values-zh-rCN/strings.xml
index 899f786..b1ad3ae 100644
--- a/car-apps-common/res/values-zh-rCN/strings.xml
+++ b/car-apps-common/res/values-zh-rCN/strings.xml
@@ -20,7 +20,4 @@
     <skip />
     <string name="car_drawer_open" msgid="2676372472514742324">"打开抽屉式导航栏"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"关闭抽屉式导航栏"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"驾车时无法使用此功能。"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"向下滚动"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"向上滚动"</string>
 </resources>
diff --git a/car-apps-common/res/values-zh-rHK/strings.xml b/car-apps-common/res/values-zh-rHK/strings.xml
index 2442206..5738612 100644
--- a/car-apps-common/res/values-zh-rHK/strings.xml
+++ b/car-apps-common/res/values-zh-rHK/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"展開/收合按鈕"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"開啟導覽列"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"關閉導覽列"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"無法在駕駛時使用此功能。"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"向下捲動"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"向上捲動"</string>
 </resources>
diff --git a/car-apps-common/res/values-zh-rTW/strings.xml b/car-apps-common/res/values-zh-rTW/strings.xml
index cc45ad1..cb21c87 100644
--- a/car-apps-common/res/values-zh-rTW/strings.xml
+++ b/car-apps-common/res/values-zh-rTW/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"展開/收合按鈕"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"開啟導覽匣"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"關閉導覽匣"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"開車時無法使用這項功能。"</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"向下捲動"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"向上捲動"</string>
 </resources>
diff --git a/car-apps-common/res/values-zu/strings.xml b/car-apps-common/res/values-zu/strings.xml
index 6f616b1..18e2e5c 100644
--- a/car-apps-common/res/values-zu/strings.xml
+++ b/car-apps-common/res/values-zu/strings.xml
@@ -19,7 +19,4 @@
     <string name="control_bar_expand_collapse_button" msgid="3420351169078117938">"Inkinobho yokunweba/ukugoqa"</string>
     <string name="car_drawer_open" msgid="2676372472514742324">"Vula ikhabethe"</string>
     <string name="car_drawer_close" msgid="5329374630462464855">"Vala ikhabethe"</string>
-    <string name="restricted_while_driving" msgid="2278031053760704437">"Isici asitholakali ngenkathi ushayela."</string>
-    <string name="scroll_bar_page_down_button" msgid="8633547153186948066">"Skrolela phansi"</string>
-    <string name="scroll_bar_page_up_button" msgid="8306413844913744345">"Skrolela phezulu"</string>
 </resources>
diff --git a/car-apps-common/res/values/colors.xml b/car-apps-common/res/values/colors.xml
index 3104f1d..37a7bda 100644
--- a/car-apps-common/res/values/colors.xml
+++ b/car-apps-common/res/values/colors.xml
@@ -34,6 +34,7 @@
         <item>#757575</item>
     </array>
 
+    <color name="loading_image_placeholder_color">@*android:color/car_grey_800</color>
     <color name="improper_image_refs_tint_color">#C8FF0000</color>
 
     <color name="control_bar_background_color">@android:color/transparent</color>
diff --git a/car-apps-common/src/com/android/car/apps/common/ClickThroughToolbar.java b/car-apps-common/src/com/android/car/apps/common/ClickThroughToolbar.java
index 9e3faec..3a05111 100644
--- a/car-apps-common/src/com/android/car/apps/common/ClickThroughToolbar.java
+++ b/car-apps-common/src/com/android/car/apps/common/ClickThroughToolbar.java
@@ -27,7 +27,10 @@
  *
  * <p>By default, the {@link Toolbar} eats all touches on it. This view will override
  * {@link #onTouchEvent(MotionEvent)} and return {@code false} if configured to allow pass through.
+ *
+ * @deprecated Use {@link com.android.car.ui.Toolbar} instead
  */
+@Deprecated
 public class ClickThroughToolbar extends Toolbar {
     private boolean mAllowClickPassThrough;
 
diff --git a/car-apps-common/src/com/android/car/apps/common/imaging/ImageBinder.java b/car-apps-common/src/com/android/car/apps/common/imaging/ImageBinder.java
index 63b276e..0e59a54 100644
--- a/car-apps-common/src/com/android/car/apps/common/imaging/ImageBinder.java
+++ b/car-apps-common/src/com/android/car/apps/common/imaging/ImageBinder.java
@@ -22,10 +22,12 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
+import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.util.Size;
 
+import com.android.car.apps.common.R;
 import com.android.car.apps.common.UriUtils;
 
 import java.util.Objects;
@@ -75,6 +77,7 @@
     private T mCurrentRef;
     private ImageKey mCurrentKey;
     private BiConsumer<ImageKey, Drawable> mFetchReceiver;
+    private Drawable mLoadingDrawable;
 
 
     public ImageBinder(@NonNull PlaceholderType type, @NonNull Size maxImageSize,
@@ -155,10 +158,19 @@
             getImageFetcher(context).cancelRequest(mCurrentKey, mFetchReceiver);
             onRequestFinished();
         }
+        setDrawable(getLoadingDrawable(context));
     }
 
     private void onRequestFinished() {
         mCurrentKey = null;
         mFetchReceiver = null;
     }
+
+    private Drawable getLoadingDrawable(Context context) {
+        if (mLoadingDrawable == null) {
+            int color = context.getColor(R.color.loading_image_placeholder_color);
+            mLoadingDrawable = new ColorDrawable(color);
+        }
+        return mLoadingDrawable;
+    }
 }
diff --git a/car-apps-common/src/com/android/car/apps/common/imaging/ImageViewBinder.java b/car-apps-common/src/com/android/car/apps/common/imaging/ImageViewBinder.java
index db6ee1a..9b13438 100644
--- a/car-apps-common/src/com/android/car/apps/common/imaging/ImageViewBinder.java
+++ b/car-apps-common/src/com/android/car/apps/common/imaging/ImageViewBinder.java
@@ -21,7 +21,6 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.util.Size;
-import android.view.View;
 import android.widget.ImageView;
 
 import com.android.car.apps.common.CommonFlags;
@@ -57,7 +56,6 @@
     protected void setDrawable(@Nullable Drawable drawable) {
         if (mImageView != null) {
             mImageView.setImageDrawable(drawable);
-            mImageView.setVisibility((drawable != null) ? View.VISIBLE : View.GONE);
             if (mFlagBitmaps) {
                 CommonFlags flags = CommonFlags.getInstance(mImageView.getContext());
                 if (flags.shouldFlagImproperImageRefs()) {
@@ -82,10 +80,11 @@
 
     @Override
     protected void prepareForNewBinding(Context context) {
-        super.prepareForNewBinding(context);
         mImageView.setImageBitmap(null);
         mImageView.setImageDrawable(null);
         mImageView.clearColorFilter();
+        // Call super last to setup the default loading drawable.
+        super.prepareForNewBinding(context);
     }
 
 }
diff --git a/car-apps-common/src/com/android/car/apps/common/imaging/LocalImageFetcher.java b/car-apps-common/src/com/android/car/apps/common/imaging/LocalImageFetcher.java
index 3637440..9882216 100644
--- a/car-apps-common/src/com/android/car/apps/common/imaging/LocalImageFetcher.java
+++ b/car-apps-common/src/com/android/car/apps/common/imaging/LocalImageFetcher.java
@@ -19,6 +19,7 @@
 import android.annotation.UiThread;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.AssetFileDescriptor;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.ImageDecoder;
@@ -35,8 +36,11 @@
 import com.android.car.apps.common.UriUtils;
 import com.android.car.apps.common.util.CarAppsIOUtils;
 
+import libcore.io.IoUtils;
+
 import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.ref.WeakReference;
@@ -235,8 +239,16 @@
                     // ImageDecoder doesn't support all resources via the content provider...
                     return UriUtils.getDrawable(context, UriUtils.getIconResource(imageUri));
                 } else if (UriUtils.isContentUri(imageUri)) {
-
                     ContentResolver resolver = context.getContentResolver();
+
+                    // TODO(b/140959390): Remove the check once the bug is fixed in framework.
+                    if (!hasFile(resolver, imageUri)) {
+                        if (L_WARN) {
+                            Log.w(TAG, "File not found in uri: " + imageUri);
+                        }
+                        return null;
+                    }
+
                     ImageDecoder.Source src = ImageDecoder.createSource(resolver, imageUri);
                     return ImageDecoder.decodeDrawable(src, mOnHeaderDecodedListener);
 
@@ -263,6 +275,34 @@
             return null;
         }
 
+        private boolean hasFile(ContentResolver resolver, Uri uri) {
+            AssetFileDescriptor assetFd = null;
+            try {
+                if (uri.getScheme() == ContentResolver.SCHEME_CONTENT) {
+                    assetFd = resolver.openTypedAssetFileDescriptor(uri, "image/*", null);
+                } else {
+                    assetFd = resolver.openAssetFileDescriptor(uri, "r");
+                }
+            } catch (FileNotFoundException e) {
+                // Some images cannot be opened as AssetFileDescriptors (e.g.bmp, ico). Open them
+                // as InputStreams.
+                try {
+                    InputStream is = resolver.openInputStream(uri);
+                    if (is != null) {
+                        IoUtils.closeQuietly(is);
+                        return true;
+                    }
+                } catch (IOException exception) {
+                    return false;
+                }
+            }
+            if (assetFd != null) {
+                IoUtils.closeQuietly(assetFd);
+                return true;
+            }
+            return false;
+        }
+
         @UiThread
         @Override
         protected void onPostExecute(Drawable drawable) {
diff --git a/car-apps-common/src/com/android/car/apps/common/widget/CarTabLayout.java b/car-apps-common/src/com/android/car/apps/common/widget/CarTabLayout.java
index bf2c2b4..e9cd317 100644
--- a/car-apps-common/src/com/android/car/apps/common/widget/CarTabLayout.java
+++ b/car-apps-common/src/com/android/car/apps/common/widget/CarTabLayout.java
@@ -59,7 +59,9 @@
  * <p>Touch feedback is using @android:attr/selectableItemBackground.
  *
  * @param <T> Presents a CarTab entity
+ * @deprecated Use {@link com.android.car.ui.TabLayout} instead
  */
+@Deprecated
 public class CarTabLayout<T extends CarTabLayout.CarTab> extends LinearLayout {
 
     /**
diff --git a/car-assist-client-lib/res/values-af/strings.xml b/car-assist-client-lib/res/values-af/strings.xml
index d6e54fe..5566520 100644
--- a/car-assist-client-lib/res/values-af/strings.xml
+++ b/car-assist-client-lib/res/values-af/strings.xml
@@ -17,5 +17,4 @@
 <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">"Kon nie handeling deur Assistent versoek nie!"</string>
-    <string name="says" msgid="8575666015622916107">"sê"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-am/strings.xml b/car-assist-client-lib/res/values-am/strings.xml
index 2f0855b..bfed26c 100644
--- a/car-assist-client-lib/res/values-am/strings.xml
+++ b/car-assist-client-lib/res/values-am/strings.xml
@@ -17,5 +17,4 @@
 <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">"ከረዳት እርምጃ መጠየቅ አልተቻለም!"</string>
-    <string name="says" msgid="8575666015622916107">"እንዲህ ይላሉ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ar/strings.xml b/car-assist-client-lib/res/values-ar/strings.xml
index 8252183..18bf092 100644
--- a/car-assist-client-lib/res/values-ar/strings.xml
+++ b/car-assist-client-lib/res/values-ar/strings.xml
@@ -17,5 +17,4 @@
 <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">"تعذَّر طلَب إجراء من \"مساعد Google\"."</string>
-    <string name="says" msgid="8575666015622916107">"يقول"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-as/strings.xml b/car-assist-client-lib/res/values-as/strings.xml
index eec6ebd..182082f 100644
--- a/car-assist-client-lib/res/values-as/strings.xml
+++ b/car-assist-client-lib/res/values-as/strings.xml
@@ -17,5 +17,4 @@
 <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="says" msgid="8575666015622916107">"এ কৈছে"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-az/strings.xml b/car-assist-client-lib/res/values-az/strings.xml
index 386d253..94e3237 100644
--- a/car-assist-client-lib/res/values-az/strings.xml
+++ b/car-assist-client-lib/res/values-az/strings.xml
@@ -17,5 +17,4 @@
 <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">"Assistentdən əməliyyat sorğulamaq mümkün olmadı!"</string>
-    <string name="says" msgid="8575666015622916107">"deyir"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-b+sr+Latn/strings.xml b/car-assist-client-lib/res/values-b+sr+Latn/strings.xml
index eaa8a69..afd3feb 100644
--- a/car-assist-client-lib/res/values-b+sr+Latn/strings.xml
+++ b/car-assist-client-lib/res/values-b+sr+Latn/strings.xml
@@ -17,5 +17,4 @@
 <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">"Slanje zahteva za radnju Pomoćnika nije uspelo!"</string>
-    <string name="says" msgid="8575666015622916107">"kaže"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-be/strings.xml b/car-assist-client-lib/res/values-be/strings.xml
index a35d999..474a892 100644
--- a/car-assist-client-lib/res/values-be/strings.xml
+++ b/car-assist-client-lib/res/values-be/strings.xml
@@ -17,5 +17,4 @@
 <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">"Не ўдалося папрасіць Памочніка выканаць дзеянне."</string>
-    <string name="says" msgid="8575666015622916107">"гаворыць"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-bg/strings.xml b/car-assist-client-lib/res/values-bg/strings.xml
index 26f63a4..fe35fbb 100644
--- a/car-assist-client-lib/res/values-bg/strings.xml
+++ b/car-assist-client-lib/res/values-bg/strings.xml
@@ -17,5 +17,4 @@
 <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">"Не можа да се заяви действие от Асистент!"</string>
-    <string name="says" msgid="8575666015622916107">"казва"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-bn/strings.xml b/car-assist-client-lib/res/values-bn/strings.xml
index d9ccd59..b9c1eac 100644
--- a/car-assist-client-lib/res/values-bn/strings.xml
+++ b/car-assist-client-lib/res/values-bn/strings.xml
@@ -17,5 +17,4 @@
 <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">"নির্দেশ অনুসারে অ্যাসিস্ট্যান্ট কাজ করতে পারেনি!"</string>
-    <string name="says" msgid="8575666015622916107">"বলেছেন"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-bs/strings.xml b/car-assist-client-lib/res/values-bs/strings.xml
index 8f87241..dc156c4 100644
--- a/car-assist-client-lib/res/values-bs/strings.xml
+++ b/car-assist-client-lib/res/values-bs/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nije zatražena akcija Asistenta!"</string>
-    <string name="says" msgid="8575666015622916107">"kaže"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ca/strings.xml b/car-assist-client-lib/res/values-ca/strings.xml
index 78437cb..08322f2 100644
--- a/car-assist-client-lib/res/values-ca/strings.xml
+++ b/car-assist-client-lib/res/values-ca/strings.xml
@@ -17,5 +17,4 @@
 <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">"No s\'ha pogut sol·licitar l\'acció a l\'Assistent."</string>
-    <string name="says" msgid="8575666015622916107">"diu"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-cs/strings.xml b/car-assist-client-lib/res/values-cs/strings.xml
index 8f54a84..561824d 100644
--- a/car-assist-client-lib/res/values-cs/strings.xml
+++ b/car-assist-client-lib/res/values-cs/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nebylo možné požádat Asistenta o akci."</string>
-    <string name="says" msgid="8575666015622916107">"říká"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-da/strings.xml b/car-assist-client-lib/res/values-da/strings.xml
index 38dc862..58e92b9 100644
--- a/car-assist-client-lib/res/values-da/strings.xml
+++ b/car-assist-client-lib/res/values-da/strings.xml
@@ -17,5 +17,4 @@
 <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">"Handlingen kunne ikke håndteres af Assistent."</string>
-    <string name="says" msgid="8575666015622916107">"siger"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-de/strings.xml b/car-assist-client-lib/res/values-de/strings.xml
index 8f553cb..24af5a2 100644
--- a/car-assist-client-lib/res/values-de/strings.xml
+++ b/car-assist-client-lib/res/values-de/strings.xml
@@ -17,5 +17,4 @@
 <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">"Aktion konnte nicht vom Assistant angefordert werden."</string>
-    <string name="says" msgid="8575666015622916107">"sagt"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-el/strings.xml b/car-assist-client-lib/res/values-el/strings.xml
index 9bdc6ee..b45c040 100644
--- a/car-assist-client-lib/res/values-el/strings.xml
+++ b/car-assist-client-lib/res/values-el/strings.xml
@@ -17,5 +17,4 @@
 <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">"Δεν ήταν δυνατό το αίτημα για ενέργεια στον Βοηθό!"</string>
-    <string name="says" msgid="8575666015622916107">"λέει"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-en-rAU/strings.xml b/car-assist-client-lib/res/values-en-rAU/strings.xml
index 2f5a3b7..19b57da 100644
--- a/car-assist-client-lib/res/values-en-rAU/strings.xml
+++ b/car-assist-client-lib/res/values-en-rAU/strings.xml
@@ -17,5 +17,4 @@
 <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">"Could not request action from Assistant!"</string>
-    <string name="says" msgid="8575666015622916107">"says"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-en-rGB/strings.xml b/car-assist-client-lib/res/values-en-rGB/strings.xml
index 2f5a3b7..19b57da 100644
--- a/car-assist-client-lib/res/values-en-rGB/strings.xml
+++ b/car-assist-client-lib/res/values-en-rGB/strings.xml
@@ -17,5 +17,4 @@
 <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">"Could not request action from Assistant!"</string>
-    <string name="says" msgid="8575666015622916107">"says"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-en-rIN/strings.xml b/car-assist-client-lib/res/values-en-rIN/strings.xml
index 2f5a3b7..19b57da 100644
--- a/car-assist-client-lib/res/values-en-rIN/strings.xml
+++ b/car-assist-client-lib/res/values-en-rIN/strings.xml
@@ -17,5 +17,4 @@
 <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">"Could not request action from Assistant!"</string>
-    <string name="says" msgid="8575666015622916107">"says"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-es-rUS/strings.xml b/car-assist-client-lib/res/values-es-rUS/strings.xml
index 307e7ec..a294f2d 100644
--- a/car-assist-client-lib/res/values-es-rUS/strings.xml
+++ b/car-assist-client-lib/res/values-es-rUS/strings.xml
@@ -17,5 +17,4 @@
 <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">"No se pudo solicitar la acción del Asistente"</string>
-    <string name="says" msgid="8575666015622916107">"dice"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-es/strings.xml b/car-assist-client-lib/res/values-es/strings.xml
index e4e7e97..4e4cfee 100644
--- a/car-assist-client-lib/res/values-es/strings.xml
+++ b/car-assist-client-lib/res/values-es/strings.xml
@@ -17,5 +17,4 @@
 <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">"No se ha podido solicitar la acción al Asistente."</string>
-    <string name="says" msgid="8575666015622916107">"dice"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-et/strings.xml b/car-assist-client-lib/res/values-et/strings.xml
index 91363e6..1aecd12 100644
--- a/car-assist-client-lib/res/values-et/strings.xml
+++ b/car-assist-client-lib/res/values-et/strings.xml
@@ -17,5 +17,4 @@
 <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">"Assistendilt ei õnnestunud toimingut taotleda."</string>
-    <string name="says" msgid="8575666015622916107">"ütleb"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-eu/strings.xml b/car-assist-client-lib/res/values-eu/strings.xml
index 0bc404a..ea19d0b 100644
--- a/car-assist-client-lib/res/values-eu/strings.xml
+++ b/car-assist-client-lib/res/values-eu/strings.xml
@@ -17,5 +17,4 @@
 <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">"Ezin izan da eskatu Laguntzailea eginbidearen ekintza!"</string>
-    <string name="says" msgid="8575666015622916107">"kontaktuak hau dio:"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-fa/strings.xml b/car-assist-client-lib/res/values-fa/strings.xml
index 00c7f18..f2c736b 100644
--- a/car-assist-client-lib/res/values-fa/strings.xml
+++ b/car-assist-client-lib/res/values-fa/strings.xml
@@ -17,5 +17,4 @@
 <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">"نمی‌توانید از «دستیار» بخواهید کاری انجام دهد!"</string>
-    <string name="says" msgid="8575666015622916107">"می‌گوید"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-fi/strings.xml b/car-assist-client-lib/res/values-fi/strings.xml
index 613428a..e3969ee 100644
--- a/car-assist-client-lib/res/values-fi/strings.xml
+++ b/car-assist-client-lib/res/values-fi/strings.xml
@@ -17,5 +17,4 @@
 <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">"Toiminnon pyytäminen Assistantilta epäonnistui."</string>
-    <string name="says" msgid="8575666015622916107">"sanoo"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-fr-rCA/strings.xml b/car-assist-client-lib/res/values-fr-rCA/strings.xml
index 5791a4b..f0cebd5 100644
--- a/car-assist-client-lib/res/values-fr-rCA/strings.xml
+++ b/car-assist-client-lib/res/values-fr-rCA/strings.xml
@@ -17,5 +17,4 @@
 <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">"Impossible de demander à l\'Assistant Google d\'effectuer une action!"</string>
-    <string name="says" msgid="8575666015622916107">"dit"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-fr/strings.xml b/car-assist-client-lib/res/values-fr/strings.xml
index 7004545..79eb92b 100644
--- a/car-assist-client-lib/res/values-fr/strings.xml
+++ b/car-assist-client-lib/res/values-fr/strings.xml
@@ -17,5 +17,4 @@
 <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">"Impossible de demander à l\'Assistant d\'effectuer cette action."</string>
-    <string name="says" msgid="8575666015622916107">"dit"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-gl/strings.xml b/car-assist-client-lib/res/values-gl/strings.xml
index baec894..6c9c331 100644
--- a/car-assist-client-lib/res/values-gl/strings.xml
+++ b/car-assist-client-lib/res/values-gl/strings.xml
@@ -17,5 +17,4 @@
 <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">"Non se puido solicitar a acción ao Asistente."</string>
-    <string name="says" msgid="8575666015622916107">"di"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-gu/strings.xml b/car-assist-client-lib/res/values-gu/strings.xml
index 63e313c..1f94e89 100644
--- a/car-assist-client-lib/res/values-gu/strings.xml
+++ b/car-assist-client-lib/res/values-gu/strings.xml
@@ -17,5 +17,4 @@
 <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">"આસિસ્ટંટને ક્રિયાની વિનંતી કરી શક્યાં નથી!"</string>
-    <string name="says" msgid="8575666015622916107">"કહે છે કે"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-hi/strings.xml b/car-assist-client-lib/res/values-hi/strings.xml
index ba7afeb..55706c3 100644
--- a/car-assist-client-lib/res/values-hi/strings.xml
+++ b/car-assist-client-lib/res/values-hi/strings.xml
@@ -17,5 +17,4 @@
 <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="says" msgid="8575666015622916107">"कहा है कि"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-hr/strings.xml b/car-assist-client-lib/res/values-hr/strings.xml
index 2da146b..ec6dfea 100644
--- a/car-assist-client-lib/res/values-hr/strings.xml
+++ b/car-assist-client-lib/res/values-hr/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nije bilo moguće zatražiti radnju od Asisitenta!"</string>
-    <string name="says" msgid="8575666015622916107">"kaže"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-hu/strings.xml b/car-assist-client-lib/res/values-hu/strings.xml
index faa43e0..a8c0d5b 100644
--- a/car-assist-client-lib/res/values-hu/strings.xml
+++ b/car-assist-client-lib/res/values-hu/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nem sikerült a Segéd-művelet kérése!"</string>
-    <string name="says" msgid="8575666015622916107">"azt mondja, hogy"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-hy/strings.xml b/car-assist-client-lib/res/values-hy/strings.xml
index 219b14b..7c744d6 100644
--- a/car-assist-client-lib/res/values-hy/strings.xml
+++ b/car-assist-client-lib/res/values-hy/strings.xml
@@ -17,5 +17,4 @@
 <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">"Չհաջողվեց Օգնականին խնդրել գործողություն կատարել"</string>
-    <string name="says" msgid="8575666015622916107">"օգտատերն ասում է."</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-in/strings.xml b/car-assist-client-lib/res/values-in/strings.xml
index cedc390..9d3c512 100644
--- a/car-assist-client-lib/res/values-in/strings.xml
+++ b/car-assist-client-lib/res/values-in/strings.xml
@@ -17,5 +17,4 @@
 <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">"Tidak dapat meminta tindakan dari Asisten!"</string>
-    <string name="says" msgid="8575666015622916107">"mengatakan"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-is/strings.xml b/car-assist-client-lib/res/values-is/strings.xml
index 1162c77..9aa55ff 100644
--- a/car-assist-client-lib/res/values-is/strings.xml
+++ b/car-assist-client-lib/res/values-is/strings.xml
@@ -17,5 +17,4 @@
 <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">"Ekki tókst að biðja hjálparann um aðgerð!"</string>
-    <string name="says" msgid="8575666015622916107">"segir"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-it/strings.xml b/car-assist-client-lib/res/values-it/strings.xml
index 4bac32b..0e3310b 100644
--- a/car-assist-client-lib/res/values-it/strings.xml
+++ b/car-assist-client-lib/res/values-it/strings.xml
@@ -17,5 +17,4 @@
 <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">"Impossibile richiedere l\'azione all\'assistente"</string>
-    <string name="says" msgid="8575666015622916107">"dice"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-iw/strings.xml b/car-assist-client-lib/res/values-iw/strings.xml
index 510432d..fd3c4de 100644
--- a/car-assist-client-lib/res/values-iw/strings.xml
+++ b/car-assist-client-lib/res/values-iw/strings.xml
@@ -17,5 +17,4 @@
 <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="says" msgid="8575666015622916107">"רוצה להודיע כי"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ja/strings.xml b/car-assist-client-lib/res/values-ja/strings.xml
index 2065208..8aa6ba9 100644
--- a/car-assist-client-lib/res/values-ja/strings.xml
+++ b/car-assist-client-lib/res/values-ja/strings.xml
@@ -17,5 +17,4 @@
 <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">"アシスタント アクションをリクエストできませんでした"</string>
-    <string name="says" msgid="8575666015622916107">"さんからのメッセージです"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ka/strings.xml b/car-assist-client-lib/res/values-ka/strings.xml
index 8076df9..a47c282 100644
--- a/car-assist-client-lib/res/values-ka/strings.xml
+++ b/car-assist-client-lib/res/values-ka/strings.xml
@@ -17,5 +17,4 @@
 <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">"ასისტენტისგან ქმედების მოთხოვნა ვერ მოხერხდა"</string>
-    <string name="says" msgid="8575666015622916107">"ამბობს"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-kk/strings.xml b/car-assist-client-lib/res/values-kk/strings.xml
index b96f97f..5f4f986 100644
--- a/car-assist-client-lib/res/values-kk/strings.xml
+++ b/car-assist-client-lib/res/values-kk/strings.xml
@@ -17,5 +17,4 @@
 <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="says" msgid="8575666015622916107">"былай дейді:"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-km/strings.xml b/car-assist-client-lib/res/values-km/strings.xml
index 64d1004..55b985d 100644
--- a/car-assist-client-lib/res/values-km/strings.xml
+++ b/car-assist-client-lib/res/values-km/strings.xml
@@ -17,5 +17,4 @@
 <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">"មិនអាចស្នើសុំ​សកម្មភាពពី​ជំនួយការបានទេ!"</string>
-    <string name="says" msgid="8575666015622916107">"និយាយថា"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-kn/strings.xml b/car-assist-client-lib/res/values-kn/strings.xml
index 187a13a..af1c9e7 100644
--- a/car-assist-client-lib/res/values-kn/strings.xml
+++ b/car-assist-client-lib/res/values-kn/strings.xml
@@ -17,5 +17,4 @@
 <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">"ಅಸಿಸ್ಟೆಂಟ್‌ನಿಂದ ಕ್ರಿಯೆಗಾಗಿ ವಿನಂತಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ!"</string>
-    <string name="says" msgid="8575666015622916107">"ಹೇಳುತ್ತಾರೆ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ko/strings.xml b/car-assist-client-lib/res/values-ko/strings.xml
index e0bc7e8..d1ee883 100644
--- a/car-assist-client-lib/res/values-ko/strings.xml
+++ b/car-assist-client-lib/res/values-ko/strings.xml
@@ -17,5 +17,4 @@
 <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">"어시스턴트에서 요청 작업을 찾을 수 없습니다."</string>
-    <string name="says" msgid="8575666015622916107">"님의 메시지:"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ky/strings.xml b/car-assist-client-lib/res/values-ky/strings.xml
index f278353..f718787 100644
--- a/car-assist-client-lib/res/values-ky/strings.xml
+++ b/car-assist-client-lib/res/values-ky/strings.xml
@@ -17,5 +17,4 @@
 <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">"Жардамчы бул аракетти аткара албайт!"</string>
-    <string name="says" msgid="8575666015622916107">"төмөнкүнү айтты:"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-lo/strings.xml b/car-assist-client-lib/res/values-lo/strings.xml
index 80c7d53..9756d70 100644
--- a/car-assist-client-lib/res/values-lo/strings.xml
+++ b/car-assist-client-lib/res/values-lo/strings.xml
@@ -17,5 +17,4 @@
 <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">"ບໍ່ສາມາດຂໍການດຳເນີນການຈາກຜູ້ຊ່ວຍໄດ້!"</string>
-    <string name="says" msgid="8575666015622916107">"ເວົ້າ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-lt/strings.xml b/car-assist-client-lib/res/values-lt/strings.xml
index 87374c1..88276c3 100644
--- a/car-assist-client-lib/res/values-lt/strings.xml
+++ b/car-assist-client-lib/res/values-lt/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nepavyko pateikti Padėjėjui veiksmo užklausos!"</string>
-    <string name="says" msgid="8575666015622916107">"sako"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-lv/strings.xml b/car-assist-client-lib/res/values-lv/strings.xml
index 3223c67..7da0545 100644
--- a/car-assist-client-lib/res/values-lv/strings.xml
+++ b/car-assist-client-lib/res/values-lv/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nevarēja pieprasīt darbību no Asistenta."</string>
-    <string name="says" msgid="8575666015622916107">"saka"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-mk/strings.xml b/car-assist-client-lib/res/values-mk/strings.xml
index 08f56ac..a6c1bd5 100644
--- a/car-assist-client-lib/res/values-mk/strings.xml
+++ b/car-assist-client-lib/res/values-mk/strings.xml
@@ -17,5 +17,4 @@
 <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">"Не може да се побара дејство од „Помошникот“!"</string>
-    <string name="says" msgid="8575666015622916107">"вели"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ml/strings.xml b/car-assist-client-lib/res/values-ml/strings.xml
index 71bc6ad..4e2a1bc 100644
--- a/car-assist-client-lib/res/values-ml/strings.xml
+++ b/car-assist-client-lib/res/values-ml/strings.xml
@@ -17,5 +17,4 @@
 <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">"അസിസ്‌റ്റന്റിൽ നിന്ന് പ്രവർത്തനം അഭ്യർത്ഥിക്കാനായില്ല!"</string>
-    <string name="says" msgid="8575666015622916107">"പറയുന്നു"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-mn/strings.xml b/car-assist-client-lib/res/values-mn/strings.xml
index 3050b61..7436099 100644
--- a/car-assist-client-lib/res/values-mn/strings.xml
+++ b/car-assist-client-lib/res/values-mn/strings.xml
@@ -17,5 +17,4 @@
 <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">"Туслахаас үйлдэл хийхийг хүсэж чадсангүй!"</string>
-    <string name="says" msgid="8575666015622916107">"хэлэхдээ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-mr/strings.xml b/car-assist-client-lib/res/values-mr/strings.xml
index a896ce6..0fb9df7 100644
--- a/car-assist-client-lib/res/values-mr/strings.xml
+++ b/car-assist-client-lib/res/values-mr/strings.xml
@@ -17,5 +17,4 @@
 <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">"असिस्टंटकडे क्रियेची विनंती करता आली नाही!"</string>
-    <string name="says" msgid="8575666015622916107">"म्हणाले"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ms/strings.xml b/car-assist-client-lib/res/values-ms/strings.xml
index aa8192b..576d112 100644
--- a/car-assist-client-lib/res/values-ms/strings.xml
+++ b/car-assist-client-lib/res/values-ms/strings.xml
@@ -17,5 +17,4 @@
 <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">"Tidak dapat meminta tindakan daripada Assistant!"</string>
-    <string name="says" msgid="8575666015622916107">"berkata"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-my/strings.xml b/car-assist-client-lib/res/values-my/strings.xml
index 54ac60f..9b83e1f 100644
--- a/car-assist-client-lib/res/values-my/strings.xml
+++ b/car-assist-client-lib/res/values-my/strings.xml
@@ -17,5 +17,4 @@
 <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="says" msgid="8575666015622916107">"ဆိုထားသည်မှာ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-nb/strings.xml b/car-assist-client-lib/res/values-nb/strings.xml
index 279b16b..579abee 100644
--- a/car-assist-client-lib/res/values-nb/strings.xml
+++ b/car-assist-client-lib/res/values-nb/strings.xml
@@ -17,5 +17,4 @@
 <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">"Kunne ikke forespørre handlinger fra assistenten!"</string>
-    <string name="says" msgid="8575666015622916107">"sier"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ne/strings.xml b/car-assist-client-lib/res/values-ne/strings.xml
index d20a73a..79c5aa9 100644
--- a/car-assist-client-lib/res/values-ne/strings.xml
+++ b/car-assist-client-lib/res/values-ne/strings.xml
@@ -17,5 +17,4 @@
 <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">"सहायकलाई कारबाही गर्ने अनुरोध गर्न सकिएन!"</string>
-    <string name="says" msgid="8575666015622916107">"भन्नुहुन्छ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-nl/strings.xml b/car-assist-client-lib/res/values-nl/strings.xml
index aca2bb7..cd7f92d 100644
--- a/car-assist-client-lib/res/values-nl/strings.xml
+++ b/car-assist-client-lib/res/values-nl/strings.xml
@@ -17,5 +17,4 @@
 <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">"Kan actie niet aanvragen bij de Assistent."</string>
-    <string name="says" msgid="8575666015622916107">"zegt"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-or/strings.xml b/car-assist-client-lib/res/values-or/strings.xml
index 81480e1..2dbef39 100644
--- a/car-assist-client-lib/res/values-or/strings.xml
+++ b/car-assist-client-lib/res/values-or/strings.xml
@@ -17,5 +17,4 @@
 <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">"ଆସିଷ୍ଟାଣ୍ଟ ଠାରୁ କାର୍ଯ୍ୟ ଅନୁରୋଧ କରାଯାଇପାରିଲା ନାହିଁ!"</string>
-    <string name="says" msgid="8575666015622916107">"କୁହେ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-pa/strings.xml b/car-assist-client-lib/res/values-pa/strings.xml
index 22fc049..3e51ca7 100644
--- a/car-assist-client-lib/res/values-pa/strings.xml
+++ b/car-assist-client-lib/res/values-pa/strings.xml
@@ -17,5 +17,4 @@
 <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">"\'ਅਸਿਸਟੈਂਟ\' ਤੋਂ ਕਾਰਵਾਈ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ!"</string>
-    <string name="says" msgid="8575666015622916107">"ਕਿਹਾ"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-pl/strings.xml b/car-assist-client-lib/res/values-pl/strings.xml
index 4ccfa00..19f52fb 100644
--- a/car-assist-client-lib/res/values-pl/strings.xml
+++ b/car-assist-client-lib/res/values-pl/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nie udało się wysłać prośby do Asystenta."</string>
-    <string name="says" msgid="8575666015622916107">"mówi"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-pt-rPT/strings.xml b/car-assist-client-lib/res/values-pt-rPT/strings.xml
index bb902ea..ead2bf2 100644
--- a/car-assist-client-lib/res/values-pt-rPT/strings.xml
+++ b/car-assist-client-lib/res/values-pt-rPT/strings.xml
@@ -17,5 +17,4 @@
 <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">"Não foi possível solicitar a ação do Assistente."</string>
-    <string name="says" msgid="8575666015622916107">"diz"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-pt/strings.xml b/car-assist-client-lib/res/values-pt/strings.xml
index bb902ea..ead2bf2 100644
--- a/car-assist-client-lib/res/values-pt/strings.xml
+++ b/car-assist-client-lib/res/values-pt/strings.xml
@@ -17,5 +17,4 @@
 <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">"Não foi possível solicitar a ação do Assistente."</string>
-    <string name="says" msgid="8575666015622916107">"diz"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ro/strings.xml b/car-assist-client-lib/res/values-ro/strings.xml
index 45cfcb6..9dc0b65 100644
--- a/car-assist-client-lib/res/values-ro/strings.xml
+++ b/car-assist-client-lib/res/values-ro/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nu s-a putut solicita acțiunea de la Asistent!"</string>
-    <string name="says" msgid="8575666015622916107">"spune"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ru/strings.xml b/car-assist-client-lib/res/values-ru/strings.xml
index 7c668c1..e702681 100644
--- a/car-assist-client-lib/res/values-ru/strings.xml
+++ b/car-assist-client-lib/res/values-ru/strings.xml
@@ -17,5 +17,4 @@
 <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">"Не удалось выполнить действие с помощью Ассистента"</string>
-    <string name="says" msgid="8575666015622916107">"говорит:"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-si/strings.xml b/car-assist-client-lib/res/values-si/strings.xml
index 0a233a0..40c17bf 100644
--- a/car-assist-client-lib/res/values-si/strings.xml
+++ b/car-assist-client-lib/res/values-si/strings.xml
@@ -17,5 +17,4 @@
 <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">"සහායකගෙන් ක්‍රියාව ඉල්ලීමට නොහැකි විය!"</string>
-    <string name="says" msgid="8575666015622916107">"කියයි"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-sk/strings.xml b/car-assist-client-lib/res/values-sk/strings.xml
index 8043b1e..3bf4414 100644
--- a/car-assist-client-lib/res/values-sk/strings.xml
+++ b/car-assist-client-lib/res/values-sk/strings.xml
@@ -17,5 +17,4 @@
 <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">"Vyžiadanie akcie od Asistenta zlyhalo."</string>
-    <string name="says" msgid="8575666015622916107">"hovorí"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-sl/strings.xml b/car-assist-client-lib/res/values-sl/strings.xml
index ab58a0a..178ed8b 100644
--- a/car-assist-client-lib/res/values-sl/strings.xml
+++ b/car-assist-client-lib/res/values-sl/strings.xml
@@ -17,5 +17,4 @@
 <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">"Ni bilo mogoče zahtevati dejanja Pomočnika."</string>
-    <string name="says" msgid="8575666015622916107">"pravi"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-sq/strings.xml b/car-assist-client-lib/res/values-sq/strings.xml
index acc0431..856bec2 100644
--- a/car-assist-client-lib/res/values-sq/strings.xml
+++ b/car-assist-client-lib/res/values-sq/strings.xml
@@ -17,5 +17,4 @@
 <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">"Nuk mund të kërkohet veprim nga \"Asistenti\"!"</string>
-    <string name="says" msgid="8575666015622916107">"thotë"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-sr/strings.xml b/car-assist-client-lib/res/values-sr/strings.xml
index 7d73ea8..b49c393 100644
--- a/car-assist-client-lib/res/values-sr/strings.xml
+++ b/car-assist-client-lib/res/values-sr/strings.xml
@@ -17,5 +17,4 @@
 <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">"Слање захтева за радњу Помоћника није успело!"</string>
-    <string name="says" msgid="8575666015622916107">"каже"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-sv/strings.xml b/car-assist-client-lib/res/values-sv/strings.xml
index d22371e..ce2f05d 100644
--- a/car-assist-client-lib/res/values-sv/strings.xml
+++ b/car-assist-client-lib/res/values-sv/strings.xml
@@ -17,5 +17,4 @@
 <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">"Det gick inte att begära åtgärden från assistenten."</string>
-    <string name="says" msgid="8575666015622916107">"säger"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-sw/strings.xml b/car-assist-client-lib/res/values-sw/strings.xml
index dcbddff..ecc55cf 100644
--- a/car-assist-client-lib/res/values-sw/strings.xml
+++ b/car-assist-client-lib/res/values-sw/strings.xml
@@ -17,5 +17,4 @@
 <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">"Imeshndwa kuomba kitendo kutoka kwenye programu ya Mratibu wa Google!"</string>
-    <string name="says" msgid="8575666015622916107">"anasema"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ta/strings.xml b/car-assist-client-lib/res/values-ta/strings.xml
index 6128727..b455c71 100644
--- a/car-assist-client-lib/res/values-ta/strings.xml
+++ b/car-assist-client-lib/res/values-ta/strings.xml
@@ -17,5 +17,4 @@
 <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">"அசிஸ்டண்ட்டிடம் இருந்து உதவியைக் கோர இயலவில்லை!"</string>
-    <string name="says" msgid="8575666015622916107">"கூறுகிறார்"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-te/strings.xml b/car-assist-client-lib/res/values-te/strings.xml
index 222ddf4..b77329f 100644
--- a/car-assist-client-lib/res/values-te/strings.xml
+++ b/car-assist-client-lib/res/values-te/strings.xml
@@ -17,5 +17,4 @@
 <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">"అసిస్టెంట్ నుండి చర్యను అభ్యర్థించడం సాధ్యపడలేదు!"</string>
-    <string name="says" msgid="8575666015622916107">"ఇలా చెప్పారు"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-th/strings.xml b/car-assist-client-lib/res/values-th/strings.xml
index d88bdb1..64ef235 100644
--- a/car-assist-client-lib/res/values-th/strings.xml
+++ b/car-assist-client-lib/res/values-th/strings.xml
@@ -17,5 +17,4 @@
 <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="says" msgid="8575666015622916107">"พูดว่า"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-tl/strings.xml b/car-assist-client-lib/res/values-tl/strings.xml
index 2bcb098..92f559d 100644
--- a/car-assist-client-lib/res/values-tl/strings.xml
+++ b/car-assist-client-lib/res/values-tl/strings.xml
@@ -17,5 +17,4 @@
 <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">"Hindi makahiling ng pagkilos mula sa Assistant!"</string>
-    <string name="says" msgid="8575666015622916107">"ay nagsabing"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-tr/strings.xml b/car-assist-client-lib/res/values-tr/strings.xml
index 6ef140b..fbea2f9 100644
--- a/car-assist-client-lib/res/values-tr/strings.xml
+++ b/car-assist-client-lib/res/values-tr/strings.xml
@@ -17,5 +17,4 @@
 <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">"İşlem Asistan\'dan istenemedi!"</string>
-    <string name="says" msgid="8575666015622916107">"der ki:"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-uk/strings.xml b/car-assist-client-lib/res/values-uk/strings.xml
index 8ba7886..7d82717 100644
--- a/car-assist-client-lib/res/values-uk/strings.xml
+++ b/car-assist-client-lib/res/values-uk/strings.xml
@@ -17,5 +17,4 @@
 <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">"Не вдалося надіслати запит на дію Асистента."</string>
-    <string name="says" msgid="8575666015622916107">"говорить"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-ur/strings.xml b/car-assist-client-lib/res/values-ur/strings.xml
index 5e248a8..a622777 100644
--- a/car-assist-client-lib/res/values-ur/strings.xml
+++ b/car-assist-client-lib/res/values-ur/strings.xml
@@ -17,5 +17,4 @@
 <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">"\'اسسٹنٹ\' کی طرف سے کارروائی کی درخواست نہیں کی جا سکی!"</string>
-    <string name="says" msgid="8575666015622916107">"کہ رہا ہے"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-uz/strings.xml b/car-assist-client-lib/res/values-uz/strings.xml
index 3b89e4e..2aa2f1d 100644
--- a/car-assist-client-lib/res/values-uz/strings.xml
+++ b/car-assist-client-lib/res/values-uz/strings.xml
@@ -17,5 +17,4 @@
 <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">"Assistent orqali amal soʻrovi yuborilmadi!"</string>
-    <string name="says" msgid="8575666015622916107">"dedi:"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-vi/strings.xml b/car-assist-client-lib/res/values-vi/strings.xml
index 4832f26..552f4c4 100644
--- a/car-assist-client-lib/res/values-vi/strings.xml
+++ b/car-assist-client-lib/res/values-vi/strings.xml
@@ -17,5 +17,4 @@
 <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">"Không thể yêu cầu hành động từ Trợ lý!"</string>
-    <string name="says" msgid="8575666015622916107">"nói"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-zh-rCN/strings.xml b/car-assist-client-lib/res/values-zh-rCN/strings.xml
index 637124f..6349a78 100644
--- a/car-assist-client-lib/res/values-zh-rCN/strings.xml
+++ b/car-assist-client-lib/res/values-zh-rCN/strings.xml
@@ -17,5 +17,4 @@
 <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">"无法从 Google 助理请求操作!"</string>
-    <string name="says" msgid="8575666015622916107">"说"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-zh-rHK/strings.xml b/car-assist-client-lib/res/values-zh-rHK/strings.xml
index 1c22eee..0eeee1a 100644
--- a/car-assist-client-lib/res/values-zh-rHK/strings.xml
+++ b/car-assist-client-lib/res/values-zh-rHK/strings.xml
@@ -17,5 +17,4 @@
 <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">"「Google 助理」無法執行要求的操作!"</string>
-    <string name="says" msgid="8575666015622916107">"話"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-zh-rTW/strings.xml b/car-assist-client-lib/res/values-zh-rTW/strings.xml
index 2b73ccf..71fb62e 100644
--- a/car-assist-client-lib/res/values-zh-rTW/strings.xml
+++ b/car-assist-client-lib/res/values-zh-rTW/strings.xml
@@ -17,5 +17,4 @@
 <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">"無法要求 Google 助理執行動作!"</string>
-    <string name="says" msgid="8575666015622916107">"說"</string>
 </resources>
diff --git a/car-assist-client-lib/res/values-zu/strings.xml b/car-assist-client-lib/res/values-zu/strings.xml
index 1fcd4cc..5011b7a 100644
--- a/car-assist-client-lib/res/values-zu/strings.xml
+++ b/car-assist-client-lib/res/values-zu/strings.xml
@@ -17,5 +17,4 @@
 <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">"Ayikwazanga ukucela isenzo kusuka kumsizi!"</string>
-    <string name="says" msgid="8575666015622916107">"ithi"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-af/strings.xml b/car-broadcastradio-support/res/values-af/strings.xml
index 0c08586..0f5498a 100644
--- a/car-broadcastradio-support/res/values-af/strings.xml
+++ b/car-broadcastradio-support/res/values-af/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stasies"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Gunstelinge"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-am/strings.xml b/car-broadcastradio-support/res/values-am/strings.xml
index 81b128a..34612c1 100644
--- a/car-broadcastradio-support/res/values-am/strings.xml
+++ b/car-broadcastradio-support/res/values-am/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"ኤኤም"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"ኤፍኤም"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ጣቢያዎች"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"ተወዳጆች"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ar/strings.xml b/car-broadcastradio-support/res/values-ar/strings.xml
index 129c8c5..defdd18 100644
--- a/car-broadcastradio-support/res/values-ar/strings.xml
+++ b/car-broadcastradio-support/res/values-ar/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"المحطات"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"المفضّلة"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-as/strings.xml b/car-broadcastradio-support/res/values-as/strings.xml
index 862e9bb..93e669d 100644
--- a/car-broadcastradio-support/res/values-as/strings.xml
+++ b/car-broadcastradio-support/res/values-as/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"কেন্দ্ৰসমূহ"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"প্ৰিয় বস্তুসমূহ"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-az/strings.xml b/car-broadcastradio-support/res/values-az/strings.xml
index 3b40ff9..5b3dc13 100644
--- a/car-broadcastradio-support/res/values-az/strings.xml
+++ b/car-broadcastradio-support/res/values-az/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stansiyalar"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Sevimlilər"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-b+sr+Latn/strings.xml b/car-broadcastradio-support/res/values-b+sr+Latn/strings.xml
index e29e90e..2b24509 100644
--- a/car-broadcastradio-support/res/values-b+sr+Latn/strings.xml
+++ b/car-broadcastradio-support/res/values-b+sr+Latn/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stanice"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Omiljeno"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-be/strings.xml b/car-broadcastradio-support/res/values-be/strings.xml
index cde54f4..09b014c 100644
--- a/car-broadcastradio-support/res/values-be/strings.xml
+++ b/car-broadcastradio-support/res/values-be/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Радыёстанцыі"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Абранае"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-bg/strings.xml b/car-broadcastradio-support/res/values-bg/strings.xml
index 6d7b2a0..4dbd256 100644
--- a/car-broadcastradio-support/res/values-bg/strings.xml
+++ b/car-broadcastradio-support/res/values-bg/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"Цифрово радиоразпръскване"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Станции"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Любими"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-bn/strings.xml b/car-broadcastradio-support/res/values-bn/strings.xml
index 245ce98..a08a537 100644
--- a/car-broadcastradio-support/res/values-bn/strings.xml
+++ b/car-broadcastradio-support/res/values-bn/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"স্টেশন"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"পছন্দসই"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-bs/strings.xml b/car-broadcastradio-support/res/values-bs/strings.xml
index 42ff388..811f5dd 100644
--- a/car-broadcastradio-support/res/values-bs/strings.xml
+++ b/car-broadcastradio-support/res/values-bs/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stanice"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Omiljeni"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ca/strings.xml b/car-broadcastradio-support/res/values-ca/strings.xml
index 3737632..26002e5 100644
--- a/car-broadcastradio-support/res/values-ca/strings.xml
+++ b/car-broadcastradio-support/res/values-ca/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Emissores"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Preferides"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-cs/strings.xml b/car-broadcastradio-support/res/values-cs/strings.xml
index db20752..46d1a91 100644
--- a/car-broadcastradio-support/res/values-cs/strings.xml
+++ b/car-broadcastradio-support/res/values-cs/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stanice"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Oblíbené"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-da/strings.xml b/car-broadcastradio-support/res/values-da/strings.xml
index 46d1603..b0be180 100644
--- a/car-broadcastradio-support/res/values-da/strings.xml
+++ b/car-broadcastradio-support/res/values-da/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Kanaler"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoritter"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-de/strings.xml b/car-broadcastradio-support/res/values-de/strings.xml
index c6e2e9f..b9d8476 100644
--- a/car-broadcastradio-support/res/values-de/strings.xml
+++ b/car-broadcastradio-support/res/values-de/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"MW"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"UKW"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Sender"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoriten"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-el/strings.xml b/car-broadcastradio-support/res/values-el/strings.xml
index f5452ec..5dc5357 100644
--- a/car-broadcastradio-support/res/values-el/strings.xml
+++ b/car-broadcastradio-support/res/values-el/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Σταθμοί"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Αγαπημένα"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-en-rAU/strings.xml b/car-broadcastradio-support/res/values-en-rAU/strings.xml
index 806c9c8..07a0c33 100644
--- a/car-broadcastradio-support/res/values-en-rAU/strings.xml
+++ b/car-broadcastradio-support/res/values-en-rAU/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"a.m."</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stations"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favourites"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-en-rGB/strings.xml b/car-broadcastradio-support/res/values-en-rGB/strings.xml
index 806c9c8..07a0c33 100644
--- a/car-broadcastradio-support/res/values-en-rGB/strings.xml
+++ b/car-broadcastradio-support/res/values-en-rGB/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"a.m."</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stations"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favourites"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-en-rIN/strings.xml b/car-broadcastradio-support/res/values-en-rIN/strings.xml
index 806c9c8..07a0c33 100644
--- a/car-broadcastradio-support/res/values-en-rIN/strings.xml
+++ b/car-broadcastradio-support/res/values-en-rIN/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"a.m."</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stations"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favourites"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-es-rUS/strings.xml b/car-broadcastradio-support/res/values-es-rUS/strings.xml
index 4862ab2..4f8ca47 100644
--- a/car-broadcastradio-support/res/values-es-rUS/strings.xml
+++ b/car-broadcastradio-support/res/values-es-rUS/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Estaciones"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoritos"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-es/strings.xml b/car-broadcastradio-support/res/values-es/strings.xml
index f0f383e..941b83f 100644
--- a/car-broadcastradio-support/res/values-es/strings.xml
+++ b/car-broadcastradio-support/res/values-es/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Emisoras"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoritos"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-et/strings.xml b/car-broadcastradio-support/res/values-et/strings.xml
index 810c07e..439f156 100644
--- a/car-broadcastradio-support/res/values-et/strings.xml
+++ b/car-broadcastradio-support/res/values-et/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Jaamad"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Lemmikud"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-eu/strings.xml b/car-broadcastradio-support/res/values-eu/strings.xml
index 999d986..ec96a52 100644
--- a/car-broadcastradio-support/res/values-eu/strings.xml
+++ b/car-broadcastradio-support/res/values-eu/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Kateak"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Gogokoak"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-fa/strings.xml b/car-broadcastradio-support/res/values-fa/strings.xml
index 1828fc3..bc0df94 100644
--- a/car-broadcastradio-support/res/values-fa/strings.xml
+++ b/car-broadcastradio-support/res/values-fa/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ایستگاه‌ها"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"موارد دلخواه"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-fi/strings.xml b/car-broadcastradio-support/res/values-fi/strings.xml
index a1b60db..afafb89 100644
--- a/car-broadcastradio-support/res/values-fi/strings.xml
+++ b/car-broadcastradio-support/res/values-fi/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Kanavat"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Suosikit"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-fr-rCA/strings.xml b/car-broadcastradio-support/res/values-fr-rCA/strings.xml
index 89bd122..575a008 100644
--- a/car-broadcastradio-support/res/values-fr-rCA/strings.xml
+++ b/car-broadcastradio-support/res/values-fr-rCA/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stations"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favorites"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-fr/strings.xml b/car-broadcastradio-support/res/values-fr/strings.xml
index f12123f..fcb91c4 100644
--- a/car-broadcastradio-support/res/values-fr/strings.xml
+++ b/car-broadcastradio-support/res/values-fr/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Radios"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoris"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-gl/strings.xml b/car-broadcastradio-support/res/values-gl/strings.xml
index beccab0..b6cd327 100644
--- a/car-broadcastradio-support/res/values-gl/strings.xml
+++ b/car-broadcastradio-support/res/values-gl/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Emisoras"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Programas favoritos"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-gu/strings.xml b/car-broadcastradio-support/res/values-gu/strings.xml
index 8da5f9d..9bde5f1 100644
--- a/car-broadcastradio-support/res/values-gu/strings.xml
+++ b/car-broadcastradio-support/res/values-gu/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"સ્ટેશન"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"મનપસંદ"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-hi/strings.xml b/car-broadcastradio-support/res/values-hi/strings.xml
index 230e18b..e946790 100644
--- a/car-broadcastradio-support/res/values-hi/strings.xml
+++ b/car-broadcastradio-support/res/values-hi/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"एएम रेडियो"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"एफ़एम रेडियो"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"डीएबी"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"स्टेशन"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"पसंदीदा"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-hr/strings.xml b/car-broadcastradio-support/res/values-hr/strings.xml
index 63cc855..498183e 100644
--- a/car-broadcastradio-support/res/values-hr/strings.xml
+++ b/car-broadcastradio-support/res/values-hr/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Postaje"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoriti"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-hu/strings.xml b/car-broadcastradio-support/res/values-hu/strings.xml
index 5a16d62..89d8e19 100644
--- a/car-broadcastradio-support/res/values-hu/strings.xml
+++ b/car-broadcastradio-support/res/values-hu/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Állomások"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Kedvencek"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-hy/strings.xml b/car-broadcastradio-support/res/values-hy/strings.xml
index 77efc29..b4fef5d 100644
--- a/car-broadcastradio-support/res/values-hy/strings.xml
+++ b/car-broadcastradio-support/res/values-hy/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Ռադիոկայաններ"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Ընտրանի"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-in/strings.xml b/car-broadcastradio-support/res/values-in/strings.xml
index e40e53f..3974b7c 100644
--- a/car-broadcastradio-support/res/values-in/strings.xml
+++ b/car-broadcastradio-support/res/values-in/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stasiun"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favorit"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-is/strings.xml b/car-broadcastradio-support/res/values-is/strings.xml
index 1a2074a..8c0deab 100644
--- a/car-broadcastradio-support/res/values-is/strings.xml
+++ b/car-broadcastradio-support/res/values-is/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stöðvar"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Eftirlæti"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-it/strings.xml b/car-broadcastradio-support/res/values-it/strings.xml
index eef0a6e..82e211b 100644
--- a/car-broadcastradio-support/res/values-it/strings.xml
+++ b/car-broadcastradio-support/res/values-it/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stazioni"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Preferiti"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-iw/strings.xml b/car-broadcastradio-support/res/values-iw/strings.xml
index e990b26..fe609eb 100644
--- a/car-broadcastradio-support/res/values-iw/strings.xml
+++ b/car-broadcastradio-support/res/values-iw/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB ‏(Digital Audio Broadcasting)"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"תחנות"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"מועדפים"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ja/strings.xml b/car-broadcastradio-support/res/values-ja/strings.xml
index 21582d0..9a76eb1 100644
--- a/car-broadcastradio-support/res/values-ja/strings.xml
+++ b/car-broadcastradio-support/res/values-ja/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ステーション"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"お気に入り"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ka/strings.xml b/car-broadcastradio-support/res/values-ka/strings.xml
index 2f26b0a..913b7dc 100644
--- a/car-broadcastradio-support/res/values-ka/strings.xml
+++ b/car-broadcastradio-support/res/values-ka/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"ციფრული აუდიომაუწყებლობა"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"სადგურები"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"რჩეულები"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-kk/strings.xml b/car-broadcastradio-support/res/values-kk/strings.xml
index 740afce..bad0bdf 100644
--- a/car-broadcastradio-support/res/values-kk/strings.xml
+++ b/car-broadcastradio-support/res/values-kk/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Станциялар"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Таңдаулылар"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-km/strings.xml b/car-broadcastradio-support/res/values-km/strings.xml
index be70353..c2ff14c 100644
--- a/car-broadcastradio-support/res/values-km/strings.xml
+++ b/car-broadcastradio-support/res/values-km/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB​"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ស្ថានីយ"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"សំណព្វ"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-kn/strings.xml b/car-broadcastradio-support/res/values-kn/strings.xml
index 9dadc54..a5b05f8 100644
--- a/car-broadcastradio-support/res/values-kn/strings.xml
+++ b/car-broadcastradio-support/res/values-kn/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"ಬೆಳಿಗ್ಗೆ"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ಸ್ಟೇಶನ್‌ಗಳು"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"ಮೆಚ್ಚಿನವುಗಳು"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ko/strings.xml b/car-broadcastradio-support/res/values-ko/strings.xml
index abebfa4..2e28882 100644
--- a/car-broadcastradio-support/res/values-ko/strings.xml
+++ b/car-broadcastradio-support/res/values-ko/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"채널"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"즐겨찾기"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ky/strings.xml b/car-broadcastradio-support/res/values-ky/strings.xml
index 4640491..f63231d 100644
--- a/car-broadcastradio-support/res/values-ky/strings.xml
+++ b/car-broadcastradio-support/res/values-ky/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Станциялар"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Сүйүктүүлөр"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-lo/strings.xml b/car-broadcastradio-support/res/values-lo/strings.xml
index fbfe882..b23529f 100644
--- a/car-broadcastradio-support/res/values-lo/strings.xml
+++ b/car-broadcastradio-support/res/values-lo/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ສະຖານີ"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"ລາຍການທີ່ມັກ"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-lt/strings.xml b/car-broadcastradio-support/res/values-lt/strings.xml
index 6a68328..781b513 100644
--- a/car-broadcastradio-support/res/values-lt/strings.xml
+++ b/car-broadcastradio-support/res/values-lt/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stotys"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Mėgstamiausi"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-lv/strings.xml b/car-broadcastradio-support/res/values-lv/strings.xml
index 75db93a..ec95f03 100644
--- a/car-broadcastradio-support/res/values-lv/strings.xml
+++ b/car-broadcastradio-support/res/values-lv/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Programmas"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Izlase"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-mk/strings.xml b/car-broadcastradio-support/res/values-mk/strings.xml
index c7410af..cdb6c72 100644
--- a/car-broadcastradio-support/res/values-mk/strings.xml
+++ b/car-broadcastradio-support/res/values-mk/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Станици"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Омилени"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ml/strings.xml b/car-broadcastradio-support/res/values-ml/strings.xml
index 498bfd7..7a87940 100644
--- a/car-broadcastradio-support/res/values-ml/strings.xml
+++ b/car-broadcastradio-support/res/values-ml/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"രാവിലെ"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"സ്റ്റേഷനുകള്‍"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"പ്രിയപ്പെട്ടവ"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-mn/strings.xml b/car-broadcastradio-support/res/values-mn/strings.xml
index 3deca28..f3c9501 100644
--- a/car-broadcastradio-support/res/values-mn/strings.xml
+++ b/car-broadcastradio-support/res/values-mn/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"ӨГЛӨӨ"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Станцууд"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Дуртай"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-mr/strings.xml b/car-broadcastradio-support/res/values-mr/strings.xml
index 0fc95e4..ba960ac 100644
--- a/car-broadcastradio-support/res/values-mr/strings.xml
+++ b/car-broadcastradio-support/res/values-mr/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"स्टेशन"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"आवडीचे"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ms/strings.xml b/car-broadcastradio-support/res/values-ms/strings.xml
index 257cb5e..30cea70 100644
--- a/car-broadcastradio-support/res/values-ms/strings.xml
+++ b/car-broadcastradio-support/res/values-ms/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stesen"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Kegemaran"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-my/strings.xml b/car-broadcastradio-support/res/values-my/strings.xml
index 692d19d..d0fa5db 100644
--- a/car-broadcastradio-support/res/values-my/strings.xml
+++ b/car-broadcastradio-support/res/values-my/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"အသံလွှင့်ရုံများ"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"အသုံးအများဆုံးများ"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-nb/strings.xml b/car-broadcastradio-support/res/values-nb/strings.xml
index 79544cb..cfb84f6 100644
--- a/car-broadcastradio-support/res/values-nb/strings.xml
+++ b/car-broadcastradio-support/res/values-nb/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stasjoner"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoritter"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ne/strings.xml b/car-broadcastradio-support/res/values-ne/strings.xml
index ee1887b..d0d05c6 100644
--- a/car-broadcastradio-support/res/values-ne/strings.xml
+++ b/car-broadcastradio-support/res/values-ne/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"पूर्वाह्न"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"एफएम"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"स्टेसनहरू"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"मन पर्ने कार्यक्रमहरू"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-nl/strings.xml b/car-broadcastradio-support/res/values-nl/strings.xml
index 2f1a5e1..8d63071 100644
--- a/car-broadcastradio-support/res/values-nl/strings.xml
+++ b/car-broadcastradio-support/res/values-nl/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Zenders"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favorieten"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-or/strings.xml b/car-broadcastradio-support/res/values-or/strings.xml
index 2a149ad..7aa70d8 100644
--- a/car-broadcastradio-support/res/values-or/strings.xml
+++ b/car-broadcastradio-support/res/values-or/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ଷ୍ଟେଶନ୍"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"ପସନ୍ଦଦାର୍"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-pa/strings.xml b/car-broadcastradio-support/res/values-pa/strings.xml
index 5f7ce46..9827f20 100644
--- a/car-broadcastradio-support/res/values-pa/strings.xml
+++ b/car-broadcastradio-support/res/values-pa/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"ਸਟੇਸ਼ਨ"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"ਮਨਪਸੰਦ"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-pl/strings.xml b/car-broadcastradio-support/res/values-pl/strings.xml
index 1fc4d67..5467bbb 100644
--- a/car-broadcastradio-support/res/values-pl/strings.xml
+++ b/car-broadcastradio-support/res/values-pl/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stacje"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Ulubione"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-pt-rPT/strings.xml b/car-broadcastradio-support/res/values-pt-rPT/strings.xml
index a4b120a..9363e36 100644
--- a/car-broadcastradio-support/res/values-pt-rPT/strings.xml
+++ b/car-broadcastradio-support/res/values-pt-rPT/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Estações"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoritas"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-pt/strings.xml b/car-broadcastradio-support/res/values-pt/strings.xml
index 9d72f03..3cfc194 100644
--- a/car-broadcastradio-support/res/values-pt/strings.xml
+++ b/car-broadcastradio-support/res/values-pt/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Estações"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoritos"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ro/strings.xml b/car-broadcastradio-support/res/values-ro/strings.xml
index 7ab0b50..4b84fba 100644
--- a/car-broadcastradio-support/res/values-ro/strings.xml
+++ b/car-broadcastradio-support/res/values-ro/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Posturi"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Preferate"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ru/strings.xml b/car-broadcastradio-support/res/values-ru/strings.xml
index 2fed0f4..8181729 100644
--- a/car-broadcastradio-support/res/values-ru/strings.xml
+++ b/car-broadcastradio-support/res/values-ru/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"Цифровое радио"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Радиостанции"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Избранное"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-si/strings.xml b/car-broadcastradio-support/res/values-si/strings.xml
index 53f72c6..3256934 100644
--- a/car-broadcastradio-support/res/values-si/strings.xml
+++ b/car-broadcastradio-support/res/values-si/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"නාලිකා"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"ප්‍රියතම"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-sk/strings.xml b/car-broadcastradio-support/res/values-sk/strings.xml
index fcdab92..33da914 100644
--- a/car-broadcastradio-support/res/values-sk/strings.xml
+++ b/car-broadcastradio-support/res/values-sk/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stanice"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Obľúbené"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-sl/strings.xml b/car-broadcastradio-support/res/values-sl/strings.xml
index f0d3770..b1437e1 100644
--- a/car-broadcastradio-support/res/values-sl/strings.xml
+++ b/car-broadcastradio-support/res/values-sl/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Postaje"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Priljubljene"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-sq/strings.xml b/car-broadcastradio-support/res/values-sq/strings.xml
index a4c1c95..6b251b7 100644
--- a/car-broadcastradio-support/res/values-sq/strings.xml
+++ b/car-broadcastradio-support/res/values-sq/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stacionet"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Të preferuarat"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-sr/strings.xml b/car-broadcastradio-support/res/values-sr/strings.xml
index 8321b8c..86adbc5 100644
--- a/car-broadcastradio-support/res/values-sr/strings.xml
+++ b/car-broadcastradio-support/res/values-sr/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Станице"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Омиљено"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-sv/strings.xml b/car-broadcastradio-support/res/values-sv/strings.xml
index 5475b03..0f73e77 100644
--- a/car-broadcastradio-support/res/values-sv/strings.xml
+++ b/car-broadcastradio-support/res/values-sv/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Kanaler"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoriter"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-sw/strings.xml b/car-broadcastradio-support/res/values-sw/strings.xml
index 879df73..c44c8c7 100644
--- a/car-broadcastradio-support/res/values-sw/strings.xml
+++ b/car-broadcastradio-support/res/values-sw/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Stesheni"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Unavyopenda"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ta/strings.xml b/car-broadcastradio-support/res/values-ta/strings.xml
index 6b91b37..c98ae9f 100644
--- a/car-broadcastradio-support/res/values-ta/strings.xml
+++ b/car-broadcastradio-support/res/values-ta/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"நிலையங்கள்"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"பிடித்தவை"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-te/strings.xml b/car-broadcastradio-support/res/values-te/strings.xml
index 864e222..29d59e7 100644
--- a/car-broadcastradio-support/res/values-te/strings.xml
+++ b/car-broadcastradio-support/res/values-te/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"స్టేషన్‌లు"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"ఇష్టమైనవి"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-th/strings.xml b/car-broadcastradio-support/res/values-th/strings.xml
index 0370e76..fa486a6 100644
--- a/car-broadcastradio-support/res/values-th/strings.xml
+++ b/car-broadcastradio-support/res/values-th/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"สถานี"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"รายการโปรด"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-tl/strings.xml b/car-broadcastradio-support/res/values-tl/strings.xml
index 932e133..7ca02db 100644
--- a/car-broadcastradio-support/res/values-tl/strings.xml
+++ b/car-broadcastradio-support/res/values-tl/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Mga Istasyon"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Mga Paborito"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-tr/strings.xml b/car-broadcastradio-support/res/values-tr/strings.xml
index 136387f..8dee49d 100644
--- a/car-broadcastradio-support/res/values-tr/strings.xml
+++ b/car-broadcastradio-support/res/values-tr/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"İstasyonlar"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Favoriler"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-uk/strings.xml b/car-broadcastradio-support/res/values-uk/strings.xml
index cdd259a..047f1e6 100644
--- a/car-broadcastradio-support/res/values-uk/strings.xml
+++ b/car-broadcastradio-support/res/values-uk/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Станції"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Вибране"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-ur/strings.xml b/car-broadcastradio-support/res/values-ur/strings.xml
index a511d89..55a4e0b 100644
--- a/car-broadcastradio-support/res/values-ur/strings.xml
+++ b/car-broadcastradio-support/res/values-ur/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"اسٹیشنز"</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..476d5b4 100644
--- a/car-broadcastradio-support/res/values-uz/strings.xml
+++ b/car-broadcastradio-support/res/values-uz/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"Raqamli radio"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Radiostansiyalar"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Saralanganlar"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-vi/strings.xml b/car-broadcastradio-support/res/values-vi/strings.xml
index 067c179..3126047 100644
--- a/car-broadcastradio-support/res/values-vi/strings.xml
+++ b/car-broadcastradio-support/res/values-vi/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"Phát thanh kỹ thuật số"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Đài"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Đài yêu thích"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-zh-rCN/strings.xml b/car-broadcastradio-support/res/values-zh-rCN/strings.xml
index 1789a58..14ac643 100644
--- a/car-broadcastradio-support/res/values-zh-rCN/strings.xml
+++ b/car-broadcastradio-support/res/values-zh-rCN/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"电台"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"收藏"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-zh-rHK/strings.xml b/car-broadcastradio-support/res/values-zh-rHK/strings.xml
index bb596c2..ae16220 100644
--- a/car-broadcastradio-support/res/values-zh-rHK/strings.xml
+++ b/car-broadcastradio-support/res/values-zh-rHK/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"數碼聲音廣播"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"電台"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"收藏"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-zh-rTW/strings.xml b/car-broadcastradio-support/res/values-zh-rTW/strings.xml
index 0ba44bc..ae16220 100644
--- a/car-broadcastradio-support/res/values-zh-rTW/strings.xml
+++ b/car-broadcastradio-support/res/values-zh-rTW/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"電台"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"收藏"</string>
 </resources>
diff --git a/car-broadcastradio-support/res/values-zu/strings.xml b/car-broadcastradio-support/res/values-zu/strings.xml
index dd5578b..e36e1b0 100644
--- a/car-broadcastradio-support/res/values-zu/strings.xml
+++ b/car-broadcastradio-support/res/values-zu/strings.xml
@@ -18,7 +18,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="radio_am_text" msgid="571324921988967868">"AM"</string>
     <string name="radio_fm_text" msgid="1973045042281933494">"FM"</string>
-    <string name="radio_dab_text" msgid="8456449462266648979">"I-DAB"</string>
+    <!-- no translation found for radio_dab_text (8456449462266648979) -->
+    <skip />
     <string name="program_list_text" msgid="4414150317304422313">"Iziteshi"</string>
     <string name="favorites_list_text" msgid="7829827713977109155">"Izintandokazi"</string>
 </resources>
diff --git a/car-chassis-lib/res/layout-port/chassis_toolbar.xml b/car-chassis-lib/res/layout-port/chassis_toolbar.xml
deleted file mode 100644
index 48cacb3..0000000
--- a/car-chassis-lib/res/layout-port/chassis_toolbar.xml
+++ /dev/null
@@ -1,105 +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:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    style="@style/ChassisToolbarContainerStyle">
-
-    <androidx.constraintlayout.widget.Guideline
-        android:id="@+id/row_separator_guideline"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:orientation="horizontal"
-        app:layout_constraintGuide_begin="@dimen/chassis_toolbar_first_row_height"/>
-
-    <View
-        android:id="@+id/row_separator"
-        style="@style/ChassisToolbarRowSeparatorStyle"
-        app:layout_constraintTop_toBottomOf="@id/row_separator_guideline"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
-
-    <FrameLayout
-        android:id="@+id/nav_icon_container"
-        style="@style/ChassisToolbarNavIconContainerStyle"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintStart_toStartOf="parent">
-        <ImageView
-            android:id="@+id/nav_icon"
-            style="@style/ChassisToolbarNavIconStyle"/>
-        <ImageView
-            android:id="@+id/logo"
-            style="@style/ChassisToolbarLogoStyle"/>
-    </FrameLayout>
-
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        style="@style/ChassisToolbarTitleStyle"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/buttons_container"/>
-
-    <com.android.car.chassis.SearchView
-        android:id="@+id/search_view"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:visibility="gone"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/buttons_container"/>
-
-    <FrameLayout
-        android:id="@+id/custom_view_container"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/buttons_container"/>
-
-    <LinearLayout
-        android:id="@+id/buttons_container"
-        android:layout_width="wrap_content"
-        android:layout_height="0dp"
-        android:orientation="horizontal"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintEnd_toEndOf="parent"/>
-
-    <com.android.car.chassis.TabLayout
-        android:id="@+id/tabs"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/chassis_toolbar_second_row_height"
-        app:layout_constraintTop_toBottomOf="@id/row_separator"
-        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"/>
-
-    <View
-        android:id="@+id/bottom_styleable"
-        style="@style/ChassisToolbarBottomStyle"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-chassis-lib/res/layout/chassis_search_view.xml b/car-chassis-lib/res/layout/chassis_search_view.xml
deleted file mode 100644
index e9942a7..0000000
--- a/car-chassis-lib/res/layout/chassis_search_view.xml
+++ /dev/null
@@ -1,57 +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.
-  -->
-
-<merge
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-
-    <ImageView
-        android:id="@+id/icon"
-        android:layout_width="@dimen/touch_target_size"
-        android:layout_height="@dimen/touch_target_size"
-        android:src="@drawable/ic_search"
-        android:scaleType="center"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"/>
-
-    <EditText
-        android:id="@+id/search_bar"
-        android:layout_height="match_parent"
-        android:layout_width="match_parent"
-        android:paddingLeft="@dimen/touch_target_size"
-        android:hint="@string/chassis_default_search_hint"
-        android:textColorHint="@color/search_hint_text_color"
-        android:inputType="text"
-        android:singleLine="true"
-        android:imeOptions="actionDone"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
-
-    <ImageView
-        android:id="@+id/search_close"
-        android:layout_width="@dimen/touch_target_size"
-        android:layout_height="@dimen/touch_target_size"
-        android:background="@drawable/chassis_toolbar_button_background"
-        android:src="@drawable/ic_close"
-        android:scaleType="center"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
-</merge>
diff --git a/car-chassis-lib/res/layout/chassis_tab_item.xml b/car-chassis-lib/res/layout/chassis_tab_item.xml
deleted file mode 100644
index dd2c97f..0000000
--- a/car-chassis-lib/res/layout/chassis_tab_item.xml
+++ /dev/null
@@ -1,26 +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.
-  -->
-
-<merge
-    xmlns:android="http://schemas.android.com/apk/res/android">
-    <ImageView
-        android:id="@+id/chassis_tab_item_icon"
-        style="@style/ChassisTabItemIcon"/>
-    <TextView
-        android:id="@+id/chassis_tab_item_text"
-        style="@style/ChassisTabItemText"/>
-</merge>
diff --git a/car-chassis-lib/res/layout/chassis_toolbar.xml b/car-chassis-lib/res/layout/chassis_toolbar.xml
deleted file mode 100644
index 56559f7..0000000
--- a/car-chassis-lib/res/layout/chassis_toolbar.xml
+++ /dev/null
@@ -1,96 +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:layout_width="match_parent"
-    android:layout_height="@dimen/chassis_toolbar_first_row_height"
-    style="@style/ChassisToolbarContainerStyle">
-
-    <FrameLayout
-        android:id="@+id/nav_icon_container"
-        style="@style/ChassisToolbarNavIconContainerStyle"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"
-        app:layout_constraintStart_toStartOf="parent">
-        <ImageView
-            android:id="@+id/nav_icon"
-            style="@style/ChassisToolbarNavIconStyle"/>
-        <ImageView
-            android:id="@+id/logo"
-            style="@style/ChassisToolbarLogoStyle"/>
-    </FrameLayout>
-
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        style="@style/ChassisToolbarTitleStyle"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/buttons_container"/>
-
-    <com.android.car.chassis.TabLayout
-        android:id="@+id/tabs"
-        android:layout_width="wrap_content"
-        android:layout_height="0dp"
-        android:layout_marginEnd="@dimen/chassis_toolbar_custom_button_margin"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/buttons_container"
-        app:layout_constraintHorizontal_bias="0.0"
-        app:layout_constrainedWidth="true"/>
-
-    <FrameLayout
-        android:id="@+id/custom_view_container"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/buttons_container"/>
-
-    <LinearLayout
-        android:id="@+id/buttons_container"
-        android:layout_width="wrap_content"
-        android:layout_height="0dp"
-        android:orientation="horizontal"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"
-        app:layout_constraintEnd_toEndOf="parent"/>
-
-    <com.android.car.chassis.SearchView
-        android:id="@+id/search_view"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:visibility="gone"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
-        app:layout_constraintEnd_toStartOf="@id/buttons_container"/>
-
-    <View
-        android:id="@+id/bottom_styleable"
-        style="@style/ChassisToolbarBottomStyle"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"/>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-chassis-lib/res/layout/chassis_toolbar_search_button.xml b/car-chassis-lib/res/layout/chassis_toolbar_search_button.xml
deleted file mode 100644
index 91afe95..0000000
--- a/car-chassis-lib/res/layout/chassis_toolbar_search_button.xml
+++ /dev/null
@@ -1,24 +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.
--->
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/search"
-    android:layout_width="@dimen/touch_target_size"
-    android:layout_height="@dimen/touch_target_size"
-    android:src="@drawable/ic_search"
-    android:scaleType="center"
-    android:background="@drawable/chassis_toolbar_button_background"/>
diff --git a/car-chassis-lib/res/values-port/dimens.xml b/car-chassis-lib/res/values-port/dimens.xml
deleted file mode 100644
index d91a195..0000000
--- a/car-chassis-lib/res/values-port/dimens.xml
+++ /dev/null
@@ -1,19 +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>
-    <dimen name="chassis_toolbar_second_row_height">@*android:dimen/car_app_bar_height</dimen>
-</resources>
diff --git a/car-chassis-lib/res/values/attrs.xml b/car-chassis-lib/res/values/attrs.xml
deleted file mode 100644
index 5a49a20..0000000
--- a/car-chassis-lib/res/values/attrs.xml
+++ /dev/null
@@ -1,32 +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>
-    <declare-styleable name="ChassisToolbar">
-        <!-- The title of the toolbar, only displayed in certain conditions -->
-        <attr name="title" format="string"/>
-        <!-- The logo drawable for the toolbar. Appears when there's no back/close button shown -->
-        <attr name="logo" format="reference"/>
-        <!-- The hint for the search bar in the toolbar -->
-        <attr name="searchHint" format="string"/>
-        <!-- The buttons to display, as an array of layout ids. Use @layout/chassis_toolbar_search_button and @layout/chassis_toolbar_settings_button for the search and settings buttons -->
-        <attr name="buttons" format="reference"/>
-        <!-- Whether or not to show the custom buttons while searching. If using chassis_toolbar_search_button, or any other layout with a view with the id of "search", it will always be hidden. -->
-        <attr name="showButtonsWhileSearching" format="boolean"/>
-    </declare-styleable>
-
-    <!-- Theme attribute to specifying a default style for all chassisToolbars -->
-    <attr name="chassisToolbarStyle" format="reference"/>
-</resources>
diff --git a/car-chassis-lib/res/values/colors.xml b/car-chassis-lib/res/values/colors.xml
deleted file mode 100644
index 7c06fa2..0000000
--- a/car-chassis-lib/res/values/colors.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <color name="primary_text_color">#FFFFFFFF</color>
-    <color name="secondary_text_color">#90FFFFFF</color>
-    <color name="search_hint_text_color">#33FFFFFF</color>
-
-    <color name="toolbar_background_color">#E0000000</color>
-
-    <color name="chassis_tab_selected_color">@color/chassis_tab_selected_color_light</color>
-    <color name="chassis_tab_selected_color_dark">#E2FFFFFF</color>
-    <color name="chassis_tab_selected_color_light">#FFFFFFFF</color>
-    <color name="chassis_tab_unselected_color">@color/chassis_tab_unselected_color_light</color>
-    <color name="chassis_tab_unselected_color_dark">#80FFFFFF</color>
-    <color name="chassis_tab_unselected_color_light">#90FFFFFF</color>
-</resources>
diff --git a/car-chassis-lib/res/values/dimens.xml b/car-chassis-lib/res/values/dimens.xml
deleted file mode 100644
index 6bc61dd..0000000
--- a/car-chassis-lib/res/values/dimens.xml
+++ /dev/null
@@ -1,35 +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>
-    <dimen name="touch_target_size">@*android:dimen/car_touch_target_size</dimen>
-    <dimen name="primary_icon_size">@*android:dimen/car_primary_icon_size</dimen>
-    <item name="letter_spacing_body1" format="float" type="dimen">0.0</item>
-    <item name="letter_spacing_body3" format="float" type="dimen">0.0</item>
-
-    <!-- Tabs -->
-    <dimen name="chassis_tab_width">135dp</dimen>
-    <dimen name="chassis_tab_padding_x">12dp</dimen>
-    <dimen name="chassis_tab_icon_size">36dp</dimen>
-
-    <!-- Car toolbar -->
-    <dimen name="chassis_toolbar_view_nav_button_width">@*android:dimen/car_margin</dimen>
-    <dimen name="chassis_toolbar_first_row_height">@*android:dimen/car_app_bar_height</dimen>
-    <dimen name="chassis_toolbar_second_row_height">0dp</dimen>
-    <dimen name="chassis_toolbar_view_icon_size">@*android:dimen/car_primary_icon_size</dimen>
-    <dimen name="chassis_toolbar_view_title_margin_start">@*android:dimen/car_padding_2</dimen>
-    <dimen name="chassis_toolbar_custom_button_margin">@*android:dimen/car_padding_2</dimen>
-    <dimen name="chassis_toolbar_button_background_radius">48dp</dimen>
-</resources>
diff --git a/car-chassis-lib/res/values/strings.xml b/car-chassis-lib/res/values/strings.xml
deleted file mode 100644
index dd6770a..0000000
--- a/car-chassis-lib/res/values/strings.xml
+++ /dev/null
@@ -1,18 +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>
-    <string name="chassis_default_search_hint">Search&#8230;</string>
-</resources>
diff --git a/car-chassis-lib/res/values/styles.xml b/car-chassis-lib/res/values/styles.xml
deleted file mode 100644
index 5214d2d..0000000
--- a/car-chassis-lib/res/values/styles.xml
+++ /dev/null
@@ -1,96 +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">
-
-    <!-- Styles for chassis tab view -->
-    <style name="ChassisTabItemText">
-        <item name="android:textAppearance">@style/TextAppearance.Body3</item>
-        <item name="android:textColor">@color/chassis_tab_item_selector</item>
-        <item name="android:layout_width">@dimen/chassis_tab_width</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:singleLine">true</item>
-        <item name="android:gravity">center</item>
-    </style>
-
-    <style name="ChassisTabItemIcon">
-        <item name="android:layout_width">@dimen/chassis_tab_icon_size</item>
-        <item name="android:layout_height">@dimen/chassis_tab_icon_size</item>
-        <item name="android:scaleType">fitCenter</item>
-        <item name="android:tint">@color/chassis_tab_item_selector</item>
-        <item name="android:tintMode">src_in</item>
-    </style>
-
-    <style name="ChassisTabItemBackground">
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
-
-    <style name="ChassisToolbarTitleStyle">
-        <item name="android:textAppearance">@style/TextAppearance.Body1</item>
-        <item name="android:singleLine">true</item>
-        <item name="android:layout_marginStart">@dimen/chassis_toolbar_view_title_margin_start</item>
-    </style>
-
-    <style name="ChassisToolbarContainerStyle"/>
-
-    <style name="ChassisToolbarRowSeparatorStyle">
-        <item name="android:layout_width">match_parent</item>
-        <!-- can't use 0dp or the constraintlayout effect kicks in -->
-        <item name="android:layout_height">0.01dp</item>
-    </style>
-
-    <style name="ChassisToolbarBottomStyle">
-        <item name="android:layout_width">match_parent</item>
-        <!-- can't use 0dp or the constraintlayout effect kicks in -->
-        <item name="android:layout_height">0.01dp</item>
-    </style>
-
-    <style name="ChassisToolbarNavIconContainerStyle">
-        <item name="android:layout_width">@dimen/chassis_toolbar_view_nav_button_width</item>
-        <item name="android:layout_height">0dp</item>
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
-
-    <style name="ChassisToolbarNavIconStyle">
-        <item name="android:layout_width">@dimen/chassis_toolbar_view_icon_size</item>
-        <item name="android:layout_height">@dimen/chassis_toolbar_view_icon_size</item>
-        <item name="android:layout_gravity">center</item>
-        <item name="android:src">@drawable/ic_arrow_back</item>
-        <item name="android:scaleType">fitXY</item>
-    </style>
-
-    <style name="ChassisToolbarLogoStyle">
-        <item name="android:layout_width">@dimen/chassis_toolbar_view_icon_size</item>
-        <item name="android:layout_height">@dimen/chassis_toolbar_view_icon_size</item>
-        <item name="android:layout_gravity">center</item>
-        <item name="android:scaleType">fitXY</item>
-    </style>
-
-    <style name="TextAppearance">
-        <item name="android:fontFamily">roboto-regular</item>
-        <item name="android:textColor">@color/primary_text_color</item>
-    </style>
-
-    <style name="TextAppearance.Body1" parent="TextAppearance">
-        <item name="android:textSize">32sp</item>
-        <item name="android:letterSpacing">@dimen/letter_spacing_body1</item>
-    </style>
-
-    <style name="TextAppearance.Body3" parent="TextAppearance">
-        <item name="android:textSize">24sp</item>
-        <item name="android:letterSpacing">@dimen/letter_spacing_body3</item>
-    </style>
-
-</resources>
diff --git a/car-chassis-lib/res/values/values.xml b/car-chassis-lib/res/values/values.xml
deleted file mode 100644
index ee9b403..0000000
--- a/car-chassis-lib/res/values/values.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>
-    <bool name="chassis_tab_flexible_layout">false</bool>
-    <item name="chassis_tab_item_layout" type="layout">@layout/chassis_tab_item</item>
-</resources>
diff --git a/car-chassis-lib/src/com/android/car/chassis/Toolbar.java b/car-chassis-lib/src/com/android/car/chassis/Toolbar.java
deleted file mode 100644
index 47ab0c2..0000000
--- a/car-chassis-lib/src/com/android/car/chassis/Toolbar.java
+++ /dev/null
@@ -1,406 +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.chassis;
-
-import android.annotation.StringRes;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.function.Consumer;
-
-/**
- * A toolbar for Android Automotive OS apps.
- *
- * This isn't a toolbar in the android framework sense, it's merely a custom view that can be
- * added to a layout. (You can't call
- * {@link android.app.Activity#setActionBar(android.widget.Toolbar)} with it)
- *
- * The toolbar supports a navigation button, title, tabs, search, and custom buttons.
- */
-public class Toolbar extends FrameLayout {
-
-    /** Enum of states the toolbar can be in. Controls what elements of the toolbar are displayed */
-    public enum State {
-        /**
-         * In the HOME state, the logo will be displayed if there is one, and no navigation icon
-         * will be displayed. The tab bar will be visible. The title will be displayed if there
-         * is space. Custom buttons will be displayed.
-         */
-        HOME,
-        /**
-         * In the SUBPAGE state, the logo will be replaced with a back button, the tab bar won't
-         * be visible. The title and custom buttons will be displayed.
-         */
-        SUBPAGE,
-        /**
-         * In the SUBPAGE_CUSTOM state, everything is the same as SUBPAGE except the title will
-         * be hidden and the custom view will be shown.
-         */
-        SUBPAGE_CUSTOM,
-        /**
-         * In the SEARCH state, only the back button and the search bar will be visible.
-         */
-        SEARCH,
-    }
-
-    private ImageView mNavIcon;
-    private ImageView mLogo;
-    private ViewGroup mNavIconContainer;
-    private TextView mTitle;
-    private TabLayout mTabLayout;
-    private LinearLayout mButtonsContainer;
-    private FrameLayout mCustomViewContainer;
-    private Set<Listener> mListeners = new HashSet<>();
-    private SearchView mSearchView;
-    private boolean mHasLogo = false;
-    private int[] mCurrentButtons;
-    private boolean mShowButtonsWhileSearching;
-    private View mSearchButton;
-    private State mState = State.HOME;
-
-    public Toolbar(Context context) {
-        this(context, null);
-    }
-
-    public Toolbar(Context context, AttributeSet attrs) {
-        this(context, attrs, R.attr.chassisToolbarStyle);
-    }
-
-    public Toolbar(Context context, AttributeSet attrs, int defStyleAttr) {
-        this(context, attrs, defStyleAttr, 0);
-    }
-
-    public Toolbar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-
-        LayoutInflater inflater = (LayoutInflater) context
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        inflater.inflate(R.layout.chassis_toolbar, this, true);
-
-        mTabLayout = requireViewById(R.id.tabs);
-        mNavIcon = requireViewById(R.id.nav_icon);
-        mLogo = requireViewById(R.id.logo);
-        mNavIconContainer = requireViewById(R.id.nav_icon_container);
-        mButtonsContainer = requireViewById(R.id.buttons_container);
-        mTitle = requireViewById(R.id.title);
-        mSearchView = requireViewById(R.id.search_view);
-        mCustomViewContainer = requireViewById(R.id.custom_view_container);
-
-        TypedArray a = context.obtainStyledAttributes(
-                attrs, R.styleable.ChassisToolbar, defStyleAttr, defStyleRes);
-
-        mTitle.setText(a.getString(R.styleable.ChassisToolbar_title));
-        setLogo(a.getResourceId(R.styleable.ChassisToolbar_logo, 0));
-        setButtons(a.getResourceId(R.styleable.ChassisToolbar_buttons, 0));
-        mShowButtonsWhileSearching = a.getBoolean(
-                R.styleable.ChassisToolbar_showButtonsWhileSearching, false);
-        String searchHint = a.getString(R.styleable.ChassisToolbar_searchHint);
-        if (searchHint != null) {
-            setSearchHint(searchHint);
-        }
-
-        a.recycle();
-
-        // If an android:background attribute wasn't given, set the default one
-        TypedArray viewAttributes = context.obtainStyledAttributes(
-                attrs, com.android.internal.R.styleable.View, defStyleAttr, defStyleRes);
-        if (viewAttributes.getDrawable(com.android.internal.R.styleable.View_background) == null) {
-            setBackground(context.getDrawable(R.color.toolbar_background_color));
-        }
-
-        mTabLayout.addListener(new TabLayout.Listener() {
-            @Override
-            public void onTabSelected(TabLayout.Tab tab) {
-                forEachListener(listener -> listener.onTabSelected(tab));
-            }
-        });
-    }
-
-    /**
-     * Sets the title of the toolbar to a string resource.
-     *
-     * The title may not always be shown, for example in landscape with tabs.
-     */
-    public void setTitle(@StringRes int title) {
-        mTitle.setText(title);
-    }
-
-    /**
-     * Sets the title of the toolbar to a CharSequence.
-     *
-     * The title may not always be shown, for example in landscape with tabs.
-     */
-    public void setTitle(CharSequence title) {
-        mTitle.setText(title);
-    }
-
-    /**
-     * Gets the {@link TabLayout} for this toolbar.
-     */
-    public TabLayout getTabLayout() {
-        return mTabLayout;
-    }
-
-    /**
-     * Adds a tab to this toolbar. You can listen for when it is selected via
-     * {@link #addListener(Listener)}.
-     */
-    public void addTab(TabLayout.Tab tab) {
-        mTabLayout.addTab(tab);
-    }
-
-    /**
-     * Gets a tab added to this toolbar. See
-     * {@link #addTab(TabLayout.Tab)}.
-     */
-    public TabLayout.Tab getTab(int position) {
-        return mTabLayout.get(position);
-    }
-
-    /**
-     * Selects a tab added to this toolbar. See
-     * {@link #addTab(TabLayout.Tab)}.
-     */
-    public void selectTab(int position) {
-        mTabLayout.selectTab(position);
-    }
-
-    /**
-     * Sets the logo to display in this toolbar.
-     * Will not be displayed if a navigation icon is currently being displayed.
-     */
-    public void setLogo(int resId) {
-        if (resId != 0) {
-            mLogo.setImageResource(resId);
-            mHasLogo = true;
-        } else {
-            mHasLogo = false;
-        }
-        setState(mState);
-    }
-
-    /**
-     * Sets the hint for the search bar.
-     */
-    public void setSearchHint(int resId) {
-        mSearchView.setHint(resId);
-    }
-
-    /**
-     * Sets the hint for the search bar.
-     */
-    public void setSearchHint(CharSequence hint) {
-        mSearchView.setHint(hint);
-    }
-
-    /**
-     * Sets the buttons to be shown. Click events for these buttons will be received in
-     * {@link Listener#onCustomButtonPressed(View)}.
-     *
-     * Buttons are encouraged to use @drawable/chassis_toolbar_button_background as their
-     * background. In the default implementation it's a ripple that is sized appropriately to fit
-     * the toolbar.
-     *
-     * R.layout.chassis_toolbar_search_button can be used to add a search button, which will have an
-     * id of R.id.search in {@link Listener#onCustomButtonPressed(View)} callback.
-     *
-     * R.layout.chassis_toolbar_settings_button can be used to add a search button, which will have
-     * an id of R.id.settings in {@link Listener#onCustomButtonPressed(View)} callback.
-     *
-     * @param buttons An array of layout ids specifying the buttons to show. Toolbar will keep
-     *                a reference to this array, so don't modify it afterwards.
-     */
-    public void setButtons(@Nullable int[] buttons) {
-        if (!Arrays.equals(buttons, mCurrentButtons)) {
-            mButtonsContainer.removeAllViews();
-
-            if (buttons != null) {
-                LayoutInflater inflater = (LayoutInflater) getContext()
-                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
-                for (int button : buttons) {
-                    View v = inflater.inflate(button, mButtonsContainer, false);
-                    mButtonsContainer.addView(v);
-
-                    setupCustomButton(v);
-                }
-            }
-
-            mSearchButton = mButtonsContainer.findViewById(R.id.search);
-            mCurrentButtons = buttons;
-            setState(mState);
-        }
-    }
-
-    private void setButtons(TypedArray buttons) {
-        int[] layouts = new int[buttons.length()];
-        for (int i = 0; i < buttons.length(); ++i) {
-            layouts[i] = buttons.getResourceId(i, 0);
-        }
-        setButtons(layouts);
-    }
-
-    /**
-     * Sets the buttons to be shown, based on an XML array of layouts. See
-     * {@link #setButtons(int[])} for more info.
-     *
-     * @param arrayId A resource id of an array of layouts.
-     */
-    public void setButtons(int arrayId) {
-        if (arrayId == 0) {
-            mButtonsContainer.removeAllViews();
-            mCurrentButtons = null;
-        } else {
-            setButtons(getContext().getResources().obtainTypedArray(arrayId));
-        }
-    }
-
-    private void setupCustomButton(View v) {
-        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) v.getLayoutParams();
-        lp.rightMargin = getContext().getResources().getDimensionPixelSize(
-                R.dimen.chassis_toolbar_custom_button_margin);
-        lp.leftMargin = lp.rightMargin;
-        lp.gravity = Gravity.CENTER_VERTICAL;
-
-        v.setOnClickListener(x -> forEachListener(listener -> listener.onCustomButtonPressed(x)));
-    }
-
-    /**
-     * Set whether or not to show the custom buttons while searching. Default false.
-     * Even if this is set to true, if there is a button with the id "search", such as the button
-     * added by R.layout.chassis_toolbar_search_button, that buttons will always be hidden.
-     */
-    public void setShowButtonsWhileSearching(boolean showButtons) {
-        mShowButtonsWhileSearching = showButtons;
-        setState(mState);
-    }
-
-    /**
-     * Sets the search query.
-     */
-    public void setSearchQuery(String query) {
-        mSearchView.setSearchQuery(query);
-    }
-
-    /**
-     * Sets a custom view to display, and sets the current state to {@link State#SUBPAGE_CUSTOM}.
-     *
-     * @param resId A layout id of the view to display.
-     * @return The inflated custom view.
-     */
-    public View setCustomView(int resId) {
-        mCustomViewContainer.removeAllViews();
-        LayoutInflater inflater = (LayoutInflater) getContext()
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        View v = inflater.inflate(resId, mCustomViewContainer, false);
-        mCustomViewContainer.addView(v);
-        setState(State.SUBPAGE_CUSTOM);
-        return v;
-    }
-
-    /**
-     * Sets the state of the toolbar. This will show/hide the appropriate elements of the toolbar
-     * for the desired state.
-     */
-    public void setState(State state) {
-        mState = state;
-
-        View.OnClickListener backClickListener = (v) -> forEachListener(Listener::onBack);
-        mNavIcon.setVisibility(state != State.HOME ? VISIBLE : INVISIBLE);
-        mNavIcon.setImageResource(state != State.HOME ? R.drawable.ic_arrow_back : 0);
-        mLogo.setVisibility(state == State.HOME && mHasLogo ? VISIBLE : INVISIBLE);
-        mNavIconContainer.setVisibility(state != State.HOME || mHasLogo ? VISIBLE : GONE);
-        mNavIconContainer.setClickable(state != State.HOME);
-        mNavIconContainer.setOnClickListener(state != State.HOME ? backClickListener : null);
-        mTitle.setVisibility(state == State.HOME || state == State.SUBPAGE ? VISIBLE : GONE);
-        mTabLayout.setVisibility(state == State.HOME ? VISIBLE : GONE);
-        mSearchView.setVisibility(state == State.SEARCH ? VISIBLE : GONE);
-        mButtonsContainer.setVisibility(state != State.SEARCH || mShowButtonsWhileSearching
-                ? VISIBLE : GONE);
-        if (mSearchButton != null) {
-            mSearchButton.setVisibility(state != State.SEARCH ? VISIBLE : GONE);
-        }
-        mCustomViewContainer.setVisibility(state == State.SUBPAGE_CUSTOM ? VISIBLE : GONE);
-        if (state != State.SUBPAGE_CUSTOM) {
-            mCustomViewContainer.removeAllViews();
-        }
-    }
-
-    /**
-     * Toolbar listener.
-     */
-    public interface Listener {
-        /**
-         * Invoked when the user selects an item from the tabs
-         */
-        default void onTabSelected(TabLayout.Tab item) {}
-
-        /**
-         * Invoked when the user clicks on the back button
-         */
-        default void onBack() {}
-
-        /**
-         * Invoked when the user submits a search query.
-         */
-        default void onSearch(String query) {}
-
-        /**
-         * Invoked when the user clicks on a custom button
-         * @param v The button that was clicked
-         */
-        default void onCustomButtonPressed(View v) {}
-    }
-
-    /**
-     * Adds a {@link Listener} to this toolbar.
-     */
-    public void addListener(Listener listener) {
-        mListeners.add(listener);
-        mSearchView.addToolbarListener(listener);
-    }
-
-    /**
-     * Removes a {@link Listener} from this toolbar.
-     */
-    public boolean removeListener(Listener listener) {
-        mSearchView.removeToolbarListener(listener);
-        return mListeners.remove(listener);
-    }
-
-    private void forEachListener(Consumer<Listener> callback) {
-        List<Listener> listenersCopy = new ArrayList<>(mListeners);
-        for (Listener listener : listenersCopy) {
-            callback.accept(listener);
-        }
-    }
-}
diff --git a/car-media-common/Android.mk b/car-media-common/Android.mk
index 11bab19..c5041c4 100644
--- a/car-media-common/Android.mk
+++ b/car-media-common/Android.mk
@@ -40,9 +40,6 @@
     car-arch-common
 
 LOCAL_STATIC_JAVA_LIBRARIES += \
-    car-media-common-glide-target \
-    car-media-common-gifdecoder-target \
-    car-media-common-disklrucache-target \
     androidx-constraintlayout_constraintlayout-solver
 
 LOCAL_USE_AAPT2 := true
diff --git a/car-media-common/res/values-af/strings.xml b/car-media-common/res/values-af/strings.xml
index c4efced..f75b467 100644
--- a/car-media-common/res/values-af/strings.xml
+++ b/car-media-common/res/values-af/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-am/strings.xml b/car-media-common/res/values-am/strings.xml
index 9888274..607ab45 100644
--- a/car-media-common/res/values-am/strings.xml
+++ b/car-media-common/res/values-am/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ar/strings.xml b/car-media-common/res/values-ar/strings.xml
index 609709e..d7a9a2c 100644
--- a/car-media-common/res/values-ar/strings.xml
+++ b/car-media-common/res/values-ar/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-as/strings.xml b/car-media-common/res/values-as/strings.xml
index 1513a5e..3bdbf06 100644
--- a/car-media-common/res/values-as/strings.xml
+++ b/car-media-common/res/values-as/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-az/strings.xml b/car-media-common/res/values-az/strings.xml
index 9e8a836..936d945 100644
--- a/car-media-common/res/values-az/strings.xml
+++ b/car-media-common/res/values-az/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..95bcfcc 100644
--- a/car-media-common/res/values-b+sr+Latn/strings.xml
+++ b/car-media-common/res/values-b+sr+Latn/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-be/strings.xml b/car-media-common/res/values-be/strings.xml
index 4a98eab..a1ddf1d 100644
--- a/car-media-common/res/values-be/strings.xml
+++ b/car-media-common/res/values-be/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-bg/strings.xml b/car-media-common/res/values-bg/strings.xml
index f595ed8..3895155 100644
--- a/car-media-common/res/values-bg/strings.xml
+++ b/car-media-common/res/values-bg/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-bn/strings.xml b/car-media-common/res/values-bn/strings.xml
index c7366d7..3fbbaa0 100644
--- a/car-media-common/res/values-bn/strings.xml
+++ b/car-media-common/res/values-bn/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-bs/strings.xml b/car-media-common/res/values-bs/strings.xml
index 60ea824..95bcfcc 100644
--- a/car-media-common/res/values-bs/strings.xml
+++ b/car-media-common/res/values-bs/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ca/strings.xml b/car-media-common/res/values-ca/strings.xml
index c672d9b..6f5c30c 100644
--- a/car-media-common/res/values-ca/strings.xml
+++ b/car-media-common/res/values-ca/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-cs/strings.xml b/car-media-common/res/values-cs/strings.xml
index dfcffe0..9609baf 100644
--- a/car-media-common/res/values-cs/strings.xml
+++ b/car-media-common/res/values-cs/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-da/strings.xml b/car-media-common/res/values-da/strings.xml
index 1640516..e62c850 100644
--- a/car-media-common/res/values-da/strings.xml
+++ b/car-media-common/res/values-da/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-de/strings.xml b/car-media-common/res/values-de/strings.xml
index 7bafae6..abec36e 100644
--- a/car-media-common/res/values-de/strings.xml
+++ b/car-media-common/res/values-de/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-el/strings.xml b/car-media-common/res/values-el/strings.xml
index 0b5de6d..99c9846 100644
--- a/car-media-common/res/values-el/strings.xml
+++ b/car-media-common/res/values-el/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..c2f2ef5 100644
--- a/car-media-common/res/values-en-rAU/strings.xml
+++ b/car-media-common/res/values-en-rAU/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..c2f2ef5 100644
--- a/car-media-common/res/values-en-rGB/strings.xml
+++ b/car-media-common/res/values-en-rGB/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..c2f2ef5 100644
--- a/car-media-common/res/values-en-rIN/strings.xml
+++ b/car-media-common/res/values-en-rIN/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..7faa6a0 100644
--- a/car-media-common/res/values-es-rUS/strings.xml
+++ b/car-media-common/res/values-es-rUS/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-es/strings.xml b/car-media-common/res/values-es/strings.xml
index 18ba657..7faa6a0 100644
--- a/car-media-common/res/values-es/strings.xml
+++ b/car-media-common/res/values-es/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-et/strings.xml b/car-media-common/res/values-et/strings.xml
index 8ca4cf2..e30d919 100644
--- a/car-media-common/res/values-et/strings.xml
+++ b/car-media-common/res/values-et/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-eu/strings.xml b/car-media-common/res/values-eu/strings.xml
index 896aa2c..6d836b1 100644
--- a/car-media-common/res/values-eu/strings.xml
+++ b/car-media-common/res/values-eu/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-fa/strings.xml b/car-media-common/res/values-fa/strings.xml
index 24bac8e..5daf357 100644
--- a/car-media-common/res/values-fa/strings.xml
+++ b/car-media-common/res/values-fa/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-fi/strings.xml b/car-media-common/res/values-fi/strings.xml
index 0fcaaf5..545bb78 100644
--- a/car-media-common/res/values-fi/strings.xml
+++ b/car-media-common/res/values-fi/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..ac3abaf 100644
--- a/car-media-common/res/values-fr-rCA/strings.xml
+++ b/car-media-common/res/values-fr-rCA/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-fr/strings.xml b/car-media-common/res/values-fr/strings.xml
index dfbc082..ac3abaf 100644
--- a/car-media-common/res/values-fr/strings.xml
+++ b/car-media-common/res/values-fr/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-gl/strings.xml b/car-media-common/res/values-gl/strings.xml
index 6971016..4e3b599 100644
--- a/car-media-common/res/values-gl/strings.xml
+++ b/car-media-common/res/values-gl/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-gu/strings.xml b/car-media-common/res/values-gu/strings.xml
index 569394f..48ccea5 100644
--- a/car-media-common/res/values-gu/strings.xml
+++ b/car-media-common/res/values-gu/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-hi/strings.xml b/car-media-common/res/values-hi/strings.xml
index f13088f..b4b9a92 100644
--- a/car-media-common/res/values-hi/strings.xml
+++ b/car-media-common/res/values-hi/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-hr/strings.xml b/car-media-common/res/values-hr/strings.xml
index 00e19d1..95065f6 100644
--- a/car-media-common/res/values-hr/strings.xml
+++ b/car-media-common/res/values-hr/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-hu/strings.xml b/car-media-common/res/values-hu/strings.xml
index 8631465..e346fe0 100644
--- a/car-media-common/res/values-hu/strings.xml
+++ b/car-media-common/res/values-hu/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-hy/strings.xml b/car-media-common/res/values-hy/strings.xml
index 197a067..c60039e 100644
--- a/car-media-common/res/values-hy/strings.xml
+++ b/car-media-common/res/values-hy/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-in/strings.xml b/car-media-common/res/values-in/strings.xml
index e331c0a..a7193d0 100644
--- a/car-media-common/res/values-in/strings.xml
+++ b/car-media-common/res/values-in/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-is/strings.xml b/car-media-common/res/values-is/strings.xml
index b26c4c6..ea45f41 100644
--- a/car-media-common/res/values-is/strings.xml
+++ b/car-media-common/res/values-is/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-it/strings.xml b/car-media-common/res/values-it/strings.xml
index bab7f0a..b965c9e 100644
--- a/car-media-common/res/values-it/strings.xml
+++ b/car-media-common/res/values-it/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-iw/strings.xml b/car-media-common/res/values-iw/strings.xml
index 9e12f85..be7d68f 100644
--- a/car-media-common/res/values-iw/strings.xml
+++ b/car-media-common/res/values-iw/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ja/strings.xml b/car-media-common/res/values-ja/strings.xml
index 8d46866..44ddb6d 100644
--- a/car-media-common/res/values-ja/strings.xml
+++ b/car-media-common/res/values-ja/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ka/strings.xml b/car-media-common/res/values-ka/strings.xml
index 1e467fe..3497af3 100644
--- a/car-media-common/res/values-ka/strings.xml
+++ b/car-media-common/res/values-ka/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-kk/strings.xml b/car-media-common/res/values-kk/strings.xml
index ec84f1a..1062bd6 100644
--- a/car-media-common/res/values-kk/strings.xml
+++ b/car-media-common/res/values-kk/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-km/strings.xml b/car-media-common/res/values-km/strings.xml
index a9320b1..2fd01f2 100644
--- a/car-media-common/res/values-km/strings.xml
+++ b/car-media-common/res/values-km/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-kn/strings.xml b/car-media-common/res/values-kn/strings.xml
index 4a02cfd..0ae31d6 100644
--- a/car-media-common/res/values-kn/strings.xml
+++ b/car-media-common/res/values-kn/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ko/strings.xml b/car-media-common/res/values-ko/strings.xml
index 568f6de..4e699e8 100644
--- a/car-media-common/res/values-ko/strings.xml
+++ b/car-media-common/res/values-ko/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ky/strings.xml b/car-media-common/res/values-ky/strings.xml
index 5dd1ccc..0ff7653 100644
--- a/car-media-common/res/values-ky/strings.xml
+++ b/car-media-common/res/values-ky/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-lo/strings.xml b/car-media-common/res/values-lo/strings.xml
index aee4892..98d9158 100644
--- a/car-media-common/res/values-lo/strings.xml
+++ b/car-media-common/res/values-lo/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-lt/strings.xml b/car-media-common/res/values-lt/strings.xml
index b4f1926..f79fe2e 100644
--- a/car-media-common/res/values-lt/strings.xml
+++ b/car-media-common/res/values-lt/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-lv/strings.xml b/car-media-common/res/values-lv/strings.xml
index d4b6044..7250c12 100644
--- a/car-media-common/res/values-lv/strings.xml
+++ b/car-media-common/res/values-lv/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-mk/strings.xml b/car-media-common/res/values-mk/strings.xml
index d46c551..d3bd5ec 100644
--- a/car-media-common/res/values-mk/strings.xml
+++ b/car-media-common/res/values-mk/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ml/strings.xml b/car-media-common/res/values-ml/strings.xml
index cd1743b..69c6099 100644
--- a/car-media-common/res/values-ml/strings.xml
+++ b/car-media-common/res/values-ml/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-mn/strings.xml b/car-media-common/res/values-mn/strings.xml
index 0cbec6a..9cb3ef0 100644
--- a/car-media-common/res/values-mn/strings.xml
+++ b/car-media-common/res/values-mn/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-mr/strings.xml b/car-media-common/res/values-mr/strings.xml
index 450fddd..6eb3270 100644
--- a/car-media-common/res/values-mr/strings.xml
+++ b/car-media-common/res/values-mr/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ms/strings.xml b/car-media-common/res/values-ms/strings.xml
index f5660bf..9fb0d07 100644
--- a/car-media-common/res/values-ms/strings.xml
+++ b/car-media-common/res/values-ms/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-my/strings.xml b/car-media-common/res/values-my/strings.xml
index e717f45..88e294e 100644
--- a/car-media-common/res/values-my/strings.xml
+++ b/car-media-common/res/values-my/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-nb/strings.xml b/car-media-common/res/values-nb/strings.xml
index b01654e..f3f6b18 100644
--- a/car-media-common/res/values-nb/strings.xml
+++ b/car-media-common/res/values-nb/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ne/strings.xml b/car-media-common/res/values-ne/strings.xml
index 8e2bf79..3e70c34 100644
--- a/car-media-common/res/values-ne/strings.xml
+++ b/car-media-common/res/values-ne/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-nl/strings.xml b/car-media-common/res/values-nl/strings.xml
index 8259676..d22668f 100644
--- a/car-media-common/res/values-nl/strings.xml
+++ b/car-media-common/res/values-nl/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-or/strings.xml b/car-media-common/res/values-or/strings.xml
index a714293..8be562e 100644
--- a/car-media-common/res/values-or/strings.xml
+++ b/car-media-common/res/values-or/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-pa/strings.xml b/car-media-common/res/values-pa/strings.xml
index e3a607b..d35b304 100644
--- a/car-media-common/res/values-pa/strings.xml
+++ b/car-media-common/res/values-pa/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-pl/strings.xml b/car-media-common/res/values-pl/strings.xml
index fd00ae5..b38f926 100644
--- a/car-media-common/res/values-pl/strings.xml
+++ b/car-media-common/res/values-pl/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..1ed6bf3 100644
--- a/car-media-common/res/values-pt-rPT/strings.xml
+++ b/car-media-common/res/values-pt-rPT/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-pt/strings.xml b/car-media-common/res/values-pt/strings.xml
index 1b39a7b..d0ff223 100644
--- a/car-media-common/res/values-pt/strings.xml
+++ b/car-media-common/res/values-pt/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ro/strings.xml b/car-media-common/res/values-ro/strings.xml
index 38c53cc..b667514 100644
--- a/car-media-common/res/values-ro/strings.xml
+++ b/car-media-common/res/values-ro/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ru/strings.xml b/car-media-common/res/values-ru/strings.xml
index 990650f..30d8ce1 100644
--- a/car-media-common/res/values-ru/strings.xml
+++ b/car-media-common/res/values-ru/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-si/strings.xml b/car-media-common/res/values-si/strings.xml
index 7da552b..4ecd5c7 100644
--- a/car-media-common/res/values-si/strings.xml
+++ b/car-media-common/res/values-si/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-sk/strings.xml b/car-media-common/res/values-sk/strings.xml
index d94bac4..7c84b8c 100644
--- a/car-media-common/res/values-sk/strings.xml
+++ b/car-media-common/res/values-sk/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-sl/strings.xml b/car-media-common/res/values-sl/strings.xml
index 683507c..e5a2fdd 100644
--- a/car-media-common/res/values-sl/strings.xml
+++ b/car-media-common/res/values-sl/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-sq/strings.xml b/car-media-common/res/values-sq/strings.xml
index 354b5ed..c27e915 100644
--- a/car-media-common/res/values-sq/strings.xml
+++ b/car-media-common/res/values-sq/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-sr/strings.xml b/car-media-common/res/values-sr/strings.xml
index e6173ba..b638368 100644
--- a/car-media-common/res/values-sr/strings.xml
+++ b/car-media-common/res/values-sr/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-sv/strings.xml b/car-media-common/res/values-sv/strings.xml
index ce52ecf..111c939 100644
--- a/car-media-common/res/values-sv/strings.xml
+++ b/car-media-common/res/values-sv/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-sw/strings.xml b/car-media-common/res/values-sw/strings.xml
index 282555c..6a8da9d 100644
--- a/car-media-common/res/values-sw/strings.xml
+++ b/car-media-common/res/values-sw/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ta/strings.xml b/car-media-common/res/values-ta/strings.xml
index dd522b8..ded4c56 100644
--- a/car-media-common/res/values-ta/strings.xml
+++ b/car-media-common/res/values-ta/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-te/strings.xml b/car-media-common/res/values-te/strings.xml
index 62a7464..eb11da8 100644
--- a/car-media-common/res/values-te/strings.xml
+++ b/car-media-common/res/values-te/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-th/strings.xml b/car-media-common/res/values-th/strings.xml
index f642719..34d0ca2 100644
--- a/car-media-common/res/values-th/strings.xml
+++ b/car-media-common/res/values-th/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-tl/strings.xml b/car-media-common/res/values-tl/strings.xml
index a2da896..c2f2ef5 100644
--- a/car-media-common/res/values-tl/strings.xml
+++ b/car-media-common/res/values-tl/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-tr/strings.xml b/car-media-common/res/values-tr/strings.xml
index 6f717ac..98b90d6 100644
--- a/car-media-common/res/values-tr/strings.xml
+++ b/car-media-common/res/values-tr/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-uk/strings.xml b/car-media-common/res/values-uk/strings.xml
index 0661490..84e09e1 100644
--- a/car-media-common/res/values-uk/strings.xml
+++ b/car-media-common/res/values-uk/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-ur/strings.xml b/car-media-common/res/values-ur/strings.xml
index ccf505c..e746f3a 100644
--- a/car-media-common/res/values-ur/strings.xml
+++ b/car-media-common/res/values-ur/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-uz/strings.xml b/car-media-common/res/values-uz/strings.xml
index f3e8826..5c97fc1 100644
--- a/car-media-common/res/values-uz/strings.xml
+++ b/car-media-common/res/values-uz/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-vi/strings.xml b/car-media-common/res/values-vi/strings.xml
index 2a99840..ba84106 100644
--- a/car-media-common/res/values-vi/strings.xml
+++ b/car-media-common/res/values-vi/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..3370ca3 100644
--- a/car-media-common/res/values-zh-rCN/strings.xml
+++ b/car-media-common/res/values-zh-rCN/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..9376f80 100644
--- a/car-media-common/res/values-zh-rHK/strings.xml
+++ b/car-media-common/res/values-zh-rHK/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </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..9376f80 100644
--- a/car-media-common/res/values-zh-rTW/strings.xml
+++ b/car-media-common/res/values-zh-rTW/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/res/values-zu/strings.xml b/car-media-common/res/values-zu/strings.xml
index cde3b48..f2c1a2e 100644
--- a/car-media-common/res/values-zu/strings.xml
+++ b/car-media-common/res/values-zu/strings.xml
@@ -18,5 +18,4 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     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>
 </resources>
diff --git a/car-media-common/src/com/android/car/media/common/MediaConstants.java b/car-media-common/src/com/android/car/media/common/MediaConstants.java
index c7520db..967680c 100644
--- a/car-media-common/src/com/android/car/media/common/MediaConstants.java
+++ b/car-media-common/src/com/android/car/media/common/MediaConstants.java
@@ -120,15 +120,37 @@
     /**
      * These constants are from
      * @see <a href=https://developer.android.com/training/auto/audio/#required-actions></a>
+     *
+     * @deprecated this flag has been replaced by {@link #PLAYBACK_SLOT_RESERVATION_SKIP_TO_NEXT}
      */
+    @Deprecated
     public static final String SLOT_RESERVATION_SKIP_TO_NEXT =
             "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_NEXT";
+    /**
+     * @deprecated this flag has been replaced by {@link #PLAYBACK_SLOT_RESERVATION_SKIP_TO_NEXT}
+     */
+    @Deprecated
     public static final String SLOT_RESERVATION_SKIP_TO_PREV =
             "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_PREVIOUS";
+    /**
+     * @deprecated this flag has been replaced by {@link #PLAYBACK_SLOT_RESERVATION_SKIP_TO_NEXT}
+     */
+    @Deprecated
     public static final String SLOT_RESERVATION_QUEUE =
             "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_QUEUE";
 
     /**
+     * These constants are from
+     * @see <a href=https://developer.android.com/training/auto/audio/#required-actions></a>
+     */
+    public static final String PLAYBACK_SLOT_RESERVATION_SKIP_TO_NEXT =
+            "android.media.playback.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_NEXT";
+    public static final String PLAYBACK_SLOT_RESERVATION_SKIP_TO_PREV =
+            "android.media.playback.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_PREVIOUS";
+    public static final String PLAYBACK_SLOT_RESERVATION_QUEUE =
+            "android.media.playback.ALWAYS_RESERVE_SPACE_FOR.ACTION_QUEUE";
+
+    /**
      * Bundle extra of type 'boolean' indicating that an item should show the 'explicit' symbol.
      */
     public static final String EXTRA_IS_EXPLICIT = "android.media.IS_EXPLICIT";
diff --git a/car-media-common/src/com/android/car/media/common/MediaItemMetadata.java b/car-media-common/src/com/android/car/media/common/MediaItemMetadata.java
index ba17316..00a4416 100644
--- a/car-media-common/src/com/android/car/media/common/MediaItemMetadata.java
+++ b/car-media-common/src/com/android/car/media/common/MediaItemMetadata.java
@@ -147,11 +147,15 @@
 
             Bitmap myBitmap = getBitmapToFlag(context);
             Bitmap otherBitmap = other.getBitmapToFlag(context);
-            if ((myBitmap != null) && (myBitmap.equals(otherBitmap))) return true;
+            if ((myBitmap != null) || (otherBitmap != null)) {
+                return Objects.equals(myBitmap, otherBitmap);
+            }
 
             Uri myUri = getImageURI();
             Uri otherUri = other.getImageURI();
-            if ((myUri != null) && (myUri.equals(otherUri))) return true;
+            if ((myUri != null) || (otherUri != null)) {
+                return Objects.equals(myUri, otherUri);
+            }
 
             return getPlaceholderHash() == other.getPlaceholderHash();
         }
@@ -232,6 +236,13 @@
     }
 
     /**
+     * @return optional extras that can include extra information about the media item to be played.
+     */
+    public Bundle getExtras() {
+        return mMediaDescription.getExtras();
+    }
+
+    /**
      * @return boolean that indicate if media is explicit.
      */
     public boolean isExplicit() {
diff --git a/car-media-common/src/com/android/car/media/common/MetadataController.java b/car-media-common/src/com/android/car/media/common/MetadataController.java
index 341c129..49e5a26 100644
--- a/car-media-common/src/com/android/car/media/common/MetadataController.java
+++ b/car-media-common/src/com/android/car/media/common/MetadataController.java
@@ -120,6 +120,8 @@
                         ViewUtils.setVisible(artist, !TextUtils.isEmpty(artistName));
                     }
 
+                    ViewUtils.setVisible(albumArt, true);
+
                     mAlbumArtBinder.setImage(context, metadata.getArtworkKey());
                 });
 
diff --git a/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java b/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java
index e085c00..e4ed555 100644
--- a/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java
+++ b/car-media-common/src/com/android/car/media/common/playback/PlaybackViewModel.java
@@ -598,12 +598,12 @@
         }
 
         /**
-         * Starts playing a given media item. This id corresponds to {@link
-         * MediaItemMetadata#getId()}.
+         * Starts playing a given media item.
          */
-        public void playItem(String mediaItemId) {
+        public void playItem(MediaItemMetadata item) {
             if (mMediaController != null) {
-                mMediaController.getTransportControls().playFromMediaId(mediaItemId, null);
+                mMediaController.getTransportControls().playFromMediaId(item.getId(),
+                        item.getExtras());
             }
         }
 
diff --git a/car-media-common/src/com/android/car/media/common/source/MediaSource.java b/car-media-common/src/com/android/car/media/common/source/MediaSource.java
index db2cc11..09dcbb5 100644
--- a/car-media-common/src/com/android/car/media/common/source/MediaSource.java
+++ b/car-media-common/src/com/android/car/media/common/source/MediaSource.java
@@ -38,10 +38,8 @@
 
 import com.android.car.apps.common.BitmapUtils;
 
-import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
-import java.util.Set;
 
 /**
  * This represents a source of media content. It provides convenient methods to access media source
@@ -50,15 +48,6 @@
 public class MediaSource {
     private static final String TAG = "MediaSource";
 
-    /**
-     * Custom media sources which should not be templatized.
-     */
-    private static final Set<String> CUSTOM_MEDIA_SOURCES = new HashSet<>();
-
-    static {
-        CUSTOM_MEDIA_SOURCES.add("com.android.car.radio");
-    }
-
     @NonNull
     private final ComponentName mBrowseService;
     @NonNull
@@ -201,13 +190,6 @@
         return getRoundCroppedBitmap(BitmapUtils.fromDrawable(mIcon, null));
     }
 
-    /**
-     * Returns {@code true} iff this media source should not be templatized.
-     */
-    public boolean isCustom() {
-        return CUSTOM_MEDIA_SOURCES.contains(getPackageName());
-    }
-
     private static Bitmap getRoundCroppedBitmap(Bitmap bitmap) {
         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),
                 Bitmap.Config.ARGB_8888);
diff --git a/car-telephony-common/res/values-af/strings.xml b/car-telephony-common/res/values-af/strings.xml
index 7e19555..235376e 100644
--- a/car-telephony-common/res/values-af/strings.xml
+++ b/car-telephony-common/res/values-af/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Onbekend"</string>
     <string name="voicemail" msgid="2125552157407909509">"Stemboodskap"</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">"Koppel tans …"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Bel tans …"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Koppel tans"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Bel tans"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Hou aan"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Oproep beëindig"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Gekoppel"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Lui tans …"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Ontkoppel tans …"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Lui tans"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Ontkoppel tans"</string>
 </resources>
diff --git a/car-telephony-common/res/values-am/strings.xml b/car-telephony-common/res/values-am/strings.xml
index 6d0315e..cf05285 100644
--- a/car-telephony-common/res/values-am/strings.xml
+++ b/car-telephony-common/res/values-am/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"ያልታወቀ"</string>
     <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_connecting" msgid="6844097368588248151">"በመገናኘት ላይ"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"በመደወል ላይ"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ያዝናቆይ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"ጥሪ አብቅቷል"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"ተገናኝቷል"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"በመጥራት ላይ…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ግንኝነትን በማቋረጥ ላይ…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"በመጥራት ላይ"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ግንኙነት በማቋረጥ ላይ"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ar/strings.xml b/car-telephony-common/res/values-ar/strings.xml
index fcc72fb..bc48b4d 100644
--- a/car-telephony-common/res/values-ar/strings.xml
+++ b/car-telephony-common/res/values-ar/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"المتّصِل غير معروف."</string>
     <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_connecting" msgid="6844097368588248151">"جارٍ الاتصال"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"جارٍ الطلب"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"قيد الانتظار"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"انتهت المكالمة"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"متّصل"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"جارٍ إطلاق الرنين…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"جارٍ قطع الاتصال…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"جارٍ استصدار الرنين…"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"جارٍ قطع الاتصال"</string>
 </resources>
diff --git a/car-telephony-common/res/values-as/strings.xml b/car-telephony-common/res/values-as/strings.xml
index a4c90ae..567a480 100644
--- a/car-telephony-common/res/values-as/strings.xml
+++ b/car-telephony-common/res/values-as/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"অজ্ঞাত"</string>
     <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_connecting" msgid="6844097368588248151">"সংযোগ কৰি থকা হৈছে"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ডায়েল হৈ আছে"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"হ’ল্ডত আছে"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"কল শেষ হৈছে"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"সংযোগ কৰা হ’ল"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"ৰিং কৰি আছে…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"সংযোগ ছেদ হৈ আছে…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"ৰিং কৰি আছে"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে"</string>
 </resources>
diff --git a/car-telephony-common/res/values-az/strings.xml b/car-telephony-common/res/values-az/strings.xml
index d29aeab..fa9e0f6 100644
--- a/car-telephony-common/res/values-az/strings.xml
+++ b/car-telephony-common/res/values-az/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Naməlum"</string>
     <string name="voicemail" msgid="2125552157407909509">"Səsli poçt"</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">"Qoşulur…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Nömrə yığılır…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Qoşulur"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Nömrə yığılır"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Gözləmədə"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Zəng sona çatdı"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Qoşuldu"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Zəng çalır…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Bağlantı kəsilir…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Zəng"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Əlaqə kəsilir"</string>
 </resources>
diff --git a/car-telephony-common/res/values-b+sr+Latn/strings.xml b/car-telephony-common/res/values-b+sr+Latn/strings.xml
index d05ef72..e31bd43 100644
--- a/car-telephony-common/res/values-b+sr+Latn/strings.xml
+++ b/car-telephony-common/res/values-b+sr+Latn/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Nepoznato"</string>
     <string name="voicemail" msgid="2125552157407909509">"Govorna pošta"</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">"Povezuje se…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Poziva se…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Povezuje se"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Poziva se"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Na čekanju"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Poziv je završen"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Povezan"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Zvoni…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Prekida se veza…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Zvoni"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Prekida se veza"</string>
 </resources>
diff --git a/car-telephony-common/res/values-be/strings.xml b/car-telephony-common/res/values-be/strings.xml
index 1e1bcdf..da1e944 100644
--- a/car-telephony-common/res/values-be/strings.xml
+++ b/car-telephony-common/res/values-be/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Невядома"</string>
     <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_connecting" msgid="6844097368588248151">"Ідзе падключэнне"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Ідзе набор нумара"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"На ўтрыманні"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Выклік скончаны"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Падключана"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ідзе празвон…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Ідзе адключэнне…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ідзе празвон"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Ідзе адключэнне"</string>
 </resources>
diff --git a/car-telephony-common/res/values-bg/strings.xml b/car-telephony-common/res/values-bg/strings.xml
index 1f38d61..dcdff62 100644
--- a/car-telephony-common/res/values-bg/strings.xml
+++ b/car-telephony-common/res/values-bg/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Неизвестно"</string>
     <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_connecting" msgid="6844097368588248151">"Установява се връзка"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Набира се"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Задържано"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Обаждането завърши"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Установена е връзка"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Звъни се…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Връзката се прекр…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Звъни се"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Връзката се прекрат."</string>
 </resources>
diff --git a/car-telephony-common/res/values-bn/strings.xml b/car-telephony-common/res/values-bn/strings.xml
index 4855b6e..2a857ff 100644
--- a/car-telephony-common/res/values-bn/strings.xml
+++ b/car-telephony-common/res/values-bn/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"অজানা"</string>
     <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_connecting" msgid="6844097368588248151">"কানেক্ট হচ্ছে"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ডায়াল করা হচ্ছে"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"হোল্ডে আছে"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"কল শেষ হয়েছে"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"কানেক্ট করা হয়েছে"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"রিং হচ্ছে…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ডিসকানেক্ট করা হচ্ছে…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"রিং হচ্ছে"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ডিসকানেক্ট হচ্ছে"</string>
 </resources>
diff --git a/car-telephony-common/res/values-bs/strings.xml b/car-telephony-common/res/values-bs/strings.xml
index 1d6a8b8..b28a348 100644
--- a/car-telephony-common/res/values-bs/strings.xml
+++ b/car-telephony-common/res/values-bs/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Nepoznat"</string>
     <string name="voicemail" msgid="2125552157407909509">"Govorna pošta"</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">"Povezivanje…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Biranje…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Povezivanje"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Biranje"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Na čekanju"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Poziv je završen"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Povezan"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Zvoni…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Prekidanje veze…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Zvoni"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Prekidanje veze"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ca/strings.xml b/car-telephony-common/res/values-ca/strings.xml
index 356f31c..908e512 100644
--- a/car-telephony-common/res/values-ca/strings.xml
+++ b/car-telephony-common/res/values-ca/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Desconegut"</string>
     <string name="voicemail" msgid="2125552157407909509">"Missatge de veu"</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">"S\'està connectant…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"S\'està marcant…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"S\'està connectant"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"S\'està marcant"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"En espera"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Trucada finalitzada"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Connectat"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Està sonant…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"S\'està desconnectant…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"S\'està trucant"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"S\'està desconnectant"</string>
 </resources>
diff --git a/car-telephony-common/res/values-cs/strings.xml b/car-telephony-common/res/values-cs/strings.xml
index 41a29b5..ff07c0b 100644
--- a/car-telephony-common/res/values-cs/strings.xml
+++ b/car-telephony-common/res/values-cs/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Neznámé"</string>
     <string name="voicemail" msgid="2125552157407909509">"Hlasová schránka"</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">"Připojování…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Vytáčení…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Připojování"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Vytáčení"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Podrženo"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Hovor byl ukončen"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Připojeno"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Vyzvánění…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Odpojování…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Prozvánění"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Odpojování"</string>
 </resources>
diff --git a/car-telephony-common/res/values-da/strings.xml b/car-telephony-common/res/values-da/strings.xml
index dcd52a0..99ac474 100644
--- a/car-telephony-common/res/values-da/strings.xml
+++ b/car-telephony-common/res/values-da/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Ukendt"</string>
     <string name="voicemail" msgid="2125552157407909509">"Talebesked"</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">"Tilslutter…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Ringer op…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Opretter forbindelse"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Ringer op"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Afventer"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Opkaldet er slut"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Der er forbindelse"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ringer…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Afbryder…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ringer"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Lægger på"</string>
 </resources>
diff --git a/car-telephony-common/res/values-de/strings.xml b/car-telephony-common/res/values-de/strings.xml
index a5257d3..b81f82d 100644
--- a/car-telephony-common/res/values-de/strings.xml
+++ b/car-telephony-common/res/values-de/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Unbekannt"</string>
     <string name="voicemail" msgid="2125552157407909509">"Mailbox"</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">"Verbinden…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Rufaufbau…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Wird verbunden"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Rufaufbau"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Warten"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Anruf beendet"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Verbunden"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Klingelt…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Verbindung wird getrennt…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Klingelt"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Wird getrennt"</string>
 </resources>
diff --git a/car-telephony-common/res/values-el/strings.xml b/car-telephony-common/res/values-el/strings.xml
index 40d1716..6712065 100644
--- a/car-telephony-common/res/values-el/strings.xml
+++ b/car-telephony-common/res/values-el/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Άγνωστη"</string>
     <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_connecting" msgid="6844097368588248151">"Σύνδεση"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Κλήση"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Σε αναμονή"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Η κλήση τερματίστηκε"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Συνδέθηκε"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Κλήση…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Αποσύνδεση…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Κλήση"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Αποσύνδεση"</string>
 </resources>
diff --git a/car-telephony-common/res/values-en-rAU/strings.xml b/car-telephony-common/res/values-en-rAU/strings.xml
index 06d1973..b3923a4 100644
--- a/car-telephony-common/res/values-en-rAU/strings.xml
+++ b/car-telephony-common/res/values-en-rAU/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Unknown"</string>
     <string name="voicemail" msgid="2125552157407909509">"Voicemail"</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">"Connecting…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Dialling…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Connecting"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Dialling"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"On Hold"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Call Ended"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Connected"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ringing…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Disconnecting…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ringing"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Disconnecting"</string>
 </resources>
diff --git a/car-telephony-common/res/values-en-rGB/strings.xml b/car-telephony-common/res/values-en-rGB/strings.xml
index 06d1973..b3923a4 100644
--- a/car-telephony-common/res/values-en-rGB/strings.xml
+++ b/car-telephony-common/res/values-en-rGB/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Unknown"</string>
     <string name="voicemail" msgid="2125552157407909509">"Voicemail"</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">"Connecting…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Dialling…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Connecting"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Dialling"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"On Hold"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Call Ended"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Connected"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ringing…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Disconnecting…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ringing"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Disconnecting"</string>
 </resources>
diff --git a/car-telephony-common/res/values-en-rIN/strings.xml b/car-telephony-common/res/values-en-rIN/strings.xml
index 06d1973..b3923a4 100644
--- a/car-telephony-common/res/values-en-rIN/strings.xml
+++ b/car-telephony-common/res/values-en-rIN/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Unknown"</string>
     <string name="voicemail" msgid="2125552157407909509">"Voicemail"</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">"Connecting…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Dialling…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Connecting"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Dialling"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"On Hold"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Call Ended"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Connected"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ringing…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Disconnecting…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ringing"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Disconnecting"</string>
 </resources>
diff --git a/car-telephony-common/res/values-es-rUS/strings.xml b/car-telephony-common/res/values-es-rUS/strings.xml
index 2e71140..a807d20 100644
--- a/car-telephony-common/res/values-es-rUS/strings.xml
+++ b/car-telephony-common/res/values-es-rUS/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Desconocido"</string>
     <string name="voicemail" msgid="2125552157407909509">"Buzón 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">"Marcando…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Conectando"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Marcando"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"En espera"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Llamada finalizada"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Conectado"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Sonando…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Desconectando…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Sonando"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Desconectando"</string>
 </resources>
diff --git a/car-telephony-common/res/values-es/strings.xml b/car-telephony-common/res/values-es/strings.xml
index 390354f..20ba994 100644
--- a/car-telephony-common/res/values-es/strings.xml
+++ b/car-telephony-common/res/values-es/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Desconocida"</string>
     <string name="voicemail" msgid="2125552157407909509">"Buzón 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">"Marcando…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Conectando"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Marcando"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"En espera"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Llamada finalizada"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Conectado"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Sonando…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Desconectando…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Sonando"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Desconectando"</string>
 </resources>
diff --git a/car-telephony-common/res/values-et/strings.xml b/car-telephony-common/res/values-et/strings.xml
index ee65909..c44ebe2 100644
--- a/car-telephony-common/res/values-et/strings.xml
+++ b/car-telephony-common/res/values-et/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Tundmatu"</string>
     <string name="voicemail" msgid="2125552157407909509">"Kõnepost"</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">"Ühendamine …"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Valimine …"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Ühendamine"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Valimine"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Ootel"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Kõne lõpetati"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Ühendatud"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Heliseb …"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Ühenduse katkest. …"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Helistamine"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Ühenduse katkestam."</string>
 </resources>
diff --git a/car-telephony-common/res/values-eu/strings.xml b/car-telephony-common/res/values-eu/strings.xml
index ddaec85..3c187ce 100644
--- a/car-telephony-common/res/values-eu/strings.xml
+++ b/car-telephony-common/res/values-eu/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Ezezaguna"</string>
     <string name="voicemail" msgid="2125552157407909509">"Erantzungailua"</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">"Konektatzen…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Markatzen…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Konektatzen"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Deitzen"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Zain"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Deia amaituta"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Konektatuta"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Deitzen…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Deskonektatzen…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Tonua jotzen"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Deskonektatzen"</string>
 </resources>
diff --git a/car-telephony-common/res/values-fa/strings.xml b/car-telephony-common/res/values-fa/strings.xml
index 092b944..a395890 100644
--- a/car-telephony-common/res/values-fa/strings.xml
+++ b/car-telephony-common/res/values-fa/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"نامشخص"</string>
     <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_connecting" msgid="6844097368588248151">"درحال برقراری ارتباط"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"درحال شماره‌گیری"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"در انتظار"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"تماس پایان یافت"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"متصل"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"درحال زنگ زدن…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"درحال قطع اتصال…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"درحال زنگ خوردن"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"درحال قطع ارتباط"</string>
 </resources>
diff --git a/car-telephony-common/res/values-fi/strings.xml b/car-telephony-common/res/values-fi/strings.xml
index ce6ff53..9e4b096 100644
--- a/car-telephony-common/res/values-fi/strings.xml
+++ b/car-telephony-common/res/values-fi/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Tuntematon"</string>
     <string name="voicemail" msgid="2125552157407909509">"Vastaaja"</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">"Yhdistetään…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Soitetaan…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Yhdistetään"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Soitetaan"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Pidossa"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Puhelu päättyi"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Yhdistetty"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Soi…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Katkaistaan…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Soi"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Katkaistaan yhteyttä"</string>
 </resources>
diff --git a/car-telephony-common/res/values-fr-rCA/strings.xml b/car-telephony-common/res/values-fr-rCA/strings.xml
index cef9278..31ede80 100644
--- a/car-telephony-common/res/values-fr-rCA/strings.xml
+++ b/car-telephony-common/res/values-fr-rCA/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Inconnu"</string>
     <string name="voicemail" msgid="2125552157407909509">"Messagerie vocale"</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">"Connexion en cours…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Composition…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Connexion en cours…"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Composition…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"En attente"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Appel terminé"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Connecté"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Sonnerie en cours…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Déconnexion…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Sonnerie en cours…"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Déconnexion…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-fr/strings.xml b/car-telephony-common/res/values-fr/strings.xml
index 164f23d..0c0f207 100644
--- a/car-telephony-common/res/values-fr/strings.xml
+++ b/car-telephony-common/res/values-fr/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Inconnu"</string>
     <string name="voicemail" msgid="2125552157407909509">"Messagerie vocale"</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">"Connexion…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Composition numéro…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Tentative d\'appel"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Composition numéro"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"En attente"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Appel terminé"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Appel en cours"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Sonnerie…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Déconnexion…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Sonnerie"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Fin de l\'appel"</string>
 </resources>
diff --git a/car-telephony-common/res/values-gl/strings.xml b/car-telephony-common/res/values-gl/strings.xml
index 2251c16..088b4b2 100644
--- a/car-telephony-common/res/values-gl/strings.xml
+++ b/car-telephony-common/res/values-gl/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Descoñecido"</string>
     <string name="voicemail" msgid="2125552157407909509">"Correo 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">"Marcando…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Conectando"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Marcando"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"En espera"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Chamada finalizada"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Conectado"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Facendo soar…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Desconectando…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Chamando"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Desconectando"</string>
 </resources>
diff --git a/car-telephony-common/res/values-gu/strings.xml b/car-telephony-common/res/values-gu/strings.xml
index 04cf443..a37024a 100644
--- a/car-telephony-common/res/values-gu/strings.xml
+++ b/car-telephony-common/res/values-gu/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"અજાણ"</string>
     <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_connecting" msgid="6844097368588248151">"કનેક્ટ થઈ રહ્યું છે"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ડાયલ કરી રહ્યાં છે"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"હોલ્ડ પર"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"કૉલ સમાપ્ત થયો"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"કનેક્ટેડ"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"રિંગ વાગી રહી છે…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ડિસ્કનેક્ટ થાય છે…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"રિંગ વગાડીએ છીએ"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ડિસ્કનેક્ટ થાય છે"</string>
 </resources>
diff --git a/car-telephony-common/res/values-hi/strings.xml b/car-telephony-common/res/values-hi/strings.xml
index 5fdb213..fd3a50a 100644
--- a/car-telephony-common/res/values-hi/strings.xml
+++ b/car-telephony-common/res/values-hi/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"अनजान"</string>
     <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_connecting" msgid="6844097368588248151">"कनेक्‍ट हो रहा है"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"डायल किया जा रहा है"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"कॉल होल्ड पर है"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"कॉल खत्म हो गया"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"जुड़ गया है"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"घंटी बज रही है…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"डिसकनेक्ट हो रहा है…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"घंटी बज रही है"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"डिसकनेक्ट हो रहा है"</string>
 </resources>
diff --git a/car-telephony-common/res/values-hr/strings.xml b/car-telephony-common/res/values-hr/strings.xml
index 5e0f4d7..cb311bc 100644
--- a/car-telephony-common/res/values-hr/strings.xml
+++ b/car-telephony-common/res/values-hr/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Nepoznato"</string>
     <string name="voicemail" msgid="2125552157407909509">"Govorna pošta"</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">"Povezivanje…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Biranje broja…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Povezivanje"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Biranje broja"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Na čekanju"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Poziv je završio"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Povezano"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Zvonjenje…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Isključivanje…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Zvonjenje"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Prekid veze"</string>
 </resources>
diff --git a/car-telephony-common/res/values-hu/strings.xml b/car-telephony-common/res/values-hu/strings.xml
index fa95e1a..65b2543 100644
--- a/car-telephony-common/res/values-hu/strings.xml
+++ b/car-telephony-common/res/values-hu/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Ismeretlen"</string>
     <string name="voicemail" msgid="2125552157407909509">"Hangposta"</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">"Csatlakozás…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Tárcsázás…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Csatlakozás"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Tárcsázás"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Várakoztatva"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"A hívás befejeződött"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Csatlakozva"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Csörgés…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Kapcsolat bontása…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Csörgés"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Szétkapcsolás"</string>
 </resources>
diff --git a/car-telephony-common/res/values-hy/strings.xml b/car-telephony-common/res/values-hy/strings.xml
index c8d7ea9..e040c42 100644
--- a/car-telephony-common/res/values-hy/strings.xml
+++ b/car-telephony-common/res/values-hy/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Անհայտ"</string>
     <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_connecting" msgid="6844097368588248151">"Միացում"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Համարը հավաքվում է"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Սպասում"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Զանգն ավարտվեց"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Միացած է"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Զանգ…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Անջատվում է…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Զանգ"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Անջատվում է"</string>
 </resources>
diff --git a/car-telephony-common/res/values-in/strings.xml b/car-telephony-common/res/values-in/strings.xml
index 53a7831..11e2406 100644
--- a/car-telephony-common/res/values-in/strings.xml
+++ b/car-telephony-common/res/values-in/strings.xml
@@ -17,13 +17,13 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="unknown" msgid="3237922751873109097">"Tidak dikenal"</string>
-    <string name="voicemail" msgid="2125552157407909509">"Pesan suara"</string>
+    <string name="voicemail" msgid="2125552157407909509">"Pesan Suara"</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">"Menghubungkan…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Memanggil…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Menghubungkan"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Memanggil"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Harap Tunggu"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Panggilan Diakhiri"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Terhubung"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Berdering…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Memutus hubungan..."</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Berdering"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Memutuskan"</string>
 </resources>
diff --git a/car-telephony-common/res/values-is/strings.xml b/car-telephony-common/res/values-is/strings.xml
index b91a805..891dc89 100644
--- a/car-telephony-common/res/values-is/strings.xml
+++ b/car-telephony-common/res/values-is/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Óþekkt"</string>
     <string name="voicemail" msgid="2125552157407909509">"Talhólf"</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">"Tengist…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Hringir…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Tengist"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Hringir"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Í bið"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Símtali lokið"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Tengt"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Hringir…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Aftengist…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Hringir"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Aftengist"</string>
 </resources>
diff --git a/car-telephony-common/res/values-it/strings.xml b/car-telephony-common/res/values-it/strings.xml
index cb4bc61..b4b8b22 100644
--- a/car-telephony-common/res/values-it/strings.xml
+++ b/car-telephony-common/res/values-it/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Sconosciuto"</string>
     <string name="voicemail" msgid="2125552157407909509">"Segreteria"</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">"Connessione…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Chiamata…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Connessione"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Composizione"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"In attesa"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Chiamata terminata"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Connesso"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Sta squillando…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Disconnessione…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Sta squillando"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Disconnessione"</string>
 </resources>
diff --git a/car-telephony-common/res/values-iw/strings.xml b/car-telephony-common/res/values-iw/strings.xml
index 0d1cd68..8e8bcb0 100644
--- a/car-telephony-common/res/values-iw/strings.xml
+++ b/car-telephony-common/res/values-iw/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"לא ידוע"</string>
     <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_connecting" msgid="6844097368588248151">"מתבצעת התחברות"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"מתבצע חיוג"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"בהמתנה"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"השיחה הסתיימה"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"מתבצעת שיחה"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"מצלצל…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"מתנתק…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"מושמע צלצול"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"מתבצע ניתוק"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ja/strings.xml b/car-telephony-common/res/values-ja/strings.xml
index 4c0a6c1..1c3f652 100644
--- a/car-telephony-common/res/values-ja/strings.xml
+++ b/car-telephony-common/res/values-ja/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"不明"</string>
     <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_connecting" msgid="6844097368588248151">"接続中"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"発信中"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"保留中"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"通話終了"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"接続済み"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"着信中…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"切断中…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"着信中"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"切断中"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ka/strings.xml b/car-telephony-common/res/values-ka/strings.xml
index 858ffa3..901e053 100644
--- a/car-telephony-common/res/values-ka/strings.xml
+++ b/car-telephony-common/res/values-ka/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"უცნობი"</string>
     <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_connecting" msgid="6844097368588248151">"უკავშირდება"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"მიმდინარეობს აკრეფა"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"შეყოვნების რეჟიმში"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"ზარი დასრულდა"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"დაკავშირებულია"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"ირეკება…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"კავშირი წყდება…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"ირეკება"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"მიმდინარეობს გათიშვა"</string>
 </resources>
diff --git a/car-telephony-common/res/values-kk/strings.xml b/car-telephony-common/res/values-kk/strings.xml
index 48eba3d..b08c58d 100644
--- a/car-telephony-common/res/values-kk/strings.xml
+++ b/car-telephony-common/res/values-kk/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Белгісіз"</string>
     <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_connecting" msgid="6844097368588248151">"Жалғануда"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Терілуде"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Күтуде"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Қоңырау аяқталды"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Жалғанды"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Шылдырлату…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Ажыратылуда…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Шылдырлауда"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Ажыратылуда"</string>
 </resources>
diff --git a/car-telephony-common/res/values-km/strings.xml b/car-telephony-common/res/values-km/strings.xml
index a483de3..98c9cea 100644
--- a/car-telephony-common/res/values-km/strings.xml
+++ b/car-telephony-common/res/values-km/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"មិនស្គាល់"</string>
     <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_connecting" msgid="6844097368588248151">"កំពុងភ្ជាប់"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"កំពុងហៅ"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"រង់ចាំ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"បាន​បញ្ចប់​ការ​ហៅ"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"បានភ្ជាប់"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"កំពុង​រោទ៍…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"កំពុង​ផ្ដាច់…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"កំពុងរោទ៍"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"កំពុង​ផ្ដាច់"</string>
 </resources>
diff --git a/car-telephony-common/res/values-kn/strings.xml b/car-telephony-common/res/values-kn/strings.xml
index 7b57804..8516261 100644
--- a/car-telephony-common/res/values-kn/strings.xml
+++ b/car-telephony-common/res/values-kn/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"ಅಪರಿಚಿತ"</string>
     <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_connecting" msgid="6844097368588248151">"ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ಡಯಲ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ಹೋಲ್ಡ್‌ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"ಕರೆ ಅಂತ್ಯಗೊಂಡಿದೆ"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"ರಿಂಗ್‍ ಆಗುತ್ತಿದೆ…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾ…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"ರಿಂಗ್‌ ಆಗುತ್ತಿದೆ"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ko/strings.xml b/car-telephony-common/res/values-ko/strings.xml
index 1171186..8bd6bb9 100644
--- a/car-telephony-common/res/values-ko/strings.xml
+++ b/car-telephony-common/res/values-ko/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"알 수 없음"</string>
     <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_connecting" msgid="6844097368588248151">"연결 중"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"전화 거는 중"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"대기 중"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"통화 종료됨"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"연결됨"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"벨소리 울리는 중…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"연결 해제 중..."</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"전화 수신 중"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"연결 해제 중"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ky/strings.xml b/car-telephony-common/res/values-ky/strings.xml
index b76e748..711c256 100644
--- a/car-telephony-common/res/values-ky/strings.xml
+++ b/car-telephony-common/res/values-ky/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Белгисиз"</string>
     <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_connecting" msgid="6844097368588248151">"Туташууда"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Терилүүдө"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Күтүү режиминде"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Чалуу аяктады"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Туташты"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Шыңгырап жатат…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Ажыратылууда…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Шыңгыроодо"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Ажыратылууда"</string>
 </resources>
diff --git a/car-telephony-common/res/values-lo/strings.xml b/car-telephony-common/res/values-lo/strings.xml
index b6cc9df..dd91d15 100644
--- a/car-telephony-common/res/values-lo/strings.xml
+++ b/car-telephony-common/res/values-lo/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"ບໍ່ຮູ້ຈັກ"</string>
     <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_connecting" msgid="6844097368588248151">"ກຳລັງເຊື່ອມຕໍ່"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ກຳລັງໂທ"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ຖືສາຍລໍຖ້າ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"ວາງສາຍແລ້ວ"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"ເຊື່ອມຕໍ່ແລ້ວ"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"ກຳລັງດັງ…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ກຳລັງຕັດການເຊື່ອມຕໍ່…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"ກຳລັງດັງ"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ກຳລັງຕັດການເຊື່ອມຕໍ່"</string>
 </resources>
diff --git a/car-telephony-common/res/values-lt/strings.xml b/car-telephony-common/res/values-lt/strings.xml
index ea0508a..5fd0ebe 100644
--- a/car-telephony-common/res/values-lt/strings.xml
+++ b/car-telephony-common/res/values-lt/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Nežinomas"</string>
     <string name="voicemail" msgid="2125552157407909509">"Balso paštas"</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">"Prisijungiama…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Renkamas numeris…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Sujungiama"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Renkamas numeris"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Sulaikyta"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Skambutis baigtas"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Sujungta"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Skambinama…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Atsijungiama…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Skambinama"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Atjungiama"</string>
 </resources>
diff --git a/car-telephony-common/res/values-lv/strings.xml b/car-telephony-common/res/values-lv/strings.xml
index 28e49f5..adc33d7 100644
--- a/car-telephony-common/res/values-lv/strings.xml
+++ b/car-telephony-common/res/values-lv/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Nezināms"</string>
     <string name="voicemail" msgid="2125552157407909509">"Balss pasts"</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">"Veido savienojumu…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Sastāda numuru…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Notiek savienošana"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Sastāda numuru"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Aizturēts"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Zvans ir pabeigts"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Savienots"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Zvana…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Notiek atvienošana…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Zvana"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Notiek atvienošana"</string>
 </resources>
diff --git a/car-telephony-common/res/values-mk/strings.xml b/car-telephony-common/res/values-mk/strings.xml
index b6053e3..6633002 100644
--- a/car-telephony-common/res/values-mk/strings.xml
+++ b/car-telephony-common/res/values-mk/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Непознат"</string>
     <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_connecting" msgid="6844097368588248151">"Се поврзува"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Бирање"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"На чекање"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Повикот заврши"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Поврзан"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ѕвони…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Се исклучува…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ѕвонење"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Се исклучува"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ml/strings.xml b/car-telephony-common/res/values-ml/strings.xml
index e940e9b..3d63a21 100644
--- a/car-telephony-common/res/values-ml/strings.xml
+++ b/car-telephony-common/res/values-ml/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"അജ്ഞാതം"</string>
     <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_connecting" msgid="6844097368588248151">"കണക്റ്റ് ചെയ്യുന്നു"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ഡയൽ ചെയ്യുന്നു"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ഹോള്‍ഡിലാണ്"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"കോൾ അവസാനിച്ചു"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"കണക്‌റ്റ് ചെയ്‌തു"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"റിംഗ് ചെയ്യുന്നു…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"വിച്ഛേദിക്കുന്നു…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"റിംഗ് ചെയ്യുന്നു"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"വിച്‌ഛേദിക്കുന്നു"</string>
 </resources>
diff --git a/car-telephony-common/res/values-mn/strings.xml b/car-telephony-common/res/values-mn/strings.xml
index 5fdc776..9d04a08 100644
--- a/car-telephony-common/res/values-mn/strings.xml
+++ b/car-telephony-common/res/values-mn/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Тодорхойгүй"</string>
     <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_connecting" msgid="6844097368588248151">"Холбогдож байна"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Залгаж байна"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Хүлээлгэнд байна"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Дуудлагыг тасалсан"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Холбогдсон"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Дуугарч байна…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Салгаж байна…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Дуудаж байна"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Салгаж байна"</string>
 </resources>
diff --git a/car-telephony-common/res/values-mr/strings.xml b/car-telephony-common/res/values-mr/strings.xml
index 9c7f085..d59e336 100644
--- a/car-telephony-common/res/values-mr/strings.xml
+++ b/car-telephony-common/res/values-mr/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"अज्ञात"</string>
     <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_connecting" msgid="6844097368588248151">"कनेक्ट करत आहे"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"डायल करत आहे"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"होल्ड वर"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"कॉल संपला"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"कनेक्ट केले"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"रिंग होत आहे…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"डिस्कनेक्ट करत आहे…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"रिंग होत आहे"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"डिस्कनेक्ट करत आहे"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ms/strings.xml b/car-telephony-common/res/values-ms/strings.xml
index 1c1d5de..57bd37e 100644
--- a/car-telephony-common/res/values-ms/strings.xml
+++ b/car-telephony-common/res/values-ms/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Tidak diketahui"</string>
     <string name="voicemail" msgid="2125552157407909509">"Mel suara"</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">"Menyambung…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Mendail…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Menyambung"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Mendail"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Ditunda"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Panggilan Tamat"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Disambungkan"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Berdering…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Memutuskan sambungn…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Berdering"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Memutuskan sambungan"</string>
 </resources>
diff --git a/car-telephony-common/res/values-my/strings.xml b/car-telephony-common/res/values-my/strings.xml
index 130935a..317f9a5 100644
--- a/car-telephony-common/res/values-my/strings.xml
+++ b/car-telephony-common/res/values-my/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"အမည်မသိ"</string>
     <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_connecting" msgid="6844097368588248151">"ချိတ်ဆက်နေသည်"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ခေါ်ဆိုနေသည်"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ဖုန်းကိုင်ထားသည်"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"ခေါ်ဆိုမှု ပြီးပါပြီ"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"ချိတ်ဆက်ထားသည်"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"အသံမြည်နေသည်…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"အဆက်အသွယ် ဖြတ်နေသည်…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"အသံမြည်နေသည်"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ချိတ်ဆက်မှု ရပ်နေသည်"</string>
 </resources>
diff --git a/car-telephony-common/res/values-nb/strings.xml b/car-telephony-common/res/values-nb/strings.xml
index 119f352..c1555df 100644
--- a/car-telephony-common/res/values-nb/strings.xml
+++ b/car-telephony-common/res/values-nb/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Ukjent"</string>
     <string name="voicemail" msgid="2125552157407909509">"Talepost"</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">"Kobler til …"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Slår nummeret …"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Kobler til"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Slår nummeret"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"På vent"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Anropet er avsluttet"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Tilkoblet"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ringer …"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Kobler fra …"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ringer"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Kobler fra"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ne/strings.xml b/car-telephony-common/res/values-ne/strings.xml
index b021f11..8bce1e2 100644
--- a/car-telephony-common/res/values-ne/strings.xml
+++ b/car-telephony-common/res/values-ne/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"अज्ञात"</string>
     <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_connecting" msgid="6844097368588248151">"जडान गर्दै"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"डायल गर्दै"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"होल्डमा छ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"कल समाप्त भयो"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"जडान गरिएको छ"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"घन्टी बज्दै छ…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"विच्छेद गर्दै…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"घन्टी बज्दै छ"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"विच्छेद गर्दै"</string>
 </resources>
diff --git a/car-telephony-common/res/values-nl/strings.xml b/car-telephony-common/res/values-nl/strings.xml
index 7d00163..0a14c26 100644
--- a/car-telephony-common/res/values-nl/strings.xml
+++ b/car-telephony-common/res/values-nl/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Onbekend"</string>
     <string name="voicemail" msgid="2125552157407909509">"Voicemail"</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">"Verbinden…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Kiezen…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Verbinden…"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Kiezen"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"In de wacht"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Gesprek beëindigd"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Verbonden"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Gaat over…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Verb. verbreken…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Telefoon gaat over"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Verbinding verbreken"</string>
 </resources>
diff --git a/car-telephony-common/res/values-or/strings.xml b/car-telephony-common/res/values-or/strings.xml
index 775e33c..5b4b9bd 100644
--- a/car-telephony-common/res/values-or/strings.xml
+++ b/car-telephony-common/res/values-or/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"ଅଜଣା"</string>
     <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_connecting" msgid="6844097368588248151">"ସଂଯୋଗ କରୁଛି"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ଡାଏଲ୍ କରାଯାଉଛି"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ହୋଲ୍ଡରେ ଅଛି"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"କଲ୍ ସମାପ୍ତ ହେଲା"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"ସଂଯୋଗ ହୋଇଛି"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"ରିଙ୍ଗ ହେଉଛି…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ବିଚ୍ଛିନ୍ନ ହେଉଛି…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"ରିଙ୍ଗ ହେଉଛି"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ବିଚ୍ଛିନ୍ନ ହେଉଛି"</string>
 </resources>
diff --git a/car-telephony-common/res/values-pa/strings.xml b/car-telephony-common/res/values-pa/strings.xml
index 129276b..3bfc923 100644
--- a/car-telephony-common/res/values-pa/strings.xml
+++ b/car-telephony-common/res/values-pa/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"ਅਗਿਆਤ"</string>
     <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_connecting" msgid="6844097368588248151">"ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ਡਾਇਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ਰੋਕ ਕੇ ਰੱਖੀ ਗਈ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"ਕਾਲ ਸਮਾਪਤ ਹੋਈ"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"ਕਨੈਕਟ ਹੈ"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"ਘੰਟੀ ਵੱਜ ਰਹੀ ਹੈ…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ਡਿਸਕਨੈਕਟ ਹੋ ਰਿਹਾ ਹੈ…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"ਘੰਟੀ ਵਜ ਰਹੀ ਹੈ"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"ਡਿਸਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ"</string>
 </resources>
diff --git a/car-telephony-common/res/values-pl/strings.xml b/car-telephony-common/res/values-pl/strings.xml
index 1212857..0c948d4 100644
--- a/car-telephony-common/res/values-pl/strings.xml
+++ b/car-telephony-common/res/values-pl/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Nieznany numer"</string>
     <string name="voicemail" msgid="2125552157407909509">"Poczta głosowa"</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">"Łączę…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Wybieram numer…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Łączę"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Wybieram numer"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Oczekujące"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Koniec połączenia"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Połączono"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Dzwonię…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Rozłączam…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Dzwonię"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Rozłączam"</string>
 </resources>
diff --git a/car-telephony-common/res/values-pt-rPT/strings.xml b/car-telephony-common/res/values-pt-rPT/strings.xml
index 3b518e6..5f3340d 100644
--- a/car-telephony-common/res/values-pt-rPT/strings.xml
+++ b/car-telephony-common/res/values-pt-rPT/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Desconhecido"</string>
     <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">"A ligar…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"A marcar…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"A ligar…"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"A marcar…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Em espera"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Chamada terminada"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Ligado"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"A tocar…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"A desligar…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"A tocar…"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"A desligar…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-pt/strings.xml b/car-telephony-common/res/values-pt/strings.xml
index 7531adb..3231c7a 100644
--- a/car-telephony-common/res/values-pt/strings.xml
+++ b/car-telephony-common/res/values-pt/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Desconhecido"</string>
     <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_connecting" msgid="6844097368588248151">"Conectando"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Discando"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Em espera"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Chamada encerrada"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Conectado"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Tocando…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Desconectando…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Tocando"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Desconectando"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ro/strings.xml b/car-telephony-common/res/values-ro/strings.xml
index a9883de..b75ec0f 100644
--- a/car-telephony-common/res/values-ro/strings.xml
+++ b/car-telephony-common/res/values-ro/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Necunoscut"</string>
     <string name="voicemail" msgid="2125552157407909509">"Mesagerie vocală"</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">"Se conectează…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Se apelează…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Se conectează"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Se apelează"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"În așteptare"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Apel încheiat"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Conectat"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Sună…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Se deconectează…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Sună"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Se deconectează"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ru/strings.xml b/car-telephony-common/res/values-ru/strings.xml
index 2e37211..9c834fb 100644
--- a/car-telephony-common/res/values-ru/strings.xml
+++ b/car-telephony-common/res/values-ru/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Неизвестный абонент"</string>
     <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_connecting" msgid="6844097368588248151">"Подключение…"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Набор номера…"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"На удержании"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Вызов завершен"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Подключено"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Вызов…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Отключение…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Вызов…"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Отключение…"</string>
 </resources>
diff --git a/car-telephony-common/res/values-si/strings.xml b/car-telephony-common/res/values-si/strings.xml
index 399c8d8..9c290ae 100644
--- a/car-telephony-common/res/values-si/strings.xml
+++ b/car-telephony-common/res/values-si/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"නොදනී"</string>
     <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_connecting" msgid="6844097368588248151">"සබැඳෙමින්"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"අමතමින්"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"රඳවා ඇත"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"ඇමතුම නිමා විය"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"සම්බන්ධයි"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"නාද වෙමින්…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"විසන්ධි වෙමින්…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"නාද වෙමින්"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"විසන්ධි වෙමින්"</string>
 </resources>
diff --git a/car-telephony-common/res/values-sk/strings.xml b/car-telephony-common/res/values-sk/strings.xml
index 83721d3..9349775 100644
--- a/car-telephony-common/res/values-sk/strings.xml
+++ b/car-telephony-common/res/values-sk/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Neznáme"</string>
     <string name="voicemail" msgid="2125552157407909509">"Hlasová schránka"</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">"Pripája sa…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Vytáča sa…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Pripája sa"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Vytáča sa"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Podržané"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Hovor bol ukončený"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Pripojené"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Prezváňa sa…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Odpája sa…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Prezváňa sa"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Odpája sa"</string>
 </resources>
diff --git a/car-telephony-common/res/values-sl/strings.xml b/car-telephony-common/res/values-sl/strings.xml
index 03a7063..30d64a0 100644
--- a/car-telephony-common/res/values-sl/strings.xml
+++ b/car-telephony-common/res/values-sl/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Neznano"</string>
     <string name="voicemail" msgid="2125552157407909509">"Odzivnik"</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">"Povezovanje …"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Klicanje …"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Povezovanje"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Klicanje"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Zadržan"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Klic je bil končan"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Povezano"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Zvonjenje …"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Prekin. povezave …"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Zvonjenje"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Prekinjanje povezave"</string>
 </resources>
diff --git a/car-telephony-common/res/values-sq/strings.xml b/car-telephony-common/res/values-sq/strings.xml
index f6439eb..0d5351c 100644
--- a/car-telephony-common/res/values-sq/strings.xml
+++ b/car-telephony-common/res/values-sq/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"I panjohur"</string>
     <string name="voicemail" msgid="2125552157407909509">"Posta zanore"</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">"Po lidhet…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Po formon numrin…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Po lidhet"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Po formon numrin"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Në pritje"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Telefonata përfundoi"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Lidhur"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Po bie zilja…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Po shkëputet…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Po bie zilja"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Po shkëputet"</string>
 </resources>
diff --git a/car-telephony-common/res/values-sr/strings.xml b/car-telephony-common/res/values-sr/strings.xml
index 1f3837f..cd3a045 100644
--- a/car-telephony-common/res/values-sr/strings.xml
+++ b/car-telephony-common/res/values-sr/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Непознато"</string>
     <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_connecting" msgid="6844097368588248151">"Повезује се"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Позива се"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"На чекању"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Позив је завршен"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Повезан"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Звони…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Прекида се веза…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Звони"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Прекида се веза"</string>
 </resources>
diff --git a/car-telephony-common/res/values-sv/strings.xml b/car-telephony-common/res/values-sv/strings.xml
index f4b9b1a..dc384ae 100644
--- a/car-telephony-common/res/values-sv/strings.xml
+++ b/car-telephony-common/res/values-sv/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Okänd"</string>
     <string name="voicemail" msgid="2125552157407909509">"Röstbrevlåda"</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">"Ansluter …"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Ringer upp …"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Ansluter"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Ringer"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Parkerat"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Samtal avslutat"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Ansluten"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Ringer …"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Kopplar från …"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Ringer"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Kopplar från"</string>
 </resources>
diff --git a/car-telephony-common/res/values-sw/strings.xml b/car-telephony-common/res/values-sw/strings.xml
index f6adbc1..18ea6e2 100644
--- a/car-telephony-common/res/values-sw/strings.xml
+++ b/car-telephony-common/res/values-sw/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Haijulikani"</string>
     <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_connecting" msgid="6844097368588248151">"Inaunganisha"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Inapiga"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Inangoja"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Simu Imekamilika"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Imeunganisha"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Inalia…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Inaondoa…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Inalia"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Inakata muunganisho"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ta/strings.xml b/car-telephony-common/res/values-ta/strings.xml
index d835fab..848f744 100644
--- a/car-telephony-common/res/values-ta/strings.xml
+++ b/car-telephony-common/res/values-ta/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"தெரியாதவர்"</string>
     <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_connecting" msgid="6844097368588248151">"இணைக்கிறது"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"டயல் செய்கிறது"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"காத்திருப்பில்"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"அழைப்பு முடிந்தது"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"இணைக்கப்பட்டது"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"அழைக்கிறது…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"துண்டிக்கிறது…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"ரிங் ஆகிறது"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"துண்டிக்கிறது"</string>
 </resources>
diff --git a/car-telephony-common/res/values-te/strings.xml b/car-telephony-common/res/values-te/strings.xml
index 2ebcb08..4df7667 100644
--- a/car-telephony-common/res/values-te/strings.xml
+++ b/car-telephony-common/res/values-te/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"తెలియదు"</string>
     <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_connecting" msgid="6844097368588248151">"కనెక్ట్ చేయబడుతోంది"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"డయల్ చేస్తోంది"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"హోల్డ్‌లో ఉంది"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"కాల్ ముగిసింది"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"కనెక్ట్ చేయబడింది"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"రింగ్ అవుతోంది…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"డిస్కనెక్టవుతోంది…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"రింగ్ వస్తోంది"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"డిస్‌కనెక్ట్ చేస్తోంది"</string>
 </resources>
diff --git a/car-telephony-common/res/values-th/strings.xml b/car-telephony-common/res/values-th/strings.xml
index 7af5876..be4474d 100644
--- a/car-telephony-common/res/values-th/strings.xml
+++ b/car-telephony-common/res/values-th/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"ไม่รู้จัก"</string>
     <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_connecting" msgid="6844097368588248151">"กำลังเชื่อมต่อ"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"กำลังโทรออก"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"พักสาย"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"วางสายแล้ว"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"เชื่อมต่อแล้ว"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"กำลังส่งเสียง…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"ยกเลิกการเชื่อมต่อ…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"เสียงกริ่ง"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"กำลังตัดการเชื่อมต่อ"</string>
 </resources>
diff --git a/car-telephony-common/res/values-tl/strings.xml b/car-telephony-common/res/values-tl/strings.xml
index f5f02ef..01d562f 100644
--- a/car-telephony-common/res/values-tl/strings.xml
+++ b/car-telephony-common/res/values-tl/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Hindi Alam"</string>
     <string name="voicemail" msgid="2125552157407909509">"Voicemail"</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">"Kumokonekta…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Dina-dial…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Kumokonekta"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Dina-dial"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Naka-hold"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Natapos ang Tawag"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Nakakonekta"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Nagri-ring…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Dinidiskonekta…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Nagri-ring"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Nagdidiskonekta"</string>
 </resources>
diff --git a/car-telephony-common/res/values-tr/strings.xml b/car-telephony-common/res/values-tr/strings.xml
index 8da8d62..8a1798b 100644
--- a/car-telephony-common/res/values-tr/strings.xml
+++ b/car-telephony-common/res/values-tr/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Arayan Bilinmiyor"</string>
     <string name="voicemail" msgid="2125552157407909509">"Sesli Mesaj"</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">"Bağlanıyor…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Numara çevriliyor…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Bağlanıyor"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Numara Çevriliyor"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Beklemede"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Çağrı Sonlandırıldı"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Bağlandı"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Zil çaldırılıyor…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Bağlantı kesiliyor…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Çalıyor"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Bağlantı Kesiliyor"</string>
 </resources>
diff --git a/car-telephony-common/res/values-uk/strings.xml b/car-telephony-common/res/values-uk/strings.xml
index 6c05db2..7502dab 100644
--- a/car-telephony-common/res/values-uk/strings.xml
+++ b/car-telephony-common/res/values-uk/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Невідомо"</string>
     <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_connecting" msgid="6844097368588248151">"З’єднання"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Набір номера"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Утримується"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Виклик завершено"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Під’єднано"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Дзвінок…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Від’єднання…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Дзвінок"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Від’єднання"</string>
 </resources>
diff --git a/car-telephony-common/res/values-ur/strings.xml b/car-telephony-common/res/values-ur/strings.xml
index 92dfe09..36a3e2a 100644
--- a/car-telephony-common/res/values-ur/strings.xml
+++ b/car-telephony-common/res/values-ur/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"نامعلوم"</string>
     <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_connecting" msgid="6844097368588248151">"منسلک ہو رہا ہے"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"ڈائل ہو رہا ہے"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"ہولڈ پر ہے"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"کال ختم ہوگئی"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"منسلک ہے"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"گھنٹی بج رہی ہے…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"غیر منسلک ہو رہا ہے…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"کال کی جا رہی ہے"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"غیر منسلک ہو رہا ہے"</string>
 </resources>
diff --git a/car-telephony-common/res/values-uz/strings.xml b/car-telephony-common/res/values-uz/strings.xml
index 2683304..7b7e8dd 100644
--- a/car-telephony-common/res/values-uz/strings.xml
+++ b/car-telephony-common/res/values-uz/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Noaniq"</string>
     <string name="voicemail" msgid="2125552157407909509">"Ovozli pochta"</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">"Ulanmoqda…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Raqam terilmoqda…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Ulanmoqda"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Raqam terilmoqda"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Kutish holatida"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Chaqiruv yakunlandi"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Ulandi"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Jiringlamoqda…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Uzilmoqda…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Jiringlamoqda"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Aloqa uzilmoqda"</string>
 </resources>
diff --git a/car-telephony-common/res/values-vi/strings.xml b/car-telephony-common/res/values-vi/strings.xml
index e52194a..9e6056b 100644
--- a/car-telephony-common/res/values-vi/strings.xml
+++ b/car-telephony-common/res/values-vi/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Không xác định"</string>
     <string name="voicemail" msgid="2125552157407909509">"Thư thoại"</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">"Đang kết nối…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Đang quay số..."</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Đang kết nối"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Đang gọi"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Đang chờ"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Cuộc gọi đã kết thúc"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Đã kết nối"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Đang đổ chuông..."</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Đang ngắt kết nối…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Đang đổ chuông"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Đang ngắt kết nối"</string>
 </resources>
diff --git a/car-telephony-common/res/values-zh-rCN/strings.xml b/car-telephony-common/res/values-zh-rCN/strings.xml
index 1a6a652..a38b026 100644
--- a/car-telephony-common/res/values-zh-rCN/strings.xml
+++ b/car-telephony-common/res/values-zh-rCN/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"未知"</string>
     <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_connecting" msgid="6844097368588248151">"正在连接"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"正在拨号"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"呼叫等待"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"通话已结束"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"已连接"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"正在响铃…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"正在断开连接…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"正在响铃"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"正在中断连接"</string>
 </resources>
diff --git a/car-telephony-common/res/values-zh-rHK/strings.xml b/car-telephony-common/res/values-zh-rHK/strings.xml
index c92766e..ee64d81 100644
--- a/car-telephony-common/res/values-zh-rHK/strings.xml
+++ b/car-telephony-common/res/values-zh-rHK/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"不明"</string>
     <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_connecting" msgid="6844097368588248151">"正在連接"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"正在撥號"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"保留通話"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"通話已結束"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"已連接"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"正在發出鈴聲…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"正在解除連接…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"正在發出鈴聲"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"正在中斷連線"</string>
 </resources>
diff --git a/car-telephony-common/res/values-zh-rTW/strings.xml b/car-telephony-common/res/values-zh-rTW/strings.xml
index decc1db..821c867 100644
--- a/car-telephony-common/res/values-zh-rTW/strings.xml
+++ b/car-telephony-common/res/values-zh-rTW/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"不明"</string>
     <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_connecting" msgid="6844097368588248151">"連線中"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"撥號中"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"保留中"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"通話結束"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"已連線"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"鈴響中…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"正在中斷連線…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"鈴響中"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"正在中斷連線"</string>
 </resources>
diff --git a/car-telephony-common/res/values-zu/strings.xml b/car-telephony-common/res/values-zu/strings.xml
index 0978e00..63de418 100644
--- a/car-telephony-common/res/values-zu/strings.xml
+++ b/car-telephony-common/res/values-zu/strings.xml
@@ -19,11 +19,11 @@
     <string name="unknown" msgid="3237922751873109097">"Akwaziwa"</string>
     <string name="voicemail" msgid="2125552157407909509">"Ivoyisimeyili"</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">"Iyaxhuma…"</string>
-    <string name="call_state_dialing" msgid="1534599871716648114">"Iyadayela…"</string>
+    <string name="call_state_connecting" msgid="6844097368588248151">"Iyaxhuma"</string>
+    <string name="call_state_dialing" msgid="4397655224585553327">"Iyadayela"</string>
     <string name="call_state_hold" msgid="6834028102796624100">"Ibanjiwe"</string>
     <string name="call_state_call_ended" msgid="4159349597599886429">"Ikholi iqediwe"</string>
     <string name="call_state_call_active" msgid="2769644783657864202">"Ixhunyiwe"</string>
-    <string name="call_state_call_ringing" msgid="4618803402954375017">"Iyakhala…"</string>
-    <string name="call_state_call_ending" msgid="5037498349965472247">"Iyanqamula…"</string>
+    <string name="call_state_call_ringing" msgid="2115824593555284816">"Iyakhala"</string>
+    <string name="call_state_call_ending" msgid="738099494362020903">"Iyanqamula"</string>
 </resources>
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 43e2cdc..26d56b1 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
@@ -23,7 +23,6 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.provider.ContactsContract;
-import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -305,9 +304,11 @@
      * null} if this contact doesn't contain the given phone number.
      */
     @Nullable
-    public PhoneNumber getPhoneNumber(String number) {
+    public PhoneNumber getPhoneNumber(Context context, String number) {
+        I18nPhoneNumberWrapper i18nPhoneNumber = I18nPhoneNumberWrapper.Factory.INSTANCE.get(
+                context, number);
         for (PhoneNumber phoneNumber : mPhoneNumbers) {
-            if (PhoneNumberUtils.compare(phoneNumber.getNumber(), number)) {
+            if (phoneNumber.getI18nPhoneNumberWrapper().equals(i18nPhoneNumber)) {
                 return phoneNumber;
             }
         }
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 8eebf95..398cfa1 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
@@ -90,14 +90,12 @@
     private InMemoryPhoneBook(Context context) {
         mContext = context;
 
-        // TODO(b/138749585): clean up filtering once contact cloud sync is disabled.
         QueryParam contactListQueryParam = new QueryParam(
                 ContactsContract.Data.CONTENT_URI,
                 null,
-                ContactsContract.Data.MIMETYPE + " = ? and "
-                        + ContactsContract.RawContacts.ACCOUNT_TYPE + " != ?",
+                ContactsContract.Data.MIMETYPE + " = ?",
                 new String[]{
-                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, "com.google"},
+                        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE},
                 ContactsContract.Contacts.DISPLAY_NAME + " ASC ");
         mContactListAsyncQueryLiveData = new AsyncQueryLiveData<List<Contact>>(mContext,
                 QueryParam.of(contactListQueryParam)) {
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 7cb60ae..f3a2b0e 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
@@ -212,7 +212,7 @@
                     name = context.getString(R.string.unknown);
                 }
 
-                PhoneNumber phoneNumber = contact.getPhoneNumber(number);
+                PhoneNumber phoneNumber = contact.getPhoneNumber(context, number);
                 CharSequence typeLabel = "";
                 if (phoneNumber != null) {
                     typeLabel = Phone.getTypeLabel(context.getResources(),
diff --git a/car-ui-lib/.gitignore b/car-ui-lib/.gitignore
new file mode 100644
index 0000000..fa8bef3
--- /dev/null
+++ b/car-ui-lib/.gitignore
@@ -0,0 +1,11 @@
+# Local configuration
+local.properties
+gradle-wrapper.properties
+
+# Gradle
+gradle/
+.gradle/
+build/
+
+# IntelliJ
+*.iml
\ No newline at end of file
diff --git a/car-chassis-lib/Android.mk b/car-ui-lib/Android.mk
similarity index 67%
rename from car-chassis-lib/Android.mk
rename to car-ui-lib/Android.mk
index 5ae4041..28edddd 100644
--- a/car-chassis-lib/Android.mk
+++ b/car-ui-lib/Android.mk
@@ -14,6 +14,27 @@
 # limitations under the License.
 #
 
+# Including generate_rros.mk utility.
+# Usage:
+#
+# LOCAL_PATH := $(call my-dir)
+#
+# CAR_UI_RRO_SET_NAME := sample
+# CAR_UI_RESOURCE_DIR := $(LOCAL_PATH)/res
+# CAR_UI_RRO_TARGETS := \
+#   com.your.package.name.1 \
+#   com.your.package.name.2 \
+#   com.your.package.name.3
+#
+# include $(CAR_UI_GENERATE_RRO_SET)
+#
+# Your AndroidManifest must use {{TARGET_PACKAGE_NAME}} and {{RRO_PACKAGE_NAME}}
+# tags, which will be replaced accordingly during build.
+
+CAR_UI_GENERATE_RRO_SET := $(call my-dir)/generate_rros.mk
+
+# Build car-ui library
+
 LOCAL_PATH:= $(call my-dir)
 
 include $(CLEAR_VARS)
@@ -22,7 +43,7 @@
 
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 
-LOCAL_MODULE := car-chassis-lib
+LOCAL_MODULE := car-ui-lib
 
 LOCAL_MODULE_TAGS := optional
 
@@ -38,7 +59,9 @@
 
 LOCAL_STATIC_ANDROID_LIBRARIES += \
     androidx.annotation_annotation \
+    androidx.appcompat_appcompat \
     androidx-constraintlayout_constraintlayout \
+    androidx.preference_preference \
     androidx.recyclerview_recyclerview
 
 LOCAL_STATIC_JAVA_LIBRARIES += \
diff --git a/car-chassis-lib/AndroidManifest.xml b/car-ui-lib/AndroidManifest-gradle.xml
similarity index 84%
copy from car-chassis-lib/AndroidManifest.xml
copy to car-ui-lib/AndroidManifest-gradle.xml
index c398dc1..b6e8ee6 100644
--- a/car-chassis-lib/AndroidManifest.xml
+++ b/car-ui-lib/AndroidManifest-gradle.xml
@@ -16,8 +16,5 @@
   -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.car.chassis">
-  <uses-sdk
-      android:minSdkVersion="14"
-      android:targetSdkVersion="28" />
+          package="com.android.car.ui">
 </manifest>
diff --git a/car-chassis-lib/AndroidManifest.xml b/car-ui-lib/AndroidManifest.xml
similarity index 94%
rename from car-chassis-lib/AndroidManifest.xml
rename to car-ui-lib/AndroidManifest.xml
index c398dc1..038ee67 100644
--- a/car-chassis-lib/AndroidManifest.xml
+++ b/car-ui-lib/AndroidManifest.xml
@@ -16,7 +16,7 @@
   -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.car.chassis">
+          package="com.android.car.ui">
   <uses-sdk
       android:minSdkVersion="14"
       android:targetSdkVersion="28" />
diff --git a/car-ui-lib/OWNERS b/car-ui-lib/OWNERS
new file mode 100644
index 0000000..aef5c65
--- /dev/null
+++ b/car-ui-lib/OWNERS
@@ -0,0 +1,9 @@
+# People who can approve changes for submission.
+
+# Engs
+colefaust@google.com
+priyanksingh@google.com
+rampara@google.com
+ckoessler@google.com
+
+
diff --git a/car-chassis-lib/README.md b/car-ui-lib/README.md
similarity index 62%
rename from car-chassis-lib/README.md
rename to car-ui-lib/README.md
index b3e3c1c..282f8e1 100644
--- a/car-chassis-lib/README.md
+++ b/car-ui-lib/README.md
@@ -2,7 +2,7 @@
 Components and resources designed to increase Automotive UI consistency between
 GAS (Google Automotive Services) apps, system-apps and OEM developed apps.
 
-See: go/aae-chassis
+See: go/aae-carui
 
 ## Content
 
@@ -14,15 +14,15 @@
 This library is developed in Gerrit and copied as source to Google3 using
 Copybara (go/copybara).
 
-Source: /packages/apps/Car/libs/car-chassis-lib
+Source: /packages/apps/Car/libs/car-ui-lib
 Target: //google3/third_party/java/android_libs/android_car_chassis_lib
 
 Here is the process for updating this library:
 
-1. Develop, test and create CL in Gerrit with the desired changes
-2. On Google3, run update.sh and test your changes
-3. Iterate until your changes look okay on both places.
-4. Back on Gerrit, submit your CL
-5. Back on Google3, run update.sh again and submit
+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
+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
 
 TODO: Automate this process using CaaS (in progress)
diff --git a/car-ui-lib/build.gradle b/car-ui-lib/build.gradle
new file mode 100644
index 0000000..7a8596f
--- /dev/null
+++ b/car-ui-lib/build.gradle
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.0'
+
+        // 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 28
+
+    defaultConfig {
+        minSdkVersion 28
+        targetSdkVersion 28
+        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'
+    implementation files('../../../../../out/target/common/obj/JAVA_LIBRARIES/android.car_intermediates/classes.jar')
+}
diff --git a/car-ui-lib/generate_rros.mk b/car-ui-lib/generate_rros.mk
new file mode 100644
index 0000000..7e93c36
--- /dev/null
+++ b/car-ui-lib/generate_rros.mk
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2019 The Android Open-Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Generates one RRO for a given package.
+# $(1) target package name
+# $(2) name of the RRO set (e.g. "base")
+# $(3) resources folder
+define generate-rro
+  include $$(CLEAR_VARS)
+
+  rro_package_name := $(2)-$(subst .,-,$(1))
+  LOCAL_RESOURCE_DIR := $(3)
+  LOCAL_RRO_THEME := $$(rro_package_name)
+  LOCAL_PACKAGE_NAME := $$(rro_package_name)
+  LOCAL_CERTIFICATE := platform
+  LOCAL_SDK_VERSION := current
+
+  gen := $$(call intermediates-dir-for,ETC,$$(rro_package_name))/AndroidManifest.xml
+  $$(gen): $(LOCAL_PATH)/AndroidManifest.xml
+	@echo Generate $$@
+	$$(hide) mkdir -p $$(dir $$@)
+	$$(hide) sed -e "s/{{TARGET_PACKAGE_NAME}}/$(1)/" \
+	             -e "s/{{RRO_PACKAGE_NAME}}/$(1).$(2).rro/" $$< > $$@
+  LOCAL_FULL_MANIFEST_FILE := $$(gen)
+
+  include $$(BUILD_RRO_PACKAGE)
+endef
+
+$(foreach t,\
+  $(CAR_UI_RRO_TARGETS),\
+  $(eval $(call generate-rro,$(t),$(CAR_UI_RRO_SET_NAME),$(CAR_UI_RESOURCE_DIR))))
+
+# Clear variables
+CAR_UI_RRO_SET_NAME :=
+CAR_UI_RESOURCE_DIR :=
+CAR_UI_RRO_TARGETS :=
diff --git a/car-ui-lib/gradle.properties b/car-ui-lib/gradle.properties
new file mode 100644
index 0000000..9dad1c4
--- /dev/null
+++ b/car-ui-lib/gradle.properties
@@ -0,0 +1,34 @@
+#
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
\ No newline at end of file
diff --git a/car-ui-lib/gradlew b/car-ui-lib/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/car-ui-lib/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/car-ui-lib/gradlew.bat b/car-ui-lib/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/car-ui-lib/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off

+@rem ##########################################################################

+@rem

+@rem  Gradle startup script for Windows

+@rem

+@rem ##########################################################################

+

+@rem Set local scope for the variables with windows NT shell

+if "%OS%"=="Windows_NT" setlocal

+

+set DIRNAME=%~dp0

+if "%DIRNAME%" == "" set DIRNAME=.

+set APP_BASE_NAME=%~n0

+set APP_HOME=%DIRNAME%

+

+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.

+set DEFAULT_JVM_OPTS=

+

+@rem Find java.exe

+if defined JAVA_HOME goto findJavaFromJavaHome

+

+set JAVA_EXE=java.exe

+%JAVA_EXE% -version >NUL 2>&1

+if "%ERRORLEVEL%" == "0" goto init

+

+echo.

+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:findJavaFromJavaHome

+set JAVA_HOME=%JAVA_HOME:"=%

+set JAVA_EXE=%JAVA_HOME%/bin/java.exe

+

+if exist "%JAVA_EXE%" goto init

+

+echo.

+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:init

+@rem Get command-line arguments, handling Windows variants

+

+if not "%OS%" == "Windows_NT" goto win9xME_args

+

+:win9xME_args

+@rem Slurp the command line arguments.

+set CMD_LINE_ARGS=

+set _SKIP=2

+

+:win9xME_args_slurp

+if "x%~1" == "x" goto execute

+

+set CMD_LINE_ARGS=%*

+

+:execute

+@rem Setup the command line

+

+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

+

+@rem Execute Gradle

+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

+

+:end

+@rem End local scope for the variables with windows NT shell

+if "%ERRORLEVEL%"=="0" goto mainEnd

+

+:fail

+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of

+rem the _cmd.exe /c_ return code!

+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1

+exit /b 1

+

+:mainEnd

+if "%OS%"=="Windows_NT" endlocal

+

+:omega

diff --git a/car-chassis-lib/res/color/chassis_tab_item_selector.xml b/car-ui-lib/res/color/car_ui_tab_item_selector.xml
similarity index 82%
rename from car-chassis-lib/res/color/chassis_tab_item_selector.xml
rename to car-ui-lib/res/color/car_ui_tab_item_selector.xml
index 22f747f..c9c8d8d 100644
--- a/car-chassis-lib/res/color/chassis_tab_item_selector.xml
+++ b/car-ui-lib/res/color/car_ui_tab_item_selector.xml
@@ -16,6 +16,6 @@
   -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="@color/chassis_tab_selected_color" android:state_selected="true"/>
-    <item android:color="@color/chassis_tab_unselected_color"/>
+    <item android:color="@color/car_ui_tab_selected_color" android:state_selected="true"/>
+    <item android:color="@color/car_ui_tab_unselected_color"/>
 </selector>
diff --git a/car-chassis-lib/res/color/chassis_tab_item_selector.xml b/car-ui-lib/res/color/car_ui_toolbar_icon_tint.xml
similarity index 81%
copy from car-chassis-lib/res/color/chassis_tab_item_selector.xml
copy to car-ui-lib/res/color/car_ui_toolbar_icon_tint.xml
index 22f747f..d6c7657 100644
--- a/car-chassis-lib/res/color/chassis_tab_item_selector.xml
+++ b/car-ui-lib/res/color/car_ui_toolbar_icon_tint.xml
@@ -16,6 +16,6 @@
   -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="@color/chassis_tab_selected_color" android:state_selected="true"/>
-    <item android:color="@color/chassis_tab_unselected_color"/>
+    <item android:color="@color/car_ui_tab_selected_color" android:state_enabled="true"/>
+    <item android:color="@color/car_ui_tab_unselected_color"/>
 </selector>
diff --git a/car-chassis-lib/res/color/chassis_tab_item_selector.xml b/car-ui-lib/res/color/car_ui_toolbar_menu_item_icon_color.xml
similarity index 81%
copy from car-chassis-lib/res/color/chassis_tab_item_selector.xml
copy to car-ui-lib/res/color/car_ui_toolbar_menu_item_icon_color.xml
index 22f747f..d6c7657 100644
--- a/car-chassis-lib/res/color/chassis_tab_item_selector.xml
+++ b/car-ui-lib/res/color/car_ui_toolbar_menu_item_icon_color.xml
@@ -16,6 +16,6 @@
   -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="@color/chassis_tab_selected_color" android:state_selected="true"/>
-    <item android:color="@color/chassis_tab_unselected_color"/>
+    <item android:color="@color/car_ui_tab_selected_color" android:state_enabled="true"/>
+    <item android:color="@color/car_ui_tab_unselected_color"/>
 </selector>
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_divider.xml
similarity index 67%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/drawable/car_ui_divider.xml
index 7d29d64..164b71a 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_divider.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,11 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+    <size android:height="2dp"
+          android:width="2dp"/>
+    <solid android:color="@android:color/transparent" />
+</shape>
diff --git a/car-chassis-lib/res/drawable/ic_arrow_back.xml b/car-ui-lib/res/drawable/car_ui_icon_arrow_back.xml
similarity index 100%
rename from car-chassis-lib/res/drawable/ic_arrow_back.xml
rename to car-ui-lib/res/drawable/car_ui_icon_arrow_back.xml
diff --git a/car-chassis-lib/res/drawable/ic_close.xml b/car-ui-lib/res/drawable/car_ui_icon_close.xml
similarity index 91%
rename from car-chassis-lib/res/drawable/ic_close.xml
rename to car-ui-lib/res/drawable/car_ui_icon_close.xml
index 48ab552..482df0f 100644
--- a/car-chassis-lib/res/drawable/ic_close.xml
+++ b/car-ui-lib/res/drawable/car_ui_icon_close.xml
@@ -17,8 +17,8 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="@dimen/primary_icon_size"
-    android:height="@dimen/primary_icon_size"
+    android:width="24dp"
+    android:height="24dp"
     android:viewportHeight="24.0"
     android:viewportWidth="24.0">
     <path
diff --git a/car-chassis-lib/res/drawable/ic_close.xml b/car-ui-lib/res/drawable/car_ui_icon_overflow_menu.xml
similarity index 78%
copy from car-chassis-lib/res/drawable/ic_close.xml
copy to car-ui-lib/res/drawable/car_ui_icon_overflow_menu.xml
index 48ab552..6228c3b 100644
--- a/car-chassis-lib/res/drawable/ic_close.xml
+++ b/car-ui-lib/res/drawable/car_ui_icon_overflow_menu.xml
@@ -17,11 +17,11 @@
 
 <vector
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="@dimen/primary_icon_size"
-    android:height="@dimen/primary_icon_size"
+    android:width="24dp"
+    android:height="24dp"
     android:viewportHeight="24.0"
     android:viewportWidth="24.0">
     <path
         android:fillColor="#FFF"
-        android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
-</vector>
\ No newline at end of file
+        android:pathData="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>
+</vector>
diff --git a/car-chassis-lib/res/drawable/ic_search.xml b/car-ui-lib/res/drawable/car_ui_icon_search.xml
similarity index 92%
rename from car-chassis-lib/res/drawable/ic_search.xml
rename to car-ui-lib/res/drawable/car_ui_icon_search.xml
index 87e7d46..f70e61e 100644
--- a/car-chassis-lib/res/drawable/ic_search.xml
+++ b/car-ui-lib/res/drawable/car_ui_icon_search.xml
@@ -14,8 +14,8 @@
 limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="@dimen/primary_icon_size"
-    android:height="@dimen/primary_icon_size"
+    android:width="48dp"
+    android:height="48dp"
     android:viewportWidth="48"
     android:viewportHeight="48">
 
diff --git a/car-chassis-lib/res/drawable/ic_settings.xml b/car-ui-lib/res/drawable/car_ui_icon_settings.xml
similarity index 94%
rename from car-chassis-lib/res/drawable/ic_settings.xml
rename to car-ui-lib/res/drawable/car_ui_icon_settings.xml
index 5c9e6a7..ebf8576 100644
--- a/car-chassis-lib/res/drawable/ic_settings.xml
+++ b/car-ui-lib/res/drawable/car_ui_icon_settings.xml
@@ -14,8 +14,8 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="@dimen/primary_icon_size"
-        android:height="@dimen/primary_icon_size"
+        android:width="24dp"
+        android:height="24dp"
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
 
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_button_ripple_background.xml
similarity index 70%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/drawable/car_ui_pagedrecyclerview_button_ripple_background.xml
index 7d29d64..0acb196 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_button_ripple_background.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,8 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+
+<ripple
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="@color/car_ui_ripple_color" />
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_divider.xml
similarity index 69%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/drawable/car_ui_pagedrecyclerview_divider.xml
index 7d29d64..bddaae3 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_divider.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,10 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+    <size android:height="0dp" />
+    <solid android:color="@android:color/transparent" />
+</shape>
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_ic_down.xml
similarity index 60%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/drawable/car_ui_pagedrecyclerview_ic_down.xml
index 7d29d64..380bf46 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_ic_down.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,14 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48dp"
+        android:height="48dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:pathData="M14.83,16.42L24,25.59l9.17,-9.17L36,19.25l-12,12 -12,-12z"
+        android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_ic_up.xml
similarity index 60%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/drawable/car_ui_pagedrecyclerview_ic_up.xml
index 7d29d64..2eff62f 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_ic_up.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,14 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="48dp"
+        android:height="48dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:pathData="M14.83,30.83L24,21.66l9.17,9.17L36,28 24,16 12,28z"
+        android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_scrollbar_thumb.xml
similarity index 66%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/drawable/car_ui_pagedrecyclerview_scrollbar_thumb.xml
index 7d29d64..ec6318a 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_pagedrecyclerview_scrollbar_thumb.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,11 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/car_ui_scrollbar_thumb" />
+    <corners android:radius="@dimen/car_ui_scrollbar_thumb_radius"/>
+</shape>
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_toolbar_icon_background.xml
similarity index 83%
rename from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
rename to car-ui-lib/res/drawable/car_ui_toolbar_icon_background.xml
index 7d29d64..75a3bb9 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_toolbar_icon_background.xml
@@ -17,5 +17,5 @@
   ~
  -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+        android:color="@color/car_ui_ripple_color"
+        android:radius="@dimen/car_ui_toolbar_icon_ripple_radius"/>
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_divider.xml
similarity index 75%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/drawable/car_ui_toolbar_menu_item_divider.xml
index 7d29d64..70f32c5 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/drawable/car_ui_toolbar_menu_item_divider.xml
@@ -16,6 +16,9 @@
   ~ limitations under the License.
   ~
  -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <size
+        android:width="@dimen/car_ui_toolbar_menu_item_margin"/>
+</shape>
diff --git a/car-ui-lib/res/layout-port/car_ui_toolbar.xml b/car-ui-lib/res/layout-port/car_ui_toolbar.xml
new file mode 100644
index 0000000..1eb6758
--- /dev/null
+++ b/car-ui-lib/res/layout-port/car_ui_toolbar.xml
@@ -0,0 +1,150 @@
+<?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:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <!-- When the user finishes searching, we call clearFocus() on the editText in the search bar.
+         clearFocus() will actually send the focus to the first focusable thing in the layout.
+         If that focusable thing is still the search bar it will just reselect it, and the user won't
+         be able to deselect. So make a focusable view here to guarantee that we can clear the focus -->
+    <View
+        android:layout_width="1dp"
+        android:layout_height="1dp"
+        android:focusable="true"
+        android:focusableInTouchMode="true"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:id="@+id/row_separator_guideline"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:orientation="horizontal"
+        app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_first_row_height"/>
+
+    <!-- can't use 0dp for layout_height or the constraintlayout effect kicks in -->
+    <View
+        android:id="@+id/row_separator"
+        android:layout_width="match_parent"
+        android:layout_height="0.01dp"
+        app:layout_constraintTop_toBottomOf="@id/row_separator_guideline"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
+
+    <FrameLayout
+        android:id="@+id/nav_icon_container"
+        android:layout_width="@dimen/car_ui_toolbar_nav_button_width"
+        android:layout_height="0dp"
+        android:background="?android:attr/selectableItemBackground"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/row_separator"
+        app:layout_constraintStart_toStartOf="parent">
+        <ImageView
+            android:id="@+id/nav_icon"
+            android:layout_width="@dimen/car_ui_toolbar_icon_size"
+            android:layout_height="@dimen/car_ui_toolbar_icon_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"
+            style="@style/Widget.CarUi.Toolbar.NavIcon"/>
+        <ImageView
+            android:id="@+id/logo"
+            android:layout_width="@dimen/car_ui_toolbar_icon_size"
+            android:layout_height="@dimen/car_ui_toolbar_icon_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"/>
+    </FrameLayout>
+
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/car_ui_toolbar_title_margin_start"
+        style="@style/TextAppearance.CarUi.Widget.Toolbar.Title"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/row_separator"
+        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@id/menu_items_container"/>
+
+    <com.android.car.ui.toolbar.SearchView
+        android:id="@+id/search_view"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:visibility="gone"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/row_separator"
+        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@id/menu_items_container"/>
+
+    <FrameLayout
+        android:id="@+id/custom_view_container"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:visibility="gone"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/row_separator"
+        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@id/menu_items_container"/>
+
+    <LinearLayout
+        android:id="@+id/menu_items_container"
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        android:orientation="horizontal"
+        android:divider="@drawable/car_ui_toolbar_menu_item_divider"
+        android:showDividers="beginning|middle|end"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/row_separator"
+        app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_overflow_button"/>
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_overflow_button"
+        android:layout_width="@dimen/car_ui_touch_target_width"
+        android:layout_height="@dimen/car_ui_touch_target_height"
+        android:layout_marginLeft="@dimen/car_ui_toolbar_menu_item_margin"
+        android:layout_marginRight="@dimen/car_ui_toolbar_menu_item_margin"
+        android:visibility="gone"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@id/row_separator"
+        app:layout_constraintEnd_toEndOf="parent">
+        <ImageView
+            android:src="@drawable/car_ui_icon_overflow_menu"
+            android:layout_width="@dimen/car_ui_primary_icon_size"
+            android:layout_height="@dimen/car_ui_primary_icon_size"
+            android:layout_gravity="center"
+            android:background="@drawable/car_ui_toolbar_icon_background"
+            android:tint="@color/car_ui_toolbar_menu_item_icon_color"
+            android:tintMode="src_in"/>
+    </FrameLayout>
+
+    <com.android.car.ui.toolbar.TabLayout
+        android:id="@+id/tabs"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/car_ui_toolbar_second_row_height"
+        app:layout_constraintTop_toBottomOf="@id/row_separator"
+        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"/>
+
+    <!-- can't use 0dp for layout_height or the constraintlayout effect kicks in -->
+    <View
+        android:id="@+id/bottom_styleable"
+        android:layout_width="match_parent"
+        android:layout_height="0.01dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/res/layout/car_ui_alert_dialog_edit_text.xml b/car-ui-lib/res/layout/car_ui_alert_dialog_edit_text.xml
new file mode 100644
index 0000000..3cc87c1
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_alert_dialog_edit_text.xml
@@ -0,0 +1,27 @@
+<?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.
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android">
+    <EditText
+              android:id="@+id/textbox"
+              android:layout_width="match_parent"
+              android:layout_height="@dimen/car_ui_dialog_edittext_height"
+              android:layout_marginTop="@dimen/car_ui_dialog_edittext_margin_top"
+              android:layout_marginBottom="@dimen/car_ui_dialog_edittext_margin_bottom"
+              android:layout_marginStart="@dimen/car_ui_dialog_edittext_margin_start"
+              android:layout_marginEnd="@dimen/car_ui_dialog_edittext_margin_end"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/res/layout/car_ui_paged_recycler_view_item.xml
similarity index 65%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/res/layout/car_ui_paged_recycler_view_item.xml
index 7d29d64..6a35b43 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/res/layout/car_ui_paged_recycler_view_item.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,12 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/nested_recycler_view_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center">
+</FrameLayout>
diff --git a/car-ui-lib/res/layout/car_ui_pagedrecyclerview_scrollbar.xml b/car-ui-lib/res/layout/car_ui_pagedrecyclerview_scrollbar.xml
new file mode 100644
index 0000000..8fce2c3
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_pagedrecyclerview_scrollbar.xml
@@ -0,0 +1,54 @@
+<?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:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center">
+
+    <ImageButton
+        android:id="@+id/page_up"
+        android:layout_width="@dimen/car_ui_scrollbar_button_size"
+        android:layout_height="@dimen/car_ui_scrollbar_button_size"
+        android:background="@drawable/car_ui_pagedrecyclerview_button_ripple_background"
+        android:contentDescription="@string/car_ui_scrollbar_page_up_button"
+        android:focusable="false"
+        android:hapticFeedbackEnabled="false"
+        android:src="@drawable/car_ui_pagedrecyclerview_ic_up"
+        android:scaleType="centerInside" />
+
+    <!-- View height is dynamically calculated during layout. -->
+    <View
+        android:id="@+id/scrollbar_thumb"
+        android:layout_width="@dimen/car_ui_scrollbar_thumb_width"
+        android:layout_height="0dp"
+        android:layout_gravity="center_horizontal"
+        android:background="@drawable/car_ui_pagedrecyclerview_scrollbar_thumb" />
+
+    <ImageButton
+        android:id="@+id/page_down"
+        android:layout_width="@dimen/car_ui_scrollbar_button_size"
+        android:layout_height="@dimen/car_ui_scrollbar_button_size"
+        android:background="@drawable/car_ui_pagedrecyclerview_button_ripple_background"
+        android:contentDescription="@string/car_ui_scrollbar_page_down_button"
+        android:focusable="false"
+        android:hapticFeedbackEnabled="false"
+        android:src="@drawable/car_ui_pagedrecyclerview_ic_down"
+        android:scaleType="centerInside" />
+</LinearLayout>
diff --git a/car-ui-lib/res/layout/car_ui_preference.xml b/car-ui-lib/res/layout/car_ui_preference.xml
new file mode 100644
index 0000000..2c2f4cf
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_preference.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart">
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="@dimen/car_ui_preference_icon_size"
+        android:layout_height="@dimen/car_ui_preference_icon_size"
+        android:layout_alignParentStart="true"
+        android:layout_centerVertical="true"
+        android:layout_marginBottom="@dimen/car_ui_preference_content_margin_bottom"
+        android:layout_marginEnd="@dimen/car_ui_preference_icon_margin_end"
+        android:layout_marginTop="@dimen/car_ui_preference_content_margin_top"
+        android:scaleType="fitCenter"
+        android:tint="@color/car_ui_preference_icon_color"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_centerVertical="true"
+        android:layout_marginBottom="@dimen/car_ui_preference_content_margin_bottom"
+        android:layout_marginTop="@dimen/car_ui_preference_content_margin_top"
+        android:layout_toEndOf="@android:id/icon"
+        android:layout_toStartOf="@android:id/widget_frame"
+        android:orientation="vertical">
+
+        <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:textAppearance="@style/TextAppearance.CarUi.PreferenceSummary"/>
+
+    </LinearLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <FrameLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"/>
+
+</RelativeLayout>
diff --git a/car-ui-lib/res/layout/car_ui_preference_category.xml b/car-ui-lib/res/layout/car_ui_preference_category.xml
new file mode 100644
index 0000000..a9f3938
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_preference_category.xml
@@ -0,0 +1,64 @@
+<?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:background="?android:attr/selectableItemBackground"
+    android:focusable="true"
+    android:gravity="center_vertical"
+    android:minHeight="@dimen/car_ui_preference_category_min_height"
+    android:orientation="horizontal"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart">
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="@dimen/car_ui_preference_category_icon_size"
+        android:layout_height="@dimen/car_ui_preference_category_icon_size"
+        android:layout_gravity="center_vertical"
+        android:layout_marginBottom="@dimen/car_ui_preference_content_margin_bottom"
+        android:layout_marginEnd="@dimen/car_ui_preference_category_icon_margin_end"
+        android:layout_marginTop="@dimen/car_ui_preference_content_margin_top"
+        android:scaleType="fitCenter"
+        android:tint="@color/car_ui_preference_icon_color"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="@dimen/car_ui_preference_content_margin_bottom"
+        android:layout_marginTop="@dimen/car_ui_preference_content_margin_top"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textAlignment="viewStart"
+            android:textAppearance="@style/TextAppearance.CarUi.PreferenceCategoryTitle"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="@style/TextAppearance.CarUi.PreferenceSummary"/>
+
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/car-ui-lib/res/layout/car_ui_preference_dialog_edittext.xml b/car-ui-lib/res/layout/car_ui_preference_dialog_edittext.xml
new file mode 100644
index 0000000..04c1c37
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_preference_dialog_edittext.xml
@@ -0,0 +1,43 @@
+<?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="match_parent"
+    android:layout_marginTop="@dimen/car_ui_preference_edit_text_dialog_margin_top"
+    android:layout_marginBottom="@dimen/car_ui_preference_edit_text_dialog_margin_bottom"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@android:id/message"
+        style="@style/TextAppearance.CarUi.PreferenceEditTextDialogMessage"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="@dimen/car_ui_preference_edit_text_dialog_message_margin_bottom"
+        android:layout_marginStart="@dimen/car_ui_preference_edit_text_dialog_message_margin_start"
+        android:layout_marginEnd="@dimen/car_ui_preference_edit_text_dialog_message_margin_end"
+        android:visibility="gone"/>
+
+    <EditText
+        android:id="@android:id/edit"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="@dimen/car_ui_preference_edit_text_dialog_text_margin_end"
+        android:layout_marginStart="@dimen/car_ui_preference_edit_text_dialog_text_margin_start"/>
+
+</LinearLayout>
diff --git a/car-ui-lib/res/layout/car_ui_preference_dropdown.xml b/car-ui-lib/res/layout/car_ui_preference_dropdown.xml
new file mode 100644
index 0000000..cb6e8ce
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_preference_dropdown.xml
@@ -0,0 +1,33 @@
+<?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.
+-->
+
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+    <!-- This spinner should be invisible in the layout and take up no space, when the Preference
+         is clicked the dropdown will appear from this location on screen. -->
+    <Spinner
+        android:id="@+id/spinner"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/car_ui_preference_dropdown_padding_start"
+        android:visibility="invisible"/>
+
+    <include layout="@layout/car_ui_preference"/>
+
+</FrameLayout>
diff --git a/car-ui-lib/res/layout/car_ui_preference_fragment.xml b/car-ui-lib/res/layout/car_ui_preference_fragment.xml
new file mode 100644
index 0000000..766196d
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_preference_fragment.xml
@@ -0,0 +1,42 @@
+<?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"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.android.car.ui.toolbar.Toolbar
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/toolbar"
+        app:state="subpage"/>
+
+    <FrameLayout
+        android:id="@android:id/list_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+        <com.android.car.ui.pagedrecyclerview.PagedRecyclerView
+            android:id="@+id/recycler_view"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:scrollbars="none"/>
+    </FrameLayout>
+
+</LinearLayout>
diff --git a/car-chassis-lib/res/drawable/ic_close.xml b/car-ui-lib/res/layout/car_ui_preference_widget_checkbox.xml
similarity index 66%
copy from car-chassis-lib/res/drawable/ic_close.xml
copy to car-ui-lib/res/layout/car_ui_preference_widget_checkbox.xml
index 48ab552..e3f3158 100644
--- a/car-chassis-lib/res/drawable/ic_close.xml
+++ b/car-ui-lib/res/layout/car_ui_preference_widget_checkbox.xml
@@ -15,13 +15,11 @@
     limitations under the License.
 -->
 
-<vector
+<CheckBox
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="@dimen/primary_icon_size"
-    android:height="@dimen/primary_icon_size"
-    android:viewportHeight="24.0"
-    android:viewportWidth="24.0">
-    <path
-        android:fillColor="#FFF"
-        android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
-</vector>
\ No newline at end of file
+    android:id="@android:id/checkbox"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:focusable="false"
+    android:clickable="false"
+    android:background="@null"/>
diff --git a/car-ui-lib/res/layout/car_ui_preference_widget_seekbar.xml b/car-ui-lib/res/layout/car_ui_preference_widget_seekbar.xml
new file mode 100644
index 0000000..9442e7e
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_preference_widget_seekbar.xml
@@ -0,0 +1,89 @@
+<?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">
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="@dimen/car_ui_preference_icon_size"
+        android:layout_height="@dimen/car_ui_preference_icon_size"
+        android:layout_marginTop="@dimen/car_ui_preference_content_margin_top"
+        android:layout_marginBottom="@dimen/car_ui_preference_content_margin_bottom"
+        android:layout_marginEnd="@dimen/car_ui_preference_icon_margin_end"
+        android:scaleType="fitCenter"
+        android:tint="@color/car_ui_preference_icon_color"/>
+
+    <RelativeLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:layout_marginTop="@dimen/car_ui_preference_content_margin_top"
+        android:layout_marginBottom="@dimen/car_ui_preference_content_margin_bottom">
+
+        <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"
+                android:background="@null"
+                android:clickable="false"
+                android:focusable="false"/>
+
+            <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-chassis-lib/res/drawable/ic_close.xml b/car-ui-lib/res/layout/car_ui_preference_widget_switch.xml
similarity index 66%
copy from car-chassis-lib/res/drawable/ic_close.xml
copy to car-ui-lib/res/layout/car_ui_preference_widget_switch.xml
index 48ab552..9ec6697 100644
--- a/car-chassis-lib/res/drawable/ic_close.xml
+++ b/car-ui-lib/res/layout/car_ui_preference_widget_switch.xml
@@ -15,13 +15,11 @@
     limitations under the License.
 -->
 
-<vector
+<Switch
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="@dimen/primary_icon_size"
-    android:height="@dimen/primary_icon_size"
-    android:viewportHeight="24.0"
-    android:viewportWidth="24.0">
-    <path
-        android:fillColor="#FFF"
-        android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
-</vector>
\ No newline at end of file
+    android:id="@android:id/switch_widget"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@null"
+    android:clickable="false"
+    android:focusable="false"/>
diff --git a/car-ui-lib/res/layout/car_ui_search_view.xml b/car-ui-lib/res/layout/car_ui_search_view.xml
new file mode 100644
index 0000000..cdfa4b9
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_search_view.xml
@@ -0,0 +1,67 @@
+<?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.
+  -->
+
+<merge
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <FrameLayout
+        android:layout_width="@dimen/car_ui_touch_target_width"
+        android:layout_height="@dimen/car_ui_touch_target_width"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent">
+        <ImageView
+            android:id="@+id/icon"
+            android:layout_width="@dimen/car_ui_primary_icon_size"
+            android:layout_height="@dimen/car_ui_primary_icon_size"
+            android:layout_gravity="center"
+            android:src="@drawable/car_ui_icon_search"
+            android:scaleType="fitCenter"/>
+    </FrameLayout>
+
+    <EditText
+        android:id="@+id/search_bar"
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:paddingLeft="@dimen/car_ui_touch_target_width"
+        android:hint="@string/car_ui_toolbar_default_search_hint"
+        android:textColorHint="@color/car_ui_toolbar_search_hint_text_color"
+        android:inputType="text"
+        android:singleLine="true"
+        android:imeOptions="actionDone"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
+
+    <FrameLayout
+        android:id="@+id/search_close"
+        android:layout_width="@dimen/car_ui_touch_target_height"
+        android:layout_height="@dimen/car_ui_touch_target_height"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent">
+        <ImageView
+            android:layout_width="@dimen/car_ui_primary_icon_size"
+            android:layout_height="@dimen/car_ui_primary_icon_size"
+            android:layout_gravity="center"
+            android:background="@drawable/car_ui_toolbar_icon_background"
+            android:src="@drawable/car_ui_icon_close"
+            android:scaleType="fitCenter"/>
+    </FrameLayout>
+</merge>
diff --git a/car-ui-lib/res/layout/car_ui_tab_item.xml b/car-ui-lib/res/layout/car_ui_tab_item.xml
new file mode 100644
index 0000000..b387ae3
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_tab_item.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<merge
+    xmlns:android="http://schemas.android.com/apk/res/android">
+    <ImageView
+        android:id="@+id/car_ui_tab_item_icon"
+        android:layout_width="@dimen/car_ui_tab_icon_width"
+        android:layout_height="@dimen/car_ui_tab_icon_height"
+        android:scaleType="fitCenter"
+        android:tint="@color/car_ui_tab_item_selector"
+        android:tintMode="src_in"/>
+    <TextView
+        android:id="@+id/car_ui_tab_item_text"
+        android:layout_width="@dimen/car_ui_tab_text_width"
+        android:layout_height="wrap_content"
+        android:singleLine="true"
+        android:gravity="center"
+        android:textAppearance="@style/TextAppearance.CarUi.Widget.Toolbar.Tab"/>
+</merge>
diff --git a/car-ui-lib/res/layout/car_ui_toolbar.xml b/car-ui-lib/res/layout/car_ui_toolbar.xml
new file mode 100644
index 0000000..7ee939f
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_toolbar.xml
@@ -0,0 +1,164 @@
+<?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:layout_width="match_parent"
+    android:layout_height="@dimen/car_ui_toolbar_first_row_height">
+
+    <!-- When the user finishes searching, we call clearFocus() on the editText in the search bar.
+         clearFocus() will actually send the focus to the first focusable thing in the layout.
+         If that focusable thing is still the search bar it will just reselect it, and the user won't
+         be able to deselect. So make a focusable view here to guarantee that we can clear the focus -->
+    <View
+        android:layout_width="1dp"
+        android:layout_height="1dp"
+        android:focusable="true"
+        android:focusableInTouchMode="true"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/toolbar_start_guideline"
+        app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_start_inset"
+        android:orientation="vertical"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/toolbar_top_guideline"
+        app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_top_inset"
+        android:orientation="horizontal"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/toolbar_end_guideline"
+        app:layout_constraintGuide_end="@dimen/car_ui_toolbar_end_inset"
+        android:orientation="vertical"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/toolbar_bottom_guideline"
+        app:layout_constraintGuide_end="@dimen/car_ui_toolbar_bottom_inset"
+        android:orientation="horizontal"/>
+    <FrameLayout
+        android:id="@+id/nav_icon_container"
+        android:layout_width="@dimen/car_ui_toolbar_nav_button_width"
+        android:layout_height="0dp"
+        android:background="?android:attr/selectableItemBackground"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
+        app:layout_constraintBottom_toTopOf="@+id/bottom_styleable"
+        app:layout_constraintStart_toStartOf="@id/toolbar_start_guideline">
+        <ImageView
+            android:id="@+id/nav_icon"
+            android:layout_width="@dimen/car_ui_toolbar_icon_size"
+            android:layout_height="@dimen/car_ui_toolbar_icon_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"
+            style="@style/Widget.CarUi.Toolbar.NavIcon"/>
+        <ImageView
+            android:id="@+id/logo"
+            android:layout_width="@dimen/car_ui_toolbar_icon_size"
+            android:layout_height="@dimen/car_ui_toolbar_icon_size"
+            android:layout_gravity="center"
+            android:scaleType="fitXY"/>
+    </FrameLayout>
+
+    <TextView
+        android:id="@+id/title"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/car_ui_toolbar_title_margin_start"
+        style="@style/TextAppearance.CarUi.Widget.Toolbar.Title"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
+        app:layout_constraintBottom_toTopOf="@+id/bottom_styleable"
+        app:layout_constraintStart_toEndOf="@+id/nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@+id/menu_items_container"/>
+
+    <com.android.car.ui.toolbar.TabLayout
+        android:id="@+id/tabs"
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        android:layout_marginEnd="@dimen/car_ui_toolbar_menu_item_margin"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
+        app:layout_constraintBottom_toTopOf="@+id/bottom_styleable"
+        app:layout_constraintStart_toEndOf="@+id/nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@+id/menu_items_container"
+        app:layout_constraintHorizontal_bias="0.0"/>
+
+    <FrameLayout
+        android:id="@+id/custom_view_container"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:visibility="gone"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
+        app:layout_constraintBottom_toTopOf="@+id/bottom_styleable"
+        app:layout_constraintStart_toEndOf="@+id/nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@+id/menu_items_container"/>
+
+    <LinearLayout
+        android:id="@+id/menu_items_container"
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        android:orientation="horizontal"
+        android:divider="@drawable/car_ui_toolbar_menu_item_divider"
+        android:showDividers="beginning|middle|end"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
+        app:layout_constraintBottom_toTopOf="@+id/bottom_styleable"
+        app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_overflow_button"/>
+
+    <FrameLayout
+        android:id="@+id/car_ui_toolbar_overflow_button"
+        android:layout_width="@dimen/car_ui_touch_target_width"
+        android:layout_height="@dimen/car_ui_touch_target_height"
+        android:layout_marginLeft="@dimen/car_ui_toolbar_menu_item_margin"
+        android:layout_marginRight="@dimen/car_ui_toolbar_menu_item_margin"
+        android:visibility="gone"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
+        app:layout_constraintBottom_toTopOf="@id/bottom_styleable"
+        app:layout_constraintEnd_toEndOf="@id/toolbar_end_guideline">
+        <ImageView
+            android:src="@drawable/car_ui_icon_overflow_menu"
+            android:layout_width="@dimen/car_ui_primary_icon_size"
+            android:layout_height="@dimen/car_ui_primary_icon_size"
+            android:layout_gravity="center"
+            android:background="@drawable/car_ui_toolbar_icon_background"
+            android:tint="@color/car_ui_toolbar_icon_tint"
+            android:tintMode="src_in"/>
+    </FrameLayout>
+
+    <com.android.car.ui.toolbar.SearchView
+        android:id="@+id/search_view"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:visibility="gone"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
+        app:layout_constraintBottom_toTopOf="@+id/bottom_styleable"
+        app:layout_constraintStart_toEndOf="@+id/nav_icon_container"
+        app:layout_constraintEnd_toStartOf="@+id/menu_items_container"/>
+
+    <!-- can't use 0dp for layout_height or the constraintlayout effect kicks in -->
+    <View
+        android:id="@+id/bottom_styleable"
+        android:layout_width="match_parent"
+        android:layout_height="0.01dp"
+        app:layout_constraintBottom_toBottomOf="@id/toolbar_bottom_guideline"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/res/layout/car_ui_toolbar_menu_item_icon.xml b/car-ui-lib/res/layout/car_ui_toolbar_menu_item_icon.xml
new file mode 100644
index 0000000..522acd7
--- /dev/null
+++ b/car-ui-lib/res/layout/car_ui_toolbar_menu_item_icon.xml
@@ -0,0 +1,30 @@
+<?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.
+-->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="@dimen/car_ui_touch_target_width"
+    android:layout_height="@dimen/car_ui_touch_target_height"
+    android:layout_gravity="center_vertical">
+    <ImageView
+        android:id="@+id/car_ui_toolbar_menu_item_icon"
+        android:layout_width="@dimen/car_ui_primary_icon_size"
+        android:layout_height="@dimen/car_ui_primary_icon_size"
+        android:layout_gravity="center"
+        android:background="@drawable/car_ui_toolbar_icon_background"
+        android:tint="@color/car_ui_toolbar_menu_item_icon_color"
+        android:tintMode="src_in"/>
+</FrameLayout>
diff --git a/car-chassis-lib/res/layout/chassis_toolbar_settings_button.xml b/car-ui-lib/res/layout/car_ui_toolbar_menu_item_switch.xml
similarity index 61%
copy from car-chassis-lib/res/layout/chassis_toolbar_settings_button.xml
copy to car-ui-lib/res/layout/car_ui_toolbar_menu_item_switch.xml
index c295d5c..cfa3e1d 100644
--- a/car-chassis-lib/res/layout/chassis_toolbar_settings_button.xml
+++ b/car-ui-lib/res/layout/car_ui_toolbar_menu_item_switch.xml
@@ -14,11 +14,15 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<ImageView
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/settings"
-    android:layout_width="@dimen/touch_target_size"
-    android:layout_height="@dimen/touch_target_size"
-    android:src="@drawable/ic_settings"
-    android:scaleType="center"
-    android:background="@drawable/chassis_toolbar_button_background"/>
+    android:layout_width="@dimen/car_ui_touch_target_width"
+    android:layout_height="@dimen/car_ui_touch_target_height"
+    android:layout_gravity="center_vertical">
+    <Switch
+        android:id="@+id/car_ui_toolbar_menu_item_switch"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:clickable="false"/>
+</FrameLayout>
diff --git a/car-chassis-lib/res/layout/chassis_toolbar_settings_button.xml b/car-ui-lib/res/layout/car_ui_toolbar_menu_item_text.xml
similarity index 70%
rename from car-chassis-lib/res/layout/chassis_toolbar_settings_button.xml
rename to car-ui-lib/res/layout/car_ui_toolbar_menu_item_text.xml
index c295d5c..aaee10a 100644
--- a/car-chassis-lib/res/layout/chassis_toolbar_settings_button.xml
+++ b/car-ui-lib/res/layout/car_ui_toolbar_menu_item_text.xml
@@ -14,11 +14,10 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<ImageView
+<Button
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/settings"
-    android:layout_width="@dimen/touch_target_size"
-    android:layout_height="@dimen/touch_target_size"
-    android:src="@drawable/ic_settings"
-    android:scaleType="center"
-    android:background="@drawable/chassis_toolbar_button_background"/>
+    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_vertical"/>
diff --git a/car-chassis-lib/res/values-night/colors.xml b/car-ui-lib/res/values-port/config.xml
similarity index 67%
rename from car-chassis-lib/res/values-night/colors.xml
rename to car-ui-lib/res/values-port/config.xml
index 0ee4613..bb74d4c 100644
--- a/car-chassis-lib/res/values-night/colors.xml
+++ b/car-ui-lib/res/values-port/config.xml
@@ -1,5 +1,5 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open 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,6 @@
      limitations under the License.
 -->
 <resources>
-    <color name="chassis_tab_selected_color">@color/chassis_tab_selected_color_dark</color>
-    <color name="chassis_tab_unselected_color">@color/chassis_tab_unselected_color_dark</color>
+    <!-- Whether or not the toolbar title and tabs can be shown at the same time -->
+    <bool name="car_ui_toolbar_title_and_tabs_are_mutually_exclusive">false</bool>
 </resources>
diff --git a/car-chassis-lib/res/values-port/values.xml b/car-ui-lib/res/values-port/values.xml
similarity index 91%
rename from car-chassis-lib/res/values-port/values.xml
rename to car-ui-lib/res/values-port/values.xml
index 39590dd..68c5110 100644
--- a/car-chassis-lib/res/values-port/values.xml
+++ b/car-ui-lib/res/values-port/values.xml
@@ -16,5 +16,5 @@
   -->
 
 <resources>
-    <bool name="chassis_tab_flexible_layout">true</bool>
+    <bool name="car_ui_tab_flexible_layout">true</bool>
 </resources>
diff --git a/car-ui-lib/res/values/attrs.xml b/car-ui-lib/res/values/attrs.xml
new file mode 100644
index 0000000..a770947
--- /dev/null
+++ b/car-ui-lib/res/values/attrs.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <declare-styleable name="CarUiToolbar">
+        <!-- Title of the toolbar, only displayed in certain conditions -->
+        <attr name="title" format="string"/>
+        <!-- Logo drawable for the toolbar. Appears when there's no back/close button shown -->
+        <attr name="logo" format="reference"/>
+        <!-- Hint for the search bar in the toolbar -->
+        <attr name="searchHint" format="string"/>
+        <!-- Whether or not to show the MenuItems while searching. Default false. -->
+        <attr name="showMenuItemsWhileSearching" format="boolean"/>
+        <!-- Initial state of the toolbar. See the Toolbar.State enum for more information -->
+        <attr name="state" format="enum">
+            <enum name="home" value="0"/>
+            <enum name="subpage" value="1"/>
+            <enum name="subpage_custom" value="2"/>
+            <enum name="search" value="3"/>
+        </attr>
+        <!-- Whether or not the toolbar should have a background. Default true. -->
+        <attr name="showBackground" format="boolean"/>
+        <!-- Mode of the navigation button See the Toolbar.NavButtonMode enum for more information -->
+        <attr name="navButtonMode" format="enum">
+            <enum name="back" value="0"/>
+            <enum name="close" value="1"/>
+        </attr>
+    </declare-styleable>
+
+    <!-- Theme attribute to specifying a default style for all CarUiToolbars -->
+    <attr name="CarUiToolbarStyle" format="reference"/>
+
+    <declare-styleable name="PagedRecyclerView">
+        <!-- Whether to enable the car_ui_pagedrecyclerview_divider for linear layout or not. -->
+        <attr name="enableDivider" format="boolean" />
+        <!-- Top offset for paged recycler view. -->
+        <attr name="startOffset" format="integer" />
+        <!-- Bottom offset for paged recycler view for linear layout. -->
+        <attr name="endOffset" format="integer" />
+
+        <!-- Number of columns in a grid layout. -->
+        <attr name="numOfColumns" format="integer" />
+
+        <!-- Paged recycler view layout. -->
+        <attr name="layoutStyle" format="enum">
+            <!-- linear layout -->
+            <enum name="linear" value="0" />
+            <!-- grid layout -->
+            <enum name="grid" value="1" />
+        </attr>
+    </declare-styleable>
+
+    <declare-styleable name="PagedRecyclerViewTheme">
+        <attr name="pagedRecyclerViewStyle" format="reference" />
+    </declare-styleable>
+</resources>
diff --git a/car-ui-lib/res/values/bools.xml b/car-ui-lib/res/values/bools.xml
new file mode 100644
index 0000000..c7a7f48
--- /dev/null
+++ b/car-ui-lib/res/values/bools.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>
+
+    <!-- Whether to display the Scroll Bar or not. Defaults to true. If this is set to false,
+         the PagedRecyclerView will behave exactly like the RecyclerView. -->
+    <bool name="car_ui_scrollbar_enable">true</bool>
+
+    <!-- Whether to place the scrollbar z-index above the recycler view. Defaults to
+         true. -->
+    <bool name="car_ui_scrollbar_above_recycler_view">true</bool>
+
+    <bool name="car_ui_preference_allow_divider_above">false</bool>
+    <bool name="car_ui_preference_allow_divider_below">false</bool>
+    <bool name="car_ui_preference_category_allow_divider_above">false</bool>
+    <bool name="car_ui_preference_category_allow_divider_below">false</bool>
+</resources>
diff --git a/car-ui-lib/res/values/colors.xml b/car-ui-lib/res/values/colors.xml
new file mode 100644
index 0000000..2a92da5
--- /dev/null
+++ b/car-ui-lib/res/values/colors.xml
@@ -0,0 +1,52 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources>
+    <!-- General -->
+
+    <!-- Main text color (titles, text body, etc.) -->
+    <color name="car_ui_primary_text_color">#FFFFFFFF</color>
+    <!-- Text color used in subtitles or other secondary text blocks -->
+    <color name="car_ui_secondary_text_color">#90FFFFFF</color>
+    <!-- The ripple color. -->
+    <color name="car_ui_ripple_color">#27ffffff</color>
+
+    <!-- Tabs -->
+
+    <!-- Selected colors -->
+    <color name="car_ui_tab_selected_color">@color/car_ui_primary_text_color</color>
+    <!-- Normal colors -->
+    <color name="car_ui_tab_unselected_color">@color/car_ui_secondary_text_color</color>
+
+    <!-- Toolbar -->
+
+    <!-- Text color applied to the hint displayed inside the search box -->
+    <color name="car_ui_toolbar_search_hint_text_color">#33FFFFFF</color>
+    <!-- Toolbar background color -->
+    <color name="car_ui_toolbar_background_color">#E0000000</color>
+
+    <!--  Paged Recycler View  -->
+    <!-- The color of the scroll bar indicator in the PagedListView. -->
+    <color name="car_ui_scrollbar_thumb">#99ffffff</color>
+
+    <!-- Preferences -->
+
+    <color name="car_ui_preference_category_title_text_color">#ff60a8f0</color>
+    <color name="car_ui_preference_summary_text_color">#ffdadce0</color>
+    <color name="car_ui_preference_title_text_color">@android:color/white</color>
+    <color name="car_ui_preference_edit_text_dialog_message_text_color">#ffdadce0</color>
+
+    <color name="car_ui_preference_icon_color">@android:color/white</color>
+</resources>
diff --git a/car-ui-lib/res/values/config.xml b/car-ui-lib/res/values/config.xml
new file mode 100644
index 0000000..047434a
--- /dev/null
+++ b/car-ui-lib/res/values/config.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <!--
+    Configuration for a default scrollbar for the PagedRecyclerView. This component must inherit
+    abstract class ScrollBar. If the ScrollBar is enabled, the component will be initialized from
+    PagedRecyclerView#createScrollBarFromConfig(). If no component is provided,
+    {@link DefaultScrollbar} class will be used.
+    -->
+    <string name="car_ui_scrollbar_component" translatable="false"/>
+
+    <!--
+    Whether to include a gutter to the start, end or both sides of the list view items.
+    The gutter width will be the width of the scrollbar, and by default will be set to
+    both. Values are defined as follows:
+      none = 0
+      start = 1
+      end = 2
+      both = 3
+    -->
+    <integer name="car_ui_scrollbar_gutter">1</integer>
+
+    <!--
+    Position of the scrollbar. Default to left. Values are defined as follows:
+      start = 0
+      end = 1
+    -->
+    <integer name="car_ui_scrollbar_position">0</integer>
+
+    <!-- Width of the scrollbar container. -->
+    <dimen name="car_ui_scrollbar_container_width">@dimen/car_ui_margin</dimen>
+
+    <!-- Whether or not the toolbar title and tabs can be shown at the same time -->
+    <bool name="car_ui_toolbar_title_and_tabs_are_mutually_exclusive">true</bool>
+
+</resources>
diff --git a/car-ui-lib/res/values/dimens.xml b/car-ui-lib/res/values/dimens.xml
new file mode 100644
index 0000000..d92801d
--- /dev/null
+++ b/car-ui-lib/res/values/dimens.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <!-- General resources -->
+
+    <dimen name="car_ui_touch_target_width">76dp</dimen>
+    <dimen name="car_ui_touch_target_height">76dp</dimen>
+    <dimen name="car_ui_primary_icon_size">44dp</dimen>
+    <item name="car_ui_letter_spacing_body1" format="float" type="dimen">0.0</item>
+    <item name="car_ui_letter_spacing_body3" format="float" type="dimen">0.0</item>
+
+    <!-- Margin -->
+    <dimen name="car_ui_margin">112dp</dimen>
+
+    <!-- Paddings -->
+    <dimen name="car_ui_padding_0">4dp</dimen>
+    <dimen name="car_ui_padding_1">8dp</dimen>
+    <dimen name="car_ui_padding_2">16dp</dimen>
+    <dimen name="car_ui_padding_3">24dp</dimen>
+    <dimen name="car_ui_padding_4">32dp</dimen>
+    <dimen name="car_ui_padding_5">64dp</dimen>
+    <dimen name="car_ui_padding_6">96dp</dimen>
+
+    <!-- Tabs -->
+
+    <!-- Exact size of the tab textbox. Use @dimen/wrap_content if this must be flexible -->
+    <dimen name="car_ui_tab_text_width">135dp</dimen>
+    <!-- Horizontal padding between tabs -->
+    <dimen name="car_ui_tab_padding_x">12dp</dimen>
+    <!-- Tab icon width (if icons are enabled) -->
+    <dimen name="car_ui_tab_icon_width">36dp</dimen>
+    <!-- Tab icon height (if icons are enabled) -->
+    <dimen name="car_ui_tab_icon_height">36dp</dimen>
+
+    <!-- Car toolbar -->
+    <dimen name="car_ui_toolbar_row_height">96dp</dimen>
+    <dimen name="car_ui_toolbar_first_row_height">@dimen/car_ui_toolbar_row_height</dimen>
+    <dimen name="car_ui_toolbar_second_row_height">@dimen/car_ui_toolbar_row_height</dimen>
+    <dimen name="car_ui_toolbar_nav_button_width">@dimen/car_ui_margin</dimen>
+    <dimen name="car_ui_toolbar_start_inset">0dp</dimen>
+    <dimen name="car_ui_toolbar_end_inset">0dp</dimen>
+    <dimen name="car_ui_toolbar_top_inset">0dp</dimen>
+    <dimen name="car_ui_toolbar_bottom_inset">0dp</dimen>
+    <dimen name="car_ui_toolbar_icon_size">@dimen/car_ui_primary_icon_size</dimen>
+    <dimen name="car_ui_toolbar_title_margin_start">@dimen/car_ui_padding_2</dimen>
+    <dimen name="car_ui_toolbar_menu_item_margin">@dimen/car_ui_padding_2</dimen>
+    <dimen name="car_ui_toolbar_icon_ripple_radius">48dp</dimen>
+
+    <!-- Internal artifacts. Do not overlay -->
+    <item name="wrap_content" format="integer" type="dimen">-2</item>
+
+    <!-- Default Scroll Bar for PagedRecyclerView -->
+    <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_separator_margin">16dp</dimen>
+    <dimen name="car_ui_scrollbar_margin">@dimen/car_ui_margin</dimen>
+    <dimen name="car_ui_scrollbar_thumb_radius">100dp</dimen>
+
+    <item name="car_ui_button_disabled_alpha" format="float" type="dimen">0.2</item>
+    <item name="car_ui_scrollbar_milliseconds_per_inch" format="float" type="dimen">150.0</item>
+    <item name="car_ui_scrollbar_deceleration_times_divisor" format="float" type="dimen">0.45</item>
+    <item name="car_ui_scrollbar_decelerate_interpolator_factor" format="float" type="dimen">1.8</item>
+
+    <dimen name="car_ui_scrollbar_padding_start">0dp</dimen>
+    <dimen name="car_ui_scrollbar_padding_end">0dp</dimen>
+
+    <!-- Preferences -->
+
+    <dimen name="car_ui_preference_category_text_size">24sp</dimen>
+    <dimen name="car_ui_preference_summary_text_size">24sp</dimen>
+    <dimen name="car_ui_preference_title_text_size">32sp</dimen>
+    <dimen name="car_ui_preference_edit_text_dialog_message_text_size">24sp</dimen>
+
+    <dimen name="car_ui_preference_content_margin_top">16dp</dimen>
+    <dimen name="car_ui_preference_content_margin_bottom">16dp</dimen>
+    <dimen name="car_ui_preference_icon_size">44dp</dimen>
+    <dimen name="car_ui_preference_icon_margin_end">16dp</dimen>
+
+    <dimen name="car_ui_preference_category_min_height">76dp</dimen>
+    <dimen name="car_ui_preference_category_icon_size">44dp</dimen>
+    <dimen name="car_ui_preference_category_icon_margin_end">16dp</dimen>
+
+    <dimen name="car_ui_preference_dropdown_padding_start">112dp</dimen>
+
+    <dimen name="car_ui_preference_edit_text_dialog_margin_top">32dp</dimen>
+    <dimen name="car_ui_preference_edit_text_dialog_margin_bottom">32dp</dimen>
+    <dimen name="car_ui_preference_edit_text_dialog_message_margin_bottom">32dp</dimen>
+    <dimen name="car_ui_preference_edit_text_dialog_message_margin_start">24dp</dimen>
+    <dimen name="car_ui_preference_edit_text_dialog_message_margin_end">24dp</dimen>
+    <dimen name="car_ui_preference_edit_text_dialog_text_margin_start">24dp</dimen>
+    <dimen name="car_ui_preference_edit_text_dialog_text_margin_end">24dp</dimen>
+
+    <!-- Alert dialog   -->
+
+    <dimen name="car_ui_dialog_edittext_height">50dp</dimen>
+    <dimen name="car_ui_dialog_edittext_margin_top">10dp</dimen>
+    <dimen name="car_ui_dialog_edittext_margin_bottom">10dp</dimen>
+    <dimen name="car_ui_dialog_edittext_margin_start">22dp</dimen>
+    <dimen name="car_ui_dialog_edittext_margin_end">22dp</dimen>
+</resources>
diff --git a/car-ui-lib/res/values/ids.xml b/car-ui-lib/res/values/ids.xml
new file mode 100644
index 0000000..fcff109
--- /dev/null
+++ b/car-ui-lib/res/values/ids.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <!-- Id used for the search button when using Toolbar.createSearch() method -->
+    <item name="search" type="id"/>
+</resources>
\ No newline at end of file
diff --git a/car-ui-lib/res/values/integers.xml b/car-ui-lib/res/values/integers.xml
new file mode 100644
index 0000000..132c918
--- /dev/null
+++ b/car-ui-lib/res/values/integers.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES 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>
+
+</resources>
\ No newline at end of file
diff --git a/car-ui-lib/res/values/strings.xml b/car-ui-lib/res/values/strings.xml
new file mode 100644
index 0000000..321148f
--- /dev/null
+++ b/car-ui-lib/res/values/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<resources>
+    <!-- Search hint, displayed inside the search box [CHAR LIMIT=50] -->
+    <string name="car_ui_toolbar_default_search_hint">Search&#8230;</string>
+    <!-- CarUxRestrictions Utility -->
+    <string name="car_ui_ellipsis" translatable="false">&#8230;</string>
+    <!-- Content description for paged recycler view scroll bar down arrow [CHAR LIMIT=30] -->
+    <string name="car_ui_scrollbar_page_down_button">Scroll down</string>
+    <!-- Content description for paged recycler view scroll bar up arrow [CHAR LIMIT=30] -->
+    <string name="car_ui_scrollbar_page_up_button">Scroll up</string>
+    <!-- Title of the search menu item. Will be displayed if the button is in the overflow menu. [CHAR_LIMIT=50] -->
+    <string name="car_ui_toolbar_menu_item_search_title">Search</string>
+    <!-- Title of the settings menu item. Will be displayed if the button is in the overflow menu. [CHAR_LIMIT=50] -->
+    <string name="car_ui_toolbar_menu_item_settings_title">Settings</string>
+
+    <!-- Positive option for a preference dialog. [CHAR_LIMIT=30] -->
+    <string name="car_ui_dialog_preference_positive">Ok</string>
+    <!-- Negative option for a preference dialog. [CHAR_LIMIT=30] -->
+    <string name="car_ui_dialog_preference_negative">Cancel</string>
+    <!-- Text to show when a preference switch is on. [CHAR_LIMIT=30] -->
+    <string name="car_ui_switch_preference_on">On</string>
+    <!-- Text to show when a preference switch is off. [CHAR_LIMIT=30] -->
+    <string name="car_ui_switch_preference_off">Off</string>
+    <!-- Font family to use for preference category titles. [CHAR_LIMIT=NONE] -->
+    <string name="car_ui_preference_category_title_font_family" translatable="false">sans-serif-medium</string>
+
+    <!-- Text to show when no button is provided and a default button is used. -->
+    <string name="car_ui_alert_dialog_default_button" translatable="false">Close</string>
+</resources>
diff --git a/car-ui-lib/res/values/styles.xml b/car-ui-lib/res/values/styles.xml
new file mode 100644
index 0000000..2464ade
--- /dev/null
+++ b/car-ui-lib/res/values/styles.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES 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">
+
+    <!-- Styles for CarUi tab view -->
+
+    <style name="Widget.CarUi" parent="android:Widget.DeviceDefault"/>
+
+    <style name="Widget.CarUi.Button.Borderless.Colored"
+           parent="android:Widget.DeviceDefault.Button.Borderless.Colored"/>
+
+    <style name="Widget.CarUi.Toolbar"/>
+
+    <style name="Widget.CarUi.Toolbar.NavIcon">
+        <item name="android:tint">@color/car_ui_primary_text_color</item>
+        <item name="android:src">@drawable/car_ui_icon_arrow_back</item>
+    </style>
+
+    <style name="Widget.CarUi.Toolbar.TextButton" parent="Widget.CarUi.Button.Borderless.Colored"/>
+
+    <style name="Widget.CarUi.PagedRecyclerView">
+        <item name="android:scrollbars">vertical</item>
+    </style>
+    <style name="Widget.CarUi.PagedRecyclerView.NestedRecyclerView">
+        <item name="android:scrollbars">none</item>
+    </style>
+
+    <!-- Preference Styles -->
+
+    <style name="Preference.CarUi">
+        <item name="android:layout">@layout/car_ui_preference</item>
+        <item name="allowDividerAbove">@bool/car_ui_preference_allow_divider_above</item>
+        <item name="allowDividerBelow">@bool/car_ui_preference_allow_divider_below</item>
+    </style>
+
+    <style name="Preference.CarUi.Category">
+        <item name="android:layout">@layout/car_ui_preference_category</item>
+        <!-- The title should not dim if the category is disabled, instead only the preference children should dim. -->
+        <item name="android:shouldDisableView">false</item>
+        <item name="android:selectable">false</item>
+        <item name="allowDividerAbove">@bool/car_ui_preference_category_allow_divider_above</item>
+        <item name="allowDividerBelow">@bool/car_ui_preference_category_allow_divider_below</item>
+    </style>
+
+    <style name="Preference.CarUi.CheckBoxPreference">
+        <item name="android:widgetLayout">@layout/car_ui_preference_widget_checkbox</item>
+    </style>
+
+    <style name="Preference.CarUi.DialogPreference">
+        <item name="android:positiveButtonText">@string/car_ui_dialog_preference_positive</item>
+        <item name="android:negativeButtonText">@string/car_ui_dialog_preference_negative</item>
+    </style>
+
+    <style name="Preference.CarUi.DialogPreference.EditTextPreference">
+        <item name="android:dialogLayout">@layout/car_ui_preference_dialog_edittext</item>
+    </style>
+
+    <style name="Preference.CarUi.DropDown">
+        <item name="android:layout">@layout/car_ui_preference_dropdown</item>
+    </style>
+
+    <style name="Preference.CarUi.Information">
+        <item name="android:enabled">false</item>
+        <item name="android:shouldDisableView">false</item>
+    </style>
+
+    <style name="Preference.CarUi.PreferenceScreen"/>
+
+    <style name="Preference.CarUi.SeekBarPreference">
+        <item name="android:layout">@layout/car_ui_preference_widget_seekbar</item>
+        <item name="adjustable">true</item>
+        <item name="showSeekBarValue">false</item>
+    </style>
+
+    <style name="Preference.CarUi.SwitchPreference">
+        <item name="android:widgetLayout">@layout/car_ui_preference_widget_switch</item>
+        <item name="android:switchTextOn">@string/car_ui_switch_preference_on</item>
+        <item name="android:switchTextOff">@string/car_ui_switch_preference_off</item>
+    </style>
+
+    <style name="PreferenceFragment.CarUi">
+        <item name="android:divider">?android:attr/listDivider</item>
+        <item name="android:layout">@layout/car_ui_preference_fragment</item>
+    </style>
+
+    <style name="PreferenceFragmentList.CarUi">
+        <item name="android:paddingTop">0dp</item>
+        <item name="android:paddingBottom">0dp</item>
+        <item name="android:paddingLeft">0dp</item>
+        <item name="android:paddingStart">0dp</item>
+        <item name="android:paddingRight">0dp</item>
+        <item name="android:paddingEnd">0dp</item>
+    </style>
+
+    <!-- TextAppearance -->
+
+    <style name="TextAppearance.CarUi" parent="android:TextAppearance.DeviceDefault">
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.PreferenceCategoryTitle">
+        <item name="android:fontFamily">@string/car_ui_preference_category_title_font_family</item>
+        <item name="android:textColor">@color/car_ui_preference_category_title_text_color</item>
+        <item name="android:textSize">@dimen/car_ui_preference_category_text_size</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.PreferenceSummary">
+        <item name="android:textColor">@color/car_ui_preference_summary_text_color</item>
+        <item name="android:textSize">@dimen/car_ui_preference_summary_text_size</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.PreferenceTitle">
+        <item name="android:textColor">@color/car_ui_preference_title_text_color</item>
+        <item name="android:textSize">@dimen/car_ui_preference_title_text_size</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.PreferenceEditTextDialogMessage">
+        <item name="android:textColor">
+            @color/car_ui_preference_edit_text_dialog_message_text_color
+        </item>
+        <item name="android:textSize">@dimen/car_ui_preference_edit_text_dialog_message_text_size
+        </item>
+    </style>
+
+    <style name="TextAppearance.CarUi.Widget" parent="android:TextAppearance.DeviceDefault.Widget"/>
+
+    <style name="TextAppearance.CarUi.Widget.Toolbar"/>
+
+    <style name="TextAppearance.CarUi.Widget.Toolbar.Title">
+        <item name="android:singleLine">true</item>
+        <item name="android:textSize">32sp</item>
+        <item name="android:letterSpacing">@dimen/car_ui_letter_spacing_body1</item>
+    </style>
+
+    <style name="TextAppearance.CarUi.Widget.Toolbar.Tab">
+        <item name="android:textSize">24sp</item>
+        <item name="android:letterSpacing">@dimen/car_ui_letter_spacing_body3</item>
+        <item name="android:textColor">@color/car_ui_tab_item_selector</item>
+    </style>
+
+</resources>
diff --git a/car-ui-lib/res/values/themes.xml b/car-ui-lib/res/values/themes.xml
new file mode 100644
index 0000000..728009b
--- /dev/null
+++ b/car-ui-lib/res/values/themes.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES 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">
+    <!-- TODO: for internal TODOs, expand theme/style to leaf resources as necessary -->
+    <style name="Theme.CarUi" parent="@android:style/Theme.DeviceDefault.NoActionBar">
+        <!-- Attributes from: Base.V7.Theme.AppCompat -->
+
+        <item name="windowNoTitle">true</item>
+        <item name="windowActionBar">false</item>
+        <item name="windowActionBarOverlay">false</item>
+        <item name="windowActionModeOverlay">false</item>
+        <item name="actionBarPopupTheme">@null</item>
+
+        <item name="colorBackgroundFloating">?android:attr/colorBackgroundFloating</item>
+
+        <!-- Used by MediaRouter -->
+        <item name="isLightTheme">false</item>
+
+        <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
+        <item name="selectableItemBackgroundBorderless">?android:attr/selectableItemBackgroundBorderless</item>
+        <item name="borderlessButtonStyle">?android:attr/borderlessButtonStyle</item>
+        <item name="homeAsUpIndicator">?android:attr/homeAsUpIndicator</item>
+
+        <item name="dividerVertical">?android:attr/dividerVertical</item>
+        <item name="dividerHorizontal">?android:attr/dividerHorizontal</item>
+
+        <!-- Action Bar Styles -->
+        <item name="actionBarTabStyle">?android:attr/actionBarTabStyle</item>
+        <item name="actionBarTabBarStyle">?android:attr/actionBarTabBarStyle</item>
+        <item name="actionBarTabTextStyle">?android:attr/actionBarTabTextStyle</item>
+        <item name="actionButtonStyle">?android:attr/actionButtonStyle</item>
+        <item name="actionOverflowButtonStyle">?android:attr/actionOverflowButtonStyle</item>
+        <item name="actionOverflowMenuStyle">?android:attr/actionOverflowMenuStyle</item>
+        <item name="actionBarStyle">?android:attr/actionBarStyle</item>
+        <item name="actionBarSplitStyle">?android:attr/actionBarSplitStyle</item>
+        <item name="actionBarWidgetTheme">?android:attr/actionBarWidgetTheme</item>
+        <item name="actionBarTheme">?android:attr/actionBarTheme</item>
+        <item name="actionBarSize">?android:attr/actionBarSize</item>
+        <item name="actionBarDivider">?android:attr/actionBarDivider</item>
+        <item name="actionBarItemBackground">?android:attr/actionBarItemBackground</item>
+        <item name="actionMenuTextAppearance">?android:attr/actionMenuTextAppearance</item>
+        <item name="actionMenuTextColor">?android:attr/actionMenuTextColor</item>
+
+        <!-- Dropdown Spinner Attributes -->
+        <item name="actionDropDownStyle">?android:attr/actionDropDownStyle</item>
+
+        <!-- Action Mode -->
+        <item name="actionModeStyle">?android:attr/actionModeStyle</item>
+        <item name="actionModeBackground">?android:attr/actionModeBackground</item>
+        <item name="actionModeSplitBackground">?android:attr/actionModeSplitBackground</item>
+        <item name="actionModeCloseDrawable">?android:attr/actionModeCloseDrawable</item>
+        <item name="actionModeCloseButtonStyle">?android:attr/actionModeCloseButtonStyle</item>
+
+        <item name="actionModeCutDrawable">?android:attr/actionModeCutDrawable</item>
+        <item name="actionModeCopyDrawable">?android:attr/actionModeCopyDrawable</item>
+        <item name="actionModePasteDrawable">?android:attr/actionModePasteDrawable</item>
+        <item name="actionModeSelectAllDrawable">?android:attr/actionModeSelectAllDrawable</item>
+        <item name="actionModeShareDrawable">?android:attr/actionModeShareDrawable</item>
+
+        <!-- Panel attributes -->
+        <!-- TODO: panelMenuListWidth -->
+        <item name="panelMenuListWidth">@dimen/abc_panel_menu_list_width</item>
+        <!-- TODO: panelMenuListTheme -->
+        <item name="panelMenuListTheme">@style/Theme.AppCompat.CompactMenu</item>
+        <item name="panelBackground">?android:attr/panelBackground</item>
+        <item name="listChoiceBackgroundIndicator">?android:attr/listChoiceBackgroundIndicator</item>
+
+        <!-- List attributes -->
+        <item name="textAppearanceListItem">?android:attr/textAppearanceListItem</item>
+        <item name="textAppearanceListItemSmall">?android:attr/textAppearanceListItemSmall</item>
+        <item name="textAppearanceListItemSecondary">?android:attr/textAppearanceListItemSecondary</item>
+        <item name="listPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
+        <item name="listPreferredItemHeightSmall">?android:attr/listPreferredItemHeightSmall</item>
+        <item name="listPreferredItemHeightLarge">?android:attr/listPreferredItemHeightLarge</item>
+        <item name="listPreferredItemPaddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
+        <item name="listPreferredItemPaddingRight">?android:attr/listPreferredItemPaddingRight</item>
+
+        <!-- Spinner styles -->
+        <item name="spinnerStyle">?android:attr/spinnerStyle</item>
+
+        <!-- Required for use of support_simple_spinner_dropdown_item.xml -->
+        <item name="spinnerDropDownItemStyle">?android:attr/spinnerDropDownItemStyle</item>
+        <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
+
+        <!-- Popup Menu styles -->
+        <item name="popupMenuStyle">?android:attr/popupMenuStyle</item>
+        <item name="textAppearanceLargePopupMenu">?android:attr/textAppearanceLargePopupMenu</item>
+        <item name="textAppearanceSmallPopupMenu">?android:attr/textAppearanceSmallPopupMenu</item>
+        <item name="textAppearancePopupMenuHeader">?android:attr/textAppearancePopupMenuHeader</item>
+        <item name="listPopupWindowStyle">?android:attr/listPopupWindowStyle</item>
+        <item name="dropDownListViewStyle">?android:attr/dropDownListViewStyle</item>
+        <item name="listMenuViewStyle">?android:attr/listMenuViewStyle</item>
+
+        <!-- SearchView attributes -->
+        <item name="searchViewStyle">?android:attr/searchViewStyle</item>
+        <!-- TODO: textColorSearchUrl -->
+        <item name="textColorSearchUrl">@color/abc_search_url_text</item>
+        <item name="textAppearanceSearchResultTitle">?android:attr/textAppearanceSearchResultTitle</item>
+        <item name="textAppearanceSearchResultSubtitle">?android:attr/textAppearanceSearchResultSubtitle</item>
+
+        <!-- ShareActionProvider attributes -->
+        <!-- TODO: activityChooserViewStyle -->
+        <item name="activityChooserViewStyle">@style/Widget.AppCompat.ActivityChooserView</item>
+
+        <!-- Toolbar styles -->
+        <item name="toolbarStyle">?android:attr/toolbarStyle</item>
+        <!-- TODO: toolbarNavigationButtonStyle -->
+        <item name="toolbarNavigationButtonStyle">@style/Widget.AppCompat.Toolbar.Button.Navigation</item>
+
+        <item name="editTextStyle">?android:attr/editTextStyle</item>
+        <item name="editTextBackground">?android:attr/editTextBackground</item>
+        <item name="editTextColor">?android:attr/editTextColor</item>
+        <item name="autoCompleteTextViewStyle">?android:attr/autoCompleteTextViewStyle</item>
+
+        <!-- Color palette -->
+        <item name="colorPrimaryDark">?android:attr/colorPrimaryDark</item>
+        <item name="colorPrimary">?android:attr/colorPrimary</item>
+        <item name="colorAccent">?android:attr/colorAccent</item>
+
+        <item name="colorControlNormal">?android:attr/colorControlNormal</item>
+        <item name="colorControlActivated">?android:attr/colorControlActivated</item>
+        <item name="colorControlHighlight">?android:attr/colorControlHighlight</item>
+        <item name="colorButtonNormal">?android:attr/colorButtonNormal</item>
+        <!-- TODO: colorSwitchThumbNormal -->
+        <item name="colorSwitchThumbNormal">@color/switch_thumb_material_dark</item>
+        <item name="controlBackground">?attr/selectableItemBackgroundBorderless</item>
+
+        <!-- TODO: drawerArrowStyle -->
+        <item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
+
+        <item name="checkboxStyle">?android:attr/checkboxStyle</item>
+        <item name="radioButtonStyle">?android:attr/radioButtonStyle</item>
+        <item name="switchStyle">?android:attr/switchStyle</item>
+
+        <item name="ratingBarStyle">?android:attr/ratingBarStyle</item>
+        <item name="ratingBarStyleIndicator">?android:attr/ratingBarStyleIndicator</item>
+        <item name="ratingBarStyleSmall">?android:attr/ratingBarStyleSmall</item>
+        <item name="seekBarStyle">?android:attr/seekBarStyle</item>
+
+        <!-- Button styles -->
+        <item name="buttonStyle">?android:attr/buttonStyle</item>
+        <item name="buttonStyleSmall">?android:attr/buttonStyleSmall</item>
+
+        <item name="imageButtonStyle">?android:attr/imageButtonStyle</item>
+
+        <item name="buttonBarStyle">?android:attr/buttonBarStyle</item>
+        <item name="buttonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
+        <item name="buttonBarPositiveButtonStyle">?android:attr/buttonBarPositiveButtonStyle</item>
+        <item name="buttonBarNegativeButtonStyle">?android:attr/buttonBarNegativeButtonStyle</item>
+        <item name="buttonBarNeutralButtonStyle">?android:attr/buttonBarNeutralButtonStyle</item>
+
+        <!-- Dialog attributes -->
+        <item name="dialogTheme">?android:attr/dialogTheme</item>
+        <item name="dialogPreferredPadding">?android:attr/dialogPreferredPadding</item>
+        <item name="dialogCornerRadius">?android:attr/dialogCornerRadius</item>
+
+        <item name="alertDialogTheme">?android:attr/alertDialogTheme</item>
+        <item name="alertDialogStyle">?android:attr/alertDialogStyle</item>
+        <item name="alertDialogCenterButtons">false</item>
+        <item name="textColorAlertDialogListItem">?android:attr/textColorAlertDialogListItem</item>
+        <item name="listDividerAlertDialog">?android:attr/listDividerAlertDialog</item>
+
+        <!-- Define these here; ContextThemeWrappers around themes that define them should
+             always clear these values. -->
+        <item name="windowFixedWidthMajor">@null</item>
+        <item name="windowFixedWidthMinor">@null</item>
+        <item name="windowFixedHeightMajor">@null</item>
+        <item name="windowFixedHeightMinor">@null</item>
+
+        <!-- Tooltip attributes -->
+        <!-- TODO: tooltipFrameBackground -->
+        <item name="tooltipFrameBackground">@drawable/tooltip_frame_light</item>
+        <!-- TODO: tooltipForegroundColor -->
+        <item name="tooltipForegroundColor">@color/foreground_material_light</item>
+
+        <item name="colorError">?android:attr/colorError</item>
+
+        <!-- Attributes from: Platform.AppCompat -->
+
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowActionBar">false</item>
+
+        <item name="listChoiceIndicatorSingleAnimated">?android:attr/listChoiceIndicatorSingle</item>
+        <item name="listChoiceIndicatorMultipleAnimated">?android:attr/listChoiceIndicatorMultiple</item>
+
+        <item name="preferenceTheme">@style/CarUiPreferenceTheme</item>
+    </style>
+
+    <style name="CarUiPreferenceTheme">
+        <item name="checkBoxPreferenceStyle">@style/Preference.CarUi.CheckBoxPreference
+        </item>
+        <item name="dialogPreferenceStyle">@style/Preference.CarUi.DialogPreference</item>
+        <item name="dropdownPreferenceStyle">@style/Preference.CarUi.DropDown</item>
+        <item name="editTextPreferenceStyle">
+            @style/Preference.CarUi.DialogPreference.EditTextPreference
+        </item>
+        <item name="preferenceCategoryStyle">@style/Preference.CarUi.Category</item>
+        <item name="preferenceFragmentCompatStyle">@style/PreferenceFragment.CarUi</item>
+        <item name="preferenceFragmentListStyle">@style/PreferenceFragmentList.CarUi</item>
+        <item name="preferenceFragmentStyle">@style/PreferenceFragment.CarUi</item>
+        <item name="preferenceScreenStyle">@style/Preference.CarUi.PreferenceScreen</item>
+        <item name="preferenceStyle">@style/Preference.CarUi</item>
+        <item name="seekBarPreferenceStyle">@style/Preference.CarUi.SeekBarPreference</item>
+        <item name="switchPreferenceStyle">@style/Preference.CarUi.SwitchPreference</item>
+    </style>
+
+</resources>
diff --git a/car-chassis-lib/res/values-port/values.xml b/car-ui-lib/res/values/values.xml
similarity index 82%
copy from car-chassis-lib/res/values-port/values.xml
copy to car-ui-lib/res/values/values.xml
index 39590dd..9dba256 100644
--- a/car-chassis-lib/res/values-port/values.xml
+++ b/car-ui-lib/res/values/values.xml
@@ -16,5 +16,6 @@
   -->
 
 <resources>
-    <bool name="chassis_tab_flexible_layout">true</bool>
+    <bool name="car_ui_tab_flexible_layout">false</bool>
+    <item name="car_ui_tab_item_layout" type="layout">@layout/car_ui_tab_item</item>
 </resources>
diff --git a/car-ui-lib/settings.gradle b/car-ui-lib/settings.gradle
new file mode 100644
index 0000000..321a5db
--- /dev/null
+++ b/car-ui-lib/settings.gradle
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+include ':PaintBooth'
+project(':PaintBooth').projectDir = new File('./tests/paintbooth')
+rootProject.name='Chassis'
diff --git a/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java b/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java
new file mode 100644
index 0000000..623442f
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/AlertDialogBuilder.java
@@ -0,0 +1,563 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.text.InputFilter;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.EditText;
+import android.widget.ListAdapter;
+
+import androidx.annotation.ArrayRes;
+import androidx.annotation.AttrRes;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.StringRes;
+
+/**
+ * Wrapper for AlertDialog.Builder
+ */
+public class AlertDialogBuilder {
+
+    private AlertDialog.Builder mBuilder;
+    private Context mContext;
+    private boolean mPositiveButtonSet;
+    private boolean mNeutralButtonSet;
+    private boolean mNegativeButtonSet;
+    private String mDefaultButtonText;
+
+    public AlertDialogBuilder(Context context) {
+        // Resource id specified as 0 uses the parent contexts resolved value for alertDialogTheme.
+        this(context, /* themeResId= */0);
+    }
+
+    public AlertDialogBuilder(Context context, int themeResId) {
+        mBuilder = new AlertDialog.Builder(context, themeResId);
+        mContext = context;
+        mDefaultButtonText = context.getString(R.string.car_ui_alert_dialog_default_button);
+    }
+
+    public Context getContext() {
+        return mBuilder.getContext();
+    }
+
+    /**
+     * Set the title using the given resource id.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setTitle(@StringRes int titleId) {
+        mBuilder.setTitle(titleId);
+        return this;
+    }
+
+    /**
+     * Set the title displayed in the {@link Dialog}.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setTitle(CharSequence title) {
+        mBuilder.setTitle(title);
+        return this;
+    }
+
+    /**
+     * Set the message to display using the given resource id.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setMessage(@StringRes int messageId) {
+        mBuilder.setMessage(messageId);
+        return this;
+    }
+
+    /**
+     * Set the message to display.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setMessage(CharSequence message) {
+        mBuilder.setMessage(message);
+        return this;
+    }
+
+    /**
+     * Set the resource id of the {@link Drawable} to be used in the title.
+     * <p>
+     * Takes precedence over values set using {@link #setIcon(Drawable)}.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setIcon(@DrawableRes int iconId) {
+        mBuilder.setIcon(iconId);
+        return this;
+    }
+
+    /**
+     * Set the {@link Drawable} to be used in the title.
+     * <p>
+     * <strong>Note:</strong> To ensure consistent styling, the drawable
+     * should be inflated or constructed using the alert dialog's themed
+     * context obtained via {@link #getContext()}.
+     *
+     * @return this Builder object to allow for chaining of calls to set
+     * methods
+     */
+    public AlertDialogBuilder setIcon(Drawable icon) {
+        mBuilder.setIcon(icon);
+        return this;
+    }
+
+    /**
+     * Set an icon as supplied by a theme attribute. e.g.
+     * {@link android.R.attr#alertDialogIcon}.
+     * <p>
+     * Takes precedence over values set using {@link #setIcon(int)} or
+     * {@link #setIcon(Drawable)}.
+     *
+     * @param attrId ID of a theme attribute that points to a drawable resource.
+     */
+    public AlertDialogBuilder setIconAttribute(@AttrRes int attrId) {
+        mBuilder.setIconAttribute(attrId);
+        return this;
+    }
+
+    /**
+     * Set a listener to be invoked when the positive button of the dialog is pressed.
+     *
+     * @param textId The resource id of the text to display in the positive button
+     * @param listener The {@link DialogInterface.OnClickListener} to use.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setPositiveButton(@StringRes int textId,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setPositiveButton(textId, listener);
+        mPositiveButtonSet = true;
+        return this;
+    }
+
+    /**
+     * Set a listener to be invoked when the positive button of the dialog is pressed.
+     *
+     * @param text The text to display in the positive button
+     * @param listener The {@link DialogInterface.OnClickListener} to use.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setPositiveButton(CharSequence text,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setPositiveButton(text, listener);
+        mPositiveButtonSet = true;
+        return this;
+    }
+
+    /**
+     * Set a listener to be invoked when the negative button of the dialog is pressed.
+     *
+     * @param textId The resource id of the text to display in the negative button
+     * @param listener The {@link DialogInterface.OnClickListener} to use.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setNegativeButton(@StringRes int textId,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setNegativeButton(textId, listener);
+        mNegativeButtonSet = true;
+        return this;
+    }
+
+    /**
+     * Set a listener to be invoked when the negative button of the dialog is pressed.
+     *
+     * @param text The text to display in the negative button
+     * @param listener The {@link DialogInterface.OnClickListener} to use.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setNegativeButton(CharSequence text,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setNegativeButton(text, listener);
+        mNegativeButtonSet = true;
+        return this;
+    }
+
+    /**
+     * Set a listener to be invoked when the neutral button of the dialog is pressed.
+     *
+     * @param textId The resource id of the text to display in the neutral button
+     * @param listener The {@link DialogInterface.OnClickListener} to use.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setNeutralButton(@StringRes int textId,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setNeutralButton(textId, listener);
+        mNeutralButtonSet = true;
+        return this;
+    }
+
+    /**
+     * Set a listener to be invoked when the neutral button of the dialog is pressed.
+     *
+     * @param text The text to display in the neutral button
+     * @param listener The {@link DialogInterface.OnClickListener} to use.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setNeutralButton(CharSequence text,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setPositiveButton(text, listener);
+        mNeutralButtonSet = true;
+        return this;
+    }
+
+    /**
+     * Sets whether the dialog is cancelable or not.  Default is true.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setCancelable(boolean cancelable) {
+        mBuilder.setCancelable(cancelable);
+        return this;
+    }
+
+    /**
+     * Sets the callback that will be called if the dialog is canceled.
+     *
+     * <p>Even in a cancelable dialog, the dialog may be dismissed for reasons other than
+     * being canceled or one of the supplied choices being selected.
+     * If you are interested in listening for all cases where the dialog is dismissed
+     * and not just when it is canceled, see
+     * {@link #setOnDismissListener(android.content.DialogInterface.OnDismissListener)
+     * setOnDismissListener}.</p>
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     * @see #setCancelable(boolean)
+     * @see #setOnDismissListener(android.content.DialogInterface.OnDismissListener)
+     */
+    public AlertDialogBuilder setOnCancelListener(
+            DialogInterface.OnCancelListener onCancelListener) {
+        mBuilder.setOnCancelListener(onCancelListener);
+        return this;
+    }
+
+    /**
+     * Sets the callback that will be called when the dialog is dismissed for any reason.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setOnDismissListener(
+            DialogInterface.OnDismissListener onDismissListener) {
+        mBuilder.setOnDismissListener(onDismissListener);
+        return this;
+    }
+
+    /**
+     * Sets the callback that will be called if a key is dispatched to the dialog.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setOnKeyListener(DialogInterface.OnKeyListener onKeyListener) {
+        mBuilder.setOnKeyListener(onKeyListener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content, you will be notified of the
+     * selected item via the supplied listener. This should be an array type i.e. R.array.foo
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setItems(@ArrayRes int itemsId,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setItems(itemsId, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content, you will be notified of the
+     * selected item via the supplied listener.
+     *
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setItems(CharSequence[] items,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setItems(items, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items, which are supplied by the given {@link ListAdapter}, to be
+     * displayed in the dialog as the content, you will be notified of the
+     * selected item via the supplied listener.
+     *
+     * @param adapter The {@link ListAdapter} to supply the list of items
+     * @param listener The listener that will be called when an item is clicked.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setAdapter(final ListAdapter adapter,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setAdapter(adapter, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items, which are supplied by the given {@link Cursor}, to be
+     * displayed in the dialog as the content, you will be notified of the
+     * selected item via the supplied listener.
+     *
+     * @param cursor The {@link Cursor} to supply the list of items
+     * @param listener The listener that will be called when an item is clicked.
+     * @param labelColumn The column name on the cursor containing the string to display
+     * in the label.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setCursor(final Cursor cursor,
+            final DialogInterface.OnClickListener listener,
+            String labelColumn) {
+        mBuilder.setCursor(cursor, listener, labelColumn);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content,
+     * you will be notified of the selected item via the supplied listener.
+     * This should be an array type, e.g. R.array.foo. The list will have
+     * a check mark displayed to the right of the text for each checked
+     * item. Clicking on an item in the list will not dismiss the dialog.
+     * Clicking on a button will dismiss the dialog.
+     *
+     * @param itemsId the resource id of an array i.e. R.array.foo
+     * @param checkedItems specifies which items are checked. It should be null in which case no
+     * items are checked. If non null it must be exactly the same length as the array of
+     * items.
+     * @param listener notified when an item on the list is clicked. The dialog will not be
+     * dismissed when an item is clicked. It will only be dismissed if clicked on a
+     * button, if no buttons are supplied it's up to the user to dismiss the dialog.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,
+            final DialogInterface.OnMultiChoiceClickListener listener) {
+        mBuilder.setMultiChoiceItems(itemsId, checkedItems, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content,
+     * you will be notified of the selected item via the supplied listener.
+     * The list will have a check mark displayed to the right of the text
+     * for each checked item. Clicking on an item in the list will not
+     * dismiss the dialog. Clicking on a button will dismiss the dialog.
+     *
+     * @param items the text of the items to be displayed in the list.
+     * @param checkedItems specifies which items are checked. It should be null in which case no
+     * items are checked. If non null it must be exactly the same length as the array of
+     * items.
+     * @param listener notified when an item on the list is clicked. The dialog will not be
+     * dismissed when an item is clicked. It will only be dismissed if clicked on a
+     * button, if no buttons are supplied it's up to the user to dismiss the dialog.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,
+            final DialogInterface.OnMultiChoiceClickListener listener) {
+        mBuilder.setMultiChoiceItems(items, checkedItems, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content,
+     * you will be notified of the selected item via the supplied listener.
+     * The list will have a check mark displayed to the right of the text
+     * for each checked item. Clicking on an item in the list will not
+     * dismiss the dialog. Clicking on a button will dismiss the dialog.
+     *
+     * @param cursor the cursor used to provide the items.
+     * @param isCheckedColumn specifies the column name on the cursor to use to determine
+     * whether a checkbox is checked or not. It must return an integer value where 1
+     * means checked and 0 means unchecked.
+     * @param labelColumn The column name on the cursor containing the string to display in the
+     * label.
+     * @param listener notified when an item on the list is clicked. The dialog will not be
+     * dismissed when an item is clicked. It will only be dismissed if clicked on a
+     * button, if no buttons are supplied it's up to the user to dismiss the dialog.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setMultiChoiceItems(Cursor cursor, String isCheckedColumn,
+            String labelColumn,
+            final DialogInterface.OnMultiChoiceClickListener listener) {
+        mBuilder.setMultiChoiceItems(cursor, isCheckedColumn, labelColumn, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content, you will be notified of
+     * the selected item via the supplied listener. This should be an array type i.e.
+     * R.array.foo The list will have a check mark displayed to the right of the text for the
+     * checked item. Clicking on an item in the list will not dismiss the dialog. Clicking on a
+     * button will dismiss the dialog.
+     *
+     * @param itemsId the resource id of an array i.e. R.array.foo
+     * @param checkedItem specifies which item is checked. If -1 no items are checked.
+     * @param listener notified when an item on the list is clicked. The dialog will not be
+     * dismissed when an item is clicked. It will only be dismissed if clicked on a
+     * button, if no buttons are supplied it's up to the user to dismiss the dialog.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setSingleChoiceItems(itemsId, checkedItem, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content, you will be notified of
+     * the selected item via the supplied listener. The list will have a check mark displayed to
+     * the right of the text for the checked item. Clicking on an item in the list will not
+     * dismiss the dialog. Clicking on a button will dismiss the dialog.
+     *
+     * @param cursor the cursor to retrieve the items from.
+     * @param checkedItem specifies which item is checked. If -1 no items are checked.
+     * @param labelColumn The column name on the cursor containing the string to display in the
+     * label.
+     * @param listener notified when an item on the list is clicked. The dialog will not be
+     * dismissed when an item is clicked. It will only be dismissed if clicked on a
+     * button, if no buttons are supplied it's up to the user to dismiss the dialog.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setSingleChoiceItems(Cursor cursor, int checkedItem,
+            String labelColumn,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setSingleChoiceItems(cursor, checkedItem, labelColumn, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content, you will be notified of
+     * the selected item via the supplied listener. The list will have a check mark displayed to
+     * the right of the text for the checked item. Clicking on an item in the list will not
+     * dismiss the dialog. Clicking on a button will dismiss the dialog.
+     *
+     * @param items the items to be displayed.
+     * @param checkedItem specifies which item is checked. If -1 no items are checked.
+     * @param listener notified when an item on the list is clicked. The dialog will not be
+     * dismissed when an item is clicked. It will only be dismissed if clicked on a
+     * button, if no buttons are supplied it's up to the user to dismiss the dialog.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setSingleChoiceItems(CharSequence[] items, int checkedItem,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setSingleChoiceItems(items, checkedItem, listener);
+        return this;
+    }
+
+    /**
+     * Set a list of items to be displayed in the dialog as the content, you will be notified of
+     * the selected item via the supplied listener. The list will have a check mark displayed to
+     * the right of the text for the checked item. Clicking on an item in the list will not
+     * dismiss the dialog. Clicking on a button will dismiss the dialog.
+     *
+     * @param adapter The {@link ListAdapter} to supply the list of items
+     * @param checkedItem specifies which item is checked. If -1 no items are checked.
+     * @param listener notified when an item on the list is clicked. The dialog will not be
+     * dismissed when an item is clicked. It will only be dismissed if clicked on a
+     * button, if no buttons are supplied it's up to the user to dismiss the dialog.
+     * @return This Builder object to allow for chaining of calls to set methods
+     */
+    public AlertDialogBuilder setSingleChoiceItems(ListAdapter adapter, int checkedItem,
+            final DialogInterface.OnClickListener listener) {
+        mBuilder.setSingleChoiceItems(adapter, checkedItem, listener);
+        return this;
+    }
+
+    /**
+     * Sets a listener to be invoked when an item in the list is selected.
+     *
+     * @param listener the listener to be invoked
+     * @return this Builder object to allow for chaining of calls to set methods
+     * @see AdapterView#setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener)
+     */
+    public AlertDialogBuilder setOnItemSelectedListener(
+            final AdapterView.OnItemSelectedListener listener) {
+        mBuilder.setOnItemSelectedListener(listener);
+        return this;
+    }
+
+    /**
+     * Sets a custom edit text box within the alert dialog.
+     *
+     * @param prompt the string that will be set on the edit text view
+     * @param textChangedListener textWatcher whose methods are called whenever this TextView's text
+     * changes {@link null} otherwise.
+     * @param inputFilters list of input filters, {@link null} if no filter is needed
+     * @return this Builder object to allow for chaining of calls to set
+     * methods
+     */
+    public AlertDialogBuilder setEditBox(String prompt, TextWatcher textChangedListener,
+            InputFilter[] inputFilters) {
+        LayoutInflater layoutInflater =
+                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        View contentView = layoutInflater.inflate(R.layout.car_ui_alert_dialog_edit_text,
+                null);
+
+        EditText editText = contentView.findViewById(R.id.textbox);
+        editText.setText(prompt);
+
+        if (textChangedListener != null) {
+            editText.addTextChangedListener(textChangedListener);
+        }
+
+        if (inputFilters != null) {
+            editText.setFilters(inputFilters);
+        }
+
+        mBuilder.setView(contentView);
+        return this;
+    }
+
+    /**
+     * Creates an {@link AlertDialog} with the arguments supplied to this
+     * builder.
+     * <p>
+     * Calling this method does not display the dialog. If no additional
+     * processing is needed, {@link #show()} may be called instead to both
+     * create and display the dialog.
+     */
+    public AlertDialog create() {
+        return mBuilder.create();
+    }
+
+    /**
+     * Creates an {@link AlertDialog} with the arguments supplied to this
+     * builder and immediately displays the dialog.
+     * <p>
+     * Calling this method is functionally identical to:
+     * <pre>
+     *     AlertDialog dialog = builder.create();
+     *     dialog.show();
+     * </pre>
+     */
+    public AlertDialog show() {
+        if (mNeutralButtonSet || mNegativeButtonSet || mPositiveButtonSet) {
+            return mBuilder.show();
+        }
+
+        mBuilder.setNegativeButton(mDefaultButtonText, (dialog, which) -> {
+        });
+        return mBuilder.show();
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/DefaultScrollBar.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/DefaultScrollBar.java
new file mode 100644
index 0000000..3dbb6aa
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/DefaultScrollBar.java
@@ -0,0 +1,599 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Handler;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+
+import androidx.annotation.IntRange;
+import androidx.annotation.VisibleForTesting;
+import androidx.recyclerview.widget.OrientationHelper;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.R;
+import com.android.car.ui.pagedrecyclerview.PagedRecyclerView.ScrollBarPosition;
+import com.android.car.ui.utils.ResourceUtils;
+
+/**
+ * The default scroll bar widget for the {@link PagedRecyclerView}.
+ *
+ * <p>Inspired by {@link androidx.car.widget.PagedListView}. Most pagination and scrolling logic has
+ * been ported from the PLV with minor updates.
+ */
+class DefaultScrollBar implements ScrollBar {
+
+    @VisibleForTesting
+    int mPaddingStart;
+    @VisibleForTesting
+    int mPaddingEnd;
+
+    private float mButtonDisabledAlpha;
+    private PagedSnapHelper mSnapHelper;
+
+    private ImageView mUpButton;
+    private View mScrollView;
+    private View mScrollThumb;
+    private ImageView mDownButton;
+
+    private int mSeparatingMargin;
+
+    private RecyclerView mRecyclerView;
+
+    /** The amount of space that the scroll thumb is allowed to roam over. */
+    private int mScrollThumbTrackHeight;
+
+    private final Interpolator mPaginationInterpolator = new AccelerateDecelerateInterpolator();
+
+    private final int mRowsPerPage = -1;
+    private final Handler mHandler = new Handler();
+
+    private OrientationHelper mOrientationHelper;
+
+    @Override
+    public void initialize(
+            RecyclerView rv,
+            int scrollBarContainerWidth,
+            @ScrollBarPosition int scrollBarPosition,
+            boolean scrollBarAboveRecyclerView) {
+
+        mRecyclerView = rv;
+
+        LayoutInflater inflater =
+                (LayoutInflater) rv.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+        FrameLayout parent = (FrameLayout) getRecyclerView().getParent();
+
+        mScrollView = inflater.inflate(R.layout.car_ui_pagedrecyclerview_scrollbar, parent, false);
+        mScrollView.setLayoutParams(
+                new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
+
+        Resources res = rv.getContext().getResources();
+
+        mButtonDisabledAlpha = ResourceUtils.getFloat(res, R.dimen.car_ui_button_disabled_alpha);
+
+        if (scrollBarAboveRecyclerView) {
+            parent.addView(mScrollView);
+        } else {
+            parent.addView(mScrollView, /* index= */ 0);
+        }
+
+        setScrollBarContainerWidth(scrollBarContainerWidth);
+        setScrollBarPosition(scrollBarPosition);
+
+        getRecyclerView().addOnScrollListener(mRecyclerViewOnScrollListener);
+        getRecyclerView().getRecycledViewPool().setMaxRecycledViews(0, 12);
+
+        mSeparatingMargin = res.getDimensionPixelSize(R.dimen.car_ui_scrollbar_separator_margin);
+
+        mUpButton = mScrollView.findViewById(R.id.page_up);
+        PaginateButtonClickListener upButtonClickListener =
+                new PaginateButtonClickListener(PaginationListener.PAGE_UP);
+        mUpButton.setOnClickListener(upButtonClickListener);
+
+        mDownButton = mScrollView.findViewById(R.id.page_down);
+        PaginateButtonClickListener downButtonClickListener =
+                new PaginateButtonClickListener(PaginationListener.PAGE_DOWN);
+        mDownButton.setOnClickListener(downButtonClickListener);
+
+        mScrollThumb = mScrollView.findViewById(R.id.scrollbar_thumb);
+
+        mSnapHelper = new PagedSnapHelper(rv.getContext());
+        getRecyclerView().setOnFlingListener(null);
+        mSnapHelper.attachToRecyclerView(getRecyclerView());
+
+        mScrollView.addOnLayoutChangeListener(
+                (View v,
+                        int left,
+                        int top,
+                        int right,
+                        int bottom,
+                        int oldLeft,
+                        int oldTop,
+                        int oldRight,
+                        int oldBottom) -> {
+                    int width = right - left;
+
+                    OrientationHelper orientationHelper =
+                            getOrientationHelper(getRecyclerView().getLayoutManager());
+
+                    // This value will keep track of the top of the current view being laid out.
+                    int layoutTop = orientationHelper.getStartAfterPadding() + mPaddingStart;
+
+                    // Lay out the up button at the top of the view.
+                    layoutViewCenteredFromTop(mUpButton, layoutTop, width);
+                    layoutTop = mUpButton.getBottom();
+
+                    // Lay out the scroll thumb
+                    layoutTop += mSeparatingMargin;
+                    layoutViewCenteredFromTop(mScrollThumb, layoutTop, width);
+
+                    // Lay out the bottom button at the bottom of the view.
+                    int downBottom = orientationHelper.getEndAfterPadding() - mPaddingEnd;
+                    layoutViewCenteredFromBottom(mDownButton, downBottom, width);
+
+                    mHandler.post(this::calculateScrollThumbTrackHeight);
+                    mHandler.post(() -> updatePaginationButtons(/* animate= */ false));
+                });
+    }
+
+    public RecyclerView getRecyclerView() {
+        return mRecyclerView;
+    }
+
+    @Override
+    public void requestLayout() {
+        mScrollView.requestLayout();
+    }
+
+    /**
+     * Sets the width of the container that holds the scrollbar. The scrollbar will be centered
+     * within
+     * this width.
+     *
+     * @param width The width of the scrollbar container.
+     */
+    private void setScrollBarContainerWidth(int width) {
+        ViewGroup.LayoutParams layoutParams = mScrollView.getLayoutParams();
+        layoutParams.width = width;
+        mScrollView.requestLayout();
+    }
+
+    @Override
+    public void setPadding(int paddingStart, int paddingEnd) {
+        this.mPaddingStart = paddingStart;
+        this.mPaddingEnd = paddingEnd;
+        requestLayout();
+    }
+
+    /**
+     * Sets the position of the scrollbar.
+     *
+     * @param position Enum value of the scrollbar position. 0 for Start and 1 for end.
+     */
+    private void setScrollBarPosition(@ScrollBarPosition int position) {
+        FrameLayout.LayoutParams layoutParams =
+                (FrameLayout.LayoutParams) mScrollView.getLayoutParams();
+        if (position == ScrollBarPosition.START) {
+            layoutParams.gravity = Gravity.LEFT;
+        } else {
+            layoutParams.gravity = Gravity.RIGHT;
+        }
+
+        mScrollView.requestLayout();
+    }
+
+    /**
+     * Sets whether or not the up button on the scroll bar is clickable.
+     *
+     * @param enabled {@code true} if the up button is enabled.
+     */
+    private void setUpEnabled(boolean enabled) {
+        mUpButton.setEnabled(enabled);
+        mUpButton.setAlpha(enabled ? 1f : mButtonDisabledAlpha);
+    }
+
+    /**
+     * Sets whether or not the down button on the scroll bar is clickable.
+     *
+     * @param enabled {@code true} if the down button is enabled.
+     */
+    private void setDownEnabled(boolean enabled) {
+        mDownButton.setEnabled(enabled);
+        mDownButton.setAlpha(enabled ? 1f : mButtonDisabledAlpha);
+    }
+
+    /**
+     * Returns whether or not the down button on the scroll bar is clickable.
+     *
+     * @return {@code true} if the down button is enabled. {@code false} otherwise.
+     */
+    private boolean isDownEnabled() {
+        return mDownButton.isEnabled();
+    }
+
+    /** Listener for when the list should paginate. */
+    interface PaginationListener {
+        int PAGE_UP = 0;
+        int PAGE_DOWN = 1;
+
+        /** Called when the linked view should be paged in the given direction */
+        void onPaginate(int direction);
+    }
+
+    /**
+     * Calculate the amount of space that the scroll bar thumb is allowed to roam. The thumb is
+     * allowed to take up the space between the down bottom and the up or alpha jump button,
+     * depending
+     * on if the latter is visible.
+     */
+    private void calculateScrollThumbTrackHeight() {
+        // Subtracting (2 * mSeparatingMargin) for the top/bottom margin above and below the
+        // scroll bar thumb.
+        mScrollThumbTrackHeight = mDownButton.getTop() - (2 * mSeparatingMargin);
+
+        // If there's an alpha jump button, then the thumb is laid out starting from below that.
+        mScrollThumbTrackHeight -= mUpButton.getBottom();
+    }
+
+    /**
+     * Lays out the given View starting from the given {@code top} value downwards and centered
+     * within the given {@code availableWidth}.
+     *
+     * @param view The view to lay out.
+     * @param top The top value to start laying out from. This value will be the resulting top value
+     * of the view.
+     * @param availableWidth The width in which to center the given view.
+     */
+    private static void layoutViewCenteredFromTop(View view, int top, int availableWidth) {
+        int viewWidth = view.getMeasuredWidth();
+        int viewLeft = (availableWidth - viewWidth) / 2;
+        view.layout(viewLeft, top, viewLeft + viewWidth, top + view.getMeasuredHeight());
+    }
+
+    /**
+     * Lays out the given View starting from the given {@code bottom} value upwards and centered
+     * within the given {@code availableSpace}.
+     *
+     * @param view The view to lay out.
+     * @param bottom The bottom value to start laying out from. This value will be the resulting
+     * bottom value of the view.
+     * @param availableWidth The width in which to center the given view.
+     */
+    private static void layoutViewCenteredFromBottom(View view, int bottom, int availableWidth) {
+        int viewWidth = view.getMeasuredWidth();
+        int viewLeft = (availableWidth - viewWidth) / 2;
+        view.layout(viewLeft, bottom - view.getMeasuredHeight(), viewLeft + viewWidth, bottom);
+    }
+
+    /**
+     * Sets the range, offset and extent of the scroll bar. The range represents the size of a
+     * container for the scrollbar thumb; offset is the distance from the start of the container to
+     * where the thumb should be; and finally, extent is the size of the thumb.
+     *
+     * <p>These values can be expressed in arbitrary units, so long as they share the same units.
+     * The
+     * values should also be positive.
+     *
+     * @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
+     * @param animate Whether or not the thumb should animate from its current position to the
+     * position specified by the given range, offset and extent.
+     */
+    private void setParameters(
+            @IntRange(from = 0) int range,
+            @IntRange(from = 0) int offset,
+            @IntRange(from = 0) int extent,
+            boolean animate) {
+        // Not laid out yet, so values cannot be calculated.
+        if (!mScrollView.isLaidOut()) {
+            return;
+        }
+
+        // If the scroll bars aren't visible, then no need to update.
+        if (mScrollView.getVisibility() == View.GONE || range == 0) {
+            return;
+        }
+
+        int thumbLength = calculateScrollThumbLength(range, extent);
+        int thumbOffset = calculateScrollThumbOffset(range, offset, thumbLength);
+
+        // Sets the size of the thumb and request a redraw if needed.
+        ViewGroup.LayoutParams lp = mScrollThumb.getLayoutParams();
+
+        if (lp.height != thumbLength) {
+            lp.height = thumbLength;
+            mScrollThumb.requestLayout();
+        }
+
+        moveY(mScrollThumb, thumbOffset, animate);
+    }
+
+    /**
+     * 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 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) * mScrollThumbTrackHeight);
+    }
+
+    /**
+     * Calculates and returns how much the scroll thumb should be offset from the top of where it
+     * 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 thumbLength The current length of the thumb in pixels.
+     * @return The amount the thumb should be offset in pixels.
+     */
+    private int calculateScrollThumbOffset(int range, int offset, int thumbLength) {
+        // Ensure that if the user has reached the bottom of the list, then the scroll bar is
+        // aligned to the bottom as well. Otherwise, scale the offset appropriately.
+        // This offset will be a value relative to the parent of this scrollbar, so start by where
+        // the top of mScrollThumb is.
+        return mScrollThumb.getTop()
+                + (isDownEnabled()
+                ? Math.round(((float) offset / range) * mScrollThumbTrackHeight)
+                : mScrollThumbTrackHeight - thumbLength);
+    }
+
+    /** Moves the given view to the specified 'y' position. */
+    private void moveY(final View view, float newPosition, boolean animate) {
+        final int duration = animate ? 200 : 0;
+        view.animate()
+                .y(newPosition)
+                .setDuration(duration)
+                .setInterpolator(mPaginationInterpolator)
+                .start();
+    }
+
+    private class PaginateButtonClickListener implements View.OnClickListener {
+        private final int mPaginateDirection;
+        private PaginationListener mPaginationListener;
+
+        PaginateButtonClickListener(int paginateDirection) {
+            this.mPaginateDirection = paginateDirection;
+        }
+
+        @Override
+        public void onClick(View v) {
+            if (mPaginationListener != null) {
+                mPaginationListener.onPaginate(mPaginateDirection);
+            }
+            if (mPaginateDirection == PaginationListener.PAGE_DOWN) {
+                pageDown();
+            } else if (mPaginateDirection == PaginationListener.PAGE_UP) {
+                pageUp();
+            }
+        }
+    }
+
+    private final RecyclerView.OnScrollListener mRecyclerViewOnScrollListener =
+            new RecyclerView.OnScrollListener() {
+                @Override
+                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+                    updatePaginationButtons(false);
+                }
+            };
+
+    /** Returns the page the given position is on, starting with page 0. */
+    int getPage(int position) {
+        if (mRowsPerPage == -1) {
+            return -1;
+        }
+        if (mRowsPerPage == 0) {
+            return 0;
+        }
+        return position / mRowsPerPage;
+    }
+
+    private OrientationHelper getOrientationHelper(RecyclerView.LayoutManager layoutManager) {
+        if (mOrientationHelper == null || mOrientationHelper.getLayoutManager() != layoutManager) {
+            // PagedRecyclerView is assumed to be a list that always vertically scrolls.
+            mOrientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+        }
+        return mOrientationHelper;
+    }
+
+    /**
+     * Scrolls the contents of the RecyclerView up a page. A page is defined as the height of the
+     * {@code PagedRecyclerView}.
+     *
+     * <p>The resulting first item in the list will be snapped to so that it is completely visible.
+     * If
+     * this is not possible due to the first item being taller than the containing {@code
+     * PagedRecyclerView}, then the snapping will not occur.
+     */
+    void pageUp() {
+        int currentOffset = getRecyclerView().computeVerticalScrollOffset();
+        if (getRecyclerView().getLayoutManager() == null
+                || getRecyclerView().getChildCount() == 0
+                || currentOffset == 0) {
+            return;
+        }
+
+        // Use OrientationHelper to calculate scroll distance in order to match snapping behavior.
+        OrientationHelper orientationHelper =
+                getOrientationHelper(getRecyclerView().getLayoutManager());
+        int screenSize = orientationHelper.getTotalSpace();
+
+        int scrollDistance = screenSize;
+        // The iteration order matters. In case where there are 2 items longer than screen size, we
+        // want to focus on upcoming view.
+        for (int i = 0; i < getRecyclerView().getChildCount(); i++) {
+            /*
+             * We treat child View longer than screen size differently:
+             * 1) When it enters screen, next pageUp will align its bottom with parent bottom;
+             * 2) When it leaves screen, next pageUp will align its top with parent top.
+             */
+            View child = getRecyclerView().getChildAt(i);
+            if (child.getHeight() > screenSize) {
+                if (orientationHelper.getDecoratedEnd(child) < screenSize) {
+                    // Child view bottom is entering screen. Align its bottom with parent bottom.
+                    scrollDistance = screenSize - orientationHelper.getDecoratedEnd(child);
+                } else if (-screenSize < orientationHelper.getDecoratedStart(child)
+                        && orientationHelper.getDecoratedStart(child) < 0) {
+                    // Child view top is about to enter screen - its distance to parent top
+                    // is less than a full scroll. Align child top with parent top.
+                    scrollDistance = Math.abs(orientationHelper.getDecoratedStart(child));
+                }
+                // There can be two items that are longer than the screen. We stop at the first one.
+                // This is affected by the iteration order.
+                break;
+            }
+        }
+
+        mSnapHelper.smoothScrollBy(-scrollDistance);
+    }
+
+    /**
+     * Scrolls the contents of the RecyclerView down a page. A page is defined as the height of the
+     * {@code PagedRecyclerView}.
+     *
+     * <p>This method will attempt to bring the last item in the list as the first item. If the
+     * current first item in the list is taller than the {@code PagedRecyclerView}, then it will be
+     * scrolled the length of a page, but not snapped to.
+     */
+    void pageDown() {
+        if (getRecyclerView().getLayoutManager() == null
+                || getRecyclerView().getChildCount() == 0) {
+            return;
+        }
+
+        OrientationHelper orientationHelper =
+                getOrientationHelper(getRecyclerView().getLayoutManager());
+        int screenSize = orientationHelper.getTotalSpace();
+        int scrollDistance = screenSize;
+
+        // If the last item is partially visible, page down should bring it to the top.
+        View lastChild = getRecyclerView().getChildAt(getRecyclerView().getChildCount() - 1);
+        if (getRecyclerView()
+                .getLayoutManager()
+                .isViewPartiallyVisible(
+                        lastChild, /* completelyVisible= */ false, /* acceptEndPointInclusion= */
+                        false)) {
+            scrollDistance = orientationHelper.getDecoratedStart(lastChild);
+            if (scrollDistance < 0) {
+                // Scroll value can be negative if the child is longer than the screen size and the
+                // visible area of the screen does not show the start of the child.
+                // Scroll to the next screen if the start value is negative
+                scrollDistance = screenSize;
+            }
+        }
+
+        // The iteration order matters. In case where there are 2 items longer than screen size, we
+        // want to focus on upcoming view (the one at the bottom of screen).
+        for (int i = getRecyclerView().getChildCount() - 1; i >= 0; i--) {
+            /* We treat child View longer than screen size differently:
+             * 1) When it enters screen, next pageDown will align its top with parent top;
+             * 2) When it leaves screen, next pageDown will align its bottom with parent bottom.
+             */
+            View child = getRecyclerView().getChildAt(i);
+            if (child.getHeight() > screenSize) {
+                if (orientationHelper.getDecoratedStart(child) > 0) {
+                    // Child view top is entering screen. Align its top with parent top.
+                    scrollDistance = orientationHelper.getDecoratedStart(child);
+                } else if (screenSize < orientationHelper.getDecoratedEnd(child)
+                        && orientationHelper.getDecoratedEnd(child) < 2 * screenSize) {
+                    // Child view bottom is about to enter screen - its distance to parent bottom
+                    // is less than a full scroll. Align child bottom with parent bottom.
+                    scrollDistance = orientationHelper.getDecoratedEnd(child) - screenSize;
+                }
+                // There can be two items that are longer than the screen. We stop at the first one.
+                // This is affected by the iteration order.
+                break;
+            }
+        }
+
+        mSnapHelper.smoothScrollBy(scrollDistance);
+    }
+
+    /**
+     * Determines if scrollbar should be visible or not and shows/hides it accordingly. If this is
+     * being called as a result of adapter changes, it should be called after the new layout has
+     * been
+     * calculated because the method of determining scrollbar visibility uses the current layout.
+     * If
+     * this is called after an adapter change but before the new layout, the visibility
+     * determination
+     * may not be correct.
+     *
+     * @param animate {@code true} if the scrollbar should animate to its new position. {@code
+     * false}
+     * if no animation is used
+     */
+    private void updatePaginationButtons(boolean animate) {
+
+        boolean isAtStart = isAtStart();
+        boolean isAtEnd = isAtEnd();
+        RecyclerView.LayoutManager layoutManager = getRecyclerView().getLayoutManager();
+
+        if ((isAtStart && isAtEnd) || layoutManager == null || layoutManager.getItemCount() == 0) {
+            mScrollView.setVisibility(View.INVISIBLE);
+        } else {
+            mScrollView.setVisibility(View.VISIBLE);
+        }
+        setUpEnabled(!isAtStart);
+        setDownEnabled(!isAtEnd);
+
+        if (layoutManager == null) {
+            return;
+        }
+
+        if (layoutManager.canScrollVertically()) {
+            setParameters(
+                    getRecyclerView().computeVerticalScrollRange(),
+                    getRecyclerView().computeVerticalScrollOffset(),
+                    getRecyclerView().computeVerticalScrollExtent(),
+                    animate);
+        } else {
+            setParameters(
+                    getRecyclerView().computeHorizontalScrollRange(),
+                    getRecyclerView().computeHorizontalScrollOffset(),
+                    getRecyclerView().computeHorizontalScrollExtent(),
+                    animate);
+        }
+
+        mScrollView.invalidate();
+    }
+
+    /** Returns {@code true} if the RecyclerView is completely displaying the first item. */
+    boolean isAtStart() {
+        return mSnapHelper.isAtStart(getRecyclerView().getLayoutManager());
+    }
+
+    /** Returns {@code true} if the RecyclerView is completely displaying the last item. */
+    boolean isAtEnd() {
+        return mSnapHelper.isAtEnd(getRecyclerView().getLayoutManager());
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerView.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerView.java
new file mode 100644
index 0000000..f5a8e12
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerView.java
@@ -0,0 +1,866 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.ContextThemeWrapper;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.R;
+import com.android.car.ui.pagedrecyclerview.decorations.grid.GridDividerItemDecoration;
+import com.android.car.ui.pagedrecyclerview.decorations.grid.GridOffsetItemDecoration;
+import com.android.car.ui.pagedrecyclerview.decorations.linear.LinearDividerItemDecoration;
+import com.android.car.ui.pagedrecyclerview.decorations.linear.LinearOffsetItemDecoration;
+import com.android.car.ui.pagedrecyclerview.decorations.linear.LinearOffsetItemDecoration.OffsetPosition;
+import com.android.car.ui.toolbar.Toolbar;
+import com.android.car.ui.utils.CarUxRestrictionsUtil;
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.lang.annotation.Retention;
+
+/**
+ * View that extends a {@link RecyclerView} and creates a nested {@code RecyclerView} which could
+ * potentially include a scrollbar that has page up and down arrows. Interaction with this view is
+ * similar to a {@code RecyclerView} as it takes the same adapter and the layout manager.
+ */
+public final class PagedRecyclerView extends RecyclerView implements
+        Toolbar.OnHeightChangedListener {
+
+    private static final boolean DEBUG = false;
+    private static final String TAG = "PagedRecyclerView";
+
+    private final CarUxRestrictionsUtil mCarUxRestrictionsUtil;
+    private final CarUxRestrictionsUtil.OnUxRestrictionsChangedListener mListener;
+
+    private boolean mScrollBarEnabled;
+    private int mScrollBarContainerWidth;
+    @ScrollBarPosition
+    private int mScrollBarPosition;
+    private boolean mScrollBarAboveRecyclerView;
+    private String mScrollBarClass;
+    private boolean mFullyInitialized;
+    private float mScrollBarPaddingStart;
+    private float mScrollBarPaddingEnd;
+    private Context mContext;
+
+    @Gutter
+    private int mGutter;
+    private int mGutterSize;
+    @VisibleForTesting
+    RecyclerView mNestedRecyclerView;
+    private Adapter<?> mAdapter;
+    private ScrollBar mScrollBar;
+    private int mInitialTopPadding;
+
+    private GridOffsetItemDecoration mOffsetItemDecoration;
+    private GridDividerItemDecoration mDividerItemDecoration;
+    @PagedRecyclerViewLayout
+    int mPagedRecyclerViewLayout;
+    private int mNumOfColumns;
+
+    /**
+     * The possible values for @{link #setGutter}. The default value is actually {@link
+     * PagedRecyclerView.Gutter#BOTH}.
+     */
+    @IntDef({
+            Gutter.NONE,
+            Gutter.START,
+            Gutter.END,
+            Gutter.BOTH,
+    })
+    @Retention(SOURCE)
+    public @interface Gutter {
+        /**
+         * No gutter on either side of the list items. The items will span the full width of the
+         * RecyclerView
+         */
+        int NONE = 0;
+
+        /** Include a gutter only on the start side (that is, the same side as the scroll bar). */
+        int START = 1;
+
+        /** Include a gutter only on the end side (that is, the opposite side of the scroll bar). */
+        int END = 2;
+
+        /** Include a gutter on both sides of the list items. This is the default behaviour. */
+        int BOTH = 3;
+    }
+
+    /**
+     * The possible values for setScrollbarPosition. The default value is actually {@link
+     * PagedRecyclerView.ScrollBarPosition#START}.
+     */
+    @IntDef({
+            ScrollBarPosition.START,
+            ScrollBarPosition.END,
+    })
+    @Retention(SOURCE)
+    public @interface ScrollBarPosition {
+        /** Position the scrollbar to the left of the screen. This is default. */
+        int START = 0;
+
+        /** Position scrollbar to the right of the screen. */
+        int END = 2;
+    }
+
+    /**
+     * The possible values for setScrollbarPosition. The default value is actually {@link
+     * PagedRecyclerViewLayout#LINEAR}.
+     */
+    @IntDef({
+            PagedRecyclerViewLayout.LINEAR,
+            PagedRecyclerViewLayout.GRID,
+    })
+    @Retention(SOURCE)
+    public @interface PagedRecyclerViewLayout {
+        /** Position the scrollbar to the left of the screen. This is default. */
+        int LINEAR = 0;
+
+        /** Position scrollbar to the right of the screen. */
+        int GRID = 2;
+    }
+
+    /**
+     * Interface for a {@link RecyclerView.Adapter} to cap the number of items.
+     *
+     * <p>NOTE: it is still up to the adapter to use maxItems in {@link
+     * RecyclerView.Adapter#getItemCount()}.
+     *
+     * <p>the recommended way would be with:
+     *
+     * <pre>{@code
+     * {@literal@}Override
+     * public int getItemCount() {
+     *   return Math.min(super.getItemCount(), mMaxItems);
+     * }
+     * }</pre>
+     */
+    public interface ItemCap {
+        /** A value to pass to {@link #setMaxItems(int)} that indicates there should be no limit. */
+        int UNLIMITED = -1;
+
+        /**
+         * Sets the maximum number of items available in the adapter. A value less than '0' means
+         * the
+         * list should not be capped.
+         */
+        void setMaxItems(int maxItems);
+    }
+
+    /**
+     * Custom layout manager for the outer recyclerview. Since paddings should be applied by the
+     * inner
+     * recycler view within its bounds, this layout manager should always have 0 padding.
+     */
+    private static class PagedRecyclerViewLayoutManager extends LinearLayoutManager {
+        PagedRecyclerViewLayoutManager(Context context) {
+            super(context);
+        }
+
+        @Override
+        public int getPaddingTop() {
+            return 0;
+        }
+
+        @Override
+        public int getPaddingBottom() {
+            return 0;
+        }
+
+        @Override
+        public int getPaddingStart() {
+            return 0;
+        }
+
+        @Override
+        public int getPaddingEnd() {
+            return 0;
+        }
+
+        @Override
+        public boolean canScrollHorizontally() {
+            return false;
+        }
+
+        @Override
+        public boolean canScrollVertically() {
+            return false;
+        }
+    }
+
+    /**
+     * Custom layout manager for the outer recyclerview. Since paddings should be applied by the
+     * inner
+     * recycler view within its bounds, this layout manager should always have 0 padding.
+     */
+    private static class GridPagedRecyclerViewLayoutManager extends GridLayoutManager {
+        GridPagedRecyclerViewLayoutManager(Context context, int numOfColumns) {
+            super(context, numOfColumns);
+        }
+
+        @Override
+        public int getPaddingTop() {
+            return 0;
+        }
+
+        @Override
+        public int getPaddingBottom() {
+            return 0;
+        }
+
+        @Override
+        public int getPaddingStart() {
+            return 0;
+        }
+
+        @Override
+        public int getPaddingEnd() {
+            return 0;
+        }
+    }
+
+    public PagedRecyclerView(@NonNull Context context) {
+        this(context, null, 0);
+    }
+
+    public PagedRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public PagedRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+
+        mCarUxRestrictionsUtil = CarUxRestrictionsUtil.getInstance(context);
+        mListener = this::updateCarUxRestrictions;
+
+        init(context, attrs, defStyle);
+    }
+
+    private void init(Context context, AttributeSet attrs, int defStyleAttr) {
+        TypedArray a =
+                context.obtainStyledAttributes(
+                        attrs, R.styleable.PagedRecyclerView, defStyleAttr,
+                        R.style.Widget_CarUi_PagedRecyclerView);
+
+        mScrollBarEnabled = context.getResources().getBoolean(R.bool.car_ui_scrollbar_enable);
+        mFullyInitialized = false;
+
+        if (!mScrollBarEnabled) {
+            a.recycle();
+            mFullyInitialized = true;
+            return;
+        }
+
+        mNestedRecyclerView =
+                new RecyclerView(new ContextThemeWrapper(context,
+                        R.style.Widget_CarUi_PagedRecyclerView_NestedRecyclerView), attrs,
+                        R.style.Widget_CarUi_PagedRecyclerView_NestedRecyclerView);
+        mNestedRecyclerView.setVerticalScrollBarEnabled(false);
+        mScrollBarPaddingStart =
+                context.getResources().getDimension(R.dimen.car_ui_scrollbar_padding_start);
+        mScrollBarPaddingEnd =
+                context.getResources().getDimension(R.dimen.car_ui_scrollbar_padding_end);
+
+        mPagedRecyclerViewLayout =
+                a.getInt(R.styleable.PagedRecyclerView_layoutStyle, PagedRecyclerViewLayout.LINEAR);
+        mNumOfColumns = a.getInt(R.styleable.PagedRecyclerView_numOfColumns, /* defValue= */ 2);
+        boolean enableDivider =
+                a.getBoolean(R.styleable.PagedRecyclerView_enableDivider, /* defValue= */ false);
+
+        if (mPagedRecyclerViewLayout == PagedRecyclerViewLayout.LINEAR) {
+
+            int linearTopOffset =
+                    a.getInteger(R.styleable.PagedRecyclerView_startOffset, /* defValue= */ 0);
+            int linearBottomOffset =
+                    a.getInteger(R.styleable.PagedRecyclerView_endOffset, /* defValue= */ 0);
+
+            if (enableDivider) {
+                RecyclerView.ItemDecoration dividerItemDecoration =
+                        new LinearDividerItemDecoration(
+                                context.getDrawable(R.drawable.car_ui_pagedrecyclerview_divider));
+                super.addItemDecoration(dividerItemDecoration);
+            }
+            RecyclerView.ItemDecoration topOffsetItemDecoration =
+                    new LinearOffsetItemDecoration(linearTopOffset, OffsetPosition.START);
+            super.addItemDecoration(topOffsetItemDecoration);
+
+            RecyclerView.ItemDecoration bottomOffsetItemDecoration =
+                    new LinearOffsetItemDecoration(linearBottomOffset, OffsetPosition.END);
+            super.addItemDecoration(bottomOffsetItemDecoration);
+        } else {
+
+            int gridTopOffset =
+                    a.getInteger(R.styleable.PagedRecyclerView_startOffset, /* defValue= */ 0);
+            int gridBottomOffset =
+                    a.getInteger(R.styleable.PagedRecyclerView_endOffset, /* defValue= */ 0);
+
+            if (enableDivider) {
+                mDividerItemDecoration =
+                        new GridDividerItemDecoration(
+                                context.getDrawable(R.drawable.car_ui_divider),
+                                context.getDrawable(R.drawable.car_ui_divider),
+                                mNumOfColumns);
+                super.addItemDecoration(mDividerItemDecoration);
+            }
+
+            mOffsetItemDecoration =
+                    new GridOffsetItemDecoration(gridTopOffset, mNumOfColumns,
+                            OffsetPosition.START);
+            super.addItemDecoration(mOffsetItemDecoration);
+
+            GridOffsetItemDecoration bottomOffsetItemDecoration =
+                    new GridOffsetItemDecoration(gridBottomOffset, mNumOfColumns,
+                            OffsetPosition.END);
+            super.addItemDecoration(bottomOffsetItemDecoration);
+        }
+
+        super.setLayoutManager(new PagedRecyclerViewLayoutManager(context));
+        super.setAdapter(new PagedRecyclerViewAdapter());
+        super.setNestedScrollingEnabled(false);
+        super.setClipToPadding(false);
+
+        // Gutter
+        mGutter = context.getResources().getInteger(R.integer.car_ui_scrollbar_gutter);
+        mGutterSize = getResources().getDimensionPixelSize(R.dimen.car_ui_scrollbar_margin);
+
+        mScrollBarContainerWidth =
+                (int) context.getResources().getDimension(
+                        R.dimen.car_ui_scrollbar_container_width);
+
+        mScrollBarPosition = context.getResources().getInteger(
+                R.integer.car_ui_scrollbar_position);
+
+        mScrollBarAboveRecyclerView =
+                context.getResources().getBoolean(R.bool.car_ui_scrollbar_above_recycler_view);
+        mScrollBarClass = context.getResources().getString(R.string.car_ui_scrollbar_component);
+        a.recycle();
+        this.mContext = context;
+        // Apply inner RV layout changes after the layout has been calculated for this view.
+        this.getViewTreeObserver()
+                .addOnGlobalLayoutListener(
+                        new OnGlobalLayoutListener() {
+                            @Override
+                            public void onGlobalLayout() {
+                                // View holder layout is still pending.
+                                if (PagedRecyclerView.this.findViewHolderForAdapterPosition(0)
+                                        == null) {
+                                    return;
+                                }
+                                PagedRecyclerView.this.getViewTreeObserver()
+                                        .removeOnGlobalLayoutListener(this);
+                                initNestedRecyclerView();
+                                setNestedViewLayout();
+
+                                mNestedRecyclerView
+                                        .getViewTreeObserver()
+                                        .addOnGlobalLayoutListener(
+                                                new OnGlobalLayoutListener() {
+                                                    @Override
+                                                    public void onGlobalLayout() {
+                                                        mNestedRecyclerView
+                                                                .getViewTreeObserver()
+                                                                .removeOnGlobalLayoutListener(this);
+                                                        ViewGroup.LayoutParams params =
+                                                                getLayoutParams();
+                                                        params.height = getMeasuredHeight();
+                                                        setLayoutParams(params);
+                                                        createScrollBarFromConfig();
+                                                        if (mInitialTopPadding == 0) {
+                                                            mInitialTopPadding = getPaddingTop();
+                                                        }
+                                                        mFullyInitialized = true;
+                                                    }
+                                                });
+                            }
+                        });
+    }
+
+    @Override
+    public void onHeightChanged(int height) {
+        setPaddingRelative(getPaddingStart(), mInitialTopPadding + height,
+                getPaddingEnd(), getPaddingBottom());
+    }
+
+    /**
+     * Returns {@code true} if the {@PagedRecyclerView} is fully drawn. Using a global layout
+     * mListener
+     * may not necessarily signify that this view is fully drawn (i.e. when the scrollbar is
+     * enabled).
+     * This is because the inner views (scrollbar and inner recycler view) are drawn after the
+     * outer
+     * views are finished.
+     */
+    public boolean fullyInitialized() {
+        return mFullyInitialized;
+    }
+
+    /** 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 (mDividerItemDecoration != null) {
+            mDividerItemDecoration.setNumOfColumns(mNumOfColumns);
+        }
+    }
+
+    /**
+     * Returns the {@link LayoutManager} for the {@link RecyclerView} displaying the content.
+     *
+     * <p>In cases where the scroll bar is visible and the nested {@link RecyclerView} is displaying
+     * content, {@link #getLayoutManager()} cannot be used because it returns the {@link
+     * LayoutManager} of the outer {@link RecyclerView}. {@link #getLayoutManager()} could not be
+     * overridden to return the effective manager due to interference with accessibility node tree
+     * traversal.
+     */
+    @Nullable
+    public LayoutManager getEffectiveLayoutManager() {
+        if (mScrollBarEnabled) {
+            return mNestedRecyclerView.getLayoutManager();
+        }
+        return super.getLayoutManager();
+    }
+
+    @Override
+    public LayoutManager getLayoutManager() {
+        if (mScrollBarEnabled) {
+            return mNestedRecyclerView.getLayoutManager();
+        }
+        return super.getLayoutManager();
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        mCarUxRestrictionsUtil.register(mListener);
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        mCarUxRestrictionsUtil.unregister(mListener);
+    }
+
+    private void updateCarUxRestrictions(CarUxRestrictions carUxRestrictions) {
+        // If the adapter does not implement ItemCap, then the max items on it cannot be updated.
+        if (!(mAdapter instanceof ItemCap)) {
+            return;
+        }
+
+        int maxItems = ItemCap.UNLIMITED;
+        if ((carUxRestrictions.getActiveRestrictions()
+                & CarUxRestrictions.UX_RESTRICTIONS_LIMIT_CONTENT)
+                != 0) {
+            maxItems = carUxRestrictions.getMaxCumulativeContentItems();
+        }
+
+        int originalCount = mAdapter.getItemCount();
+        ((ItemCap) mAdapter).setMaxItems(maxItems);
+        int newCount = mAdapter.getItemCount();
+
+        if (newCount == originalCount) {
+            return;
+        }
+
+        if (newCount < originalCount) {
+            mAdapter.notifyItemRangeRemoved(newCount, originalCount - newCount);
+        } else {
+            mAdapter.notifyItemRangeInserted(originalCount, newCount - originalCount);
+        }
+    }
+
+    @Override
+    public void setClipToPadding(boolean clipToPadding) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setClipToPadding(clipToPadding);
+        } else {
+            super.setClipToPadding(clipToPadding);
+        }
+    }
+
+    @SuppressWarnings("rawtypes")
+    @Override
+    public void setAdapter(@Nullable Adapter adapter) {
+
+        if (mScrollBarEnabled && mPagedRecyclerViewLayout == PagedRecyclerViewLayout.LINEAR) {
+            mNestedRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
+        } else if (mPagedRecyclerViewLayout == PagedRecyclerViewLayout.LINEAR) {
+            super.setLayoutManager(new LinearLayoutManager(mContext));
+        } else if (mScrollBarEnabled) {
+            mNestedRecyclerView.setLayoutManager(
+                    new GridPagedRecyclerViewLayoutManager(mContext, mNumOfColumns));
+            setNumOfColumns(mNumOfColumns);
+        } else {
+            super.setLayoutManager(
+                    new GridPagedRecyclerViewLayoutManager(mContext, mNumOfColumns));
+            setNumOfColumns(mNumOfColumns);
+        }
+
+        this.mAdapter = adapter;
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setAdapter(adapter);
+        } else {
+            super.setAdapter(adapter);
+        }
+    }
+
+    @Nullable
+    @Override
+    public Adapter<?> getAdapter() {
+        if (mScrollBarEnabled) {
+            return mNestedRecyclerView.getAdapter();
+        }
+        return super.getAdapter();
+    }
+
+    @Override
+    public void setLayoutManager(@Nullable LayoutManager layout) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setLayoutManager(layout);
+        } else {
+            super.setLayoutManager(layout);
+        }
+    }
+
+    @Override
+    public void setOnScrollChangeListener(OnScrollChangeListener l) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setOnScrollChangeListener(l);
+        } else {
+            super.setOnScrollChangeListener(l);
+        }
+    }
+
+    @Override
+    public void setVerticalFadingEdgeEnabled(boolean verticalFadingEdgeEnabled) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setVerticalFadingEdgeEnabled(verticalFadingEdgeEnabled);
+        } else {
+            super.setVerticalFadingEdgeEnabled(verticalFadingEdgeEnabled);
+        }
+    }
+
+    @Override
+    public void setFadingEdgeLength(int length) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setFadingEdgeLength(length);
+        } else {
+            super.setFadingEdgeLength(length);
+        }
+    }
+
+    @Override
+    public void addItemDecoration(@NonNull ItemDecoration decor, int index) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.addItemDecoration(decor, index);
+        } else {
+            super.addItemDecoration(decor, index);
+        }
+    }
+
+    @Override
+    public void addItemDecoration(@NonNull ItemDecoration decor) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.addItemDecoration(decor);
+        } else {
+            super.addItemDecoration(decor);
+        }
+    }
+
+    @Override
+    public void setItemAnimator(@Nullable ItemAnimator animator) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setItemAnimator(animator);
+        } else {
+            super.setItemAnimator(animator);
+        }
+    }
+
+    @Override
+    public void setPadding(int left, int top, int right, int bottom) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setPadding(left, top, right, bottom);
+            if (mScrollBar != null) {
+                mScrollBar.requestLayout();
+            }
+        } else {
+            super.setPadding(left, top, right, bottom);
+        }
+    }
+
+    @Override
+    public void setPaddingRelative(int start, int top, int end, int bottom) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setPaddingRelative(start, top, end, bottom);
+            if (mScrollBar != null) {
+                mScrollBar.requestLayout();
+            }
+        } else {
+            super.setPaddingRelative(start, top, end, bottom);
+        }
+    }
+
+    @Override
+    public ViewHolder findViewHolderForLayoutPosition(int position) {
+        if (mScrollBarEnabled) {
+            return mNestedRecyclerView.findViewHolderForLayoutPosition(position);
+        } else {
+            return super.findViewHolderForLayoutPosition(position);
+        }
+    }
+
+    @Override
+    public ViewHolder findContainingViewHolder(View view) {
+        if (mScrollBarEnabled) {
+            return mNestedRecyclerView.findContainingViewHolder(view);
+        } else {
+            return super.findContainingViewHolder(view);
+        }
+    }
+
+    @Override
+    @Nullable
+    public View findChildViewUnder(float x, float y) {
+        if (mScrollBarEnabled) {
+            return mNestedRecyclerView.findChildViewUnder(x, y);
+        } else {
+            return super.findChildViewUnder(x, y);
+        }
+    }
+
+    @Override
+    public void addOnScrollListener(@NonNull OnScrollListener listener) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.addOnScrollListener(listener);
+        } else {
+            super.addOnScrollListener(listener);
+        }
+    }
+
+    @Override
+    public void removeOnScrollListener(@NonNull OnScrollListener listener) {
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.removeOnScrollListener(listener);
+        } else {
+            super.removeOnScrollListener(listener);
+        }
+    }
+
+    @Override
+    public int getPaddingStart() {
+        return mScrollBarEnabled ? mNestedRecyclerView.getPaddingStart() : super.getPaddingStart();
+    }
+
+    @Override
+    public int getPaddingEnd() {
+        return mScrollBarEnabled ? mNestedRecyclerView.getPaddingEnd() : super.getPaddingEnd();
+    }
+
+    @Override
+    public int getPaddingTop() {
+        return mScrollBarEnabled ? mNestedRecyclerView.getPaddingTop() : super.getPaddingTop();
+    }
+
+    @Override
+    public int getPaddingBottom() {
+        return mScrollBarEnabled ? mNestedRecyclerView.getPaddingBottom()
+                : super.getPaddingBottom();
+    }
+
+    @Override
+    public void setVisibility(int visibility) {
+        super.setVisibility(visibility);
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.setVisibility(visibility);
+        }
+    }
+
+    private void initNestedRecyclerView() {
+        PagedRecyclerViewAdapter.NestedRowViewHolder vh =
+                (PagedRecyclerViewAdapter.NestedRowViewHolder)
+                        this.findViewHolderForAdapterPosition(0);
+        if (vh == null) {
+            throw new Error("Outer RecyclerView failed to initialize.");
+        }
+
+        vh.frameLayout.addView(mNestedRecyclerView);
+    }
+
+    private void createScrollBarFromConfig() {
+        if (DEBUG) {
+            Log.d(TAG, "createScrollBarFromConfig");
+        }
+
+        Class<?> cls;
+        try {
+            cls = !TextUtils.isEmpty(mScrollBarClass)
+                    ? getContext().getClassLoader().loadClass(mScrollBarClass)
+                    : DefaultScrollBar.class;
+        } catch (Throwable t) {
+            throw andLog("Error loading scroll bar component: " + mScrollBarClass, t);
+        }
+        try {
+            mScrollBar = (ScrollBar) cls.getDeclaredConstructor().newInstance();
+        } catch (Throwable t) {
+            throw andLog("Error creating scroll bar component: " + mScrollBarClass, t);
+        }
+
+        mScrollBar.initialize(
+                mNestedRecyclerView, mScrollBarContainerWidth, mScrollBarPosition,
+                mScrollBarAboveRecyclerView);
+
+        mScrollBar.setPadding((int) mScrollBarPaddingStart, (int) mScrollBarPaddingEnd);
+
+        if (DEBUG) {
+            Log.d(TAG, "started " + mScrollBar.getClass().getSimpleName());
+        }
+    }
+
+    /**
+     * Sets the scrollbar's padding start (top) and end (bottom).
+     * This padding is applied in addition to the padding of the inner RecyclerView.
+     */
+    public void setScrollBarPadding(int paddingStart, int paddingEnd) {
+        if (mScrollBarEnabled) {
+            mScrollBarPaddingStart = paddingStart;
+            mScrollBarPaddingEnd = paddingEnd;
+
+            if (mScrollBar != null) {
+                mScrollBar.setPadding(paddingStart, paddingEnd);
+            }
+        }
+    }
+
+    /**
+     * Set the nested view's layout to the specified value.
+     *
+     * <p>The mGutter is the space to the start/end of the list view items and will be equal in size
+     * to
+     * the scroll bars. By default, there is a mGutter to both the left and right of the list view
+     * items, to account for the scroll bar.
+     */
+    private void setNestedViewLayout() {
+        int startMargin = 0;
+        int endMargin = 0;
+        if ((mGutter & Gutter.START) != 0) {
+            startMargin = mGutterSize;
+        }
+        if ((mGutter & Gutter.END) != 0) {
+            endMargin = mGutterSize;
+        }
+
+        MarginLayoutParams layoutParams =
+                (MarginLayoutParams) mNestedRecyclerView.getLayoutParams();
+
+        layoutParams.setMarginStart(startMargin);
+        layoutParams.setMarginEnd(endMargin);
+
+        layoutParams.height = LayoutParams.MATCH_PARENT;
+        layoutParams.width = super.getLayoutManager().getWidth() - startMargin - endMargin;
+        // requestLayout() isn't sufficient because we also need to resolveLayoutParams().
+        mNestedRecyclerView.setLayoutParams(layoutParams);
+
+        // If there's a mGutter, set ClipToPadding to false so that CardView's shadow will still
+        // appear outside of the padding.
+        mNestedRecyclerView.setClipToPadding(startMargin == 0 && endMargin == 0);
+    }
+
+    private static RuntimeException andLog(String msg, Throwable t) {
+        Log.e(TAG, msg, t);
+        throw new RuntimeException(msg, t);
+    }
+
+    @Override
+    public Parcelable onSaveInstanceState() {
+        Parcelable superState = super.onSaveInstanceState();
+        SavedState ss = new SavedState(superState, getContext());
+        if (mScrollBarEnabled) {
+            mNestedRecyclerView.saveHierarchyState(ss.mNestedRecyclerViewState);
+        }
+        return ss;
+    }
+
+    @Override
+    public void onRestoreInstanceState(Parcelable state) {
+        if (!(state instanceof SavedState)) {
+            Log.w(TAG, "onRestoreInstanceState called with an unsupported state");
+            super.onRestoreInstanceState(state);
+        } else {
+            SavedState ss = (SavedState) state;
+            super.onRestoreInstanceState(ss.getSuperState());
+            if (mScrollBarEnabled) {
+                mNestedRecyclerView.restoreHierarchyState(ss.mNestedRecyclerViewState);
+            }
+        }
+    }
+
+    static class SavedState extends BaseSavedState {
+        SparseArray<Parcelable> mNestedRecyclerViewState;
+        Context mContext;
+
+        SavedState(Parcelable superState, Context c) {
+            super(superState);
+            mContext = c;
+            mNestedRecyclerViewState = new SparseArray<>();
+        }
+
+        @SuppressWarnings("unchecked")
+        private SavedState(Parcel in) {
+            super(in);
+            mNestedRecyclerViewState = in.readSparseArray(mContext.getClassLoader());
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public void writeToParcel(Parcel out, int flags) {
+            super.writeToParcel(out, flags);
+            out.writeSparseArray((SparseArray<Object>) (Object) mNestedRecyclerViewState);
+        }
+
+        public static final Parcelable.Creator<SavedState> CREATOR =
+                new Parcelable.Creator<SavedState>() {
+                    @Override
+                    public SavedState createFromParcel(Parcel in) {
+                        return new SavedState(in);
+                    }
+
+                    @Override
+                    public SavedState[] newArray(int size) {
+                        return new SavedState[size];
+                    }
+                };
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewAdapter.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewAdapter.java
new file mode 100644
index 0000000..b483d52
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewAdapter.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.R;
+
+/** The adapter for the parent recyclerview in {@link PagedRecyclerView} widget. */
+final class PagedRecyclerViewAdapter
+        extends RecyclerView.Adapter<PagedRecyclerViewAdapter.NestedRowViewHolder> {
+
+    @Override
+    public PagedRecyclerViewAdapter.NestedRowViewHolder onCreateViewHolder(
+            ViewGroup parent, int viewType) {
+        View v =
+                LayoutInflater.from(parent.getContext())
+                        .inflate(R.layout.car_ui_paged_recycler_view_item, parent, false);
+        return new NestedRowViewHolder(v);
+    }
+
+    // Replace the contents of a view (invoked by the layout manager). Intentionally left empty
+    // since this adapter is an empty shell for the nested recyclerview.
+    @Override
+    public void onBindViewHolder(NestedRowViewHolder holder, int position) {
+    }
+
+    // Return the size of your dataset (invoked by the layout manager)
+    @Override
+    public int getItemCount() {
+        return 1;
+    }
+
+    /** The viewholder class for the parent recyclerview. */
+    static class NestedRowViewHolder extends RecyclerView.ViewHolder {
+        public FrameLayout frameLayout;
+
+        NestedRowViewHolder(View view) {
+            super(view);
+            frameLayout = view.findViewById(R.id.nested_recycler_view_layout);
+        }
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedSmoothScroller.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedSmoothScroller.java
new file mode 100644
index 0000000..7fb0de9
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedSmoothScroller.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview;
+
+import android.content.Context;
+import android.view.View;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+
+import androidx.recyclerview.widget.LinearSmoothScroller;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.R;
+import com.android.car.ui.utils.ResourceUtils;
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * Code drop from {androidx.car.widget.PagedSmoothScroller}
+ *
+ * <p>Custom {@link LinearSmoothScroller} that has:
+ *
+ * <ul>
+ * <li>Custom control over the speed of scrolls.
+ * <li>Scrolling that snaps to start of a child view.
+ * </ul>
+ */
+public class PagedSmoothScroller extends LinearSmoothScroller {
+    @VisibleForTesting
+    float mMillisecondsPerInch;
+    @VisibleForTesting
+    float mDecelerationTimeDivisor;
+    @VisibleForTesting
+    float mMillisecondsPerPixel;
+    @VisibleForTesting
+    Interpolator mInterpolator;
+    @VisibleForTesting
+    int mDensityDpi;
+
+    public PagedSmoothScroller(Context context) {
+        super(context);
+        init(context);
+    }
+
+    private void init(Context context) {
+        mMillisecondsPerInch = ResourceUtils.getFloat(context.getResources(),
+                R.dimen.car_ui_scrollbar_milliseconds_per_inch);
+        mDecelerationTimeDivisor = ResourceUtils.getFloat(context.getResources(),
+                R.dimen.car_ui_scrollbar_deceleration_times_divisor);
+        mInterpolator =
+                new DecelerateInterpolator(
+                        ResourceUtils.getFloat(context.getResources(),
+                                R.dimen.car_ui_scrollbar_decelerate_interpolator_factor));
+        mDensityDpi = context.getResources().getDisplayMetrics().densityDpi;
+        mMillisecondsPerPixel = mMillisecondsPerInch / mDensityDpi;
+    }
+
+    @Override
+    protected int getVerticalSnapPreference() {
+        // Returning SNAP_TO_START will ensure that if the top (start) row is partially visible it
+        // will be scrolled downward (END) to make the row fully visible.
+        return SNAP_TO_START;
+    }
+
+    @Override
+    protected void onTargetFound(View targetView, RecyclerView.State state, Action action) {
+        int dy = calculateDyToMakeVisible(targetView, SNAP_TO_START);
+
+        if (dy == 0) {
+            return;
+        }
+
+        final int time = calculateTimeForDeceleration(dy);
+        if (time > 0) {
+            action.update(0, -dy, time, mInterpolator);
+        }
+    }
+
+    @Override
+    protected int calculateTimeForScrolling(int dx) {
+        return (int) Math.ceil(Math.abs(dx) * mMillisecondsPerPixel);
+    }
+
+    @Override
+    protected int calculateTimeForDeceleration(int dx) {
+        return (int) Math.ceil(calculateTimeForScrolling(dx) / mDecelerationTimeDivisor);
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedSnapHelper.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedSnapHelper.java
new file mode 100644
index 0000000..e84ee75
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/PagedSnapHelper.java
@@ -0,0 +1,463 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview;
+
+import android.content.Context;
+import android.graphics.PointF;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearSnapHelper;
+import androidx.recyclerview.widget.OrientationHelper;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerView.LayoutManager;
+
+/**
+ * Inspired by {@link androidx.car.widget.PagedSnapHelper}
+ *
+ * <p>Extension of a {@link LinearSnapHelper} that will snap to the start of the target child view
+ * to the start of the attached {@link RecyclerView}. The start of the view is defined as the top if
+ * the RecyclerView is scrolling vertically; it is defined as the left (or right if RTL) if the
+ * RecyclerView is scrolling horizontally.
+ */
+public class PagedSnapHelper extends LinearSnapHelper {
+
+    private final Context mContext;
+    private RecyclerView mRecyclerView;
+    private RecyclerView.SmoothScroller mSmoothScroller;
+
+    public PagedSnapHelper(Context context) {
+        this.mContext = context;
+        mSmoothScroller = new PagedSmoothScroller(mContext);
+    }
+
+    // Orientation helpers are lazily created per LayoutManager.
+    @Nullable
+    private OrientationHelper mVerticalHelper;
+    @Nullable
+    private OrientationHelper mHorizontalHelper;
+
+    @Override
+    public int[] calculateDistanceToFinalSnap(
+            @NonNull LayoutManager layoutManager, @NonNull View targetView) {
+        int[] out = new int[2];
+        if (layoutManager.canScrollHorizontally()) {
+            out[0] = distanceToTopMargin(targetView, getHorizontalHelper(layoutManager));
+        } else {
+            out[0] = 0;
+        }
+
+        if (layoutManager.canScrollVertically()) {
+            out[1] = distanceToTopMargin(targetView, getVerticalHelper(layoutManager));
+        } else {
+            out[1] = 0;
+        }
+        return out;
+    }
+
+    /**
+     * Smooth scrolls the RecyclerView by a given distance.
+     */
+    public void smoothScrollBy(int scrollDistance) {
+        int position = findTargetSnapPosition(mRecyclerView.getLayoutManager(), scrollDistance);
+        if (position == RecyclerView.NO_POSITION) {
+            mRecyclerView.smoothScrollBy(0, scrollDistance);
+            return;
+        }
+        mSmoothScroller.setTargetPosition(position);
+        mRecyclerView.getLayoutManager().startSmoothScroll(mSmoothScroller);
+    }
+
+    /**
+     * Finds the target position for snapping.
+     *
+     * @param layoutManager the {@link RecyclerView.LayoutManager} associated with the attached
+     * {@link RecyclerView}
+     */
+    private int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager,
+            int scrollDistance) {
+
+        if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
+            return RecyclerView.NO_POSITION;
+        }
+
+        final int itemCount = layoutManager.getItemCount();
+        if (itemCount == 0) {
+            return RecyclerView.NO_POSITION;
+        }
+
+        final View currentView = findViewIfScrollable(layoutManager);
+        if (currentView == null) {
+            return RecyclerView.NO_POSITION;
+        }
+
+        final int currentPosition = layoutManager.getPosition(currentView);
+        if (currentPosition == RecyclerView.NO_POSITION) {
+            return RecyclerView.NO_POSITION;
+        }
+
+        RecyclerView.SmoothScroller.ScrollVectorProvider vectorProvider =
+                (RecyclerView.SmoothScroller.ScrollVectorProvider) layoutManager;
+        // deltaJumps sign comes from the velocity which may not match the order of children in
+        // the LayoutManager. To overcome this, we ask for a vector from the LayoutManager to
+        // get the direction.
+        PointF vectorForEnd = vectorProvider.computeScrollVectorForPosition(itemCount - 1);
+        if (vectorForEnd == null) {
+            // cannot get a vector for the given position.
+            return RecyclerView.NO_POSITION;
+        }
+
+        int vDeltaJump;
+        int hDeltaJump;
+        if (layoutManager.canScrollHorizontally()) {
+            hDeltaJump = estimateNextPositionDiffForFling(layoutManager,
+                    getHorizontalHelper(layoutManager), scrollDistance);
+            if (vectorForEnd.x < 0) {
+                hDeltaJump = -hDeltaJump;
+            }
+        } else {
+            hDeltaJump = 0;
+        }
+        if (layoutManager.canScrollVertically()) {
+            vDeltaJump = estimateNextPositionDiffForFling(layoutManager,
+                    getVerticalHelper(layoutManager), scrollDistance);
+            if (vectorForEnd.y < 0) {
+                vDeltaJump = -vDeltaJump;
+            }
+        } else {
+            vDeltaJump = 0;
+        }
+
+        int deltaJump = layoutManager.canScrollVertically() ? vDeltaJump : hDeltaJump;
+        if (deltaJump == 0) {
+            return RecyclerView.NO_POSITION;
+        }
+
+        int targetPos = currentPosition + deltaJump;
+        if (targetPos < 0) {
+            targetPos = 0;
+        }
+        if (targetPos >= itemCount) {
+            targetPos = itemCount - 1;
+        }
+        return targetPos;
+    }
+
+
+    @Override
+    public View findSnapView(LayoutManager layoutManager) {
+        OrientationHelper orientationHelper = getOrientationHelper(layoutManager);
+
+        if (mRecyclerView.computeVerticalScrollRange() - mRecyclerView.computeVerticalScrollOffset()
+                <= orientationHelper.getTotalSpace()
+                + mRecyclerView.getPaddingTop()
+                + mRecyclerView.getPaddingBottom()) {
+            return null;
+        }
+
+        return findViewIfScrollable(layoutManager);
+    }
+
+    private View findViewIfScrollable(LayoutManager layoutManager) {
+        if (layoutManager.canScrollVertically()) {
+            return findTopView(layoutManager, getVerticalHelper(layoutManager));
+        } else if (layoutManager.canScrollHorizontally()) {
+            return findTopView(layoutManager, getHorizontalHelper(layoutManager));
+        }
+        return null;
+    }
+
+    private static int distanceToTopMargin(@NonNull View targetView, OrientationHelper helper) {
+        final int childTop = helper.getDecoratedStart(targetView);
+        final int containerTop = helper.getStartAfterPadding();
+        return childTop - containerTop;
+    }
+
+    /**
+     * Finds the view to snap to. The view to snap to is the child of the LayoutManager that is
+     * closest to the start of the RecyclerView. The "start" depends on if the LayoutManager is
+     * scrolling horizontally or vertically. If it is horizontally scrolling, then the start is the
+     * view on the left (right if RTL). Otherwise, it is the top-most view.
+     *
+     * @param layoutManager The current {@link RecyclerView.LayoutManager} for the attached
+     * RecyclerView.
+     * @return The View closest to the start of the RecyclerView.
+     */
+    private static View findTopView(LayoutManager layoutManager, OrientationHelper helper) {
+        int childCount = layoutManager.getChildCount();
+        if (childCount == 0) {
+            return null;
+        }
+
+        View closestChild = null;
+        int absClosest = Integer.MAX_VALUE;
+
+        for (int i = 0; i < childCount; i++) {
+            View child = layoutManager.getChildAt(i);
+            if (child == null) {
+                continue;
+            }
+            int absDistance = Math.abs(distanceToTopMargin(child, helper));
+
+            /** if child top is closer than previous closest, set it as closest */
+            if (absDistance < absClosest) {
+                absClosest = absDistance;
+                closestChild = child;
+            }
+        }
+        return closestChild;
+    }
+
+    /**
+     * Returns the percentage of the given view that is visible, relative to its containing
+     * RecyclerView.
+     *
+     * @param view The View to get the percentage visible of.
+     * @param helper An {@link OrientationHelper} to aid with calculation.
+     * @return A float indicating the percentage of the given view that is visible.
+     */
+    private static float getPercentageVisible(View view, OrientationHelper helper) {
+
+        int start = helper.getStartAfterPadding();
+        int end = helper.getEndAfterPadding();
+
+        int viewHeight = helper.getDecoratedMeasurement(view);
+
+        int viewStart = helper.getDecoratedStart(view);
+        int viewEnd = helper.getDecoratedEnd(view);
+
+        if (viewEnd < start) {
+            // The is outside of the bounds of the recyclerView.
+            return 0f;
+        } else if (viewStart >= start && viewEnd <= end) {
+            // The view is within the bounds of the RecyclerView, so it's fully visible.
+            return 1.f;
+        } else if (viewStart <= start && viewEnd >= end) {
+            // The view is larger than the height of the RecyclerView.
+            return 1.f - ((float) (Math.abs(viewStart) + Math.abs(viewEnd)) / viewHeight);
+        } else if (viewStart < start) {
+            // The view is above the start of the RecyclerView, so subtract the start offset
+            // from the total height.
+            return 1.f - ((float) Math.abs(viewStart) / helper.getDecoratedMeasurement(view));
+        } else {
+            // The view is below the end of the RecyclerView, so subtract the end offset from the
+            // total height.
+            return 1.f - ((float) Math.abs(viewEnd) / helper.getDecoratedMeasurement(view));
+        }
+    }
+
+    @Override
+    public void attachToRecyclerView(@Nullable RecyclerView recyclerView) {
+        this.mRecyclerView = recyclerView;
+        super.attachToRecyclerView(recyclerView);
+    }
+
+    /**
+     * Returns a scroller specific to this {@code PagedSnapHelper}. This scroller is used for all
+     * smooth scrolling operations, including flings.
+     *
+     * @param layoutManager The {@link RecyclerView.LayoutManager} associated with the attached
+     * {@link
+     * RecyclerView}.
+     * @return a {@link RecyclerView.SmoothScroller} which will handle the scrolling.
+     */
+    @Override
+    protected RecyclerView.SmoothScroller createScroller(RecyclerView.LayoutManager layoutManager) {
+        return mSmoothScroller;
+    }
+
+    /**
+     * Calculate the estimated scroll distance in each direction given velocities on both axes. This
+     * method will clamp the maximum scroll distance so that a single fling will never scroll more
+     * than one page.
+     *
+     * @param velocityX Fling velocity on the horizontal axis.
+     * @param velocityY Fling velocity on the vertical axis.
+     * @return An array holding the calculated distances in x and y directions respectively.
+     */
+    @Override
+    public int[] calculateScrollDistance(int velocityX, int velocityY) {
+        int[] outDist = super.calculateScrollDistance(velocityX, velocityY);
+
+        if (mRecyclerView == null) {
+            return outDist;
+        }
+
+        RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
+        if (layoutManager == null || layoutManager.getChildCount() == 0) {
+            return outDist;
+        }
+
+        int lastChildPosition = isAtEnd(layoutManager) ? 0 : layoutManager.getChildCount() - 1;
+
+        OrientationHelper orientationHelper = getOrientationHelper(layoutManager);
+        View lastChild = layoutManager.getChildAt(lastChildPosition);
+        float percentageVisible = getPercentageVisible(lastChild, orientationHelper);
+
+        int maxDistance = layoutManager.getHeight();
+        if (percentageVisible > 0.f) {
+            // The max and min distance is the total height of the RecyclerView minus the height of
+            // the last child. This ensures that each scroll will never scroll more than a single
+            // page on the RecyclerView. That is, the max scroll will make the last child the
+            // first child and vice versa when scrolling the opposite way.
+            maxDistance -= layoutManager.getDecoratedMeasuredHeight(lastChild);
+        }
+
+        int minDistance = -maxDistance;
+
+        outDist[0] = clamp(outDist[0], minDistance, maxDistance);
+        outDist[1] = clamp(outDist[1], minDistance, maxDistance);
+
+        return outDist;
+    }
+
+    /** Returns {@code true} if the RecyclerView is completely displaying the first item. */
+    boolean isAtStart(RecyclerView.LayoutManager layoutManager) {
+        if (layoutManager == null || layoutManager.getChildCount() == 0) {
+            return true;
+        }
+
+        View firstChild = layoutManager.getChildAt(0);
+        OrientationHelper orientationHelper =
+                layoutManager.canScrollVertically()
+                        ? getVerticalHelper(layoutManager)
+                        : getHorizontalHelper(layoutManager);
+
+        // Check that the first child is completely visible and is the first item in the list.
+        return orientationHelper.getDecoratedStart(firstChild)
+                >= orientationHelper.getStartAfterPadding()
+                && layoutManager.getPosition(firstChild) == 0;
+    }
+
+    /** Returns {@code true} if the RecyclerView is completely displaying the last item. */
+    public boolean isAtEnd(RecyclerView.LayoutManager layoutManager) {
+        if (layoutManager == null || layoutManager.getChildCount() == 0) {
+            return true;
+        }
+
+        int childCount = layoutManager.getChildCount();
+        OrientationHelper orientationHelper =
+                layoutManager.canScrollVertically()
+                        ? getVerticalHelper(layoutManager)
+                        : getHorizontalHelper(layoutManager);
+
+        View lastVisibleChild = layoutManager.getChildAt(childCount - 1);
+
+        // The list has reached the bottom if the last child that is visible is the last item
+        // in the list and it's fully shown.
+        return layoutManager.getPosition(lastVisibleChild) == (layoutManager.getItemCount() - 1)
+                && layoutManager.getDecoratedBottom(lastVisibleChild)
+                <= orientationHelper.getEndAfterPadding();
+    }
+
+    /**
+     * Returns an {@link OrientationHelper} that corresponds to the current scroll direction of the
+     * given {@link RecyclerView.LayoutManager}.
+     */
+    @NonNull
+    private OrientationHelper getOrientationHelper(
+            @NonNull RecyclerView.LayoutManager layoutManager) {
+        return layoutManager.canScrollVertically()
+                ? getVerticalHelper(layoutManager)
+                : getHorizontalHelper(layoutManager);
+    }
+
+    @NonNull
+    private OrientationHelper getVerticalHelper(@NonNull RecyclerView.LayoutManager layoutManager) {
+        if (mVerticalHelper == null || mVerticalHelper.getLayoutManager() != layoutManager) {
+            mVerticalHelper = OrientationHelper.createVerticalHelper(layoutManager);
+        }
+        return mVerticalHelper;
+    }
+
+    @NonNull
+    private OrientationHelper getHorizontalHelper(
+            @NonNull RecyclerView.LayoutManager layoutManager) {
+        if (mHorizontalHelper == null || mHorizontalHelper.getLayoutManager() != layoutManager) {
+            mHorizontalHelper = OrientationHelper.createHorizontalHelper(layoutManager);
+        }
+        return mHorizontalHelper;
+    }
+
+    /**
+     * Ensures that the given value falls between the range given by the min and max values. This
+     * method does not check that the min value is greater than or equal to the max value. If the
+     * parameters are not well-formed, this method's behavior is undefined.
+     *
+     * @param value The value to clamp.
+     * @param min The minimum value the given value can be.
+     * @param max The maximum value the given value can be.
+     * @return A number that falls between {@code min} or {@code max} or one of those values if the
+     * given value is less than or greater than {@code min} and {@code max} respectively.
+     */
+    private static int clamp(int value, int min, int max) {
+        return Math.max(min, Math.min(max, value));
+    }
+
+    private static int estimateNextPositionDiffForFling(RecyclerView.LayoutManager layoutManager,
+            OrientationHelper helper, int scrollDistance) {
+        int[] distances = new int[]{scrollDistance, scrollDistance};
+        float distancePerChild = computeDistancePerChild(layoutManager, helper);
+
+        if (distancePerChild <= 0) {
+            return 0;
+        }
+        int distance =
+                Math.abs(distances[0]) > Math.abs(distances[1]) ? distances[0] : distances[1];
+        return (int) Math.round(distance / distancePerChild);
+    }
+
+    private static float computeDistancePerChild(RecyclerView.LayoutManager layoutManager,
+            OrientationHelper helper) {
+        View minPosView = null;
+        View maxPosView = null;
+        int minPos = Integer.MAX_VALUE;
+        int maxPos = Integer.MIN_VALUE;
+        int childCount = layoutManager.getChildCount();
+        if (childCount == 0) {
+            return -1;
+        }
+
+        for (int i = 0; i < childCount; i++) {
+            View child = layoutManager.getChildAt(i);
+            int pos = layoutManager.getPosition(child);
+            if (pos == RecyclerView.NO_POSITION) {
+                continue;
+            }
+            if (pos < minPos) {
+                minPos = pos;
+                minPosView = child;
+            }
+            if (pos > maxPos) {
+                maxPos = pos;
+                maxPosView = child;
+            }
+        }
+        if (minPosView == null || maxPosView == null) {
+            return -1;
+        }
+        int start = Math.min(helper.getDecoratedStart(minPosView),
+                helper.getDecoratedStart(maxPosView));
+        int end = Math.max(helper.getDecoratedEnd(minPosView),
+                helper.getDecoratedEnd(maxPosView));
+        int distance = end - start;
+        if (distance == 0) {
+            return -1;
+        }
+        return 1f * distance / ((maxPos - minPos) + 1);
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/ScrollBar.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/ScrollBar.java
new file mode 100644
index 0000000..5aedadc
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/ScrollBar.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.pagedrecyclerview.PagedRecyclerView.ScrollBarPosition;
+
+/**
+ * An abstract class that defines required contract for a custom scroll bar for the {@link
+ * PagedRecyclerView}. All custom scroll bar must inherit from this class.
+ */
+public interface ScrollBar {
+    /**
+     * The concrete class should implement this method to initialize configuration of a scrollbar
+     * view.
+     */
+    void initialize(
+            RecyclerView recyclerView,
+            int scrollBarContainerWidth,
+            @ScrollBarPosition int scrollBarPosition,
+            boolean scrollBarAboveRecyclerView);
+
+    /**
+     * Requests layout of the scrollbar. Should be called when there's been a change that will
+     * affect
+     * the size of the scrollbar view.
+     */
+    void requestLayout();
+
+    /** Sets the padding of the scrollbar, relative to the padding of the RecyclerView. */
+    void setPadding(int padddingStart, int paddingEnd);
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/grid/GridDividerItemDecoration.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/grid/GridDividerItemDecoration.java
new file mode 100644
index 0000000..6d1b1a9
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/grid/GridDividerItemDecoration.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview.decorations.grid;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+/** Adds interior dividers to a RecyclerView with a GridLayoutManager. */
+public class GridDividerItemDecoration extends RecyclerView.ItemDecoration {
+
+    private final Drawable mHorizontalDivider;
+    private final Drawable mVerticalDivider;
+    private int mNumColumns;
+
+    /**
+     * Sole constructor. Takes in {@link Drawable} objects to be used as horizontal and vertical
+     * dividers.
+     *
+     * @param horizontalDivider A divider {@code Drawable} to be drawn on the rows of the grid of
+     * the
+     * RecyclerView
+     * @param verticalDivider A divider {@code Drawable} to be drawn on the columns of the grid of
+     * the
+     * RecyclerView
+     * @param numColumns The number of columns in the grid of the RecyclerView
+     */
+    public GridDividerItemDecoration(
+            Drawable horizontalDivider, Drawable verticalDivider, int numColumns) {
+        this.mHorizontalDivider = horizontalDivider;
+        this.mVerticalDivider = verticalDivider;
+        this.mNumColumns = numColumns;
+    }
+
+    /**
+     * Draws horizontal and/or vertical dividers onto the parent RecyclerView.
+     *
+     * @param canvas The {@link Canvas} onto which dividers will be drawn
+     * @param parent The RecyclerView onto which dividers are being added
+     * @param state The current RecyclerView.State of the RecyclerView
+     */
+    @Override
+    public void onDrawOver(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
+        drawVerticalDividers(canvas, parent);
+        drawHorizontalDividers(canvas, parent);
+    }
+
+    /**
+     * Determines the size and location of offsets between items in the parent RecyclerView.
+     *
+     * @param outRect The {@link Rect} of offsets to be added around the child view
+     * @param view The child view to be decorated with an offset
+     * @param parent The RecyclerView onto which dividers are being added
+     * @param state The current RecyclerView.State of the RecyclerView
+     */
+    @Override
+    public void getItemOffsets(
+            Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        outRect.set(
+                0, 0, mHorizontalDivider.getIntrinsicWidth(),
+                mHorizontalDivider.getIntrinsicHeight());
+    }
+
+    /**
+     * Adds horizontal dividers to a RecyclerView with a GridLayoutManager or its subclass.
+     *
+     * @param canvas The {@link Canvas} onto which dividers will be drawn
+     * @param parent The RecyclerView onto which dividers are being added
+     */
+    private void drawHorizontalDividers(Canvas canvas, RecyclerView parent) {
+        int childCount = parent.getChildCount();
+        int rowCount = childCount / mNumColumns;
+        int lastRowChildCount = childCount % mNumColumns;
+
+        for (int i = 1; i < mNumColumns; i++) {
+            int lastRowChildIndex;
+            if (i < lastRowChildCount) {
+                lastRowChildIndex = i + (rowCount * mNumColumns);
+            } else {
+                lastRowChildIndex = i + ((rowCount - 1) * mNumColumns);
+            }
+
+            View firstRowChild = parent.getChildAt(i);
+            View lastRowChild = parent.getChildAt(lastRowChildIndex);
+
+            int dividerTop = firstRowChild.getTop();
+            int dividerRight = firstRowChild.getLeft();
+            int dividerLeft = dividerRight - mHorizontalDivider.getIntrinsicWidth();
+            int dividerBottom = lastRowChild.getBottom();
+
+            mHorizontalDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
+            mHorizontalDivider.draw(canvas);
+        }
+    }
+
+    public void setNumOfColumns(int numberOfColumns) {
+        mNumColumns = numberOfColumns;
+    }
+
+    /**
+     * Adds vertical dividers to a RecyclerView with a GridLayoutManager or its subclass.
+     *
+     * @param canvas The {@link Canvas} onto which dividers will be drawn
+     * @param parent The RecyclerView onto which dividers are being added
+     */
+    private void drawVerticalDividers(Canvas canvas, RecyclerView parent) {
+        double childCount = parent.getChildCount();
+        double rowCount = Math.ceil(childCount / mNumColumns);
+        int rightmostChildIndex;
+        for (int i = 1; i <= rowCount; i++) {
+            // we dont want the divider on top of first row.
+            if (i == 1) {
+                continue;
+            }
+            if (i == rowCount) {
+                rightmostChildIndex = ((i - 1) * mNumColumns) - 1;
+            } else {
+                rightmostChildIndex = (i * mNumColumns) - 1;
+            }
+
+            View leftmostChild = parent.getChildAt(mNumColumns * (i - 1));
+            View rightmostChild = parent.getChildAt(rightmostChildIndex);
+
+            // draws on top of each row.
+            int dividerLeft = leftmostChild.getLeft();
+            int dividerBottom = leftmostChild.getTop();
+            int dividerTop = dividerBottom - mVerticalDivider.getIntrinsicHeight();
+            int dividerRight = rightmostChild.getRight();
+
+            mVerticalDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
+            mVerticalDivider.draw(canvas);
+        }
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/grid/GridOffsetItemDecoration.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/grid/GridOffsetItemDecoration.java
new file mode 100644
index 0000000..b7ce10c
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/grid/GridOffsetItemDecoration.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview.decorations.grid;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+
+import androidx.annotation.IntDef;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.lang.annotation.Retention;
+
+/** Adds an offset to the top of a RecyclerView with a GridLayoutManager or its subclass. */
+public class GridOffsetItemDecoration extends RecyclerView.ItemDecoration {
+
+    private int mOffsetPx;
+    private Drawable mOffsetDrawable;
+    private int mNumColumns;
+    @OffsetPosition
+    private final int mOffsetPosition;
+
+    /** The possible values for setScrollbarPosition. */
+    @IntDef({
+            OffsetPosition.START,
+            OffsetPosition.END,
+    })
+    @Retention(SOURCE)
+    public @interface OffsetPosition {
+        /** Position the offset to the start of the screen. */
+        int START = 0;
+
+        /** Position offset to the end of the screen. */
+        int END = 1;
+    }
+
+    /**
+     * Constructor that takes in the size of the offset to be added to the top of the RecyclerView.
+     *
+     * @param offsetPx The size of the offset to be added to the top of the RecyclerView in pixels
+     * @param numColumns The number of columns in the grid of the RecyclerView
+     * @param offsetPosition Position where offset needs to be applied.
+     */
+    public GridOffsetItemDecoration(int offsetPx, int numColumns, int offsetPosition) {
+        this.mOffsetPx = offsetPx;
+        this.mNumColumns = numColumns;
+        this.mOffsetPosition = offsetPosition;
+    }
+
+    /**
+     * Constructor that takes in a {@link Drawable} to be drawn at the top of the RecyclerView.
+     *
+     * @param offsetDrawable The {@code Drawable} to be added to the top of the RecyclerView
+     * @param numColumns The number of columns in the grid of the RecyclerView
+     */
+    public GridOffsetItemDecoration(Drawable offsetDrawable, int numColumns, int offsetPosition) {
+        this.mOffsetDrawable = offsetDrawable;
+        this.mNumColumns = numColumns;
+        this.mOffsetPosition = offsetPosition;
+    }
+
+    public void setNumOfColumns(int numberOfColumns) {
+        mNumColumns = numberOfColumns;
+    }
+
+    /**
+     * Determines the size and the location of the offset to be added to the top of the
+     * RecyclerView.
+     *
+     * @param outRect The {@link Rect} of offsets to be added around the child view
+     * @param view The child view to be decorated with an offset
+     * @param parent The RecyclerView onto which dividers are being added
+     * @param state The current RecyclerView.State of the RecyclerView
+     */
+    @Override
+    public void getItemOffsets(
+            Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        super.getItemOffsets(outRect, view, parent, state);
+
+        if (mOffsetPosition == OffsetPosition.START) {
+            boolean childIsInTopRow = parent.getChildAdapterPosition(view) < mNumColumns;
+            if (childIsInTopRow) {
+                if (mOffsetPx > 0) {
+                    outRect.top = mOffsetPx;
+                } else if (mOffsetDrawable != null) {
+                    outRect.top = mOffsetDrawable.getIntrinsicHeight();
+                }
+            }
+            return;
+        }
+
+        int childCount = state.getItemCount();
+        int lastRowChildCount = getLastRowChildCount(childCount);
+
+        boolean childIsInBottomRow =
+                parent.getChildAdapterPosition(view) >= childCount - lastRowChildCount;
+        if (childIsInBottomRow) {
+            if (mOffsetPx > 0) {
+                outRect.bottom = mOffsetPx;
+            } else if (mOffsetDrawable != null) {
+                outRect.bottom = mOffsetDrawable.getIntrinsicHeight();
+            }
+        }
+    }
+
+    @Override
+    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
+        super.onDraw(c, parent, state);
+        if (mOffsetDrawable == null) {
+            return;
+        }
+
+        int parentLeft = parent.getPaddingLeft();
+        int parentRight = parent.getWidth() - parent.getPaddingRight();
+
+        if (mOffsetPosition == OffsetPosition.START) {
+
+            int parentTop = parent.getPaddingTop();
+            int offsetDrawableBottom = parentTop + mOffsetDrawable.getIntrinsicHeight();
+
+            mOffsetDrawable.setBounds(parentLeft, parentTop, parentRight, offsetDrawableBottom);
+            mOffsetDrawable.draw(c);
+            return;
+        }
+
+        int childCount = state.getItemCount();
+        int lastRowChildCount = getLastRowChildCount(childCount);
+
+        int offsetDrawableTop = 0;
+        int offsetDrawableBottom = 0;
+
+        for (int i = childCount - lastRowChildCount; i < childCount; i++) {
+            View child = parent.getChildAt(i);
+            offsetDrawableTop = child.getBottom();
+            offsetDrawableBottom = offsetDrawableTop + mOffsetDrawable.getIntrinsicHeight();
+        }
+
+        mOffsetDrawable.setBounds(parentLeft, offsetDrawableTop, parentRight, offsetDrawableBottom);
+        mOffsetDrawable.draw(c);
+    }
+
+    private int getLastRowChildCount(int itemCount) {
+        int lastRowChildCount = itemCount % mNumColumns;
+        if (lastRowChildCount == 0) {
+            lastRowChildCount = mNumColumns;
+        }
+
+        return lastRowChildCount;
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/linear/LinearDividerItemDecoration.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/linear/LinearDividerItemDecoration.java
new file mode 100644
index 0000000..7a42e4b
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/linear/LinearDividerItemDecoration.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview.decorations.linear;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/** Adds interior dividers to a RecyclerView with a LinearLayoutManager or its subclass. */
+public class LinearDividerItemDecoration extends RecyclerView.ItemDecoration {
+
+    private final Drawable mDivider;
+    private int mOrientation;
+
+    /**
+     * Sole constructor. Takes in a {@link Drawable} to be used as the interior
+     * car_ui_pagedrecyclerview_divider.
+     *
+     * @param divider A car_ui_pagedrecyclerview_divider {@code Drawable} to be drawn on the
+     * RecyclerView
+     */
+    public LinearDividerItemDecoration(Drawable divider) {
+        this.mDivider = divider;
+    }
+
+    /**
+     * Draws horizontal or vertical dividers onto the parent RecyclerView.
+     *
+     * @param canvas The {@link Canvas} onto which dividers will be drawn
+     * @param parent The RecyclerView onto which dividers are being added
+     * @param state The current RecyclerView.State of the RecyclerView
+     */
+    @Override
+    public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
+        if (mOrientation == LinearLayoutManager.HORIZONTAL) {
+            drawHorizontalDividers(canvas, parent);
+        } else if (mOrientation == LinearLayoutManager.VERTICAL) {
+            drawVerticalDividers(canvas, parent);
+        }
+    }
+
+    /**
+     * Determines the size and location of offsets between items in the parent RecyclerView.
+     *
+     * @param outRect The {@link Rect} of offsets to be added around the child view
+     * @param view The child view to be decorated with an offset
+     * @param parent The RecyclerView onto which dividers are being added
+     * @param state The current RecyclerView.State of the RecyclerView
+     */
+    @Override
+    public void getItemOffsets(
+            Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        super.getItemOffsets(outRect, view, parent, state);
+
+        if (parent.getChildAdapterPosition(view) == 0) {
+            return;
+        }
+
+        mOrientation = ((LinearLayoutManager) parent.getLayoutManager()).getOrientation();
+        if (mOrientation == LinearLayoutManager.HORIZONTAL) {
+            outRect.left = mDivider.getIntrinsicWidth();
+        } else if (mOrientation == LinearLayoutManager.VERTICAL) {
+            outRect.top = mDivider.getIntrinsicHeight();
+        }
+    }
+
+    /**
+     * Adds dividers to a RecyclerView with a LinearLayoutManager or its subclass oriented
+     * horizontally.
+     *
+     * @param canvas The {@link Canvas} onto which horizontal dividers will be drawn
+     * @param parent The RecyclerView onto which horizontal dividers are being added
+     */
+    private void drawHorizontalDividers(Canvas canvas, RecyclerView parent) {
+        int parentTop = parent.getPaddingTop();
+        int parentBottom = parent.getHeight() - parent.getPaddingBottom();
+
+        int childCount = parent.getChildCount();
+        for (int i = 0; i < childCount - 1; i++) {
+            View child = parent.getChildAt(i);
+
+            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
+
+            int parentLeft = child.getRight() + params.rightMargin;
+            int parentRight = parentLeft + mDivider.getIntrinsicWidth();
+
+            mDivider.setBounds(parentLeft, parentTop, parentRight, parentBottom);
+            mDivider.draw(canvas);
+        }
+    }
+
+    /**
+     * Adds dividers to a RecyclerView with a LinearLayoutManager or its subclass oriented
+     * vertically.
+     *
+     * @param canvas The {@link Canvas} onto which vertical dividers will be drawn
+     * @param parent The RecyclerView onto which vertical dividers are being added
+     */
+    private void drawVerticalDividers(Canvas canvas, RecyclerView parent) {
+        int parentLeft = parent.getPaddingLeft();
+        int parentRight = parent.getWidth() - parent.getPaddingRight();
+
+        int childCount = parent.getChildCount();
+        for (int i = 0; i < childCount - 1; i++) {
+            View child = parent.getChildAt(i);
+
+            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
+
+            int parentTop = child.getBottom() + params.bottomMargin;
+            int parentBottom = parentTop + mDivider.getIntrinsicHeight();
+
+            mDivider.setBounds(parentLeft, parentTop, parentRight, parentBottom);
+            mDivider.draw(canvas);
+        }
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/linear/LinearOffsetItemDecoration.java b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/linear/LinearOffsetItemDecoration.java
new file mode 100644
index 0000000..de9335c
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/pagedrecyclerview/decorations/linear/LinearOffsetItemDecoration.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pagedrecyclerview.decorations.linear;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+
+import androidx.annotation.IntDef;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.lang.annotation.Retention;
+
+/**
+ * Adds an offset to the start of a RecyclerView using a LinearLayoutManager or its subclass.
+ *
+ * <p>If the RecyclerView.LayoutManager is oriented vertically, the offset will be added to the top
+ * of the RecyclerView. If the LayoutManager is oriented horizontally, the offset will be added to
+ * the left of the RecyclerView.
+ */
+public class LinearOffsetItemDecoration extends RecyclerView.ItemDecoration {
+
+    private int mOffsetPx;
+    private Drawable mOffsetDrawable;
+    private int mOrientation;
+    @OffsetPosition
+    private int mOffsetPosition;
+
+    /** The possible values for setScrollbarPosition. */
+    @IntDef({
+            OffsetPosition.START,
+            OffsetPosition.END,
+    })
+    @Retention(SOURCE)
+    public @interface OffsetPosition {
+        /** Position the offset to the start of the screen. */
+        int START = 0;
+
+        /** Position offset to the end of the screen. */
+        int END = 1;
+    }
+
+    /**
+     * Constructor that takes in the size of the offset to be added to the start of the
+     * RecyclerView.
+     *
+     * @param offsetPx The size of the offset to be added to the start of the RecyclerView in pixels
+     * @param offsetPosition Position where offset needs to be applied.
+     */
+    public LinearOffsetItemDecoration(int offsetPx, int offsetPosition) {
+        this.mOffsetPx = offsetPx;
+        this.mOffsetPosition = offsetPosition;
+    }
+
+    /**
+     * Constructor that takes in a {@link Drawable} to be drawn at the start of the RecyclerView.
+     *
+     * @param offsetDrawable The {@code Drawable} to be added to the start of the RecyclerView
+     */
+    public LinearOffsetItemDecoration(Drawable offsetDrawable) {
+        this.mOffsetDrawable = offsetDrawable;
+    }
+
+    /**
+     * Determines the size and location of the offset to be added to the start of the RecyclerView.
+     *
+     * @param outRect The {@link Rect} of offsets to be added around the child view
+     * @param view The child view to be decorated with an offset
+     * @param parent The RecyclerView onto which dividers are being added
+     * @param state The current RecyclerView.State of the RecyclerView
+     */
+    @Override
+    public void getItemOffsets(
+            Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        super.getItemOffsets(outRect, view, parent, state);
+
+        if (mOffsetPosition == OffsetPosition.START && parent.getChildAdapterPosition(view) > 0) {
+            return;
+        }
+
+        int itemCount = state.getItemCount();
+        if (mOffsetPosition == OffsetPosition.END
+                && parent.getChildAdapterPosition(view) != itemCount - 1) {
+            return;
+        }
+
+        mOrientation = ((LinearLayoutManager) parent.getLayoutManager()).getOrientation();
+        if (mOrientation == LinearLayoutManager.HORIZONTAL) {
+            if (mOffsetPx > 0) {
+                if (mOffsetPosition == OffsetPosition.START) {
+                    outRect.left = mOffsetPx;
+                } else {
+                    outRect.right = mOffsetPx;
+                }
+            } else if (mOffsetDrawable != null) {
+                if (mOffsetPosition == OffsetPosition.START) {
+                    outRect.left = mOffsetDrawable.getIntrinsicWidth();
+                } else {
+                    outRect.right = mOffsetDrawable.getIntrinsicWidth();
+                }
+            }
+        } else if (mOrientation == LinearLayoutManager.VERTICAL) {
+            if (mOffsetPx > 0) {
+                if (mOffsetPosition == OffsetPosition.START) {
+                    outRect.top = mOffsetPx;
+                } else {
+                    outRect.bottom = mOffsetPx;
+                }
+            } else if (mOffsetDrawable != null) {
+                if (mOffsetPosition == OffsetPosition.START) {
+                    outRect.top = mOffsetDrawable.getIntrinsicHeight();
+                } else {
+                    outRect.bottom = mOffsetDrawable.getIntrinsicHeight();
+                }
+            }
+        }
+    }
+
+    /**
+     * Draws horizontal or vertical offset onto the start of the parent RecyclerView.
+     *
+     * @param c The {@link Canvas} onto which an offset will be drawn
+     * @param parent The RecyclerView onto which an offset is being added
+     * @param state The current RecyclerView.State of the RecyclerView
+     */
+    @Override
+    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
+        super.onDraw(c, parent, state);
+        if (mOffsetDrawable == null) {
+            return;
+        }
+
+        if (mOrientation == LinearLayoutManager.HORIZONTAL) {
+            drawOffsetHorizontal(c, parent);
+        } else if (mOrientation == LinearLayoutManager.VERTICAL) {
+            drawOffsetVertical(c, parent);
+        }
+    }
+
+    private void drawOffsetHorizontal(Canvas canvas, RecyclerView parent) {
+        int parentTop = parent.getPaddingTop();
+        int parentBottom = parent.getHeight() - parent.getPaddingBottom();
+        int parentLeft = 0;
+        int offsetDrawableRight = 0;
+
+        if (mOffsetPosition == OffsetPosition.START) {
+            parentLeft = parent.getPaddingLeft();
+            offsetDrawableRight = parentLeft + mOffsetDrawable.getIntrinsicWidth();
+        } else {
+            View lastChild = parent.getChildAt(parent.getChildCount() - 1);
+            RecyclerView.LayoutParams lastChildLayoutParams =
+                    (RecyclerView.LayoutParams) lastChild.getLayoutParams();
+            parentLeft = lastChild.getRight() + lastChildLayoutParams.rightMargin;
+            offsetDrawableRight = parentLeft + mOffsetDrawable.getIntrinsicWidth();
+        }
+
+        mOffsetDrawable.setBounds(parentLeft, parentTop, offsetDrawableRight, parentBottom);
+        mOffsetDrawable.draw(canvas);
+    }
+
+    private void drawOffsetVertical(Canvas canvas, RecyclerView parent) {
+        int parentLeft = parent.getPaddingLeft();
+        int parentRight = parent.getWidth() - parent.getPaddingRight();
+
+        int parentTop = 0;
+        int offsetDrawableBottom = 0;
+
+        if (mOffsetPosition == OffsetPosition.START) {
+            parentTop = parent.getPaddingTop();
+            offsetDrawableBottom = parentTop + mOffsetDrawable.getIntrinsicHeight();
+        } else {
+            View lastChild = parent.getChildAt(parent.getChildCount() - 1);
+            RecyclerView.LayoutParams lastChildLayoutParams =
+                    (RecyclerView.LayoutParams) lastChild.getLayoutParams();
+            parentTop = lastChild.getBottom() + lastChildLayoutParams.bottomMargin;
+            offsetDrawableBottom = parentTop + mOffsetDrawable.getIntrinsicHeight();
+        }
+
+        mOffsetDrawable.setBounds(parentLeft, parentTop, parentRight, offsetDrawableBottom);
+        mOffsetDrawable.draw(canvas);
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java b/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
new file mode 100644
index 0000000..f2d7c3e
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/preference/EditTextPreferenceDialogFragment.java
@@ -0,0 +1,108 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.preference;
+
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+
+import androidx.annotation.NonNull;
+import androidx.preference.EditTextPreference;
+
+/**
+ * Presents a dialog with an {@link EditText} associated with an {@link EditTextPreference}.
+ *
+ * <p>Note: this is borrowed as-is from androidx.preference.EditTextPreferenceDialogFragmentCompat
+ * with updates to formatting to match the project style. Automotive applications should use this
+ * implementations in order to launch the system themed platform {@link AlertDialog} instead of the
+ * one in the support library.
+ */
+public class EditTextPreferenceDialogFragment extends PreferenceDialogFragment {
+
+    private static final String SAVE_STATE_TEXT = "EditTextPreferenceDialogFragment.text";
+
+    private EditText mEditText;
+
+    private CharSequence mText;
+
+    /**
+     * Returns a new instance of {@link EditTextPreferenceDialogFragment} for the {@link
+     * EditTextPreference} with the given {@code key}.
+     */
+    public static EditTextPreferenceDialogFragment newInstance(String key) {
+        EditTextPreferenceDialogFragment fragment =
+                new EditTextPreferenceDialogFragment();
+        Bundle b = new Bundle(/* capacity= */ 1);
+        b.putString(ARG_KEY, key);
+        fragment.setArguments(b);
+        return fragment;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (savedInstanceState == null) {
+            mText = getEditTextPreference().getText();
+        } else {
+            mText = savedInstanceState.getCharSequence(SAVE_STATE_TEXT);
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putCharSequence(SAVE_STATE_TEXT, mText);
+    }
+
+    @Override
+    protected void onBindDialogView(View view) {
+        super.onBindDialogView(view);
+
+        mEditText = view.findViewById(android.R.id.edit);
+
+        if (mEditText == null) {
+            throw new IllegalStateException(
+                    "Dialog view must contain an EditText with id @android:id/edit");
+        }
+
+        mEditText.requestFocus();
+        mEditText.setText(mText);
+        // Place cursor at the end
+        mEditText.setSelection(mEditText.getText().length());
+    }
+
+    private EditTextPreference getEditTextPreference() {
+        return (EditTextPreference) getPreference();
+    }
+
+    @Override
+    protected boolean needInputMethod() {
+        return true;
+    }
+
+    @Override
+    protected void onDialogClosed(boolean positiveResult) {
+        if (positiveResult) {
+            String value = mEditText.getText().toString();
+            if (getEditTextPreference().callChangeListener(value)) {
+                getEditTextPreference().setText(value);
+            }
+        }
+    }
+
+}
diff --git a/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceDialogFragment.java b/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceDialogFragment.java
new file mode 100644
index 0000000..2d0a51d
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/preference/ListPreferenceDialogFragment.java
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.preference;
+
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.preference.ListPreference;
+
+/**
+ * Presents a dialog with a list of options associated with a {@link ListPreference}.
+ *
+ * <p>Note: this is borrowed as-is from androidx.preference.ListPreferenceDialogFragmentCompat
+ * with updates to formatting to match the project style. Automotive applications should use this
+ * implementations in order to launch the system themed platform {@link AlertDialog} instead of the
+ * one in the support library.
+ */
+public class ListPreferenceDialogFragment extends PreferenceDialogFragment {
+
+    private static final String SAVE_STATE_INDEX = "ListPreferenceDialogFragment.index";
+    private static final String SAVE_STATE_ENTRIES = "ListPreferenceDialogFragment.entries";
+    private static final String SAVE_STATE_ENTRY_VALUES =
+            "ListPreferenceDialogFragment.entryValues";
+
+    private int mClickedDialogEntryIndex;
+    private CharSequence[] mEntries;
+    private CharSequence[] mEntryValues;
+
+    /**
+     * Returns a new instance of {@link ListPreferenceDialogFragment} for the {@link
+     * ListPreference} with the given {@code key}.
+     */
+    public static ListPreferenceDialogFragment newInstance(String key) {
+        ListPreferenceDialogFragment fragment = new ListPreferenceDialogFragment();
+        Bundle b = new Bundle(/* capacity= */ 1);
+        b.putString(ARG_KEY, key);
+        fragment.setArguments(b);
+        return fragment;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (savedInstanceState == null) {
+            ListPreference preference = getListPreference();
+
+            if (preference.getEntries() == null || preference.getEntryValues() == null) {
+                throw new IllegalStateException(
+                        "ListPreference requires an entries array and an entryValues array.");
+            }
+
+            mClickedDialogEntryIndex = preference.findIndexOfValue(preference.getValue());
+            mEntries = preference.getEntries();
+            mEntryValues = preference.getEntryValues();
+        } else {
+            mClickedDialogEntryIndex = savedInstanceState.getInt(SAVE_STATE_INDEX, 0);
+            mEntries = savedInstanceState.getCharSequenceArray(SAVE_STATE_ENTRIES);
+            mEntryValues = savedInstanceState.getCharSequenceArray(SAVE_STATE_ENTRY_VALUES);
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putInt(SAVE_STATE_INDEX, mClickedDialogEntryIndex);
+        outState.putCharSequenceArray(SAVE_STATE_ENTRIES, mEntries);
+        outState.putCharSequenceArray(SAVE_STATE_ENTRY_VALUES, mEntryValues);
+    }
+
+    private ListPreference getListPreference() {
+        return (ListPreference) getPreference();
+    }
+
+    @Override
+    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+        super.onPrepareDialogBuilder(builder);
+
+        builder.setSingleChoiceItems(mEntries, mClickedDialogEntryIndex,
+                (dialog, which) -> {
+                    mClickedDialogEntryIndex = which;
+
+                    // Clicking on an item simulates the positive button click, and dismisses the
+                    // dialog.
+                    ListPreferenceDialogFragment.this.onClick(dialog,
+                            DialogInterface.BUTTON_POSITIVE);
+                    dialog.dismiss();
+                });
+
+        // The typical interaction for list-based dialogs is to have click-on-an-item dismiss the
+        // dialog instead of the user having to press 'Ok'.
+        builder.setPositiveButton(null, null);
+    }
+
+    @Override
+    public void onDialogClosed(boolean positiveResult) {
+        if (positiveResult && mClickedDialogEntryIndex >= 0) {
+            String value = mEntryValues[mClickedDialogEntryIndex].toString();
+            ListPreference preference = getListPreference();
+            if (preference.callChangeListener(value)) {
+                preference.setValue(value);
+            }
+        }
+    }
+
+}
diff --git a/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceDialogFragment.java b/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceDialogFragment.java
new file mode 100644
index 0000000..3a9fb7b
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/preference/MultiSelectListPreferenceDialogFragment.java
@@ -0,0 +1,141 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.preference;
+
+import android.app.AlertDialog;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.preference.MultiSelectListPreference;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Presents a dialog with a list of options associated with a {@link MultiSelectListPreference}.
+ *
+ * <p>Note: this is borrowed as-is from
+ * androidx.preference.MultiSelectListPreferenceDialogFragmentCompat with updates to formatting to
+ * match the project style. Automotive applications should use this implementations in order to
+ * launch the system themed platform {@link AlertDialog} instead of the one in the support library.
+ */
+public class MultiSelectListPreferenceDialogFragment extends PreferenceDialogFragment {
+
+    private static final String SAVE_STATE_VALUES =
+            "MultiSelectListPreferenceDialogFragment.values";
+    private static final String SAVE_STATE_CHANGED =
+            "MultiSelectListPreferenceDialogFragment.changed";
+    private static final String SAVE_STATE_ENTRIES =
+            "MultiSelectListPreferenceDialogFragment.entries";
+    private static final String SAVE_STATE_ENTRY_VALUES =
+            "MultiSelectListPreferenceDialogFragment.entryValues";
+
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+            Set<String> mNewValues = new HashSet<>();
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+            boolean mPreferenceChanged;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+            CharSequence[] mEntries;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
+            CharSequence[] mEntryValues;
+
+    /**
+     * Returns a new instance of {@link MultiSelectListPreferenceDialogFragment} for the {@link
+     * MultiSelectListPreference} with the given {@code key}.
+     */
+    public static MultiSelectListPreferenceDialogFragment newInstance(String key) {
+        final MultiSelectListPreferenceDialogFragment fragment =
+                new MultiSelectListPreferenceDialogFragment();
+        final Bundle b = new Bundle(1);
+        b.putString(ARG_KEY, key);
+        fragment.setArguments(b);
+        return fragment;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        if (savedInstanceState == null) {
+            final MultiSelectListPreference preference = getListPreference();
+
+            if (preference.getEntries() == null || preference.getEntryValues() == null) {
+                throw new IllegalStateException(
+                        "MultiSelectListPreference requires an entries array and an entryValues "
+                                + "array.");
+            }
+
+            mNewValues.clear();
+            mNewValues.addAll(preference.getValues());
+            mPreferenceChanged = false;
+            mEntries = preference.getEntries();
+            mEntryValues = preference.getEntryValues();
+        } else {
+            mNewValues.clear();
+            mNewValues.addAll(savedInstanceState.getStringArrayList(SAVE_STATE_VALUES));
+            mPreferenceChanged = savedInstanceState.getBoolean(SAVE_STATE_CHANGED, false);
+            mEntries = savedInstanceState.getCharSequenceArray(SAVE_STATE_ENTRIES);
+            mEntryValues = savedInstanceState.getCharSequenceArray(SAVE_STATE_ENTRY_VALUES);
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putStringArrayList(SAVE_STATE_VALUES, new ArrayList<>(mNewValues));
+        outState.putBoolean(SAVE_STATE_CHANGED, mPreferenceChanged);
+        outState.putCharSequenceArray(SAVE_STATE_ENTRIES, mEntries);
+        outState.putCharSequenceArray(SAVE_STATE_ENTRY_VALUES, mEntryValues);
+    }
+
+    private MultiSelectListPreference getListPreference() {
+        return (MultiSelectListPreference) getPreference();
+    }
+
+    @Override
+    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+        super.onPrepareDialogBuilder(builder);
+
+        final int entryCount = mEntryValues.length;
+        final boolean[] checkedItems = new boolean[entryCount];
+        for (int i = 0; i < entryCount; i++) {
+            checkedItems[i] = mNewValues.contains(mEntryValues[i].toString());
+        }
+        builder.setMultiChoiceItems(mEntries, checkedItems,
+                (dialog, which, isChecked) -> {
+                    if (isChecked) {
+                        mPreferenceChanged |= mNewValues.add(
+                                mEntryValues[which].toString());
+                    } else {
+                        mPreferenceChanged |= mNewValues.remove(
+                                mEntryValues[which].toString());
+                    }
+                });
+    }
+
+    @Override
+    public void onDialogClosed(boolean positiveResult) {
+        if (positiveResult && mPreferenceChanged) {
+            final MultiSelectListPreference preference = getListPreference();
+            if (preference.callChangeListener(mNewValues)) {
+                preference.setValues(mNewValues);
+            }
+        }
+        mPreferenceChanged = false;
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/preference/PreferenceDialogFragment.java b/car-ui-lib/src/com/android/car/ui/preference/PreferenceDialogFragment.java
new file mode 100644
index 0000000..9e87838
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/preference/PreferenceDialogFragment.java
@@ -0,0 +1,284 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.preference;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import androidx.annotation.CallSuper;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.preference.DialogPreference;
+import androidx.preference.PreferenceFragmentCompat;
+
+/**
+ * Abstract base class which presents a dialog associated with a {@link
+ * androidx.preference.DialogPreference}. Since the preference object may not be available during
+ * fragment re-creation, the necessary information for displaying the dialog is read once during
+ * the initial call to {@link #onCreate(Bundle)} and saved/restored in the saved instance state.
+ * Custom subclasses should also follow this pattern.
+ *
+ * <p>Note: this is borrowed as-is from androidx.preference.PreferenceDialogFragmentCompat with
+ * updates to formatting to match the project style. Automotive applications should use children of
+ * this fragment in order to launch the system themed platform {@link AlertDialog} instead of the
+ * one in the support library.
+ */
+public abstract class PreferenceDialogFragment extends DialogFragment implements
+        DialogInterface.OnClickListener {
+
+    protected static final String ARG_KEY = "key";
+
+    private static final String SAVE_STATE_TITLE = "PreferenceDialogFragment.title";
+    private static final String SAVE_STATE_POSITIVE_TEXT = "PreferenceDialogFragment.positiveText";
+    private static final String SAVE_STATE_NEGATIVE_TEXT = "PreferenceDialogFragment.negativeText";
+    private static final String SAVE_STATE_MESSAGE = "PreferenceDialogFragment.message";
+    private static final String SAVE_STATE_LAYOUT = "PreferenceDialogFragment.layout";
+    private static final String SAVE_STATE_ICON = "PreferenceDialogFragment.icon";
+
+    private DialogPreference mPreference;
+
+    private CharSequence mDialogTitle;
+    private CharSequence mPositiveButtonText;
+    private CharSequence mNegativeButtonText;
+    private CharSequence mDialogMessage;
+    @LayoutRes
+    private int mDialogLayoutRes;
+
+    private BitmapDrawable mDialogIcon;
+
+    /** Which button was clicked. */
+    private int mWhichButtonClicked;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        Fragment rawFragment = getTargetFragment();
+        if (!(rawFragment instanceof DialogPreference.TargetFragment)) {
+            throw new IllegalStateException(
+                    "Target fragment must implement TargetFragment interface");
+        }
+
+        DialogPreference.TargetFragment fragment =
+                (DialogPreference.TargetFragment) rawFragment;
+
+        String key = getArguments().getString(ARG_KEY);
+        if (savedInstanceState == null) {
+            mPreference = (DialogPreference) fragment.findPreference(key);
+            mDialogTitle = mPreference.getDialogTitle();
+            mPositiveButtonText = mPreference.getPositiveButtonText();
+            mNegativeButtonText = mPreference.getNegativeButtonText();
+            mDialogMessage = mPreference.getDialogMessage();
+            mDialogLayoutRes = mPreference.getDialogLayoutResource();
+
+            Drawable icon = mPreference.getDialogIcon();
+            if (icon == null || icon instanceof BitmapDrawable) {
+                mDialogIcon = (BitmapDrawable) icon;
+            } else {
+                Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(),
+                        icon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+                Canvas canvas = new Canvas(bitmap);
+                icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+                icon.draw(canvas);
+                mDialogIcon = new BitmapDrawable(getResources(), bitmap);
+            }
+        } else {
+            mDialogTitle = savedInstanceState.getCharSequence(SAVE_STATE_TITLE);
+            mPositiveButtonText = savedInstanceState.getCharSequence(SAVE_STATE_POSITIVE_TEXT);
+            mNegativeButtonText = savedInstanceState.getCharSequence(SAVE_STATE_NEGATIVE_TEXT);
+            mDialogMessage = savedInstanceState.getCharSequence(SAVE_STATE_MESSAGE);
+            mDialogLayoutRes = savedInstanceState.getInt(SAVE_STATE_LAYOUT, 0);
+            Bitmap bitmap = savedInstanceState.getParcelable(SAVE_STATE_ICON);
+            if (bitmap != null) {
+                mDialogIcon = new BitmapDrawable(getResources(), bitmap);
+            }
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+
+        outState.putCharSequence(SAVE_STATE_TITLE, mDialogTitle);
+        outState.putCharSequence(SAVE_STATE_POSITIVE_TEXT, mPositiveButtonText);
+        outState.putCharSequence(SAVE_STATE_NEGATIVE_TEXT, mNegativeButtonText);
+        outState.putCharSequence(SAVE_STATE_MESSAGE, mDialogMessage);
+        outState.putInt(SAVE_STATE_LAYOUT, mDialogLayoutRes);
+        if (mDialogIcon != null) {
+            outState.putParcelable(SAVE_STATE_ICON, mDialogIcon.getBitmap());
+        }
+    }
+
+    @Override
+    @NonNull
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        Context context = getActivity();
+        mWhichButtonClicked = DialogInterface.BUTTON_NEGATIVE;
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(context)
+                .setTitle(mDialogTitle)
+                .setIcon(mDialogIcon)
+                .setPositiveButton(mPositiveButtonText, this)
+                .setNegativeButton(mNegativeButtonText, this);
+
+        View contentView = onCreateDialogView(context);
+        if (contentView != null) {
+            onBindDialogView(contentView);
+            builder.setView(contentView);
+        } else {
+            builder.setMessage(mDialogMessage);
+        }
+
+        onPrepareDialogBuilder(builder);
+
+        // Create the dialog
+        Dialog dialog = builder.create();
+        if (needInputMethod()) {
+            // Request input only after the dialog is shown. This is to prevent an issue where the
+            // dialog view collapsed the content on small displays.
+            dialog.setOnShowListener(d -> requestInputMethod(dialog));
+        }
+
+        return dialog;
+    }
+
+    /**
+     * Get the preference that requested this dialog. Available after {@link #onCreate(Bundle)} has
+     * been called on the {@link PreferenceFragmentCompat} which launched this dialog.
+     *
+     * @return the {@link DialogPreference} associated with this dialog.
+     */
+    public DialogPreference getPreference() {
+        if (mPreference == null) {
+            String key = getArguments().getString(ARG_KEY);
+            DialogPreference.TargetFragment fragment =
+                    (DialogPreference.TargetFragment) getTargetFragment();
+            mPreference = (DialogPreference) fragment.findPreference(key);
+        }
+        return mPreference;
+    }
+
+    /**
+     * Prepares the dialog builder to be shown when the preference is clicked. Use this to set
+     * custom properties on the dialog.
+     *
+     * <p>Do not {@link AlertDialog.Builder#create()} or {@link AlertDialog.Builder#show()}.
+     */
+    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+    }
+
+    /**
+     * Returns whether the preference needs to display a soft input method when the dialog is
+     * displayed. Default is false. Subclasses should override this method if they need the soft
+     * input method brought up automatically.
+     *
+     * <p>Note: Ensure your subclass manually requests focus (ideally in {@link
+     * #onBindDialogView(View)}) for the input field in order to
+     * correctly attach the input method to the field.
+     */
+    protected boolean needInputMethod() {
+        return false;
+    }
+
+    /**
+     * Sets the required flags on the dialog window to enable input method window to show up.
+     */
+    private void requestInputMethod(Dialog dialog) {
+        Window window = dialog.getWindow();
+        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+    }
+
+    /**
+     * Creates the content view for the dialog (if a custom content view is required). By default,
+     * it inflates the dialog layout resource if it is set.
+     *
+     * @return the content View for the dialog.
+     * @see DialogPreference#setLayoutResource(int)
+     */
+    protected View onCreateDialogView(Context context) {
+        int resId = mDialogLayoutRes;
+        if (resId == 0) {
+            return null;
+        }
+
+        LayoutInflater inflater = LayoutInflater.from(context);
+        return inflater.inflate(resId, null);
+    }
+
+    /**
+     * Binds views in the content View of the dialog to data.
+     *
+     * <p>Make sure to call through to the superclass implementation.
+     *
+     * @param view the content View of the dialog, if it is custom.
+     */
+    @CallSuper
+    protected void onBindDialogView(View view) {
+        View dialogMessageView = view.findViewById(android.R.id.message);
+
+        if (dialogMessageView != null) {
+            CharSequence message = mDialogMessage;
+            int newVisibility = View.GONE;
+
+            if (!TextUtils.isEmpty(message)) {
+                if (dialogMessageView instanceof TextView) {
+                    ((TextView) dialogMessageView).setText(message);
+                }
+
+                newVisibility = View.VISIBLE;
+            }
+
+            if (dialogMessageView.getVisibility() != newVisibility) {
+                dialogMessageView.setVisibility(newVisibility);
+            }
+        }
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        mWhichButtonClicked = which;
+    }
+
+    @Override
+    public void onDismiss(DialogInterface dialog) {
+        super.onDismiss(dialog);
+        onDialogClosed(mWhichButtonClicked == DialogInterface.BUTTON_POSITIVE);
+    }
+
+    /**
+     * Called when the dialog is dismissed.
+     *
+     * @param positiveResult {@code true} if the dialog was dismissed with {@link
+     *                       DialogInterface#BUTTON_POSITIVE}.
+     */
+    protected abstract void onDialogClosed(boolean positiveResult);
+}
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
new file mode 100644
index 0000000..4d0c1da
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/MenuItem.java
@@ -0,0 +1,449 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.toolbar;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.Switch;
+
+import com.android.car.ui.R;
+
+/**
+ * Represents a button to display in the {@link Toolbar}.
+ *
+ * <p>There are currently 3 types of buttons: icon, text, and switch. Using
+ * {@link Builder#setCheckable()} will ensure that you get a switch, after that
+ * {@link Builder#setIcon(int)} will ensure an icon, and anything left just requires
+ * {@link Builder#setTitle(int)}.
+ *
+ * <p>Each MenuItem has a {@link DisplayBehavior} that controls if it appears on the {@link Toolbar}
+ * itself, or it's overflow menu.
+ *
+ * <p>If you require a search or settings button, you should use
+ * {@link Builder#createSearch(Context, OnClickListener)} or
+ * {@link Builder#createSettings(Context, OnClickListener)}.
+ *
+ * <p>Some properties can be changed after the creating a MenuItem, but others require being set
+ * with a {@link Builder}.
+ */
+public class MenuItem {
+
+    private final Context mContext;
+    private final boolean mIsCheckable;
+    private final int mCustomLayoutId;
+    private final int mId;
+    private final View.OnClickListener mViewOnClickListener = v -> {
+        if (isCheckable()) {
+            setChecked(!isChecked());
+        }
+
+        if (getOnClickListener() != null) {
+            getOnClickListener().onClick(this);
+        }
+    };
+
+    private Listener mListener;
+    private CharSequence mTitle;
+    private Drawable mIcon;
+    private OnClickListener mOnClickListener;
+    private DisplayBehavior mDisplayBehavior;
+    private boolean mIsEnabled;
+    private boolean mIsChecked;
+    private boolean mIsVisible;
+    private View mView;
+
+
+    private MenuItem(Builder builder) {
+        mContext = builder.mContext;
+        mIsCheckable = builder.mIsCheckable;
+        mCustomLayoutId = builder.mCustomLayoutId;
+        mTitle = builder.mTitle;
+        mIcon = builder.mIcon;
+        mOnClickListener = builder.mOnClickListener;
+        mDisplayBehavior = builder.mDisplayBehavior;
+        mIsEnabled = builder.mIsEnabled;
+        mIsChecked = builder.mIsChecked;
+        mIsVisible = builder.mIsVisible;
+        mId = builder.mId;
+    }
+
+    /** Returns whether the MenuItem is enabled */
+    public boolean isEnabled() {
+        return mIsEnabled;
+    }
+
+    /** Sets whether the MenuItem is enabled */
+    public void setEnabled(boolean enabled) {
+        mIsEnabled = enabled;
+
+        if (mView != null) {
+            recursiveSetEnabled(mView, mIsEnabled);
+        }
+    }
+
+    /** Returns whether the MenuItem is checkable. If it is, it will be displayed as a switch. */
+    public boolean isCheckable() {
+        return mIsCheckable;
+    }
+
+    /**
+     * Returns whether the MenuItem is currently checked. Only valid if {@link #isCheckable()}
+     * is true.
+     */
+    public boolean isChecked() {
+        return mIsChecked;
+    }
+
+    /**
+     * Sets whether or not the MenuItem is checked.
+     * @throws IllegalStateException When {@link #isCheckable()} is false.
+     */
+    public void setChecked(boolean checked) {
+        if (!isCheckable()) {
+            throw new IllegalStateException("Cannot call setChecked() on a non-checkable MenuItem");
+        }
+
+        mIsChecked = checked;
+
+        if (mView != null) {
+            Switch s = mView.findViewById(R.id.car_ui_toolbar_menu_item_switch);
+            if (s != null) {
+                s.setChecked(mIsChecked);
+            }
+        }
+    }
+
+    /** Returns whether or not the MenuItem is visible */
+    public boolean isVisible() {
+        return mIsVisible;
+    }
+
+    /** Sets whether or not the MenuItem is visible */
+    public void setVisible(boolean visible) {
+        mIsVisible = visible;
+
+        // The toolbar will change the visibility of the view
+        if (mListener != null) {
+            mListener.onMenuItemChanged(this);
+        }
+    }
+
+    /** Gets the title of this MenuItem. */
+    public CharSequence getTitle() {
+        return mTitle;
+    }
+
+    /** Sets the title of this MenuItem. */
+    public void setTitle(CharSequence title) {
+        mTitle = title;
+
+        if (mView != null) {
+            Button button = mView.findViewById(R.id.car_ui_toolbar_menu_item_text);
+            if (button != null) {
+                button.setText(mTitle);
+            }
+        }
+
+        if (mListener != null) {
+            mListener.onMenuItemChanged(this);
+        }
+    }
+
+    /** Sets the title of this MenuItem to a string resource. */
+    public void setTitle(int resId) {
+        setTitle(mContext.getString(resId));
+    }
+
+    /** Gets the current {@link OnClickListener} */
+    public OnClickListener getOnClickListener() {
+        return mOnClickListener;
+    }
+
+    /** Sets the {@link OnClickListener} */
+    public void setOnClickListener(OnClickListener listener) {
+        mOnClickListener = listener;
+    }
+
+    /** Calls the {@link OnClickListener}. */
+    public void performClick() {
+        mViewOnClickListener.onClick(null);
+    }
+
+    /** Gets the current {@link DisplayBehavior} */
+    public DisplayBehavior getDisplayBehavior() {
+        return mDisplayBehavior;
+    }
+
+    /** Gets the current Icon */
+    public Drawable getIcon() {
+        return mIcon;
+    }
+
+    /**
+     * Gets the custom view specified by {@link Builder#setCustomLayout(int)}
+     *
+     * @return null if {@link Builder#setCustomLayout(int)} was not used when
+     * building this MenuItem.
+     */
+    public View getView() {
+        return mView;
+    }
+
+    int getId() {
+        return mId;
+    }
+
+    /**
+     * Builder class.
+     *
+     * <p>Use the static {@link #createSearch(Context, OnClickListener)} or
+     * {@link #createSettings(Context, OnClickListener)} if you want one of those specialized
+     * buttons.
+     */
+    public static final class Builder {
+        private Context mContext;
+
+        private CharSequence mTitle;
+        private Drawable mIcon;
+        private OnClickListener mOnClickListener;
+        private DisplayBehavior mDisplayBehavior = DisplayBehavior.ALWAYS;
+        private boolean mIsEnabled = true;
+        private boolean mIsCheckable = false;
+        private boolean mIsChecked = false;
+        private boolean mIsVisible = true;
+        private int mCustomLayoutId;
+        private int mId;
+
+        public Builder(Context c) {
+            mContext = c;
+        }
+
+        /** Builds a {@link MenuItem} from the current state of the Builder */
+        public MenuItem build() {
+            return new MenuItem(this);
+        }
+
+        /** Sets the title to a string resource id */
+        public Builder setTitle(int resId) {
+            setTitle(mContext.getString(resId));
+            return this;
+        }
+
+        /** Sets the title */
+        public Builder setTitle(CharSequence title) {
+            mTitle = title;
+            return this;
+        }
+
+        /** Sets the icon to a drawable resource id */
+        public Builder setIcon(int resId) {
+            mIcon = mContext.getDrawable(resId);
+            return this;
+        }
+
+        /** Sets whether the MenuItem is visible or not. Default true. */
+        public Builder setVisible(boolean visible) {
+            mIsVisible = visible;
+            return this;
+        }
+
+        /**
+         * Sets a custom layout to use for this MenuItem.
+         *
+         * <p>Should not be used in non-system (GAS) apps, as the OEM will not be able to
+         * customize the layout.
+         */
+        public Builder setCustomLayout(int resId) {
+            if (mIsCheckable) {
+                throw new IllegalStateException("Cannot have a checkable custom layout MenuItem");
+            }
+
+            mCustomLayoutId = resId;
+            return this;
+        }
+
+        /** Sets the {@link OnClickListener} */
+        public Builder setOnClickListener(OnClickListener listener) {
+            mOnClickListener = listener;
+            return this;
+        }
+
+        /**
+         * Sets the {@link DisplayBehavior}.
+         *
+         * <p>If the DisplayBehavior is {@link DisplayBehavior#NEVER}, the MenuItem must not be
+         * {@link #setCheckable() checkable}.
+         */
+        public Builder setDisplayBehavior(DisplayBehavior behavior) {
+            if (behavior == DisplayBehavior.NEVER && mIsCheckable) {
+                throw new IllegalStateException(
+                        "Currently we don't support a checkable overflow item");
+            }
+            mDisplayBehavior = behavior;
+            return this;
+        }
+
+        /** Sets whether the MenuItem is enabled or not. Default true. */
+        public Builder setEnabled(boolean enabled) {
+            mIsEnabled = enabled;
+            return this;
+        }
+
+        /**
+         * Makes the MenuItem checkable, meaning it will be displayed as a
+         * switch. Currently a checkable MenuItem cannot have a {@link DisplayBehavior} of NEVER.
+         *
+         * <p>The MenuItem is not checkable by default.
+         */
+        public Builder setCheckable() {
+            if (mDisplayBehavior == DisplayBehavior.NEVER) {
+                throw new IllegalStateException(
+                        "Currently we don't support a checkable overflow item");
+            }
+
+            if (mCustomLayoutId != 0) {
+                throw new IllegalStateException("Cannot have a checkable custom layout MenuItem");
+            }
+
+            mIsCheckable = true;
+            return this;
+        }
+
+        /**
+         * Sets whether the MenuItem is checked or not. This will imply {@link #setCheckable()}.
+         */
+        public Builder setChecked(boolean checked) {
+            setCheckable();
+            mIsChecked = checked;
+            return this;
+        }
+
+        private Builder setId(int id) {
+            mId = id;
+            return this;
+        }
+
+        /**
+         * Creates a search MenuItem.
+         *
+         * <p>The advantage of using this over creating your own is getting an OEM-styled search
+         * icon, and this button will always disappear while searching, even when the
+         * {@link Toolbar Toolbar's} showMenuItemsWhileSearching is true.
+         */
+        public static MenuItem createSearch(Context c, OnClickListener listener) {
+            return new Builder(c)
+                    .setTitle(R.string.car_ui_toolbar_menu_item_search_title)
+                    .setIcon(R.drawable.car_ui_icon_search)
+                    .setOnClickListener(listener)
+                    .setId(R.id.search)
+                    .build();
+        }
+
+        /**
+         * Creates a settings MenuItem.
+         *
+         * <p>The advantage of this over creating your own is getting an OEM-styled settings icon.
+         */
+        public static MenuItem createSettings(Context c, OnClickListener listener) {
+            return new Builder(c)
+                    .setTitle(R.string.car_ui_toolbar_menu_item_settings_title)
+                    .setIcon(R.drawable.car_ui_icon_settings)
+                    .setOnClickListener(listener)
+                    .build();
+        }
+    }
+
+    /**
+     * OnClickListener for a MenuItem.
+     */
+    public interface OnClickListener {
+        /** Called when the MenuItem is clicked */
+        void onClick(MenuItem item);
+    }
+
+    /**
+     * DisplayBehavior controls how the MenuItem is presented in the Toolbar
+     */
+    public enum DisplayBehavior {
+        /** Always show the MenuItem on the toolbar instead of the overflow menu */
+        ALWAYS,
+        /** Never show the MenuItem in the toolbar, always put it in the overflow menu */
+        NEVER
+    }
+
+    /** Listener for {@link Toolbar} to update when this MenuItem changes */
+    interface Listener {
+        /** Called when the MenuItem is changed. For use only by {@link Toolbar} */
+        void onMenuItemChanged(MenuItem item);
+    }
+
+    void setListener(Listener listener) {
+        mListener = listener;
+    }
+
+    View createView(ViewGroup parent) {
+        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
+                Context.LAYOUT_INFLATER_SERVICE);
+
+        if (mCustomLayoutId != 0) {
+            mView = inflater.inflate(mCustomLayoutId, parent, false);
+        } else if (isCheckable()) {
+            mView = inflater.inflate(
+                    R.layout.car_ui_toolbar_menu_item_switch, parent, false);
+        } else if (getIcon() != null) {
+            mView = inflater.inflate(
+                    R.layout.car_ui_toolbar_menu_item_icon, parent, false);
+            ImageView imageView = mView.requireViewById(R.id.car_ui_toolbar_menu_item_icon);
+            imageView.setImageDrawable(getIcon());
+        } else {
+            mView = (Button) inflater.inflate(
+                    R.layout.car_ui_toolbar_menu_item_text, parent, false);
+            setTitle(getTitle());
+        }
+
+        // Both custom and switch layouts can be checkable
+        if (isCheckable()) {
+            setChecked(isChecked());
+        }
+
+        if (getId() != 0) {
+            mView.setId(getId());
+        }
+
+        if (!mIsVisible) {
+            mView.setVisibility(View.GONE);
+        }
+
+        recursiveSetEnabled(mView, isEnabled());
+        mView.setOnClickListener(mViewOnClickListener);
+        return mView;
+    }
+
+    private void recursiveSetEnabled(View view, boolean enabled) {
+        view.setEnabled(enabled);
+        if (view instanceof ViewGroup) {
+            ViewGroup viewGroup = ((ViewGroup) view);
+            for (int i = 0; i < viewGroup.getChildCount(); i++) {
+                recursiveSetEnabled(viewGroup.getChildAt(i), enabled);
+            }
+        }
+    }
+}
diff --git a/car-chassis-lib/src/com/android/car/chassis/SearchView.java b/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
similarity index 85%
rename from car-chassis-lib/src/com/android/car/chassis/SearchView.java
rename to car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
index c033f7e..ef29354 100644
--- a/car-chassis-lib/src/com/android/car/chassis/SearchView.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.car.chassis;
+package com.android.car.ui.toolbar;
 
 import android.content.Context;
 import android.graphics.Bitmap;
@@ -30,6 +30,8 @@
 
 import androidx.constraintlayout.widget.ConstraintLayout;
 
+import com.android.car.ui.R;
+
 import java.util.HashSet;
 import java.util.Set;
 
@@ -39,8 +41,7 @@
 public class SearchView extends ConstraintLayout {
     private final ImageView mIcon;
     private final EditText mSearchText;
-
-    private Set<Toolbar.Listener> mListeners = new HashSet<>();
+    private final Set<Toolbar.OnSearchListener> mListeners = new HashSet<>();
 
     public SearchView(Context context) {
         this(context, null);
@@ -54,7 +55,7 @@
         super(context, attrs, defStyleAttr);
 
         LayoutInflater inflater = LayoutInflater.from(context);
-        inflater.inflate(R.layout.chassis_search_view, this, true);
+        inflater.inflate(R.layout.car_ui_search_view, this, true);
 
         mSearchText = requireViewById(R.id.search_bar);
         View closeIcon = requireViewById(R.id.search_close);
@@ -99,19 +100,18 @@
 
     /**
      * Adds a listener for the search text changing.
-     * See also {@link #removeToolbarListener(Toolbar.Listener)}
+     * See also {@link #unregisterOnSearchListener(Toolbar.OnSearchListener)}
      */
-    public void addToolbarListener(Toolbar.Listener listener) {
+    public void registerOnSearchListener(Toolbar.OnSearchListener listener) {
         mListeners.add(listener);
     }
 
     /**
      * Removes a listener.
-     * See also {@link #addToolbarListener(Toolbar.Listener)}
-     * @param listener
+     * See also {@link #registerOnSearchListener(Toolbar.OnSearchListener)}
      */
-    public void removeToolbarListener(Toolbar.Listener listener) {
-        mListeners.remove(listener);
+    public boolean unregisterOnSearchListener(Toolbar.OnSearchListener listener) {
+        return mListeners.remove(listener);
     }
 
     /**
@@ -130,6 +130,11 @@
         mSearchText.setHint(hint);
     }
 
+    /** Gets the search hint */
+    public CharSequence getHint() {
+        return mSearchText.getHint();
+    }
+
     /**
      * Sets a custom icon to display in the search box.
      */
@@ -152,7 +157,7 @@
     }
 
     private void onSearch(String query) {
-        for (Toolbar.Listener listener : mListeners) {
+        for (Toolbar.OnSearchListener listener : mListeners) {
             listener.onSearch(query);
         }
     }
diff --git a/car-chassis-lib/src/com/android/car/chassis/TabLayout.java b/car-ui-lib/src/com/android/car/ui/toolbar/TabLayout.java
similarity index 86%
rename from car-chassis-lib/src/com/android/car/chassis/TabLayout.java
rename to car-ui-lib/src/com/android/car/ui/toolbar/TabLayout.java
index d9803e4..066da0f 100644
--- a/car-chassis-lib/src/com/android/car/chassis/TabLayout.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/TabLayout.java
@@ -13,14 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.android.car.chassis;
+package com.android.car.ui.toolbar;
 
 import android.content.Context;
-import android.content.res.TypedArray;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.util.ArraySet;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -34,6 +34,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.car.ui.R;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -49,12 +51,11 @@
  * <p>Scrolling function is not supported. If a tab item runs out of the tab layout bound, there
  * is no way to access it. It's better to set the layout mode to flexible in this case.
  *
- * <p>Default tab item inflates from R.layout.chassis_tab_item, but it also supports custom layout
- * id, by overlaying R.layout.chassis_tab_item_layout. By doing this, appearance of tab item view
+ * <p>Default tab item inflates from R.layout.car_ui_tab_item, but it also supports custom layout
+ * id, by overlaying R.layout.car_ui_tab_item_layout. By doing this, appearance of tab item view
  * can be customized.
  *
  * <p>Touch feedback is using @android:attr/selectableItemBackground.
- *
  */
 public class TabLayout extends LinearLayout {
 
@@ -63,13 +64,16 @@
      */
     public interface Listener {
         /** Callback triggered when a tab is selected. */
-        default void onTabSelected(Tab tab) {}
+        default void onTabSelected(Tab tab) {
+        }
 
         /** Callback triggered when a tab is unselected. */
-        default void onTabUnselected(Tab tab) {}
+        default void onTabUnselected(Tab tab) {
+        }
 
         /** Callback triggered when a tab is reselected. */
-        default void onTabReselected(Tab tab) {}
+        default void onTabReselected(Tab tab) {
+        }
     }
 
     // View attributes
@@ -92,10 +96,10 @@
         super(context, attrs, defStyle);
         mListeners = new ArraySet<>();
 
-        mTabPaddingX = context.getResources().getDimensionPixelSize(R.dimen.chassis_tab_padding_x);
-        mTabFlexibleLayout = context.getResources().getBoolean(R.bool.chassis_tab_flexible_layout);
+        mTabPaddingX = context.getResources().getDimensionPixelSize(R.dimen.car_ui_tab_padding_x);
+        mTabFlexibleLayout = context.getResources().getBoolean(R.bool.car_ui_tab_flexible_layout);
 
-        mTabAdapter = new TabAdapter(context, R.layout.chassis_tab_item_layout, this);
+        mTabAdapter = new TabAdapter(context, R.layout.car_ui_tab_item_layout, this);
     }
 
     /**
@@ -181,26 +185,22 @@
     }
 
     private ViewGroup createTabItemView() {
-        LinearLayout tabItemView = new LinearLayout(mContext);
+        LinearLayout tabItemView = new LinearLayout(getContext());
         tabItemView.setOrientation(LinearLayout.VERTICAL);
         tabItemView.setGravity(Gravity.CENTER);
         tabItemView.setPadding(mTabPaddingX, 0, mTabPaddingX, 0);
-        TypedArray ta = getContext().obtainStyledAttributes(R.style.ChassisTabItemBackground,
-                new int[]{android.R.attr.background});
-        Drawable backgroundDrawable = ta.getDrawable(0);
-        ta.recycle();
-        tabItemView.setBackground(backgroundDrawable);
+        TypedValue tv = new TypedValue();
+        getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
+                tv, /* resolveRefs= */ true);
+        tabItemView.setBackgroundResource(tv.resourceId);
         return tabItemView;
     }
 
     private static class TabAdapter extends BaseAdapter {
-        private static final int MEDIUM_WEIGHT = 500;
         private final Context mContext;
         private final TabLayout mTabLayout;
         @LayoutRes
         private final int mTabItemLayoutRes;
-        private final Typeface mUnselectedTypeface;
-        private final Typeface mSelectedTypeface;
         private final List<Tab> mTabList;
 
         private TabAdapter(Context context, @LayoutRes int res, TabLayout tabLayout) {
@@ -208,9 +208,6 @@
             mContext = context;
             mTabItemLayoutRes = res;
             mTabLayout = tabLayout;
-            mUnselectedTypeface = Typeface.defaultFromStyle(Typeface.NORMAL);
-            // TODO: add indirection to allow customization.
-            mSelectedTypeface = Typeface.create(mUnselectedTypeface, MEDIUM_WEIGHT, false);
         }
 
         private void add(@NonNull Tab tab) {
@@ -292,8 +289,8 @@
         private void presentTabItemView(int position, @NonNull View tabItemView) {
             Tab tab = mTabList.get(position);
 
-            ImageView iconView = tabItemView.findViewById(R.id.chassis_tab_item_icon);
-            TextView textView = tabItemView.findViewById(R.id.chassis_tab_item_text);
+            ImageView iconView = tabItemView.findViewById(R.id.car_ui_tab_item_icon);
+            TextView textView = tabItemView.findViewById(R.id.car_ui_tab_item_text);
 
             tabItemView.setOnClickListener(view -> selectTab(tab));
             tab.bindText(textView);
@@ -302,7 +299,8 @@
             tabItemView.setSelected(tab.mIsSelected);
             iconView.setSelected(tab.mIsSelected);
             textView.setSelected(tab.mIsSelected);
-            textView.setTypeface(tab.mIsSelected ? mSelectedTypeface : mUnselectedTypeface);
+            // TODO(b/141109269): add indirection to allow customization.
+            textView.setTypeface(null, tab.mIsSelected ? Typeface.BOLD : Typeface.NORMAL);
         }
     }
 
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java b/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java
new file mode 100644
index 0000000..ba92c40
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/Toolbar.java
@@ -0,0 +1,740 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.toolbar;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+
+import com.android.car.ui.R;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A toolbar for Android Automotive OS apps.
+ *
+ * <p>This isn't a toolbar in the android framework sense, it's merely a custom view that can be
+ * added to a layout. (You can't call
+ * {@link android.app.Activity#setActionBar(android.widget.Toolbar)} with it)
+ *
+ * <p>The toolbar supports a navigation button, title, tabs, search, and {@link MenuItem MenuItems}
+ */
+public class Toolbar extends FrameLayout {
+
+    /** Callback that will be issued whenever the height of toolbar is changed. */
+    public interface OnHeightChangedListener {
+        /**
+         * Will be called when the height of the toolbar is changed.
+         *
+         * @param height new height of the toolbar
+         */
+        void onHeightChanged(int height);
+    }
+
+    /** Back button listener */
+    public interface OnBackListener {
+        /**
+         * Invoked when the user clicks on the back button. By default, the toolbar will call
+         * the Activity's {@link android.app.Activity#onBackPressed()}. Returning true from
+         * this method will absorb the back press and prevent that behavior.
+         */
+        boolean onBack();
+    }
+
+    /** Tab selection listener */
+    public interface OnTabSelectedListener {
+        /** Called when a {@link TabLayout.Tab} is selected */
+        void onTabSelected(TabLayout.Tab tab);
+    }
+
+    /** Search listener */
+    public interface OnSearchListener {
+        /**
+         * Invoked when the user submits a search query.
+         *
+         * <p>This is called for every letter the user types, and also empty strings if the user
+         * erases everything.
+         */
+        void onSearch(String query);
+    }
+
+    private static final String TAG = "CarUiToolbar";
+
+    /** Enum of states the toolbar can be in. Controls what elements of the toolbar are displayed */
+    public enum State {
+        /**
+         * In the HOME state, the logo will be displayed if there is one, and no navigation icon
+         * will be displayed. The tab bar will be visible. The title will be displayed if there
+         * is space. MenuItems will be displayed.
+         */
+        HOME,
+        /**
+         * In the SUBPAGE state, the logo will be replaced with a back button, the tab bar won't
+         * be visible. The title and MenuItems will be displayed.
+         */
+        SUBPAGE,
+        /**
+         * In the SUBPAGE_CUSTOM state, everything is the same as SUBPAGE except the title will
+         * be hidden and the custom view will be shown.
+         */
+        SUBPAGE_CUSTOM,
+        /**
+         * In the SEARCH state, only the back button and the search bar will be visible.
+         */
+        SEARCH,
+    }
+
+    private final boolean mTitleAndTabsAreMutuallyExclusive;
+
+    private ImageView mNavIcon;
+    private ImageView mLogo;
+    private ViewGroup mNavIconContainer;
+    private TextView mTitle;
+    private TabLayout mTabLayout;
+    private LinearLayout mMenuItemsContainer;
+    private FrameLayout mCustomViewContainer;
+    private View mOverflowButton;
+    private final Set<OnBackListener> mOnBackListeners = new HashSet<>();
+    private final Set<OnTabSelectedListener> mOnTabSelectedListeners = new HashSet<>();
+    private final Set<OnHeightChangedListener> mOnHeightChangedListeners = new HashSet<>();
+    private SearchView mSearchView;
+    private boolean mHasLogo = false;
+    private boolean mShowMenuItemsWhileSearching;
+    private MenuItem mSearchMenuItem;
+    private State mState = State.HOME;
+    private NavButtonMode mNavButtonMode = NavButtonMode.BACK;
+    @NonNull
+    private List<MenuItem> mMenuItems = Collections.emptyList();
+    private List<MenuItem> mOverflowItems = new ArrayList<>();
+    private MenuItem.Listener mMenuItemListener = (item) -> {
+        if (item.getDisplayBehavior() == MenuItem.DisplayBehavior.NEVER) {
+            createOverflowDialog();
+        } else {
+            View view = item.getView();
+            if (view != null) {
+                if (item.getId() == R.id.search) {
+                    view.setVisibility(mState != State.SEARCH && item.isVisible() ? VISIBLE : GONE);
+                } else {
+                    view.setVisibility(item.isVisible() ? VISIBLE : GONE);
+                }
+            }
+        }
+
+        setState(getState());
+    };
+    private AlertDialog mOverflowDialog;
+
+    public Toolbar(Context context) {
+        this(context, null);
+    }
+
+    public Toolbar(Context context, AttributeSet attrs) {
+        this(context, attrs, R.attr.CarUiToolbarStyle);
+    }
+
+    public Toolbar(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public Toolbar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        LayoutInflater inflater = (LayoutInflater) context
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        inflater.inflate(R.layout.car_ui_toolbar, this, true);
+
+        mTabLayout = requireViewById(R.id.tabs);
+        mNavIcon = requireViewById(R.id.nav_icon);
+        mLogo = requireViewById(R.id.logo);
+        mNavIconContainer = requireViewById(R.id.nav_icon_container);
+        mMenuItemsContainer = requireViewById(R.id.menu_items_container);
+        mTitle = requireViewById(R.id.title);
+        mSearchView = requireViewById(R.id.search_view);
+        mCustomViewContainer = requireViewById(R.id.custom_view_container);
+        mOverflowButton = requireViewById(R.id.car_ui_toolbar_overflow_button);
+
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.CarUiToolbar, defStyleAttr, defStyleRes);
+
+        try {
+            mTitleAndTabsAreMutuallyExclusive = context.getResources().getBoolean(
+                    R.bool.car_ui_toolbar_title_and_tabs_are_mutually_exclusive);
+
+            mTitle.setText(a.getString(R.styleable.CarUiToolbar_title));
+            setLogo(a.getResourceId(R.styleable.CarUiToolbar_logo, 0));
+            setBackgroundShown(a.getBoolean(R.styleable.CarUiToolbar_showBackground, true));
+            mShowMenuItemsWhileSearching = a.getBoolean(
+                    R.styleable.CarUiToolbar_showMenuItemsWhileSearching, false);
+            String searchHint = a.getString(R.styleable.CarUiToolbar_searchHint);
+            if (searchHint != null) {
+                setSearchHint(searchHint);
+            }
+
+            switch (a.getInt(R.styleable.CarUiToolbar_state, 0)) {
+                case 0:
+                    setState(State.HOME);
+                    break;
+                case 1:
+                    setState(State.SUBPAGE);
+                    break;
+                case 2:
+                    setState(State.SUBPAGE_CUSTOM);
+                    break;
+                case 3:
+                    setState(State.SEARCH);
+                    break;
+                default:
+                    if (Log.isLoggable(TAG, Log.WARN)) {
+                        Log.w(TAG, "Unknown initial state");
+                    }
+                    break;
+            }
+
+            switch (a.getInt(R.styleable.CarUiToolbar_navButtonMode, 0)) {
+                case 0:
+                    setNavButtonMode(NavButtonMode.BACK);
+                    break;
+                case 1:
+                    setNavButtonMode(NavButtonMode.CLOSE);
+                    break;
+                default:
+                    if (Log.isLoggable(TAG, Log.WARN)) {
+                        Log.w(TAG, "Unknown navigation button style");
+                    }
+                    break;
+            }
+        } finally {
+            a.recycle();
+        }
+
+        mTabLayout.addListener(new TabLayout.Listener() {
+            @Override
+            public void onTabSelected(TabLayout.Tab tab) {
+                for (OnTabSelectedListener listener : mOnTabSelectedListeners) {
+                    listener.onTabSelected(tab);
+                }
+            }
+        });
+
+        mOverflowButton.setOnClickListener(v -> {
+            if (mOverflowDialog == null) {
+                if (Log.isLoggable(TAG, Log.ERROR)) {
+                    Log.e(TAG, "Overflow dialog was null when trying to show it!");
+                }
+            } else {
+                mOverflowDialog.show();
+            }
+        });
+
+        getViewTreeObserver().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+                    @Override
+                    public void onGlobalLayout() {
+                        for (OnHeightChangedListener listener : mOnHeightChangedListeners) {
+                            listener.onHeightChanged(getHeight());
+                        }
+                    }
+                });
+    }
+
+    @Override
+    public Parcelable onSaveInstanceState() {
+        Parcelable superState = super.onSaveInstanceState();
+        SavedState ss = new SavedState(superState);
+        ss.mTitle = getTitle();
+        ss.mNavButtonMode = getNavButtonMode();
+        ss.mSearchHint = getSearchHint();
+        ss.mBackgroundShown = getBackgroundShown();
+        ss.mShowMenuItemsWhileSearching = getShowMenuItemsWhileSearching();
+        ss.mState = getState();
+        return ss;
+    }
+
+    @Override
+    public void onRestoreInstanceState(Parcelable state) {
+        if (!(state instanceof SavedState)) {
+            Log.w(TAG, "onRestoreInstanceState called with an unsupported state");
+            super.onRestoreInstanceState(state);
+        } else {
+            SavedState ss = (SavedState) state;
+            super.onRestoreInstanceState(ss.getSuperState());
+            setTitle(ss.mTitle);
+            setNavButtonMode(ss.mNavButtonMode);
+            setSearchHint(ss.mSearchHint);
+            setBackgroundShown(ss.mBackgroundShown);
+            setShowMenuItemsWhileSearching(ss.mShowMenuItemsWhileSearching);
+            setState(ss.mState);
+        }
+    }
+
+    private static class SavedState extends BaseSavedState {
+        private CharSequence mTitle;
+        private State mState;
+        private NavButtonMode mNavButtonMode;
+        private CharSequence mSearchHint;
+        private boolean mBackgroundShown;
+        private boolean mShowMenuItemsWhileSearching;
+
+        SavedState(Parcelable in) {
+            super(in);
+        }
+
+        SavedState(Parcel in) {
+            super(in);
+            mTitle = readCharSequence(in);
+            mNavButtonMode = NavButtonMode.valueOf(in.readString());
+            mSearchHint = readCharSequence(in);
+            mBackgroundShown = in.readInt() != 0;
+            mShowMenuItemsWhileSearching = in.readInt() != 0;
+            mState = State.valueOf(in.readString());
+        }
+
+        @Override
+        public void writeToParcel(Parcel out, int flags) {
+            super.writeToParcel(out, flags);
+            writeCharSequence(out, mTitle);
+            out.writeString(mNavButtonMode.name());
+            writeCharSequence(out, mSearchHint);
+            out.writeInt(mBackgroundShown ? 1 : 0);
+            out.writeInt(mShowMenuItemsWhileSearching ? 1 : 0);
+            out.writeString(mState.name());
+        }
+
+        public static final Parcelable.Creator<SavedState> CREATOR =
+                new Parcelable.Creator<SavedState>() {
+            @Override
+            public SavedState createFromParcel(Parcel in) {
+                return new SavedState(in);
+            }
+
+            @Override
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+
+        /** Replacement of hidden Parcel#readCharSequence(Parcel) */
+        private static CharSequence readCharSequence(Parcel in) {
+            return TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
+        }
+
+        /** Replacement of hidden Parcel#writeCharSequence(Parcel, CharSequence) */
+        private static void writeCharSequence(Parcel dest, CharSequence val) {
+            TextUtils.writeToParcel(val, dest, 0);
+        }
+    }
+
+    /**
+     * Sets the title of the toolbar to a string resource.
+     *
+     * <p>The title may not always be shown, for example in landscape with tabs.
+     */
+    public void setTitle(@StringRes int title) {
+        mTitle.setText(title);
+    }
+
+    /**
+     * Sets the title of the toolbar to a CharSequence.
+     *
+     * <p>The title may not always be shown, for example in landscape with tabs.
+     */
+    public void setTitle(CharSequence title) {
+        mTitle.setText(title);
+    }
+
+    public CharSequence getTitle() {
+        return mTitle.getText();
+    }
+
+    /**
+     * Gets the {@link TabLayout} for this toolbar.
+     */
+    public TabLayout getTabLayout() {
+        return mTabLayout;
+    }
+
+    /**
+     * Adds a tab to this toolbar. You can listen for when it is selected via
+     * {@link #registerOnTabSelectedListener(OnTabSelectedListener)}.
+     */
+    public void addTab(TabLayout.Tab tab) {
+        mTabLayout.addTab(tab);
+        setState(getState());
+    }
+
+    /**
+     * Gets a tab added to this toolbar. See
+     * {@link #addTab(TabLayout.Tab)}.
+     */
+    public TabLayout.Tab getTab(int position) {
+        return mTabLayout.get(position);
+    }
+
+    /**
+     * Selects a tab added to this toolbar. See
+     * {@link #addTab(TabLayout.Tab)}.
+     */
+    public void selectTab(int position) {
+        mTabLayout.selectTab(position);
+    }
+
+    /**
+     * Sets the logo to display in this toolbar.
+     * Will not be displayed if a navigation icon is currently being displayed.
+     */
+    public void setLogo(int resId) {
+        if (resId != 0) {
+            mLogo.setImageResource(resId);
+            mHasLogo = true;
+        } else {
+            mHasLogo = false;
+        }
+        setState(mState);
+    }
+
+    /** Sets the hint for the search bar. */
+    public void setSearchHint(int resId) {
+        mSearchView.setHint(resId);
+    }
+
+    /** Sets the hint for the search bar. */
+    public void setSearchHint(CharSequence hint) {
+        mSearchView.setHint(hint);
+    }
+
+    /** Gets the search hint */
+    public CharSequence getSearchHint() {
+        return mSearchView.getHint();
+    }
+
+    /**
+     * An enum of possible styles the nav button could be in. All styles will still call
+     * {@link OnBackListener#onBack()}.
+     */
+    public enum NavButtonMode {
+        /** Display the nav button as a back button */
+        BACK,
+        /** Display the nav button as a close button */
+        CLOSE
+    }
+
+    /** Sets the {@link NavButtonMode} */
+    public void setNavButtonMode(NavButtonMode style) {
+        if (style != mNavButtonMode) {
+            mNavButtonMode = style;
+            setState(mState);
+        }
+    }
+
+    /** Gets the {@link NavButtonMode} */
+    public NavButtonMode getNavButtonMode() {
+        return mNavButtonMode;
+    }
+
+    /**
+     * setBackground is disallowed, to prevent apps from deviating from the intended style too much.
+     */
+    @Override
+    public void setBackground(Drawable d) {
+        throw new UnsupportedOperationException(
+                "You can not change the background of a CarUi toolbar, use "
+                        + "setBackgroundShown(boolean) or an RRO instead.");
+    }
+
+    /**
+     * Invokes all OnToolbarHeightChangeListener handlers registered in {@link
+     * OnHeightChangedListener}s array.
+     */
+    private void handleToolbarHeightChangeListeners(int height) {
+        for (OnHeightChangedListener listener : mOnHeightChangedListeners) {
+            listener.onHeightChanged(height);
+        }
+    }
+
+    /** Show/hide the background. When hidden, the toolbar is completely transparent. */
+    public void setBackgroundShown(boolean shown) {
+        if (shown) {
+            super.setBackground(getContext().getDrawable(R.color.car_ui_toolbar_background_color));
+        } else {
+            super.setBackground(null);
+        }
+    }
+
+    /** Returns true is the toolbar background is shown */
+    public boolean getBackgroundShown() {
+        return super.getBackground() != null;
+    }
+
+    /**
+     * Sets the {@link MenuItem Menuitems} to display.
+     */
+    public void setMenuItems(@Nullable List<MenuItem> items) {
+        if (items == null) {
+            items = Collections.emptyList();
+        }
+
+        if (items.equals(mMenuItems)) {
+            return;
+        }
+
+        // Copy the list so that if the list is modified and setMenuItems is called again,
+        // the equals() check will fail. Note that the MenuItems are not copied here.
+        mMenuItems = new ArrayList<>(items);
+
+        mOverflowItems.clear();
+        mMenuItemsContainer.removeAllViews();
+        mSearchMenuItem = null;
+
+        for (MenuItem item : items) {
+            item.setListener(mMenuItemListener);
+            if (item.getDisplayBehavior() == MenuItem.DisplayBehavior.NEVER) {
+                mOverflowItems.add(item);
+            } else {
+                View menuItemView = item.createView(mMenuItemsContainer);
+
+                // Add views with index 0 so that they are added right-to-left
+                mMenuItemsContainer.addView(menuItemView, 0);
+
+                if (item.getId() == R.id.search) {
+                    mSearchMenuItem = item;
+                }
+            }
+        }
+
+        createOverflowDialog();
+
+        setState(mState);
+    }
+
+    /** Gets the {@link MenuItem MenuItems} currently displayed */
+    @NonNull
+    public List<MenuItem> getMenuItems() {
+        return mMenuItems;
+    }
+
+    private int countVisibleOverflowItems() {
+        int numVisibleItems = 0;
+        for (MenuItem item : mOverflowItems) {
+            if (item.isVisible()) {
+                numVisibleItems++;
+            }
+        }
+        return numVisibleItems;
+    }
+
+    private void createOverflowDialog() {
+        // TODO(b/140564530) Use a carui alert with a (paged)recyclerview here
+        // TODO(b/140563930) Support enabled/disabled overflow items
+
+        CharSequence[] itemTitles = new CharSequence[countVisibleOverflowItems()];
+        int i = 0;
+        for (MenuItem item : mOverflowItems) {
+            if (item.isVisible()) {
+                itemTitles[i++] = item.getTitle();
+            }
+        }
+
+        mOverflowDialog = new AlertDialog.Builder(getContext())
+                .setItems(itemTitles, (dialog, which) -> {
+                    MenuItem item = mOverflowItems.get(which);
+                    MenuItem.OnClickListener listener = item.getOnClickListener();
+                    if (listener != null) {
+                        listener.onClick(item);
+                    }
+                })
+                .create();
+    }
+
+    /**
+     * Set whether or not to show the {@link MenuItem MenuItems} while searching. Default false.
+     * Even if this is set to true, the {@link MenuItem} created by
+     * {@link MenuItem.Builder#createSearch(Context, MenuItem.OnClickListener)} will still be
+     * hidden.
+     */
+    public void setShowMenuItemsWhileSearching(boolean showMenuItems) {
+        mShowMenuItemsWhileSearching = showMenuItems;
+        setState(mState);
+    }
+
+    /** Returns if {@link MenuItem MenuItems} are shown while searching */
+    public boolean getShowMenuItemsWhileSearching() {
+        return mShowMenuItemsWhileSearching;
+    }
+
+    /**
+     * Sets the search query.
+     */
+    public void setSearchQuery(String query) {
+        mSearchView.setSearchQuery(query);
+    }
+
+    /**
+     * Sets a custom view to display, and sets the current state to {@link State#SUBPAGE_CUSTOM}.
+     *
+     * @param resId A layout id of the view to display.
+     * @return The inflated custom view.
+     */
+    public View setCustomView(int resId) {
+        mCustomViewContainer.removeAllViews();
+        LayoutInflater inflater = (LayoutInflater) getContext()
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        View v = inflater.inflate(resId, mCustomViewContainer, false);
+        mCustomViewContainer.addView(v);
+        setState(State.SUBPAGE_CUSTOM);
+        return v;
+    }
+
+    private Activity getActivity() {
+        Context context = getContext();
+        while (context instanceof ContextWrapper) {
+            if (context instanceof Activity) {
+                return (Activity) context;
+            }
+            context = ((ContextWrapper) context).getBaseContext();
+        }
+        return null;
+    }
+
+    /**
+     * Sets the state of the toolbar. This will show/hide the appropriate elements of the toolbar
+     * for the desired state.
+     */
+    public void setState(State state) {
+        mState = state;
+
+        View.OnClickListener backClickListener = (v) -> {
+            boolean absorbed = false;
+            List<OnBackListener> listenersCopy = new ArrayList<>(mOnBackListeners);
+            for (OnBackListener listener : listenersCopy) {
+                absorbed = absorbed || listener.onBack();
+            }
+
+            if (!absorbed) {
+                Activity activity = getActivity();
+                if (activity != null) {
+                    activity.onBackPressed();
+                }
+            }
+        };
+
+        mNavIcon.setVisibility(state != State.HOME ? VISIBLE : INVISIBLE);
+        mNavIcon.setImageResource(mNavButtonMode == NavButtonMode.BACK
+                ? R.drawable.car_ui_icon_arrow_back
+                : R.drawable.car_ui_icon_close);
+        mLogo.setVisibility(state == State.HOME && mHasLogo ? VISIBLE : INVISIBLE);
+        mNavIconContainer.setVisibility(state != State.HOME || mHasLogo ? VISIBLE : GONE);
+        mNavIconContainer.setOnClickListener(state != State.HOME ? backClickListener : null);
+        mNavIconContainer.setClickable(state != State.HOME);
+        boolean hasTabs = mTabLayout.getTabCount() > 0;
+        boolean showTitle = state == State.SUBPAGE
+                || (state == State.HOME && (!mTitleAndTabsAreMutuallyExclusive || !hasTabs));
+        mTitle.setVisibility(showTitle ? VISIBLE : GONE);
+        mTabLayout.setVisibility(state == State.HOME && hasTabs ? VISIBLE : GONE);
+        mSearchView.setVisibility(state == State.SEARCH ? VISIBLE : GONE);
+        boolean showButtons = state != State.SEARCH || mShowMenuItemsWhileSearching;
+        mMenuItemsContainer.setVisibility(showButtons ? VISIBLE : GONE);
+        mOverflowButton.setVisibility(showButtons && countVisibleOverflowItems() > 0
+                ? VISIBLE : GONE);
+        if (mSearchMenuItem != null) {
+            View searchView = mSearchMenuItem.getView();
+            if (searchView != null) {
+                searchView.setVisibility(mState != State.SEARCH && mSearchMenuItem.isVisible()
+                        ? VISIBLE : GONE);
+            }
+        }
+        mCustomViewContainer.setVisibility(state == State.SUBPAGE_CUSTOM ? VISIBLE : GONE);
+        if (state != State.SUBPAGE_CUSTOM) {
+            mCustomViewContainer.removeAllViews();
+        }
+    }
+
+    /** Gets the current {@link State} of the toolbar. */
+    public State getState() {
+        return mState;
+    }
+
+    /**
+     * Registers a new {@link OnHeightChangedListener} to the list of listeners. Register a
+     * {@link com.android.car.ui.pagedrecyclerview.PagedRecyclerView} only if there is a toolbar at
+     * the top and a {@link com.android.car.ui.pagedrecyclerview.PagedRecyclerView} in the view and
+     * nothing else. {@link com.android.car.ui.pagedrecyclerview.PagedRecyclerView} will
+     * automatically adjust its height according to the height of the Toolbar.
+     */
+    public void registerToolbarHeightChangeListener(
+            OnHeightChangedListener listener) {
+        mOnHeightChangedListeners.add(listener);
+    }
+
+    /** Unregisters a {@link OnHeightChangedListener} from the list of listeners. */
+    public boolean unregisterToolbarHeightChangeListener(
+            OnHeightChangedListener listener) {
+        return mOnHeightChangedListeners.remove(listener);
+    }
+
+    /** Registers a new {@link OnTabSelectedListener} to the list of listeners. */
+    public void registerOnTabSelectedListener(OnTabSelectedListener listener) {
+        mOnTabSelectedListeners.add(listener);
+    }
+
+    /** Unregisters a new {@link OnTabSelectedListener} from the list of listeners. */
+    public boolean unregisterOnTabSelectedListener(OnTabSelectedListener listener) {
+        return mOnTabSelectedListeners.remove(listener);
+    }
+
+    /** Registers a new {@link OnSearchListener} to the list of listeners. */
+    public void registerOnSearchListener(OnSearchListener listener) {
+        mSearchView.registerOnSearchListener(listener);
+    }
+
+    /** Unregisters a new {@link OnSearchListener} from the list of listeners. */
+    public boolean unregisterOnSearchListener(OnSearchListener listener) {
+        return mSearchView.unregisterOnSearchListener(listener);
+    }
+
+    /** Registers a new {@link OnBackListener} to the list of listeners. */
+    public void registerOnBackListener(OnBackListener listener) {
+        mOnBackListeners.add(listener);
+    }
+
+    /** Unregisters a new {@link OnTabSelectedListener} from the list of listeners. */
+    public boolean unregisterOnBackListener(OnBackListener listener) {
+        return mOnBackListeners.remove(listener);
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/utils/CarUxRestrictionsUtil.java b/car-ui-lib/src/com/android/car/ui/utils/CarUxRestrictionsUtil.java
new file mode 100644
index 0000000..355050a
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/utils/CarUxRestrictionsUtil.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_LIMIT_STRING_LENGTH;
+
+import android.car.Car;
+import android.car.CarNotConnectedException;
+import android.car.drivingstate.CarUxRestrictions;
+import android.car.drivingstate.CarUxRestrictions.CarUxRestrictionsInfo;
+import android.car.drivingstate.CarUxRestrictionsManager;
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.car.ui.R;
+
+import java.util.Collections;
+import java.util.Set;
+import java.util.WeakHashMap;
+
+/**
+ * Utility class to access Car Restriction Manager.
+ *
+ * <p>This class must be a singleton because only one listener can be registered with {@link
+ * CarUxRestrictionsManager} at a time, as documented in {@link
+ * CarUxRestrictionsManager#registerListener}.
+ */
+public class CarUxRestrictionsUtil {
+    private static final String TAG = "CarUxRestrictionsUtil";
+
+    private final Car mCarApi;
+    private CarUxRestrictionsManager mCarUxRestrictionsManager;
+    @NonNull
+    private CarUxRestrictions mCarUxRestrictions = getDefaultRestrictions();
+
+    private Set<OnUxRestrictionsChangedListener> mObservers;
+    private static CarUxRestrictionsUtil sInstance = null;
+
+    private CarUxRestrictionsUtil(Context context) {
+        CarUxRestrictionsManager.OnUxRestrictionsChangedListener listener =
+                (carUxRestrictions) -> {
+                    if (carUxRestrictions == null) {
+                        mCarUxRestrictions = getDefaultRestrictions();
+                    } else {
+                        mCarUxRestrictions = carUxRestrictions;
+                    }
+
+                    for (OnUxRestrictionsChangedListener observer : mObservers) {
+                        observer.onRestrictionsChanged(mCarUxRestrictions);
+                    }
+                };
+
+        mCarApi = Car.createCar(context);
+        mObservers = Collections.newSetFromMap(new WeakHashMap<>());
+
+        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
+        }
+    }
+
+    @NonNull
+    private static CarUxRestrictions getDefaultRestrictions() {
+        return new CarUxRestrictions.Builder(
+                true, CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED, 0)
+                .build();
+    }
+
+    /** Listener interface used to update clients on UxRestrictions changes */
+    public interface OnUxRestrictionsChangedListener {
+        /** Called when CarUxRestrictions changes */
+        void onRestrictionsChanged(@NonNull CarUxRestrictions carUxRestrictions);
+    }
+
+    /** Returns the singleton sInstance of this class */
+    @NonNull
+    public static CarUxRestrictionsUtil getInstance(Context context) {
+        if (sInstance == null) {
+            sInstance = new CarUxRestrictionsUtil(context);
+        }
+
+        return sInstance;
+    }
+
+    /**
+     * Registers a listener on this class for updates to CarUxRestrictions. Multiple listeners may
+     * be
+     * registered.
+     */
+    public void register(OnUxRestrictionsChangedListener listener) {
+        mObservers.add(listener);
+        listener.onRestrictionsChanged(mCarUxRestrictions);
+    }
+
+    /** Unregisters a registered listener */
+    public void unregister(OnUxRestrictionsChangedListener listener) {
+        mObservers.remove(listener);
+    }
+
+    /**
+     * Returns whether any of the given flags are blocked by the specified restrictions. If null is
+     * given, the method returns true for safety.
+     */
+    public static boolean isRestricted(
+            @CarUxRestrictionsInfo int restrictionFlags, @Nullable CarUxRestrictions uxr) {
+        return (uxr == null) || ((uxr.getActiveRestrictions() & restrictionFlags) != 0);
+    }
+
+    /**
+     * Complies the input string with the given UX restrictions. Returns the original string if
+     * already compliant, otherwise a shortened ellipsized string.
+     */
+    public static String complyString(Context context, String str, CarUxRestrictions uxr) {
+
+        if (isRestricted(UX_RESTRICTIONS_LIMIT_STRING_LENGTH, uxr)) {
+            int maxLength =
+                    uxr == null
+                            ? context.getResources().getInteger(
+                            R.integer.car_ui_default_max_string_length)
+                            : uxr.getMaxRestrictedStringLength();
+
+            if (str.length() > maxLength) {
+                return str.substring(0, maxLength) + context.getString(R.string.car_ui_ellipsis);
+            }
+        }
+
+        return str;
+    }
+}
diff --git a/car-ui-lib/src/com/android/car/ui/utils/ResourceUtils.java b/car-ui-lib/src/com/android/car/ui/utils/ResourceUtils.java
new file mode 100644
index 0000000..9835d69
--- /dev/null
+++ b/car-ui-lib/src/com/android/car/ui/utils/ResourceUtils.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.content.res.Resources;
+import android.util.TypedValue;
+
+import androidx.annotation.DimenRes;
+
+/**
+ * Collection of resource utility methods
+ */
+public final class ResourceUtils {
+    /** This is a utility class */
+    private ResourceUtils() {}
+
+    /**
+     * Reads a float value from a dimens resource. This is necessary as {@link Resources#getFloat}
+     * is not currently public.
+     *
+     * @param res {@link Resources} to read values from
+     * @param resId Id of the dimens resource to read
+     */
+    public static float getFloat(Resources res, @DimenRes int resId) {
+        TypedValue outValue = new TypedValue();
+        res.getValue(resId, outValue, true);
+        return outValue.getFloat();
+    }
+}
diff --git a/car-ui-lib/tests/Android.mk b/car-ui-lib/tests/Android.mk
new file mode 100644
index 0000000..9f0a4e8
--- /dev/null
+++ b/car-ui-lib/tests/Android.mk
@@ -0,0 +1,19 @@
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+# Include all makefiles in subdirectories
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/car-chassis-lib/Android.mk b/car-ui-lib/tests/paintbooth/Android.mk
similarity index 62%
copy from car-chassis-lib/Android.mk
copy to car-ui-lib/tests/paintbooth/Android.mk
index 5ae4041..b33546d 100644
--- a/car-chassis-lib/Android.mk
+++ b/car-ui-lib/tests/paintbooth/Android.mk
@@ -14,6 +14,8 @@
 # limitations under the License.
 #
 
+ifneq ($(TARGET_BUILD_PDK), true)
+
 LOCAL_PATH:= $(call my-dir)
 
 include $(CLEAR_VARS)
@@ -22,30 +24,23 @@
 
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 
-LOCAL_MODULE := car-chassis-lib
+LOCAL_PACKAGE_NAME := PaintBooth
+
+LOCAL_PRIVATE_PLATFORM_APIS := true
+
+LOCAL_CERTIFICATE := platform
 
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_PROGUARD_ENABLED := disabled
+LOCAL_STATIC_ANDROID_LIBRARIES := \
+        car-ui-lib
 
 LOCAL_USE_AAPT2 := true
 
-LOCAL_JAVA_LIBRARIES += android.car
+LOCAL_PROGUARD_ENABLED := disabled
 
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+LOCAL_DEX_PREOPT := false
 
-LOCAL_STATIC_ANDROID_LIBRARIES += \
-    androidx.annotation_annotation \
-    androidx-constraintlayout_constraintlayout \
-    androidx.recyclerview_recyclerview
+include $(BUILD_PACKAGE)
 
-LOCAL_STATIC_JAVA_LIBRARIES += \
-    androidx-constraintlayout_constraintlayout-solver
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-ifeq (,$(ONE_SHOT_MAKEFILE))
-    include $(call all-makefiles-under,$(LOCAL_PATH))
 endif
diff --git a/car-ui-lib/tests/paintbooth/AndroidManifest-gradle.xml b/car-ui-lib/tests/paintbooth/AndroidManifest-gradle.xml
new file mode 100644
index 0000000..23d42ca
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/AndroidManifest-gradle.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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.paintbooth">
+
+  <application
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:theme="@style/Theme.CarUi">
+    <activity
+        android:name=".MainActivity"
+        android:exported="true">
+      <intent-filter>
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.LAUNCHER"/>
+      </intent-filter>
+    </activity>
+
+    <activity
+        android:name=".dialogs.DialogsActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".pagedrecyclerview.PagedRecyclerViewActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".pagedrecyclerview.GridPagedRecyclerViewActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".preferences.PreferenceActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".toolbar.ToolbarActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity">
+      <meta-data android:name="distractionOptimized" android:value="true"/>
+    </activity>
+  </application>
+</manifest>
diff --git a/car-ui-lib/tests/paintbooth/AndroidManifest.xml b/car-ui-lib/tests/paintbooth/AndroidManifest.xml
new file mode 100644
index 0000000..7d5e392
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/AndroidManifest.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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.paintbooth">
+
+  <uses-sdk
+      android:minSdkVersion="28"
+      android:targetSdkVersion="28"/>
+
+  <application
+      android:icon="@drawable/ic_launcher"
+      android:label="@string/app_name"
+      android:theme="@style/Theme.CarUi">
+    <activity
+        android:name=".MainActivity"
+        android:exported="true">
+      <intent-filter>
+        <action android:name="android.intent.action.MAIN"/>
+        <category android:name="android.intent.category.LAUNCHER"/>
+      </intent-filter>
+    </activity>
+
+    <activity
+        android:name=".dialogs.DialogsActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".pagedrecyclerview.PagedRecyclerViewActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".pagedrecyclerview.GridPagedRecyclerViewActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".preferences.PreferenceActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity"/>
+    <activity
+        android:name=".toolbar.ToolbarActivity"
+        android:exported="false"
+        android:parentActivityName=".MainActivity">
+      <meta-data android:name="distractionOptimized" android:value="true"/>
+    </activity>
+  </application>
+</manifest>
diff --git a/car-ui-lib/tests/paintbooth/build.gradle b/car-ui-lib/tests/paintbooth/build.gradle
new file mode 100644
index 0000000..099d180
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/build.gradle
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 28
+    defaultConfig {
+        applicationId "com.android.car.ui.paintbooth"
+        minSdkVersion 28
+        targetSdkVersion 28
+        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 {
+    implementation project(':')
+    api 'androidx.annotation:annotation:1.1.0'
+    api 'androidx.constraintlayout:constraintlayout:1.1.3'
+    api 'androidx.recyclerview:recyclerview:1.0.0'
+}
diff --git a/car-ui-lib/tests/paintbooth/gradlew b/car-ui-lib/tests/paintbooth/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/car-ui-lib/tests/paintbooth/gradlew.bat b/car-ui-lib/tests/paintbooth/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off

+@rem ##########################################################################

+@rem

+@rem  Gradle startup script for Windows

+@rem

+@rem ##########################################################################

+

+@rem Set local scope for the variables with windows NT shell

+if "%OS%"=="Windows_NT" setlocal

+

+set DIRNAME=%~dp0

+if "%DIRNAME%" == "" set DIRNAME=.

+set APP_BASE_NAME=%~n0

+set APP_HOME=%DIRNAME%

+

+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.

+set DEFAULT_JVM_OPTS=

+

+@rem Find java.exe

+if defined JAVA_HOME goto findJavaFromJavaHome

+

+set JAVA_EXE=java.exe

+%JAVA_EXE% -version >NUL 2>&1

+if "%ERRORLEVEL%" == "0" goto init

+

+echo.

+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:findJavaFromJavaHome

+set JAVA_HOME=%JAVA_HOME:"=%

+set JAVA_EXE=%JAVA_HOME%/bin/java.exe

+

+if exist "%JAVA_EXE%" goto init

+

+echo.

+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:init

+@rem Get command-line arguments, handling Windows variants

+

+if not "%OS%" == "Windows_NT" goto win9xME_args

+

+:win9xME_args

+@rem Slurp the command line arguments.

+set CMD_LINE_ARGS=

+set _SKIP=2

+

+:win9xME_args_slurp

+if "x%~1" == "x" goto execute

+

+set CMD_LINE_ARGS=%*

+

+:execute

+@rem Setup the command line

+

+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

+

+@rem Execute Gradle

+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

+

+:end

+@rem End local scope for the variables with windows NT shell

+if "%ERRORLEVEL%"=="0" goto mainEnd

+

+:fail

+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of

+rem the _cmd.exe /c_ return code!

+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1

+exit /b 1

+

+:mainEnd

+if "%OS%"=="Windows_NT" endlocal

+

+:omega

diff --git a/car-ui-lib/tests/paintbooth/res/drawable/ic_launcher.png b/car-ui-lib/tests/paintbooth/res/drawable/ic_launcher.png
new file mode 100644
index 0000000..2af53a4
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/drawable/ic_launcher.png
Binary files differ
diff --git a/car-ui-lib/tests/paintbooth/res/layout/dialogs_activity.xml b/car-ui-lib/tests/paintbooth/res/layout/dialogs_activity.xml
new file mode 100644
index 0000000..db9e384
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/layout/dialogs_activity.xml
@@ -0,0 +1,103 @@
+<?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:id="@+id/dialog_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/dialog_activity_background_color">
+
+  <com.android.car.ui.toolbar.Toolbar
+      android:id="@+id/toolbar"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      app:layout_constraintTop_toTopOf="parent"
+      app:title="@string/app_name"
+      app:state="subpage"/>
+
+  <Button
+      android:id="@+id/show_dialog_bt"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="Show Dialog"
+      app:layout_constraintBottom_toTopOf="@+id/show_dialog_only_positive_bt"
+      app:layout_constraintLeft_toLeftOf="parent"
+      app:layout_constraintRight_toRightOf="parent"
+      app:layout_constraintTop_toBottomOf="@+id/toolbar"/>
+
+  <Button
+      android:id="@+id/show_dialog_with_textbox"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="Show Dialog with edit text box"
+      app:layout_constraintBottom_toTopOf="@+id/show_dialog_only_positive_bt"
+      app:layout_constraintEnd_toEndOf="parent"
+      app:layout_constraintStart_toStartOf="parent"
+      app:layout_constraintTop_toBottomOf="@+id/show_dialog_bt"/>
+
+  <Button
+      android:id="@+id/show_dialog_only_positive_bt"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="Show Dialog with only positive button"
+      app:layout_constraintBottom_toTopOf="@+id/show_dialog_with_checkbox_bt"
+      app:layout_constraintEnd_toEndOf="parent"
+      app:layout_constraintStart_toStartOf="parent"
+      app:layout_constraintTop_toBottomOf="@+id/show_dialog_with_textbox"/>
+
+  <Button
+      android:id="@+id/show_dialog_with_no_button_set"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="Show Dialog With no button provided"
+      app:layout_constraintBottom_toTopOf="@+id/show_dialog_with_checkbox_bt"
+      app:layout_constraintEnd_toEndOf="parent"
+      app:layout_constraintStart_toStartOf="parent"
+      app:layout_constraintTop_toBottomOf="@+id/show_dialog_only_positive_bt"/>
+
+  <Button
+      android:id="@+id/show_dialog_with_checkbox_bt"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="Show Dialog With Checkbox"
+      app:layout_constraintBottom_toTopOf="@+id/show_dialog_without_title"
+      app:layout_constraintEnd_toEndOf="parent"
+      app:layout_constraintStart_toStartOf="parent"
+      app:layout_constraintTop_toBottomOf="@+id/show_dialog_with_no_button_set"/>
+
+  <Button
+      android:id="@+id/show_dialog_without_title"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="Show Dialog without title"
+      app:layout_constraintBottom_toTopOf="@+id/show_toast"
+      app:layout_constraintEnd_toEndOf="parent"
+      app:layout_constraintStart_toStartOf="parent"
+      app:layout_constraintTop_toBottomOf="@+id/show_dialog_with_checkbox_bt"/>
+
+  <Button
+      android:id="@+id/show_toast"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="Show Toast"
+      app:layout_constraintBottom_toBottomOf="parent"
+      app:layout_constraintEnd_toEndOf="parent"
+      app:layout_constraintStart_toStartOf="parent"
+      app:layout_constraintTop_toBottomOf="@+id/show_dialog_without_title"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/tests/paintbooth/res/layout/grid_paged_recycler_view_activity.xml b/car-ui-lib/tests/paintbooth/res/layout/grid_paged_recycler_view_activity.xml
new file mode 100644
index 0000000..7c75f39
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/layout/grid_paged_recycler_view_activity.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:orientation="vertical">
+
+  <com.android.car.ui.toolbar.Toolbar
+      android:id="@+id/toolbar"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      app:title="@string/app_name"
+      app:state="subpage"/>
+
+  <com.android.car.ui.pagedrecyclerview.PagedRecyclerView
+      android:id="@+id/grid_list"
+      app:layoutStyle="grid"
+      app:numOfColumns="4"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent" />
+</LinearLayout>
diff --git a/car-ui-lib/tests/paintbooth/res/layout/list_item.xml b/car-ui-lib/tests/paintbooth/res/layout/list_item.xml
new file mode 100644
index 0000000..f60908c
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/layout/list_item.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+    <Button
+        android:id="@+id/button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="20dp"
+        android:text="Button"/>
+</RelativeLayout>
diff --git a/car-ui-lib/tests/paintbooth/res/layout/main_activity.xml b/car-ui-lib/tests/paintbooth/res/layout/main_activity.xml
new file mode 100644
index 0000000..829dec2
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/layout/main_activity.xml
@@ -0,0 +1,42 @@
+<?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:id="@+id/home"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/dialog_activity_background_color">
+
+  <com.android.car.ui.toolbar.Toolbar
+      android:id="@+id/toolbar"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      app:layout_constraintTop_toTopOf="parent"
+      app:title="@string/app_name"
+      app:logo="@drawable/ic_launcher"/>
+
+  <com.android.car.ui.pagedrecyclerview.PagedRecyclerView
+      android:id="@+id/activities"
+      android:layout_width="0dp"
+      android:layout_height="0dp"
+      app:layout_constraintLeft_toLeftOf="parent"
+      app:layout_constraintRight_toRightOf="parent"
+      app:layout_constraintTop_toBottomOf="@id/toolbar"
+      app:layout_constraintBottom_toBottomOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/tests/paintbooth/res/layout/paged_recycler_view_activity.xml b/car-ui-lib/tests/paintbooth/res/layout/paged_recycler_view_activity.xml
new file mode 100644
index 0000000..526cd0a
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/layout/paged_recycler_view_activity.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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"
+    android:orientation="vertical">
+
+    <com.android.car.ui.toolbar.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:title="@string/app_name"
+        app:logo="@drawable/ic_launcher"
+        app:state="subpage"/>
+
+    <com.android.car.ui.pagedrecyclerview.PagedRecyclerView
+        android:id="@+id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/car-ui-lib/tests/paintbooth/res/layout/paged_recycler_view_list_item.xml b/car-ui-lib/tests/paintbooth/res/layout/paged_recycler_view_list_item.xml
new file mode 100644
index 0000000..be6952c
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/layout/paged_recycler_view_list_item.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 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
+  -->
+
+<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>
\ No newline at end of file
diff --git a/car-ui-lib/tests/paintbooth/res/layout/toolbar_custom_view.xml b/car-ui-lib/tests/paintbooth/res/layout/toolbar_custom_view.xml
new file mode 100644
index 0000000..67b584a
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/layout/toolbar_custom_view.xml
@@ -0,0 +1,53 @@
+<?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:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/text_box_1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Text Box 1"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/image_view"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"/>
+
+    <ImageView
+        android:id="@+id/image_view"
+        android:src="@drawable/ic_launcher"
+        android:layout_width="20dp"
+        android:layout_height="20dp"
+        app:layout_constraintStart_toEndOf="@id/text_box_1"
+        app:layout_constraintEnd_toStartOf="@id/text_box_2"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"/>
+
+    <TextView
+        android:id="@+id/text_box_2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Text Box 2"
+        app:layout_constraintStart_toEndOf="@id/image_view"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"/>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/tests/paintbooth/res/values/arrays.xml b/car-ui-lib/tests/paintbooth/res/values/arrays.xml
new file mode 100644
index 0000000..1a22073
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/values/arrays.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/tests/paintbooth/res/values/colors.xml
similarity index 69%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/tests/paintbooth/res/values/colors.xml
index 7d29d64..6e93be6 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/tests/paintbooth/res/values/colors.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,7 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+<resources>
+  <color name="dialog_activity_background_color">#ffff0c</color>
+</resources>
diff --git a/car-ui-lib/tests/paintbooth/res/values/strings.xml b/car-ui-lib/tests/paintbooth/res/values/strings.xml
new file mode 100644
index 0000000..91dbac2
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/values/strings.xml
@@ -0,0 +1,126 @@
+<?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>
+  <!-- Application name [CHAR LIMIT=30] -->
+  <string name="app_name" translatable="false">Paint Booth (Gerrit)</string>
+
+  <!-- Strings for Preference Samples -->
+  <eat-comment/>
+  <!--This section is for basic attributes -->
+  <eat-comment/>
+  <!-- Category title for basic preferences [CHAR_LIMIT=NONE]-->
+  <string name="basic_preferences">Basic attributes</string>
+  <!-- Title of a basic preference [CHAR_LIMIT=NONE]-->
+  <string name="title_basic_preference">Preference</string>
+  <!-- Summary of a basic preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_basic_preference">Simple preference with no special attributes</string>
+
+  <!-- Title of a preference with stylized text [CHAR_LIMIT=NONE]-->
+  <string name="title_stylish_preference"><b>Very</b> <i>stylish</i> <u>preference</u></string>
+  <!-- Summary of a preference with stylized text [CHAR_LIMIT=NONE]-->
+  <string name="summary_stylish_preference">Define style tags such as &lt;b&gt; in a string resource to customize a preference\'s text</string>
+
+  <!-- Title of an icon preference [CHAR_LIMIT=NONE]-->
+  <string name="title_icon_preference">Icon preference</string>
+  <!-- Summary of an icon preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_icon_preference">Define a drawable to display it at the start of the preference</string>
+
+  <!-- Title of a single line title preference [CHAR_LIMIT=NONE]-->
+  <string name="title_single_line_title_preference">Single line title preference - no matter how long the title is it will never wrap to multiple lines</string>
+  <!-- Summary of a single line title preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_single_line_title_preference">This title will be ellipsized instead of wrapping to another line</string>
+
+  <!--This section is for preferences that contain a widget in their layout -->
+  <eat-comment/>
+  <!-- Category title for preferences with widgets [CHAR_LIMIT=NONE]-->
+  <string name="widgets">Widgets</string>
+
+  <!-- Title of a checkbox preference [CHAR_LIMIT=NONE]-->
+  <string name="title_checkbox_preference">Checkbox preference</string>
+  <!-- Summary of a checkbox preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_checkbox_preference">Tap anywhere in this preference to toggle state</string>
+
+  <!-- Title of a switch preference [CHAR_LIMIT=NONE]-->
+  <string name="title_switch_preference">Switch preference</string>
+  <!-- Summary of a switch preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_switch_preference">Tap anywhere in this preference to toggle state</string>
+
+  <!-- Title of a dropdown preference [CHAR_LIMIT=NONE]-->
+  <string name="title_dropdown_preference">Dropdown preference</string>
+
+  <!-- Title of a seekbar preference [CHAR_LIMIT=NONE]-->
+  <string name="title_seekbar_preference">Seekbar preference</string>
+
+  <!--This section is for preferences that launch a dialog to edit the preference -->
+  <eat-comment/>
+  <!-- Category title for preferences which launch dialogs [CHAR_LIMIT=NONE]-->
+  <string name="dialogs">Dialogs</string>
+
+  <!-- Title of an edittext preference [CHAR_LIMIT=NONE]-->
+  <string name="title_edittext_preference">EditText preference</string>
+  <!-- Title of the dialog for an edittext preference [CHAR_LIMIT=NONE]-->
+  <string name="dialog_title_edittext_preference">This title can be changed!</string>
+
+  <!-- Title of a list preference [CHAR_LIMIT=NONE]-->
+  <string name="title_list_preference">List preference</string>
+  <!-- Title of the dialog for a list preference [CHAR_LIMIT=NONE]-->
+  <string name="dialog_title_list_preference">Choose one option!</string>
+
+  <!-- Title of a multi-select list preference [CHAR_LIMIT=NONE]-->
+  <string name="title_multi_list_preference">Multi-select list preference</string>
+  <!-- Summary of a multi-select list preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_multi_list_preference">Shows a dialog with multiple choice options</string>
+  <!-- Title of the dialog for a multi-select list preference [CHAR_LIMIT=NONE]-->
+  <string name="dialog_title_multi_list_preference">Choose some options!</string>
+
+  <!--This section is for advanced attributes-->
+  <eat-comment/>
+  <!-- Category title for preferences with advanced attributes [CHAR_LIMIT=NONE]-->
+  <string name="advanced_attributes">Advanced attributes</string>
+
+  <!-- Title of an expandable preference [CHAR_LIMIT=NONE]-->
+  <string name="title_expandable_preference">Expandable preference group</string>
+  <!-- Summary of an expandable preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_expandable_preference">This group shows one item and collapses the rest into the advanced button below</string>
+
+  <!-- Title of a preference which launches an intent [CHAR_LIMIT=NONE]-->
+  <string name="title_intent_preference">Intent preference</string>
+  <!-- Summary of a preference which launches an intent [CHAR_LIMIT=NONE]-->
+  <string name="summary_intent_preference">Launches an intent when pressed</string>
+
+  <!-- Title of a parent preference [CHAR_LIMIT=NONE]-->
+  <string name="title_parent_preference">Parent preference</string>
+  <!-- Summary of a parent preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_parent_preference">Toggling this preference will change the enabled state of the preference below</string>
+
+  <!-- Title of a child preference [CHAR_LIMIT=NONE]-->
+  <string name="title_child_preference">Child preference</string>
+  <!-- Summary of a child preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_child_preference">The enabled state of this preference is controlled by the preference above</string>
+
+  <!-- Title of a switch preference with variable summaries [CHAR_LIMIT=NONE]-->
+  <string name="title_toggle_summary_preference">Variable summary preference</string>
+  <!-- Summary of a variable summary preference when the preference is on [CHAR_LIMIT=NONE]-->
+  <string name="summary_on_toggle_summary_preference">On! :) - the summary of this preference changes depending on its state</string>
+  <!-- Summary of a variable summary preference when the preference is off [CHAR_LIMIT=NONE]-->
+  <string name="summary_off_toggle_summary_preference">Off! :( - the summary of this preference changes depending on its state</string>
+
+  <!-- Title of a copyable preference [CHAR_LIMIT=NONE]-->
+  <string name="title_copyable_preference">Copyable preference</string>
+  <!-- Summary of a copyable preference [CHAR_LIMIT=NONE]-->
+  <string name="summary_copyable_preference">Long press on this preference to copy its summary</string>
+</resources>
diff --git a/car-ui-lib/tests/paintbooth/res/xml/preference_samples.xml b/car-ui-lib/tests/paintbooth/res/xml/preference_samples.xml
new file mode 100644
index 0000000..88fb060
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/res/xml/preference_samples.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+  <PreferenceCategory
+      android:title="@string/basic_preferences">
+
+    <Preference
+        android:key="preference"
+        android:title="@string/title_basic_preference"
+        android:summary="@string/summary_basic_preference"/>
+
+    <Preference
+        android:key="stylized"
+        android:title="@string/title_stylish_preference"
+        android:summary="@string/summary_stylish_preference"/>
+
+    <Preference
+        android:key="icon"
+        android:title="@string/title_icon_preference"
+        android:summary="@string/summary_icon_preference"
+        android:icon="@android:drawable/ic_menu_camera"/>
+
+    <Preference
+        android:key="single_line_title"
+        android:title="@string/title_single_line_title_preference"
+        android:summary="@string/summary_single_line_title_preference"
+        app:singleLineTitle="true"/>
+  </PreferenceCategory>
+
+  <PreferenceCategory
+      android:title="@string/widgets">
+
+    <CheckBoxPreference
+        android:key="checkbox"
+        android:title="@string/title_checkbox_preference"
+        android:summary="@string/summary_checkbox_preference"/>
+
+    <SwitchPreference
+        android:key="switch"
+        android:title="@string/title_switch_preference"
+        android:summary="@string/summary_switch_preference"/>
+
+    <DropDownPreference
+        android:key="dropdown"
+        android:title="@string/title_dropdown_preference"
+        android:entries="@array/entries"
+        app:useSimpleSummaryProvider="true"
+        android:entryValues="@array/entry_values"/>
+
+    <SeekBarPreference
+        android:key="seekbar"
+        android:title="@string/title_seekbar_preference"
+        android:max="10"
+        android:defaultValue="5"/>
+  </PreferenceCategory>
+
+  <PreferenceCategory
+      android:title="@string/dialogs">
+
+    <EditTextPreference
+        android:key="edittext"
+        android:title="@string/title_edittext_preference"
+        app:useSimpleSummaryProvider="true"
+        android:dialogTitle="@string/dialog_title_edittext_preference"/>
+
+    <ListPreference
+        android:key="list"
+        android:title="@string/title_list_preference"
+        app:useSimpleSummaryProvider="true"
+        android:entries="@array/entries"
+        android:entryValues="@array/entry_values"
+        android:dialogTitle="@string/dialog_title_list_preference"/>
+
+    <MultiSelectListPreference
+        android:key="multi_select_list"
+        android:title="@string/title_multi_list_preference"
+        android:summary="@string/summary_multi_list_preference"
+        android:entries="@array/entries"
+        android:entryValues="@array/entry_values"
+        android:dialogTitle="@string/dialog_title_multi_list_preference"/>
+  </PreferenceCategory>
+
+  <PreferenceCategory
+      android:key="advanced"
+      android:title="@string/advanced_attributes"
+      app:initialExpandedChildrenCount="1">
+
+    <Preference
+        android:key="expandable"
+        android:title="@string/title_expandable_preference"
+        android:summary="@string/summary_expandable_preference"/>
+
+    <Preference
+        android:title="@string/title_intent_preference"
+        android:summary="@string/summary_intent_preference">
+
+      <intent android:action="android.intent.action.VIEW"
+          android:data="http://www.android.com"/>
+
+    </Preference>
+
+    <SwitchPreference
+        android:key="parent"
+        android:title="@string/title_parent_preference"
+        android:summary="@string/summary_parent_preference"/>
+
+    <SwitchPreference
+        android:key="child"
+        android:dependency="parent"
+        android:title="@string/title_child_preference"
+        android:summary="@string/summary_child_preference"/>
+
+    <SwitchPreference
+        android:key="toggle_summary"
+        android:title="@string/title_toggle_summary_preference"
+        android:summaryOn="@string/summary_on_toggle_summary_preference"
+        android:summaryOff="@string/summary_off_toggle_summary_preference"/>
+
+    <Preference
+        android:key="copyable"
+        android:title="@string/title_copyable_preference"
+        android:summary="@string/summary_copyable_preference"
+        android:selectable="false"
+        app:enableCopying="true"/>
+  </PreferenceCategory>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/MainActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/MainActivity.java
new file mode 100644
index 0000000..ba7d1ec
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/MainActivity.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.paintbooth;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Pair;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.pagedrecyclerview.PagedRecyclerView;
+import com.android.car.ui.paintbooth.dialogs.DialogsActivity;
+import com.android.car.ui.paintbooth.pagedrecyclerview.GridPagedRecyclerViewActivity;
+import com.android.car.ui.paintbooth.pagedrecyclerview.PagedRecyclerViewActivity;
+import com.android.car.ui.paintbooth.preferences.PreferenceActivity;
+import com.android.car.ui.paintbooth.toolbar.ToolbarActivity;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Paint booth app
+ */
+public class MainActivity extends Activity {
+    /**
+     * List of all sample activities.
+     */
+    private List<Pair<String, Class<? extends Activity>>> mActivities = Arrays.asList(
+            Pair.create("Dialogs sample", DialogsActivity.class),
+            Pair.create("List sample", PagedRecyclerViewActivity.class),
+            Pair.create("Grid sample", GridPagedRecyclerViewActivity.class),
+            Pair.create("Preferences sample", PreferenceActivity.class),
+            Pair.create("Toolbar sample", ToolbarActivity.class)
+    );
+
+    private class ViewHolder extends RecyclerView.ViewHolder {
+        private Button mButton;
+
+        ViewHolder(@NonNull View itemView) {
+            super(itemView);
+            mButton = itemView.findViewById(R.id.button);
+        }
+
+
+        void update(String title, Class<? extends Activity> activityClass) {
+            mButton.setText(title);
+            mButton.setOnClickListener(e -> {
+                Intent intent = new Intent(mButton.getContext(), activityClass);
+                startActivity(intent);
+            });
+        }
+    }
+
+    private RecyclerView.Adapter<ViewHolder> mAdapter = new RecyclerView.Adapter<ViewHolder>() {
+        @NonNull
+        @Override
+        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+            View item = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent,
+                    false);
+            return new ViewHolder(item);
+        }
+
+        @Override
+        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+            Pair<String, Class<? extends Activity>> item = mActivities.get(position);
+            holder.update(item.first, item.second);
+        }
+
+        @Override
+        public int getItemCount() {
+            return mActivities.size();
+        }
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_activity);
+
+        PagedRecyclerView prv = findViewById(R.id.activities);
+        prv.setAdapter(mAdapter);
+    }
+}
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
new file mode 100644
index 0000000..5b5c330
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/dialogs/DialogsActivity.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.paintbooth.dialogs;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.widget.Button;
+import android.widget.Toast;
+
+import com.android.car.ui.AlertDialogBuilder;
+import com.android.car.ui.paintbooth.R;
+
+/**
+ * Activity that shows different dialogs from the device default theme.
+ */
+public class DialogsActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.dialogs_activity);
+
+        Button showDialogButton = findViewById(R.id.show_dialog_bt);
+        showDialogButton.setOnClickListener(v -> openDialog(false));
+
+        Button showDialogOnlyPositiveButton = findViewById(R.id.show_dialog_only_positive_bt);
+        showDialogOnlyPositiveButton.setOnClickListener(v -> openDialogWithOnlyPositiveButton());
+
+        Button showDialogWithoutTitleButton = findViewById(R.id.show_dialog_without_title);
+        showDialogWithoutTitleButton.setOnClickListener(v -> openDialogWithoutTitle());
+
+        Button showDialogWithNoButtonProvided = findViewById(R.id.show_dialog_with_no_button_set);
+        showDialogWithNoButtonProvided.setOnClickListener(v -> openDialogWithNoButtonProvided());
+
+        Button showDialogWithCheckboxButton = findViewById(R.id.show_dialog_with_checkbox_bt);
+        showDialogWithCheckboxButton.setOnClickListener(v -> openDialog(true));
+
+        Button showDialogWithTextbox = findViewById(R.id.show_dialog_with_textbox);
+        showDialogWithTextbox.setOnClickListener(v -> openDialogWithTextbox());
+
+        Button showToast = findViewById(R.id.show_toast);
+        showToast.setOnClickListener(v -> showToast());
+    }
+
+    private void openDialog(boolean showCheckbox) {
+        AlertDialogBuilder builder = new AlertDialogBuilder(this);
+
+        if (showCheckbox) {
+            // Set Custom Title
+            builder.setTitle("Custom Dialog Box");
+            builder.setMultiChoiceItems(
+                    new CharSequence[]{"I am a checkbox"},
+                    new boolean[]{false},
+                    (dialog, which, isChecked) -> {
+                    });
+        } else {
+            builder.setTitle("Standard Alert Dialog").setMessage("With a message to show.");
+        }
+
+        builder
+                .setPositiveButton("OK", (dialoginterface, i) -> {
+                })
+                .setNegativeButton("CANCEL", (dialog, which) -> {
+                });
+        builder.show();
+    }
+
+    private void openDialogWithNoButtonProvided() {
+        AlertDialogBuilder builder = new AlertDialogBuilder(this);
+        builder.setTitle("Standard Alert Dialog").show();
+    }
+
+    private void openDialogWithTextbox() {
+        AlertDialogBuilder builder = new AlertDialogBuilder(this);
+        builder.setTitle("Standard Alert Dialog").setEditBox("Edit me please", null, null);
+        builder.setPositiveButton("OK", (dialoginterface, i) -> {
+        });
+        builder.show();
+    }
+
+    private void openDialogWithOnlyPositiveButton() {
+        AlertDialogBuilder builder = new AlertDialogBuilder(this);
+        builder.setTitle("Standard Alert Dialog").setMessage("With a message to show.");
+        builder.setPositiveButton("OK", (dialoginterface, i) -> {
+        });
+        builder.show();
+    }
+
+    private void openDialogWithoutTitle() {
+        AlertDialogBuilder builder = new AlertDialogBuilder(this);
+        builder.setMessage("I dont have a title.");
+        builder
+                .setPositiveButton("OK", (dialoginterface, i) -> {
+                })
+                .setNegativeButton("CANCEL", (dialog, which) -> {
+                });
+        builder.show();
+    }
+
+    private void showToast() {
+        Toast.makeText(this, "Toast message looks like this", Toast.LENGTH_LONG).show();
+    }
+}
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/GridPagedRecyclerViewActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/GridPagedRecyclerViewActivity.java
new file mode 100644
index 0000000..641eb09
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/GridPagedRecyclerViewActivity.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.paintbooth.pagedrecyclerview;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import com.android.car.ui.pagedrecyclerview.PagedRecyclerView;
+import com.android.car.ui.paintbooth.R;
+
+import java.util.ArrayList;
+
+/** Activity that shows GridPagedRecyclerView example with dummy data. */
+public class GridPagedRecyclerViewActivity extends Activity {
+    private final ArrayList<String> mData = new ArrayList<>();
+    private final int mDataToGenerate = 50;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.grid_paged_recycler_view_activity);
+        PagedRecyclerView recyclerView = findViewById(R.id.grid_list);
+
+        RecyclerViewAdapter adapter = new RecyclerViewAdapter(generateDummyData());
+        recyclerView.setAdapter(adapter);
+    }
+
+    private ArrayList<String> generateDummyData() {
+        for (int i = 1; i <= mDataToGenerate; i++) {
+            mData.add("data" + i);
+        }
+        return mData;
+    }
+}
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/PagedRecyclerViewActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/PagedRecyclerViewActivity.java
new file mode 100644
index 0000000..9183493
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/PagedRecyclerViewActivity.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.paintbooth.pagedrecyclerview;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.android.car.ui.pagedrecyclerview.PagedRecyclerView;
+import com.android.car.ui.paintbooth.R;
+
+import java.util.ArrayList;
+
+/**
+ * Activity that shows PagedRecyclerView example with dummy data.
+ */
+public class PagedRecyclerViewActivity extends Activity {
+    private final ArrayList<String> mData = new ArrayList<>();
+    private final int mDataToGenerate = 15;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.paged_recycler_view_activity);
+        PagedRecyclerView recyclerView = findViewById(R.id.list);
+        recyclerView.setLayoutManager(new LinearLayoutManager(this));
+
+        RecyclerViewAdapter adapter = new RecyclerViewAdapter(generateDummyData());
+        recyclerView.setAdapter(adapter);
+    }
+
+    private ArrayList<String> generateDummyData() {
+        for (int i = 0; i <= mDataToGenerate; i++) {
+            mData.add("data" + i);
+        }
+        return mData;
+    }
+}
+
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/RecyclerViewAdapter.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/RecyclerViewAdapter.java
new file mode 100644
index 0000000..69f9732
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/pagedrecyclerview/RecyclerViewAdapter.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.paintbooth.pagedrecyclerview;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.paintbooth.R;
+
+import java.util.ArrayList;
+
+/**
+ * Implementation of {@link RecyclerViewAdapter} that can be used with RecyclerViews.
+ */
+public class RecyclerViewAdapter extends
+        RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> {
+
+    private ArrayList<String> mData;
+
+    RecyclerViewAdapter(ArrayList<String> data) {
+        this.mData = data;
+    }
+
+    @NonNull
+    @Override
+    public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        LayoutInflater inflator = LayoutInflater.from(parent.getContext());
+        View view = inflator.inflate(R.layout.paged_recycler_view_list_item, parent, false);
+        return new RecyclerViewHolder(view);
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
+        String title = mData.get(position);
+        holder.mTextTitle.setText(title);
+    }
+
+    @Override
+    public int getItemCount() {
+        return mData.size();
+    }
+
+
+    /**
+     * Holds views for each element in the list.
+     */
+    public static class RecyclerViewHolder extends RecyclerView.ViewHolder {
+        TextView mTextTitle;
+
+        RecyclerViewHolder(@NonNull View itemView) {
+            super(itemView);
+            mTextTitle = itemView.findViewById(R.id.textTitle);
+        }
+    }
+}
+
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceActivity.java
new file mode 100644
index 0000000..628bbe1
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/preferences/PreferenceActivity.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.paintbooth.preferences;
+
+import android.os.Bundle;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.preference.PreferenceFragmentCompat;
+
+import com.android.car.ui.paintbooth.R;
+
+/** Displays samples of all types of Preferences to help with verifying style changes. */
+public class PreferenceActivity extends AppCompatActivity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Display the fragment as the main content.
+        if (savedInstanceState == null) {
+            getSupportFragmentManager()
+                    .beginTransaction()
+                    .replace(android.R.id.content, new DemoFragment())
+                    .commit();
+        }
+    }
+
+    @Override
+    public boolean onSupportNavigateUp() {
+        onBackPressed();
+        return true;
+    }
+
+    /** PreferenceFragmentCompat that sets the preference hierarchy from XML */
+    public static class DemoFragment extends PreferenceFragmentCompat {
+
+        @Override
+        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+            // Load the preferences from an XML resource
+            setPreferencesFromResource(R.xml.preference_samples, rootKey);
+        }
+    }
+}
diff --git a/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
new file mode 100644
index 0000000..e2d3346
--- /dev/null
+++ b/car-ui-lib/tests/paintbooth/src/com/android/car/ui/paintbooth/toolbar/ToolbarActivity.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.paintbooth.toolbar;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.text.InputType;
+import android.util.Pair;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.ui.pagedrecyclerview.PagedRecyclerView;
+import com.android.car.ui.paintbooth.R;
+import com.android.car.ui.toolbar.MenuItem;
+import com.android.car.ui.toolbar.TabLayout;
+import com.android.car.ui.toolbar.Toolbar;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ToolbarActivity extends Activity {
+
+    private List<MenuItem> mMenuItems = new ArrayList<>();
+    private List<Pair<CharSequence, View.OnClickListener>> mButtons = new ArrayList<>();
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.paged_recycler_view_activity);
+
+        Toolbar toolbar = requireViewById(R.id.toolbar);
+        toolbar.registerOnBackListener(() -> {
+            if (toolbar.getState() == Toolbar.State.SEARCH) {
+                toolbar.setState(Toolbar.State.SUBPAGE);
+                return true;
+            }
+            return false;
+        });
+
+        toolbar.getRootView().setBackgroundColor(0xFFFFFF00);
+
+        mMenuItems.add(MenuItem.Builder.createSearch(this, i ->
+                toolbar.setState(Toolbar.State.SEARCH)));
+
+        toolbar.setMenuItems(mMenuItems);
+
+        mButtons.add(Pair.create("Change title", v ->
+                toolbar.setTitle(toolbar.getTitle() + " X")));
+
+        mButtons.add(Pair.create("Add menu item", v -> {
+            mMenuItems.add(MenuItem.Builder.createSettings(this, i ->
+                    Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show()));
+            toolbar.setMenuItems(mMenuItems);
+        }));
+
+        Mutable<Integer> overflowCounter = new Mutable<>(1);
+        mButtons.add(Pair.create("Add overflow menu item", v -> {
+            mMenuItems.add(new MenuItem.Builder(this)
+                    .setTitle("Foo " + overflowCounter.value)
+                    .setOnClickListener(i ->
+                            Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show())
+                    .setDisplayBehavior(MenuItem.DisplayBehavior.NEVER)
+                    .build());
+            toolbar.setMenuItems(mMenuItems);
+            overflowCounter.value++;
+        }));
+
+        mButtons.add(Pair.create("Toggle menu item visibility", v -> {
+            EditText textBox = new EditText(this);
+            textBox.setInputType(InputType.TYPE_CLASS_NUMBER);
+            new AlertDialog.Builder(this)
+                    .setView(textBox)
+                    .setTitle("Enter the index of the MenuItem to toggle")
+                    .setPositiveButton("Ok", (dialog, which) -> {
+                        try {
+                            MenuItem item = mMenuItems.get(
+                                    Integer.parseInt(textBox.getText().toString()));
+                            item.setVisible(!item.isVisible());
+                        } catch (NumberFormatException | IndexOutOfBoundsException e) {
+                            Toast.makeText(this, "Invalid index \""
+                                    + textBox.getText().toString()
+                                    + "\", valid range is 0 to " + (mMenuItems.size() - 1),
+                                    Toast.LENGTH_LONG).show();
+                        }
+                    })
+                    .show();
+        }));
+
+        mButtons.add(Pair.create("Toggle nav button mode", v -> {
+            if (toolbar.getNavButtonMode() == Toolbar.NavButtonMode.BACK) {
+                toolbar.setNavButtonMode(Toolbar.NavButtonMode.CLOSE);
+            } else {
+                toolbar.setNavButtonMode(Toolbar.NavButtonMode.BACK);
+            }
+        }));
+
+        mButtons.add(Pair.create("Toggle state", v -> {
+            if (toolbar.getState() == Toolbar.State.SUBPAGE) {
+                toolbar.setState(Toolbar.State.HOME);
+            } else {
+                toolbar.setState(Toolbar.State.SUBPAGE);
+            }
+        }));
+
+        mButtons.add(Pair.create("Toggle search hint", v -> {
+            if (toolbar.getSearchHint().equals("Foo")) {
+                toolbar.setSearchHint("Bar");
+            } else {
+                toolbar.setSearchHint("Foo");
+            }
+        }));
+
+        mButtons.add(Pair.create("Toggle background", v ->
+                toolbar.setBackgroundShown(!toolbar.getBackgroundShown())));
+
+        mButtons.add(Pair.create("Toggle show menu items while searching", v ->
+                toolbar.setShowMenuItemsWhileSearching(!toolbar.getShowMenuItemsWhileSearching())));
+
+        mButtons.add(Pair.create("Show custom view", v ->
+                toolbar.setCustomView(R.layout.toolbar_custom_view)));
+
+        mButtons.add(Pair.create("Add tab", v ->
+                toolbar.addTab(new TabLayout.Tab(getDrawable(R.drawable.ic_launcher), "Foo"))));
+
+        PagedRecyclerView prv = requireViewById(R.id.list);
+        prv.setAdapter(mAdapter);
+    }
+
+    private static class ViewHolder extends PagedRecyclerView.ViewHolder {
+        private final Button mButton;
+
+        ViewHolder(View itemView) {
+            super(itemView);
+            mButton = itemView.requireViewById(R.id.button);
+        }
+
+        public void bind(CharSequence title, View.OnClickListener listener) {
+            mButton.setText(title);
+            mButton.setOnClickListener(listener);
+        }
+    }
+
+    private PagedRecyclerView.Adapter mAdapter = new PagedRecyclerView.Adapter() {
+        @Override
+        public int getItemCount() {
+            return mButtons.size();
+        }
+
+        @Override
+        public ViewHolder onCreateViewHolder(ViewGroup parent, int position) {
+            View item = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent,
+                    false);
+            return new ViewHolder(item);
+        }
+
+        @Override
+        public void onBindViewHolder(@NonNull PagedRecyclerView.ViewHolder holder, int position) {
+            Pair<CharSequence, View.OnClickListener> pair = mButtons.get(position);
+            ((ViewHolder) holder).bind(pair.first, pair.second);
+        }
+    };
+
+    /** For changing values from lambdas */
+    public static final class Mutable<E> {
+        public E value;
+
+        public Mutable() {
+            value = null;
+        }
+
+        public Mutable(E value) {
+            this.value = value;
+        }
+    }
+}
diff --git a/car-ui-lib/tests/robotests/Android.mk b/car-ui-lib/tests/robotests/Android.mk
new file mode 100644
index 0000000..b924900
--- /dev/null
+++ b/car-ui-lib/tests/robotests/Android.mk
@@ -0,0 +1,92 @@
+#
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+############################################################
+# CarUi lib just for Robolectric test target.     #
+############################################################
+include $(CLEAR_VARS)
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
+    $(LOCAL_PATH)/tests/robotests/res \
+
+LOCAL_PACKAGE_NAME := CarUi
+LOCAL_PRIVATE_PLATFORM_APIS := true
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_USE_AAPT2 := true
+
+LOCAL_PRIVILEGED_MODULE := true
+
+LOCAL_JAVA_LIBRARIES := android.car
+
+LOCAL_STATIC_ANDROID_LIBRARIES := \
+    car-ui-lib
+
+include $(BUILD_PACKAGE)
+
+################################################
+# Car Ui Robolectric test target. #
+################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := CarUiRoboTests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_JAVA_RESOURCE_DIRS := config
+
+# Include the testing libraries
+LOCAL_JAVA_LIBRARIES := \
+    android.car \
+    robolectric_android-all-stub \
+    Robolectric_all-target \
+    mockito-robolectric-prebuilt \
+    testng \
+    truth-prebuilt
+
+
+LOCAL_INSTRUMENTATION_FOR := CarUi
+
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+##################################################################
+# Car Ui runner target to run the previous target. #
+##################################################################
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := RunCarUiRoboTests
+
+LOCAL_JAVA_LIBRARIES := \
+    android.car \
+    CarUiRoboTests \
+    robolectric_android-all-stub \
+    Robolectric_all-target \
+    mockito-robolectric-prebuilt \
+    testng \
+    truth-prebuilt
+
+LOCAL_TEST_PACKAGE := CarUi
+
+LOCAL_ROBOTEST_FILES := $(filter-out %/BaseRobolectricTest.java,\
+    $(call find-files-in-subdirs,$(LOCAL_PATH)/src,*Test.java,.))
+
+LOCAL_INSTRUMENT_SOURCE_DIRS := $(dir $(LOCAL_PATH))../src
+
+include external/robolectric-shadows/run_robotests.mk
diff --git a/car-ui-lib/tests/robotests/AndroidManifest.xml b/car-ui-lib/tests/robotests/AndroidManifest.xml
new file mode 100644
index 0000000..64926b8
--- /dev/null
+++ b/car-ui-lib/tests/robotests/AndroidManifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2019 Google Inc.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.car.ui.robotests">
+</manifest>
diff --git a/car-ui-lib/tests/robotests/config/robolectric.properties b/car-ui-lib/tests/robotests/config/robolectric.properties
new file mode 100644
index 0000000..8768f6b
--- /dev/null
+++ b/car-ui-lib/tests/robotests/config/robolectric.properties
@@ -0,0 +1,17 @@
+#
+# 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.
+#
+manifest=packages/apps/Car/libs/car-ui-lib/tests/robotests/AndroidManifest.xml
+sdk=NEWEST_SDK
diff --git a/car-ui-lib/tests/robotests/res/layout/test_grid_paged_recycler_view.xml b/car-ui-lib/tests/robotests/res/layout/test_grid_paged_recycler_view.xml
new file mode 100644
index 0000000..92e16df
--- /dev/null
+++ b/car-ui-lib/tests/robotests/res/layout/test_grid_paged_recycler_view.xml
@@ -0,0 +1,27 @@
+<!--
+  ~ Copyright (C) 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <com.android.car.ui.pagedrecyclerview.PagedRecyclerView
+        android:id="@+id/test_prv"
+        app:layoutStyle="grid"
+        app:numOfColumns="4"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/car-ui-lib/tests/robotests/res/layout/test_linear_paged_recycler_view.xml b/car-ui-lib/tests/robotests/res/layout/test_linear_paged_recycler_view.xml
new file mode 100644
index 0000000..f2c9416
--- /dev/null
+++ b/car-ui-lib/tests/robotests/res/layout/test_linear_paged_recycler_view.xml
@@ -0,0 +1,24 @@
+<!--
+  ~ Copyright (C) 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="match_parent">
+    <com.android.car.ui.pagedrecyclerview.PagedRecyclerView
+        android:id="@+id/test_prv"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/CarUiRobolectricTestRunner.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/CarUiRobolectricTestRunner.java
new file mode 100644
index 0000000..7070a88
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/CarUiRobolectricTestRunner.java
@@ -0,0 +1,120 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui;
+
+import androidx.annotation.NonNull;
+
+import org.junit.runners.model.InitializationError;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.manifest.AndroidManifest;
+import org.robolectric.res.Fs;
+import org.robolectric.res.ResourcePath;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Custom test runner for CarUi. This is needed because the default behavior for
+ * robolectric is just to grab the resource directory in the target package.
+ * We want to override this to add several spanning different projects.
+ */
+public class CarUiRobolectricTestRunner extends RobolectricTestRunner {
+    private static final Map<String, String> AAR_VERSIONS;
+    private static final String SUPPORT_RESOURCE_PATH_TEMPLATE =
+            "jar:file:prebuilts/sdk/current/androidx/m2repository/androidx/"
+                    + "%1$s/%1$s/%2$s/%1$s-%2$s.aar!/res";
+    // contraint-layout aar lives in separate path.
+    // Note its path contains a hyphen.
+    private static final String CONSTRAINT_LAYOUT_RESOURCE_PATH_TEMPLATE =
+            "jar:file:prebuilts/sdk/current/extras/constraint-layout-x/"
+                    + "%1$s/%2$s/%1$s-%2$s.aar!/res";
+
+    static {
+        AAR_VERSIONS = new HashMap<>();
+        AAR_VERSIONS.put("appcompat", "1.1.0-alpha01");
+        AAR_VERSIONS.put("constraintlayout", "1.1.2");
+        AAR_VERSIONS.put("preference", "1.1.0-alpha02");
+    }
+
+    public CarUiRobolectricTestRunner(Class<?> testClass) throws InitializationError {
+        super(testClass);
+    }
+
+    private static ResourcePath createResourcePath(@NonNull String filePath) {
+        try {
+            return new ResourcePath(null, Fs.fromURL(new URL(filePath)), null);
+        } catch (MalformedURLException e) {
+            throw new RuntimeException("CarUiRobolectricTestRunner failure", e);
+        }
+    }
+
+    /**
+     * Create the resource path for a support library component's JAR.
+     */
+    private static String createSupportResourcePathFromJar(@NonNull String componentId) {
+        if (!AAR_VERSIONS.containsKey(componentId)) {
+            throw new IllegalArgumentException("Unknown component " + componentId
+                    + ". Update test with appropriate component name and version.");
+        }
+        if (componentId.equals("constraintlayout")) {
+            return String.format(CONSTRAINT_LAYOUT_RESOURCE_PATH_TEMPLATE, componentId,
+                    AAR_VERSIONS.get(componentId));
+        }
+        return String.format(SUPPORT_RESOURCE_PATH_TEMPLATE, componentId,
+                AAR_VERSIONS.get(componentId));
+    }
+
+    /**
+     * We modify the AndroidManifest such that we can add required resources.
+     */
+    @Override
+    protected AndroidManifest getAppManifest(Config config) {
+        try {
+            // Using the manifest file's relative path, we can figure out the application directory.
+            URL appRoot = new URL("file:packages/apps/Car/libs/car-ui-lib/");
+            URL manifestPath = new URL(appRoot, "AndroidManifest.xml");
+            URL resDir = new URL(appRoot, "tests/robotests/res");
+            URL assetsDir = new URL(appRoot, config.assetDir());
+
+            // By adding any resources from libraries we need to the AndroidManifest, we can access
+            // them from within the parallel universe's resource loader.
+            return new AndroidManifest(Fs.fromURL(manifestPath), Fs.fromURL(resDir),
+                    Fs.fromURL(assetsDir)) {
+                @Override
+                public List<ResourcePath> getIncludedResourcePaths() {
+                    List<ResourcePath> paths = super.getIncludedResourcePaths();
+                    paths.add(createResourcePath("file:packages/apps/Car/libs/car-ui-lib/res"));
+
+                    // Support library resources. These need to point to the prebuilts of support
+                    // library and not the source.
+                    paths.add(createResourcePath(createSupportResourcePathFromJar("appcompat")));
+                    paths.add(createResourcePath(
+                            createSupportResourcePathFromJar("constraintlayout")));
+                    paths.add(createResourcePath(createSupportResourcePathFromJar("preference")));
+
+                    return paths;
+                }
+            };
+        } catch (MalformedURLException e) {
+            throw new RuntimeException("CarUiRobolectricTestRunner failure", e);
+        }
+    }
+}
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/TestConfig.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/TestConfig.java
new file mode 100644
index 0000000..46a9d0c
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/TestConfig.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+public class TestConfig {
+    public static final int SDK_VERSION = 28;
+    public static final String MANIFEST_PATH =
+            "packages/apps/Car/car-ui-lib/AndroidManifest.xml";
+}
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/DefaultScrollBarTest.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/DefaultScrollBarTest.java
new file mode 100644
index 0000000..dded5c6
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/DefaultScrollBarTest.java
@@ -0,0 +1,131 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.pagedrecyclerview;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertThrows;
+
+import android.content.Context;
+import android.widget.FrameLayout;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.CarUiRobolectricTestRunner;
+import com.android.car.ui.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(CarUiRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DefaultScrollBarTest {
+
+    private Context mContext;
+    private ScrollBar mScrollBar;
+
+    @Mock
+    private RecyclerView mRecyclerView;
+    @Mock
+    private FrameLayout mParent;
+    @Mock
+    private FrameLayout.LayoutParams mLayoutParams;
+    @Mock
+    private RecyclerView.RecycledViewPool mRecycledViewPool;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+
+        mScrollBar = new DefaultScrollBar();
+    }
+
+    @Test
+    public void initialize_shouldInitializeScrollListener() {
+        when(mRecyclerView.getContext()).thenReturn(mContext);
+        when(mRecyclerView.getParent()).thenReturn(mParent);
+        when(mRecyclerView.getRecycledViewPool()).thenReturn(mRecycledViewPool);
+        when(mParent.generateLayoutParams(any())).thenReturn(mLayoutParams);
+
+        mScrollBar.initialize(mRecyclerView, 10, PagedRecyclerView.ScrollBarPosition.START, true);
+
+        // called once in DefaultScrollBar and once in SnapHelper while setting up the call backs
+        // when we use attachToRecyclerView(recyclerview)
+        verify(mRecyclerView, times(2)).addOnScrollListener(
+                any(RecyclerView.OnScrollListener.class));
+    }
+
+    @Test
+    public void initialize_shouldSetMaxRecyclerViews() {
+        when(mRecyclerView.getContext()).thenReturn(mContext);
+        when(mRecyclerView.getParent()).thenReturn(mParent);
+        when(mRecyclerView.getRecycledViewPool()).thenReturn(mRecycledViewPool);
+        when(mParent.generateLayoutParams(any())).thenReturn(mLayoutParams);
+
+        mScrollBar.initialize(mRecyclerView, 10, PagedRecyclerView.ScrollBarPosition.START, true);
+
+        verify(mRecycledViewPool).setMaxRecycledViews(0, 12);
+    }
+
+    @Test
+    public void initialize_shouldNotHaveFlingListener() {
+        when(mRecyclerView.getContext()).thenReturn(mContext);
+        when(mRecyclerView.getParent()).thenReturn(mParent);
+        when(mRecyclerView.getRecycledViewPool()).thenReturn(mRecycledViewPool);
+        when(mParent.generateLayoutParams(any())).thenReturn(mLayoutParams);
+
+        mScrollBar.initialize(mRecyclerView, 10, PagedRecyclerView.ScrollBarPosition.START, true);
+
+        verify(mRecyclerView).setOnFlingListener(null);
+    }
+
+    @Test
+    public void setPadding_shouldSetStartAndEndPadding() {
+        when(mRecyclerView.getContext()).thenReturn(mContext);
+        when(mRecyclerView.getParent()).thenReturn(mParent);
+        when(mRecyclerView.getRecycledViewPool()).thenReturn(mRecycledViewPool);
+        when(mParent.generateLayoutParams(any())).thenReturn(mLayoutParams);
+
+        mScrollBar.initialize(mRecyclerView, 10, PagedRecyclerView.ScrollBarPosition.START, true);
+        mScrollBar.setPadding(10, 20);
+
+        DefaultScrollBar defaultScrollBar = (DefaultScrollBar) mScrollBar;
+
+        assertThat(defaultScrollBar.mPaddingStart).isEqualTo(10);
+        assertThat(defaultScrollBar.mPaddingEnd).isEqualTo(20);
+    }
+
+    @Test
+    public void setPadding_shouldThrowErrorWithoutInitialization() {
+        assertThrows(NullPointerException.class, () -> mScrollBar.setPadding(10, 20));
+    }
+
+    @Test
+    public void requestLayout_shouldThrowErrorWithoutInitialization() {
+        assertThrows(NullPointerException.class, () -> mScrollBar.requestLayout());
+    }
+}
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewAdapterTest.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewAdapterTest.java
new file mode 100644
index 0000000..93e90df
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewAdapterTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.pagedrecyclerview;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.view.ViewGroup;
+
+import com.android.car.ui.CarUiRobolectricTestRunner;
+import com.android.car.ui.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(CarUiRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class PagedRecyclerViewAdapterTest {
+
+    private Context mContext;
+    private PagedRecyclerViewAdapter mPagedRecyclerViewAdapter;
+
+    @Mock
+    private ViewGroup mParent;
+    @Mock
+    private ViewGroup.LayoutParams mLayoutParams;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = RuntimeEnvironment.application;
+        mPagedRecyclerViewAdapter = new PagedRecyclerViewAdapter();
+    }
+
+    @Test
+    public void getItemCount_shouldAlwaysBeOne() {
+        assertThat(mPagedRecyclerViewAdapter.getItemCount()).isEqualTo(1);
+    }
+
+    @Test
+    public void onCreateViewHolder_frameLayoutNotNull() {
+
+        when(mParent.getContext()).thenReturn(mContext);
+        when(mParent.generateLayoutParams(any())).thenReturn(mLayoutParams);
+
+        PagedRecyclerViewAdapter.NestedRowViewHolder nestedRowViewHolder =
+                mPagedRecyclerViewAdapter.onCreateViewHolder(mParent, 0);
+
+        assertThat(nestedRowViewHolder.frameLayout).isNotNull();
+    }
+}
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewTest.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewTest.java
new file mode 100644
index 0000000..b4243b6
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedRecyclerViewTest.java
@@ -0,0 +1,107 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.pagedrecyclerview;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.CarUiRobolectricTestRunner;
+import com.android.car.ui.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(CarUiRobolectricTestRunner.class)
+public class PagedRecyclerViewTest {
+
+    private Context mContext;
+    private View mView;
+    private PagedRecyclerView mPagedRecyclerView;
+
+    @Mock
+    private RecyclerView.Adapter mAdapter;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = RuntimeEnvironment.application;
+    }
+
+    @Test
+    public void onHeightChanged_shouldAddTheValueToInitialTopValue() {
+        mView = LayoutInflater.from(mContext)
+                .inflate(R.layout.test_linear_paged_recycler_view, null);
+
+        mPagedRecyclerView = mView.findViewById(R.id.test_prv);
+
+        assertThat(mPagedRecyclerView.getPaddingBottom()).isEqualTo(0);
+        assertThat(mPagedRecyclerView.getPaddingTop()).isEqualTo(0);
+        assertThat(mPagedRecyclerView.getPaddingStart()).isEqualTo(0);
+        assertThat(mPagedRecyclerView.getPaddingEnd()).isEqualTo(0);
+
+        mPagedRecyclerView.onHeightChanged(10);
+
+        assertThat(mPagedRecyclerView.getPaddingTop()).isEqualTo(10);
+        assertThat(mPagedRecyclerView.getPaddingBottom()).isEqualTo(0);
+        assertThat(mPagedRecyclerView.getPaddingStart()).isEqualTo(0);
+        assertThat(mPagedRecyclerView.getPaddingEnd()).isEqualTo(0);
+    }
+
+    @Test
+    public void setAdapter_shouldInitializeLinearLayoutManager() {
+        mView = LayoutInflater.from(mContext)
+                .inflate(R.layout.test_linear_paged_recycler_view, null);
+
+        mPagedRecyclerView = mView.findViewById(R.id.test_prv);
+        mPagedRecyclerView.setAdapter(mAdapter);
+
+        assertThat(mPagedRecyclerView.getLayoutManager()).isInstanceOf(LinearLayoutManager.class);
+    }
+
+    @Test
+    public void setAdapter_shouldInitializeGridLayoutManager() {
+        mView = LayoutInflater.from(mContext)
+                .inflate(R.layout.test_grid_paged_recycler_view, null);
+
+        mPagedRecyclerView = mView.findViewById(R.id.test_prv);
+        mPagedRecyclerView.setAdapter(mAdapter);
+
+        assertThat(mPagedRecyclerView.getLayoutManager()).isInstanceOf(GridLayoutManager.class);
+    }
+
+    @Test
+    public void init_shouldContainNestedRecyclerView() {
+        mView = LayoutInflater.from(mContext)
+                .inflate(R.layout.test_grid_paged_recycler_view, null);
+
+        mPagedRecyclerView = mView.findViewById(R.id.test_prv);
+
+        assertThat(mPagedRecyclerView.mNestedRecyclerView).isNotNull();
+    }
+}
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedSmoothScrollerTest.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedSmoothScrollerTest.java
new file mode 100644
index 0000000..126883e
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedSmoothScrollerTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.pagedrecyclerview;
+
+import static androidx.recyclerview.widget.LinearSmoothScroller.SNAP_TO_START;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import com.android.car.ui.CarUiRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(CarUiRobolectricTestRunner.class)
+public class PagedSmoothScrollerTest {
+
+    private Context mContext;
+    private PagedSmoothScroller mPagedSmoothScroller;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        mPagedSmoothScroller = new PagedSmoothScroller(mContext);
+    }
+
+    @Test
+    public void calculateTimeForScrolling_shouldInitializeAllValues() {
+        assertThat(mPagedSmoothScroller.mMillisecondsPerInch).isNotEqualTo(0);
+        assertThat(mPagedSmoothScroller.mDecelerationTimeDivisor).isNotEqualTo(0);
+        assertThat(mPagedSmoothScroller.mMillisecondsPerPixel).isNotEqualTo(0);
+        assertThat(mPagedSmoothScroller.mInterpolator).isNotNull();
+        assertThat(mPagedSmoothScroller.mDensityDpi).isNotEqualTo(0);
+    }
+
+    @Test
+    public void getVerticalSnapPreference_shouldReturnSnapToStart() {
+        assertThat(mPagedSmoothScroller.getVerticalSnapPreference()).isEqualTo(SNAP_TO_START);
+    }
+
+    @Test
+    public void calculateTimeForScrolling_shouldReturnMultiplierOfMillisecondsPerPixel() {
+        assertThat(mPagedSmoothScroller.calculateTimeForScrolling(20)).isEqualTo(
+                (int) Math.ceil(Math.abs(20) * mPagedSmoothScroller.mMillisecondsPerPixel));
+    }
+
+    @Test
+    public void calculateTimeForDeceleration_shouldReturnNotBeZero() {
+        assertThat(mPagedSmoothScroller.calculateTimeForDeceleration(20)).isNotEqualTo(0);
+    }
+}
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedSnapHelperTest.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedSnapHelperTest.java
new file mode 100644
index 0000000..30d68b2
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/pagedrecyclerview/PagedSnapHelperTest.java
@@ -0,0 +1,186 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.pagedrecyclerview;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.graphics.PointF;
+import android.view.View;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.car.ui.CarUiRobolectricTestRunner;
+import com.android.car.ui.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(CarUiRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class PagedSnapHelperTest {
+
+    private Context mContext;
+    private PagedSnapHelper mPagedSnapHelper;
+
+    @Mock
+    private RecyclerView mRecyclerView;
+    @Mock
+    private LinearLayoutManager mLayoutManager;
+    @Mock
+    private RecyclerView.Adapter mAdapter;
+    @Mock
+    private View mChild;
+    @Mock
+    private RecyclerView.LayoutParams mLayoutParams;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+
+        mPagedSnapHelper = new PagedSnapHelper(mContext);
+
+        when(mRecyclerView.getContext()).thenReturn(mContext);
+        mPagedSnapHelper.attachToRecyclerView(mRecyclerView);
+    }
+
+    @Test
+    public void smoothScrollBy_invalidSnapPosition_shouldCallRecylerViewSmoothScrollBy() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+
+        mPagedSnapHelper.smoothScrollBy(10);
+
+        verify(mRecyclerView).smoothScrollBy(0, 10);
+    }
+
+    @Test
+    public void smoothScrollBy_invalidSnapPositionNoItem_shouldCallRecylerViewSmoothScrollBy() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+        when(mLayoutManager.getItemCount()).thenReturn(0);
+
+        mPagedSnapHelper.smoothScrollBy(10);
+
+        verify(mRecyclerView).smoothScrollBy(0, 10);
+    }
+
+    @Test
+    public void smoothScrollBy_invalidSnapPositionNoView_shouldCallRecylerViewSmoothScrollBy() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+        when(mLayoutManager.getItemCount()).thenReturn(10);
+        when(mLayoutManager.canScrollVertically()).thenReturn(false);
+        when(mLayoutManager.canScrollHorizontally()).thenReturn(false);
+
+        mPagedSnapHelper.smoothScrollBy(10);
+
+        verify(mRecyclerView).smoothScrollBy(0, 10);
+    }
+
+    @Test
+    public void smoothScrollBy_invalidSnapPositionNoVectore_shouldCallRecylerViewSmoothScrollBy() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+        when(mLayoutManager.getItemCount()).thenReturn(10);
+        when(mLayoutManager.canScrollVertically()).thenReturn(true);
+        when(mLayoutManager.getChildCount()).thenReturn(1);
+        when(mChild.getLayoutParams()).thenReturn(mLayoutParams);
+        when(mLayoutManager.getChildAt(0)).thenReturn(mChild);
+
+        mPagedSnapHelper.smoothScrollBy(10);
+
+        verify(mRecyclerView).smoothScrollBy(0, 10);
+    }
+
+    @Test
+    public void smoothScrollBy_invalidSnapPositionNoDelta_shouldCallRecylerViewSmoothScrollBy() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+        when(mLayoutManager.getItemCount()).thenReturn(1);
+        when(mLayoutManager.canScrollVertically()).thenReturn(true);
+        when(mLayoutManager.getChildCount()).thenReturn(1);
+        // no delta
+        when(mLayoutManager.getDecoratedBottom(any())).thenReturn(0);
+        when(mChild.getLayoutParams()).thenReturn(mLayoutParams);
+        when(mLayoutManager.getChildAt(0)).thenReturn(mChild);
+
+        PointF vectorForEnd = new PointF(100, 100);
+        when(mLayoutManager.computeScrollVectorForPosition(0)).thenReturn(vectorForEnd);
+
+        mPagedSnapHelper.smoothScrollBy(10);
+
+        verify(mRecyclerView).smoothScrollBy(0, 10);
+    }
+
+    @Test
+    public void smoothScrollBy_validSnapPosition_shouldCallRecylerViewSmoothScrollBy() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+        when(mLayoutManager.getItemCount()).thenReturn(1);
+        when(mLayoutManager.canScrollVertically()).thenReturn(true);
+        when(mLayoutManager.getChildCount()).thenReturn(1);
+        // some delta
+        when(mLayoutManager.getDecoratedBottom(any())).thenReturn(10);
+        when(mChild.getLayoutParams()).thenReturn(mLayoutParams);
+        when(mLayoutManager.getChildAt(0)).thenReturn(mChild);
+
+        PointF vectorForEnd = new PointF(100, 100);
+        when(mLayoutManager.computeScrollVectorForPosition(0)).thenReturn(vectorForEnd);
+
+        mPagedSnapHelper.smoothScrollBy(10);
+
+        verify(mLayoutManager).startSmoothScroll(any(RecyclerView.SmoothScroller.class));
+    }
+
+    @Test
+    public void calculateDistanceToFinalSnap_shouldReturnTopMarginDifference() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+        when(mLayoutManager.getItemCount()).thenReturn(1);
+        when(mLayoutManager.canScrollVertically()).thenReturn(true);
+        when(mLayoutManager.getChildCount()).thenReturn(1);
+        // some delta
+        when(mLayoutManager.getDecoratedTop(any())).thenReturn(10);
+        when(mChild.getLayoutParams()).thenReturn(mLayoutParams);
+
+        int[] distance = mPagedSnapHelper.calculateDistanceToFinalSnap(mLayoutManager, mChild);
+
+        assertThat(distance[1]).isEqualTo(10);
+    }
+
+    @Test
+    public void calculateScrollDistance_shouldScrollHeightOfView() {
+        when(mRecyclerView.getLayoutManager()).thenReturn(mLayoutManager);
+        when(mLayoutManager.getItemCount()).thenReturn(1);
+        when(mLayoutManager.canScrollVertically()).thenReturn(true);
+        when(mLayoutManager.getChildCount()).thenReturn(1);
+        // some delta
+        when(mLayoutManager.getDecoratedTop(any())).thenReturn(10);
+        when(mChild.getLayoutParams()).thenReturn(mLayoutParams);
+        when(mLayoutManager.getChildAt(0)).thenReturn(mChild);
+        when(mLayoutManager.getHeight()).thenReturn(-50);
+
+        int[] distance = mPagedSnapHelper.calculateScrollDistance(0, 10);
+
+        assertThat(distance[1]).isEqualTo(50);
+    }
+}
diff --git a/car-ui-lib/tests/robotests/src/com/android/car/ui/utils/CarUxRestrictionsUtilTest.java b/car-ui-lib/tests/robotests/src/com/android/car/ui/utils/CarUxRestrictionsUtilTest.java
new file mode 100644
index 0000000..fe6f80c
--- /dev/null
+++ b/car-ui-lib/tests/robotests/src/com/android/car/ui/utils/CarUxRestrictionsUtilTest.java
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+package com.android.car.ui.utils;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.car.drivingstate.CarUxRestrictions;
+
+import com.android.car.ui.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class CarUxRestrictionsUtilTest {
+    private int[] mRestrictionsArray;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mRestrictionsArray = new int[]{
+                CarUxRestrictions.UX_RESTRICTIONS_NO_DIALPAD,
+                CarUxRestrictions.UX_RESTRICTIONS_NO_KEYBOARD,
+                CarUxRestrictions.UX_RESTRICTIONS_NO_DIALPAD
+                        | CarUxRestrictions.UX_RESTRICTIONS_NO_KEYBOARD,
+                CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED
+        };
+    }
+
+    @Test
+    public void testNullActiveRestriction() {
+        CarUxRestrictions activeRestrictions = null;
+        boolean[] expectedResults = {true, true, true, true};
+        for (int i = 0; i < mRestrictionsArray.length; i++) {
+            boolean actualResult = CarUxRestrictionsUtil.isRestricted(mRestrictionsArray[i],
+                    activeRestrictions);
+            assertThat(actualResult == expectedResults[i]).isTrue();
+        }
+    }
+
+    @Test
+    public void testOneActiveRestriction() {
+        CarUxRestrictions activeRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */true,
+                CarUxRestrictions.UX_RESTRICTIONS_NO_DIALPAD, /* timestamp= */0).build();
+        boolean[] expectedResults = {true, false, true, true};
+        for (int i = 0; i < mRestrictionsArray.length; i++) {
+            boolean actualResult = CarUxRestrictionsUtil.isRestricted(mRestrictionsArray[i],
+                    activeRestrictions);
+            assertThat(actualResult == expectedResults[i]).isTrue();
+        }
+    }
+
+    @Test
+    public void testMultipleActiveRestrictions() {
+        CarUxRestrictions activeRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */true,
+                CarUxRestrictions.UX_RESTRICTIONS_NO_DIALPAD
+                        | CarUxRestrictions.UX_RESTRICTIONS_NO_TEXT_MESSAGE, /* timestamp= */
+                0).build();
+        boolean[] expectedResults = {true, false, true, true};
+        for (int i = 0; i < mRestrictionsArray.length; i++) {
+            boolean actualResult = CarUxRestrictionsUtil.isRestricted(mRestrictionsArray[i],
+                    activeRestrictions);
+            assertThat(actualResult == expectedResults[i]).isTrue();
+        }
+    }
+}
diff --git a/car-ui-lib/tests/rro-base/Android.mk b/car-ui-lib/tests/rro-base/Android.mk
new file mode 100644
index 0000000..2d6730c
--- /dev/null
+++ b/car-ui-lib/tests/rro-base/Android.mk
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2019 The Android Open-Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+CAR_UI_RRO_SET_NAME := base
+CAR_UI_RESOURCE_DIR := $(LOCAL_PATH)/res
+CAR_UI_RRO_TARGETS := \
+  com.android.car.ui.paintbooth \
+  com.android.car.media \
+  com.android.car.dialer
+
+include $(CAR_UI_GENERATE_RRO_SET)
diff --git a/car-ui-lib/tests/rro-base/AndroidManifest.xml b/car-ui-lib/tests/rro-base/AndroidManifest.xml
new file mode 100644
index 0000000..b6b6ffb
--- /dev/null
+++ b/car-ui-lib/tests/rro-base/AndroidManifest.xml
@@ -0,0 +1,56 @@
+<?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.
+-->
+
+<!--
+    Example to use Runtime Resource Overlay(RRO).
+
+    Step 1: Create a new project with AndroidManifest.xml file as shown below.
+        "{{TARGET_PACKAGE_NAME}}" will point to the package which will be overridden by new values.
+        "{{RRO_PACKAGE_NAME}}" will be the current package name of this apk.
+    Step 2: Create new values in the current package that will override the values in the target
+        apk. Path and resource name should be same as the target apk in order to override.
+        Look at car-ui-lib/res to see a list of resources available for customization.
+    Step 3: Update Android.mk variables as needed (see details at generate-rros.mk):
+        CAR_UI_RRO_SET_NAME: general name of this overlay, e.g: base.
+        CAR_UI_RESOURCE_DIR: location of the resources folder, e.g.: $(LOCAL_PATH)/res
+        CAR_UI_RRO_TARGETS: list of package names to overlay
+    Step 4: Build and generate the apk package for this project. Resulting RROs will be located at
+        $OUT/vendor/overlay. A full flashing of a device will install all of them, but they can be
+        installed individually (see below).
+    Step 5: Push the package to "/vendor/overlay/" and reboot. Follow the commands below.
+        # adb root;
+        # adb remount;
+        # adb push <path-to-apk> /vendor/overlay/;
+        Alternatively, to side-load a change, just install the APK as normal (note: the apk
+        will end up at /data/app instead of /vendor/overlay).
+        # adb install -r <path-to-apk>
+    Step 6: Apply by overlay command
+        # "adb shell cmd overlay list;" Output of the same will be as shown below.
+           com.android.car.ui.paintbooth
+           [ ] com.android.car.ui.paintbooth.base.rro
+        # adb shell cmd overlay enable (double-hyphen)user 0 com.android.car.ui.paintbooth.rro
+           to enable the RRO
+        # adb shell cmd overlay disable (double-hyphen)user 0 com.android.car.ui.paintbooth.rro
+           to disable RRO
+        (Be careful to use the right user id, depending on the targeted app)
+-->
+<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}}"/>
+</manifest>
diff --git a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml b/car-ui-lib/tests/rro-base/res/values/colors.xml
similarity index 69%
copy from car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
copy to car-ui-lib/tests/rro-base/res/values/colors.xml
index 7d29d64..3341ad8 100644
--- a/car-chassis-lib/res/drawable/chassis_toolbar_button_background.xml
+++ b/car-ui-lib/tests/rro-base/res/values/colors.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  ~
-  ~ Copyright (C) 2019 Google Inc.
+  ~ 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.
@@ -14,8 +13,7 @@
   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
-  ~
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@*android:color/car_card_ripple_background"
-        android:radius="@dimen/chassis_toolbar_button_background_radius"/>
+  -->
+<resources>
+  <color name="dialog_activity_background_color">#ff000f</color>
+</resources>
diff --git a/car-ui-lib/tests/rro-base/res/values/styles.xml b/car-ui-lib/tests/rro-base/res/values/styles.xml
new file mode 100644
index 0000000..b5d20db
--- /dev/null
+++ b/car-ui-lib/tests/rro-base/res/values/styles.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES 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="TextAppearance.CarUi.Widget.Toolbar.Title" parent="android:TextAppearance.DeviceDefault">
+        <item name="android:singleLine">true</item>
+        <item name="android:textSize">40sp</item>
+        <item name="android:textColor">#FF00F0</item>
+    </style>
+</resources>
diff --git a/glide/Android.mk b/glide/Android.mk
index f8828f6..41e3937 100644
--- a/glide/Android.mk
+++ b/glide/Android.mk
@@ -14,6 +14,7 @@
 # limitations under the License.
 #
 
+LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES