diff --git a/main/res/values-v31/styles.xml b/main/res/values-v31/styles.xml
index 1be5b13..5fab1c1 100644
--- a/main/res/values-v31/styles.xml
+++ b/main/res/values-v31/styles.xml
@@ -198,6 +198,8 @@
   </style>
 
   <style name="SudAppCompatButtonButtonBarAlertDialog" parent="Widget.AppCompat.ButtonBar.AlertDialog">
+    <item name="android:layout_marginStart">@dimen/sud_glif_alert_dialog_footer_bar_padding_start</item>
+    <item name="android:layout_marginLeft">@dimen/sud_glif_alert_dialog_footer_bar_padding_start</item>
     <item name="android:textAppearance">@style/SudTextAppearanceDeviceDefaultMedium</item>
     <item name="android:minWidth">@dimen/sud_alert_dialog_button_bar_width</item>
     <item name="android:minHeight">@dimen/sud_alert_dialog_button_bar_height</item>
diff --git a/main/res/values/dimens.xml b/main/res/values/dimens.xml
index 1562cc5..d3f0d02 100644
--- a/main/res/values/dimens.xml
+++ b/main/res/values/dimens.xml
@@ -56,6 +56,7 @@
     <dimen name="sud_horizontal_icon_height">32dp</dimen>
 
     <dimen name="sud_glif_alert_dialog_corner_radius">8dp</dimen>
+    <dimen name="sud_glif_alert_dialog_footer_bar_padding_start">8dp</dimen>
     <dimen name="sud_glif_v3_button_corner_radius">4dp</dimen>
     <dimen name="sud_glif_device_default_dialog_corner_radius">28dp</dimen>
     <dimen name="sud_glif_land_header_area_weight">1</dimen>
diff --git a/main/src/com/google/android/setupdesign/span/LinkSpan.java b/main/src/com/google/android/setupdesign/span/LinkSpan.java
index 7defbf9..3bb1617 100644
--- a/main/src/com/google/android/setupdesign/span/LinkSpan.java
+++ b/main/src/com/google/android/setupdesign/span/LinkSpan.java
@@ -140,13 +140,4 @@
   public String getLink() {
     return link;
   }
-
-  /**
-   * @deprecated Method's return type clashes with its superclass. Use {@link #getLink()} instead.
-   * This will be removed in the future.
-   */
-  @Deprecated
-  public String getId() {
-    return link;
-  }
 }
diff --git a/main/src/com/google/android/setupdesign/template/HeaderMixin.java b/main/src/com/google/android/setupdesign/template/HeaderMixin.java
index 814f873..2a6114d 100644
--- a/main/src/com/google/android/setupdesign/template/HeaderMixin.java
+++ b/main/src/com/google/android/setupdesign/template/HeaderMixin.java
@@ -27,6 +27,7 @@
 import android.view.ViewGroup;
 import android.view.ViewParent;
 import android.view.ViewTreeObserver;
+import android.view.ViewTreeObserver.OnPreDrawListener;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 import androidx.annotation.AttrRes;
@@ -42,6 +43,7 @@
 import com.google.android.setupdesign.util.LayoutStyler;
 import com.google.android.setupdesign.util.PartnerStyleHelper;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
