Keep title in same position regardless of if there's a logo or not

Fixes: 142014887
Test: Manually
Change-Id: I473b858728fa9da704063003ab9d3fc9559e0f07
diff --git a/car-ui-lib/res/layout-port/car_ui_toolbar.xml b/car-ui-lib/res/layout-port/car_ui_toolbar.xml
index 1eb6758..dc2d225 100644
--- a/car-ui-lib/res/layout-port/car_ui_toolbar.xml
+++ b/car-ui-lib/res/layout-port/car_ui_toolbar.xml
@@ -20,6 +20,41 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
 
+    <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"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/toolbar_start_margin_guideline"
+        app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_margin"
+        android:orientation="vertical"/>
+
     <!-- 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
@@ -48,12 +83,13 @@
 
     <FrameLayout
         android:id="@+id/nav_icon_container"
-        android:layout_width="@dimen/car_ui_toolbar_nav_button_width"
+        android:layout_width="0dp"
         android:layout_height="0dp"
         android:background="?android:attr/selectableItemBackground"
-        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintStart_toStartOf="parent">
+        app:layout_constraintStart_toStartOf="@id/toolbar_start_guideline"
+        app:layout_constraintEnd_toStartOf="@id/toolbar_start_margin_guideline">
         <ImageView
             android:id="@+id/nav_icon"
             android:layout_width="@dimen/car_ui_toolbar_icon_size"
@@ -75,9 +111,9 @@
         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_constraintTop_toTopOf="@id/toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintStart_toEndOf="@id/nav_icon_container"
+        app:layout_constraintStart_toEndOf="@id/toolbar_start_margin_guideline"
         app:layout_constraintEnd_toStartOf="@id/menu_items_container"/>
 
     <com.android.car.ui.toolbar.SearchView
@@ -85,7 +121,7 @@
         android:layout_width="0dp"
         android:layout_height="match_parent"
         android:visibility="gone"
-        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/row_separator"
         app:layout_constraintStart_toEndOf="@id/nav_icon_container"
         app:layout_constraintEnd_toStartOf="@id/menu_items_container"/>
@@ -95,7 +131,7 @@
         android:layout_width="0dp"
         android:layout_height="0dp"
         android:visibility="gone"
-        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/row_separator"
         app:layout_constraintStart_toEndOf="@id/nav_icon_container"
         app:layout_constraintEnd_toStartOf="@id/menu_items_container"/>
@@ -107,7 +143,7 @@
         android:orientation="horizontal"
         android:divider="@drawable/car_ui_toolbar_menu_item_divider"
         android:showDividers="beginning|middle|end"
-        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/row_separator"
         app:layout_constraintEnd_toStartOf="@id/car_ui_toolbar_overflow_button"/>
 
@@ -118,9 +154,9 @@
         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_constraintTop_toTopOf="@id/toolbar_top_guideline"
         app:layout_constraintBottom_toTopOf="@id/row_separator"
-        app:layout_constraintEnd_toEndOf="parent">
+        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"
@@ -136,7 +172,7 @@
         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"/>
+        app:layout_constraintBottom_toTopOf="@id/toolbar_bottom_guideline"/>
 
     <!-- can't use 0dp for layout_height or the constraintlayout effect kicks in -->
     <View
diff --git a/car-ui-lib/res/layout/car_ui_toolbar.xml b/car-ui-lib/res/layout/car_ui_toolbar.xml
index 7ee939f..14d3e64 100644
--- a/car-ui-lib/res/layout/car_ui_toolbar.xml
+++ b/car-ui-lib/res/layout/car_ui_toolbar.xml
@@ -57,14 +57,26 @@
         android:id="@+id/toolbar_bottom_guideline"
         app:layout_constraintGuide_end="@dimen/car_ui_toolbar_bottom_inset"
         android:orientation="horizontal"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/toolbar_start_margin_guideline"
+        app:layout_constraintGuide_begin="@dimen/car_ui_toolbar_margin"
+        android:orientation="vertical"/>
+
+    <!-- The horizontal bias here is so that when you set this view as GONE, it will be
+         treated as if it's all the way to the left instead of centered in the margin -->
     <FrameLayout
         android:id="@+id/nav_icon_container"
-        android:layout_width="@dimen/car_ui_toolbar_nav_button_width"
+        android:layout_width="0dp"
         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">
+        app:layout_constraintBottom_toTopOf="@id/toolbar_bottom_guideline"
+        app:layout_constraintStart_toEndOf="@id/toolbar_start_guideline"
+        app:layout_constraintEnd_toStartOf="@id/toolbar_start_margin_guideline"
+        app:layout_constraintHorizontal_bias="0.0">
         <ImageView
             android:id="@+id/nav_icon"
             android:layout_width="@dimen/car_ui_toolbar_icon_size"
@@ -87,17 +99,16 @@
         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_constraintBottom_toTopOf="@id/toolbar_bottom_guideline"
+        app:layout_constraintStart_toEndOf="@+id/toolbar_start_margin_guideline"
         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_constraintBottom_toTopOf="@id/toolbar_bottom_guideline"
         app:layout_constraintStart_toEndOf="@+id/nav_icon_container"
         app:layout_constraintEnd_toStartOf="@+id/menu_items_container"
         app:layout_constraintHorizontal_bias="0.0"/>
@@ -108,7 +119,7 @@
         android:layout_height="0dp"
         android:visibility="gone"
         app:layout_constraintTop_toTopOf="@id/toolbar_top_guideline"
-        app:layout_constraintBottom_toTopOf="@+id/bottom_styleable"
+        app:layout_constraintBottom_toTopOf="@id/toolbar_bottom_guideline"
         app:layout_constraintStart_toEndOf="@+id/nav_icon_container"
         app:layout_constraintEnd_toStartOf="@+id/menu_items_container"/>
 
@@ -120,7 +131,7 @@
         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_constraintBottom_toTopOf="@id/toolbar_bottom_guideline"
         app:layout_constraintEnd_toStartOf="@+id/car_ui_toolbar_overflow_button"/>
 
     <FrameLayout
@@ -149,7 +160,7 @@
         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_constraintBottom_toTopOf="@id/toolbar_bottom_guideline"
         app:layout_constraintStart_toEndOf="@+id/nav_icon_container"
         app:layout_constraintEnd_toStartOf="@+id/menu_items_container"/>
 
@@ -158,7 +169,7 @@
         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_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toEndOf="parent"/>
 </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/car-ui-lib/res/values/dimens.xml b/car-ui-lib/res/values/dimens.xml
index d92801d..cc6de28 100644
--- a/car-ui-lib/res/values/dimens.xml
+++ b/car-ui-lib/res/values/dimens.xml
@@ -49,11 +49,11 @@
     <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_margin">@dimen/car_ui_margin</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>
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
index e2d3346..2e51400 100644
--- 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
@@ -114,6 +114,12 @@
             }
         }));
 
+        Mutable<Boolean> hasLogo = new Mutable<>(true);
+        mButtons.add(Pair.create("Toggle logo", v -> {
+            toolbar.setLogo(hasLogo.value ? 0 : R.drawable.ic_launcher);
+            hasLogo.value = !hasLogo.value;
+        }));
+
         mButtons.add(Pair.create("Toggle state", v -> {
             if (toolbar.getState() == Toolbar.State.SUBPAGE) {
                 toolbar.setState(Toolbar.State.HOME);