diff --git a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
index 6a95a15..1ef99bb 100644
--- a/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
+++ b/library/main/src/com/android/car/setupwizardlib/CarSetupWizardBaseLayout.java
@@ -202,20 +202,14 @@
         }
         primaryToolbarButtonStub.inflate();
         setPrimaryToolbarButton(findViewById(R.id.primary_toolbar_button));
-        if (showPrimaryToolbarButton) {
-            setPrimaryToolbarButtonText(primaryToolbarButtonText);
-            setPrimaryToolbarButtonEnabled(primaryToolbarButtonEnabled);
-            stylePrimaryToolbarButton(mPrimaryToolbarButton);
-        } else {
-            setPrimaryToolbarButtonVisible(false);
-        }
+        stylePrimaryToolbarButton(mPrimaryToolbarButton);
+        setPrimaryToolbarButtonText(primaryToolbarButtonText);
+        setPrimaryToolbarButtonEnabled(primaryToolbarButtonEnabled);
+        setPrimaryToolbarButtonVisible(showPrimaryToolbarButton);
 
         // Set the secondary continue button visibility and text based on the custom attributes.
-        ViewStub secondaryToolbarButtonStub =
-                (ViewStub) findViewById(R.id.secondary_toolbar_button_stub);
         if (showSecondaryToolbarButton || !TextUtils.isEmpty(secondaryToolbarButtonText)) {
-            secondaryToolbarButtonStub.inflate();
-            mSecondaryToolbarButton = findViewById(R.id.secondary_toolbar_button);
+            inflateSecondaryToolbarButtonIfNecessary();
             setSecondaryToolbarButtonText(secondaryToolbarButtonText);
             setSecondaryToolbarButtonEnabled(secondaryToolbarButtonEnabled);
             setSecondaryToolbarButtonVisible(showSecondaryToolbarButton);
@@ -445,7 +439,7 @@
         if (!visible && mSecondaryToolbarButton == null) {
             return;
         }
-        maybeInflateSecondaryToolbarButton();
+        inflateSecondaryToolbarButtonIfNecessary();
         setViewVisible(mSecondaryToolbarButton, visible);
     }
 
@@ -453,7 +447,7 @@
      * Sets whether the secondary continue button is enabled.
      */
     public void setSecondaryToolbarButtonEnabled(boolean enabled) {
-        maybeInflateSecondaryToolbarButton();
+        inflateSecondaryToolbarButtonIfNecessary();
         mSecondaryToolbarButton.setEnabled(enabled);
     }
 
@@ -461,7 +455,7 @@
      * Sets the secondary continue button text to the given text.
      */
     public void setSecondaryToolbarButtonText(String text) {
-        maybeInflateSecondaryToolbarButton();
+        inflateSecondaryToolbarButtonIfNecessary();
         mSecondaryToolbarButton.setText(text);
     }
 
@@ -470,7 +464,7 @@
      * listener should be overridden so no callback is made.
      */
     public void setSecondaryToolbarButtonListener(@Nullable View.OnClickListener listener) {
-        maybeInflateSecondaryToolbarButton();
+        inflateSecondaryToolbarButtonIfNecessary();
         mSecondaryToolbarButton.setOnClickListener(listener);
     }
 
@@ -576,7 +570,7 @@
      * A method that inflates the SecondaryToolbarButton if it is has not already been
      * inflated. If it has been inflated already this method will do nothing.
      */
