diff --git a/res/layout/accessibility_text_reading_reset_button_suw.xml b/res/layout/accessibility_text_reading_reset_button_suw.xml
new file mode 100644
index 0000000..97e12f3
--- /dev/null
+++ b/res/layout/accessibility_text_reading_reset_button_suw.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2022 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT 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"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart">
+
+    <Button
+        android:id="@+id/reset_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical|start"
+        android:paddingVertical="14dp"
+        android:background="?android:attr/selectableItemBackground"
+        android:textColor="?android:attr/colorAccent"
+        android:textSize="16sp"
+        android:text="@string/accessibility_text_reading_reset_button_title"
+        android:fontFamily="@*android:string/config_bodyFontFamilyMedium" />
+</FrameLayout>
diff --git a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
index 555cc33..893837c 100644
--- a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
@@ -37,6 +37,7 @@
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.search.SearchIndexable;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
 import com.google.common.annotations.VisibleForTesting;
 
 import java.lang.annotation.Retention;
@@ -168,6 +169,9 @@
                         v -> showDialog(DialogEnums.DIALOG_RESET_SETTINGS));
         resetController.setEntryPoint(mEntryPoint);
         controllers.add(resetController);
+        if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
+            resetController.setSetupWizardStyle();
+        }
 
         return controllers;
     }
diff --git a/src/com/android/settings/accessibility/TextReadingResetController.java b/src/com/android/settings/accessibility/TextReadingResetController.java
index b847591..206090c 100644
--- a/src/com/android/settings/accessibility/TextReadingResetController.java
+++ b/src/com/android/settings/accessibility/TextReadingResetController.java
@@ -23,6 +23,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
+import com.android.settings.accessibility.TextReadingResetPreference.ButtonStyle;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.instrumentation.SettingsStatsLog;
 
@@ -30,6 +31,8 @@
  * The controller of the reset button in the text and reading options page.
  */
 class TextReadingResetController extends BasePreferenceController {
+    @ButtonStyle
+    private int mButtonStyle;
     private final View.OnClickListener mOnResetClickListener;
 
     @EntryPoint
@@ -63,6 +66,12 @@
                         AccessibilityStatsLogUtils.convertToEntryPoint(mEntryPoint));
             }
         });
+
+        resetPreference.setSetupWizardStyle(mButtonStyle);
+    }
+
+    void setSetupWizardStyle() {
+        mButtonStyle = ButtonStyle.SUW;
     }
 
     /**
diff --git a/src/com/android/settings/accessibility/TextReadingResetPreference.java b/src/com/android/settings/accessibility/TextReadingResetPreference.java
index 9518de2..64f3834 100644
--- a/src/com/android/settings/accessibility/TextReadingResetPreference.java
+++ b/src/com/android/settings/accessibility/TextReadingResetPreference.java
@@ -20,11 +20,15 @@
 import android.util.AttributeSet;
 import android.view.View;
 
+import androidx.annotation.IntDef;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceViewHolder;
 
 import com.android.settings.R;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * The preference which is used for resetting the status of all preferences in the display size
  * and text page.
@@ -32,10 +36,20 @@
 public class TextReadingResetPreference extends Preference {
     private View.OnClickListener mOnResetClickListener;
 
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({
+            ButtonStyle.DEFAULT,
+            ButtonStyle.SUW,
+    })
+    @interface ButtonStyle {
+        int DEFAULT = 0;
+        int SUW = 1;
+    }
+
     public TextReadingResetPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
 
-        setLayoutResource(R.layout.accessibility_text_reading_reset_button);
+        setSetupWizardStyle(ButtonStyle.DEFAULT);
     }
 
     @Override
@@ -46,6 +60,13 @@
         view.setOnClickListener(mOnResetClickListener);
     }
 
+    void setSetupWizardStyle(@ButtonStyle int style) {
+        final int layoutResId = (style == ButtonStyle.SUW)
+                ? R.layout.accessibility_text_reading_reset_button_suw
+                : R.layout.accessibility_text_reading_reset_button;
+        setLayoutResource(layoutResId);
+    }
+
     void setOnResetClickListener(View.OnClickListener resetClickListener) {
         mOnResetClickListener = resetClickListener;
     }