+import java.util.ArrayList;
 
 /**
  * A {@link com.google.android.setupcompat.template.Mixin} for setting and getting the header text.
@@ -54,7 +56,10 @@
   private float headerAutoSizeMinTextSizeInPx;
   private float headerAutoSizeLineExtraSpacingInPx;
   private int headerAutoSizeMaxLineOfMaxSize;
+  private float defaultTextSize = 0;
+  private int defaultLineHeight = 0;
   private static final int AUTO_SIZE_DEFAULT_MAX_LINES = 6;
+  ArrayList<OnPreDrawListener> titlePreDrawListeners = new ArrayList<>();
 
   /**
    * A {@link com.google.android.setupcompat.template.Mixin} for setting and getting the Header.
@@ -78,8 +83,11 @@
         a.getColorStateList(R.styleable.SucHeaderMixin_sucHeaderTextColor);
 
     a.recycle();
-
-    // Try to update the flag of the uto size config settings
+    if (getTextView() != null) {
+      defaultTextSize = getTextView().getTextSize();
+      defaultLineHeight = getTextView().getLineHeight();
+    }
+    // Try to update the flag of the auto size config settings
     tryUpdateAutoTextSizeFlagWithPartnerConfig();
 
     // Set the header text
@@ -109,7 +117,11 @@
     if (!autoTextSizeEnabled) {
       return;
     }
+    tryUpdateAutoTextConfigWithPartnerConfig();
+  }
 
+  private void tryUpdateAutoTextConfigWithPartnerConfig() {
+    Context context = templateLayout.getContext();
     if (PartnerConfigHelper.get(context)
         .isPartnerConfigAvailable(PartnerConfig.CONFIG_HEADER_AUTO_SIZE_MAX_TEXT_SIZE)) {
       headerAutoSizeMaxTextSizeInPx =
@@ -207,36 +219,66 @@
     }
     // preset as the max size
     titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, headerAutoSizeMaxTextSizeInPx);
+    defaultTextSize = titleView.getTextSize();
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
       titleView.setLineHeight(
           Math.round(headerAutoSizeLineExtraSpacingInPx + headerAutoSizeMaxTextSizeInPx));
+      defaultLineHeight = titleView.getLineHeight();
     }
     titleView.setMaxLines(AUTO_SIZE_DEFAULT_MAX_LINES);
-
     // reset text size if the line count for max text size > headerAutoSizeMaxLineOfMaxTextSize
-    titleView
-        .getViewTreeObserver()
-        .addOnPreDrawListener(
-            new ViewTreeObserver.OnPreDrawListener() {
-              @Override
-              public boolean onPreDraw() {
-                // Remove listener to avoid this called every frame
-                titleView.getViewTreeObserver().removeOnPreDrawListener(this);
-                int lineCount = titleView.getLineCount();
-                if (lineCount > headerAutoSizeMaxLineOfMaxSize) {
-                  // reset text size
-                  titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, headerAutoSizeMinTextSizeInPx);
-                  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
-                    titleView.setLineHeight(
-                        Math.round(
-                            headerAutoSizeLineExtraSpacingInPx + headerAutoSizeMinTextSizeInPx));
-                  }
-                  titleView.invalidate();
-                  return false; // false to skip this frame
-                }
-                return true;
+    OnPreDrawListener titlePreDrawListener =
+        new ViewTreeObserver.OnPreDrawListener() {
+          @Override
+          public boolean onPreDraw() {
+            // Remove listener to avoid this called every frame
+            titleView.getViewTreeObserver().removeOnPreDrawListener(this);
+            int lineCount = titleView.getLineCount();
+            if (lineCount > headerAutoSizeMaxLineOfMaxSize) {
+              // reset text size
+              titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, headerAutoSizeMinTextSizeInPx);
+              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                titleView.setLineHeight(
+                    Math.round(headerAutoSizeLineExtraSpacingInPx + headerAutoSizeMinTextSizeInPx));
               }
-            });
+              titleView.invalidate();
+              return false; // false to skip this frame
+            }
+            return true;
+          }
+        };
+    titleView.getViewTreeObserver().addOnPreDrawListener(titlePreDrawListener);
+    titlePreDrawListeners.add(titlePreDrawListener);
+  }
+
+  private void resetTextSize(TextView titleView) {
+    if (titleView == null) {
+      return;
+    }
+    titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultTextSize);
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+      titleView.setLineHeight(defaultLineHeight);
+    }
+    for (OnPreDrawListener titlePreDrawListener : titlePreDrawListeners) {
+      titleView.getViewTreeObserver().removeOnPreDrawListener(titlePreDrawListener);
+    }
+    titlePreDrawListeners.clear();
+  }
+
+  /**
+   * Enable or disable the auto size for header string. Which will adjust the font size of header
+   * string to fit the limitation of headerAutoSizeMaxLineOfMaxSize.
+   */
+  public void setAutoTextSizeEnabled(boolean autoTextSizeEnabled) {
+    this.autoTextSizeEnabled = autoTextSizeEnabled;
+    if (autoTextSizeEnabled) {
+      tryUpdateAutoTextConfigWithPartnerConfig();
+      if (autoTextSizeEnabled) {
+        autoAdjustTextSize(getTextView());
+      }
+    } else {
+      resetTextSize(getTextView());
+    }
   }
 
   /** Returns the current header text. */