-    private void maybeInflateSecondaryToolbarButton() {
+    private void inflateSecondaryToolbarButtonIfNecessary() {
         ViewStub secondaryToolbarButtonStub = findViewById(R.id.secondary_toolbar_button_stub);
         // If the secondaryToolbarButtonStub is null then the stub has been inflated so there is
         // nothing to do.
diff --git a/library/main/tests/robotests/res/layout/car_setup_wizard_layout_alternative_activity.xml b/library/main/tests/robotests/res/layout/car_setup_wizard_layout_alternative_activity.xml
new file mode 100644
index 0000000..5de2a09
--- /dev/null
+++ b/library/main/tests/robotests/res/layout/car_setup_wizard_layout_alternative_activity.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+<com.android.car.setupwizardlib.CarSetupWizardCompatLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/car_setup_wizard_layout"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:showPrimaryToolbarButton="false"
+    app:showSecondaryToolbarButton="true"/>
diff --git a/library/main/tests/robotests/res/layout/car_setup_wizard_layout_test_activity.xml b/library/main/tests/robotests/res/layout/car_setup_wizard_layout_test_activity.xml
index dd74b11..a9bcfbe 100644
--- a/library/main/tests/robotests/res/layout/car_setup_wizard_layout_test_activity.xml
+++ b/library/main/tests/robotests/res/layout/car_setup_wizard_layout_test_activity.xml
@@ -16,7 +16,6 @@
 -->
 <com.android.car.setupwizardlib.CarSetupWizardCompatLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:custom="http://schemas.android.com/apk/res-auto"
     android:id="@+id/car_setup_wizard_layout"
     android:orientation="vertical"
     android:layout_width="match_parent"
diff --git a/library/main/tests/robotests/res/values/attrs.xml b/library/main/tests/robotests/res/values/attrs.xml
new file mode 100644
index 0000000..4454939
--- /dev/null
+++ b/library/main/tests/robotests/res/values/attrs.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2019 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<resources>
+    <!-- Custom attribute definitions for the CarSetupWizardBaseLayout -->
+    <declare-styleable name="CarSetupWizardBaseLayout">
+        <!-- Attributes related to the visibility of the back button -->
+        <attr name="showBackButton" format="boolean"/>
+
+        <!-- Attributes related to the visibility and text of the toolbar title -->
+        <attr name="showToolbarTitle" format="boolean"/>
+        <attr name="toolbarTitleText" format="string"/>
+
+        <!--  Attributes related to the visibility and text of primary continue button -->
+        <attr name="showPrimaryToolbarButton" format="boolean"/>
+        <attr name="primaryToolbarButtonText" format="string"/>
+        <attr name="primaryToolbarButtonEnabled" format="boolean"/>
+        <attr name="primaryToolbarButtonFlat" format="boolean"/>
+
+        <!--  Attributes related to the visibility and text of secondary continue button -->
+        <attr name="showSecondaryToolbarButton" format="boolean"/>
+        <attr name="secondaryToolbarButtonText" format="string"/>
+        <attr name="secondaryToolbarButtonEnabled" format="boolean"/>
+
+        <!--  Attributes related to the visibility and indeterminate/determinate state
+              of the progress bar -->
+        <attr name="showProgressBar" format="boolean"/>
+        <attr name="indeterminateProgressBar" format="boolean"/>
+    </declare-styleable>
+
+</resources>
\ No newline at end of file
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
index dddb660..2ec9db8 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardCompatLayoutTest.java
@@ -31,8 +31,10 @@
 import androidx.annotation.ColorRes;
 import androidx.annotation.StyleRes;
 
+import com.android.car.setupwizardlib.partner.ExternalResources;
 import com.android.car.setupwizardlib.partner.FakeOverrideContentProvider;
 import com.android.car.setupwizardlib.partner.PartnerConfig;
+import com.android.car.setupwizardlib.partner.ResourceEntry;
 import com.android.car.setupwizardlib.robolectric.BaseRobolectricTest;
 import com.android.car.setupwizardlib.robolectric.TestHelper;
 
@@ -46,6 +48,8 @@
 import org.robolectric.shadows.ShadowTextView;
 import org.robolectric.util.ReflectionHelpers;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 
 /**
@@ -59,10 +63,25 @@
 
     private CarSetupWizardCompatLayout mCarSetupWizardCompatLayout;
 
+    private static final String TEST_PACKAGE_NAME = "test.packageName";
+
+    private static final PartnerConfig TEST_TOOLBAR_BUTTON_TEXT_SIZE_RESOURCE_NAME =
+            PartnerConfig.CONFIG_TOOLBAR_BUTTON_TEXT_SIZE;
+
+    private static final float TOLERANCE = 0.001f;
+    // A small value is picked so that it's not likely to coincide with the default font size
+    private static final float EXCEPTED_TEXT_SIZE = 4;
+
     @Before
     public void setUp() {
-        mCarSetupWizardCompatLayout = createCarSetupWizardCompatLayout();
+        FakeOverrideContentProvider fakeOverrideDataProvider =
+                FakeOverrideContentProvider.installEmptyProvider();
+        List<ResourceEntry> resourceEntries = prepareFakeData();
+        for (ResourceEntry entry : resourceEntries) {
+            fakeOverrideDataProvider.injectResourceEntry(entry);
+        }
 
+        mCarSetupWizardCompatLayout = createCarSetupWizardCompatLayout();
         // Have to make this call first to ensure secondaryToolbar button is created from stub.
         mCarSetupWizardCompatLayout.setSecondaryToolbarButtonVisible(true);
         mCarSetupWizardCompatLayout.setSecondaryToolbarButtonVisible(false);
@@ -501,6 +520,30 @@
                 .isEqualTo(getDrawbleDefaultColor(expected));
     }
 
+    @Test
+    public void test_bothButtons_areStyled_inDefaultLayout() {
+        Button primaryButton = mCarSetupWizardCompatLayout.getPrimaryToolbarButton();
+        Button secondaryButton = mCarSetupWizardCompatLayout.getSecondaryToolbarButton();
+
+        assertThat(primaryButton.getTextSize()).isWithin(TOLERANCE).of(EXCEPTED_TEXT_SIZE);
+        assertThat(secondaryButton.getTextSize()).isWithin(TOLERANCE).of(EXCEPTED_TEXT_SIZE);
+    }
+
+    @Test
+    public void test_bothButtons_areStyled_inAlternativeLayout() {
+        Activity activity = Robolectric
+                .buildActivity(CarSetupWizardLayoutAlternativeActivity.class)
+                .create()
+                .get();
+        CarSetupWizardCompatLayout layout = activity.findViewById(R.id.car_setup_wizard_layout);
+
+        Button primaryButton = layout.getPrimaryToolbarButton();
+        Button secondaryButton = layout.getSecondaryToolbarButton();
+
+        assertThat(primaryButton.getTextSize()).isWithin(TOLERANCE).of(EXCEPTED_TEXT_SIZE);
+        assertThat(secondaryButton.getTextSize()).isWithin(TOLERANCE).of(EXCEPTED_TEXT_SIZE);
+    }
+
     private void setupFakeContentProvider() {
         FakeOverrideContentProvider.installDefaultProvider();
     }
@@ -519,4 +562,22 @@
         ColorStateList colorStateList = ReflectionHelpers.getField(state, "mColor");
         return colorStateList.getDefaultColor();
     }
+
+    private List<ResourceEntry> prepareFakeData() {
+        ExternalResources.Resources testResources =
+                ExternalResources.injectExternalResources(TEST_PACKAGE_NAME);
+
+        testResources.putDimension(
+                TEST_TOOLBAR_BUTTON_TEXT_SIZE_RESOURCE_NAME.getResourceName(), EXCEPTED_TEXT_SIZE);
+
+        return Arrays.asList(
+                new ResourceEntry(
+                        TEST_PACKAGE_NAME,
+                        TEST_TOOLBAR_BUTTON_TEXT_SIZE_RESOURCE_NAME.getResourceName(),
+                        testResources.getIdentifier(
+                                TEST_TOOLBAR_BUTTON_TEXT_SIZE_RESOURCE_NAME.getResourceName(),
+                                /* defType= */ "dimen",
+                                TEST_PACKAGE_NAME))
+        );
+    }
 }
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutAlternativeActivity.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutAlternativeActivity.java
new file mode 100644
index 0000000..b20da7c
--- /dev/null
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/CarSetupWizardLayoutAlternativeActivity.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.setupwizardlib;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Activity for CarSetupWizardLayoutTest where primary button isn't shown but secondary button is.
+ */
+public class CarSetupWizardLayoutAlternativeActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.car_setup_wizard_layout_alternative_activity);
+    }
+}
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/partner/ExternalResources.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/partner/ExternalResources.java
index 16a6d2a..fec2290 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/partner/ExternalResources.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/partner/ExternalResources.java
@@ -44,7 +44,7 @@
  * used with {@link org.robolectric.shadows.ShadowPackageManager#resources} to simulate loading
  * resources from another package.
  */
-class ExternalResources {
+public class ExternalResources {
 
     public static Resources injectExternalResources(String packageName) {
         return injectExternalResources(createPackageInfo(packageName));