diff --git a/main/src/com/google/android/setupdesign/util/DeviceHelper.java b/main/src/com/google/android/setupdesign/util/DeviceHelper.java
index 5845cbb..37c5144 100644
--- a/main/src/com/google/android/setupdesign/util/DeviceHelper.java
+++ b/main/src/com/google/android/setupdesign/util/DeviceHelper.java
@@ -16,26 +16,34 @@
 
 package com.google.android.setupdesign.util;
 
+import android.annotation.SuppressLint;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.Resources.NotFoundException;
 import android.net.Uri;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.util.Log;
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
+import com.google.android.setupcompat.util.Logger;
 import com.google.android.setupdesign.R;
 
 /** Helper class to get attributes of the device, like a friendly display name. */
 public final class DeviceHelper {
 
+  private static final Logger LOG = new Logger("DeviceHelper");
   private static final String TAG = DeviceHelper.class.getSimpleName();
 
   @VisibleForTesting
   public static final String SUW_AUTHORITY = "com.google.android.setupwizard.partner";
 
+  @VisibleForTesting public static final String DEVICE_NAME = "device_name";
+  private static final String STRING = "string";
   @VisibleForTesting public static final String GET_DEVICE_NAME_METHOD = "getDeviceName";
 
+  @VisibleForTesting public static Bundle deviceName = null;
+
   /**
    * Get the device name text from these resources, if they are unavailable or setupwizard apk is
    * older which does not contains {@link DeviceHelper#GET_DEVICE_NAME_METHOD} method, return the
@@ -45,30 +53,47 @@
    * com.google.android.setupwizard.util.PartnerResource#DEVICE_NAME}) > {@link
    * android.provider.Settings.Global#DEVICE_NAME} > system property ro.product.model)
    */
-  @Nullable
+  @NonNull
+  @SuppressLint("DiscouragedApi")
   public static CharSequence getDeviceName(@NonNull Context context) {
-    Bundle deviceName = null;
-
-    try {
-      deviceName =
-          context
-              .getContentResolver()
-              .call(
-                  new Uri.Builder()
-                      .scheme(ContentResolver.SCHEME_CONTENT)
-                      .authority(SUW_AUTHORITY)
-                      .build(),
-                  GET_DEVICE_NAME_METHOD,
-                  /* arg= */ null,
-                  /* extras= */ null);
-    } catch (IllegalArgumentException | SecurityException exception) {
-      Log.w(TAG, "device name unknown; return the device name as default value");
+    if (deviceName == null || deviceName.isEmpty()) {
+      try {
+        deviceName =
+            context
+                .getContentResolver()
+                .call(
+                    new Uri.Builder()
+                        .scheme(ContentResolver.SCHEME_CONTENT)
+                        .authority(SUW_AUTHORITY)
+                        .build(),
+                    GET_DEVICE_NAME_METHOD,
+                    /* arg= */ null,
+                    /* extras= */ null);
+      } catch (IllegalArgumentException | SecurityException exception) {
+        Log.w(TAG, "device name unknown; return the device name as default value");
+      }
     }
 
-    if (deviceName != null) {
+    if (deviceName != null && !deviceName.isEmpty()) {
       return deviceName.getCharSequence(GET_DEVICE_NAME_METHOD, null);
     }
 
+    Partner partner = Partner.get(context);
+    if (partner != null) {
+      try {
+        int resId =
+            partner.getResources().getIdentifier(DEVICE_NAME, STRING, partner.getPackageName());
+        String overlayDeviceName = partner.getResources().getString(resId);
+        if (!TextUtils.isEmpty(overlayDeviceName)) {
+          return overlayDeviceName;
+        } else {
+          LOG.w("The overlayDeviceName is null!");
+        }
+      } catch (NotFoundException ex) {
+        // fall through
+      }
+    }
+
     return context.getString(R.string.sud_default_device_name);
   }
 
