diff --git a/res/drawable/wifi_dpp_error.xml b/res/drawable/wifi_dpp_error.xml
new file mode 100644
index 0000000..ad04a2b
--- /dev/null
+++ b/res/drawable/wifi_dpp_error.xml
@@ -0,0 +1,59 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="280dp"
+    android:viewportWidth="412"
+    android:viewportHeight="280">
+  <path
+      android:pathData="M110.14,169.6c-3.95,-1.35 -6.07,-5.69 -4.75,-9.7l2.89,-8.7c1.33,-4 5.61,-6.15 9.57,-4.81c3.95,1.35 6.07,5.69 4.75,9.7l-2.89,8.7C118.37,168.79 114.1,170.94 110.14,169.6z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M365.39,97.33l-7.72,-7.72c-0.89,-0.89 -0.89,-2.33 0,-3.22l7.72,-7.72c0.89,-0.89 2.33,-0.89 3.22,0l7.72,7.72c0.89,0.89 0.89,2.33 0,3.22l-7.72,7.72C367.72,98.22 366.29,98.22 365.39,97.33z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M57.99,113.3l-12.86,-8.87c-1.48,-1.03 -3.56,-0.09 -3.72,1.69l-1.41,15.35c-0.16,1.78 1.7,3.07 3.35,2.32l14.27,-6.48C59.28,116.55 59.48,114.33 57.99,113.3z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M93,65m-6,0a6,6 0,1 1,12 0a6,6 0,1 1,-12 0"
+      android:fillColor="#BDC1C6"/>
+  <path
+      android:pathData="M241.37,35.13h-0.01c-0.63,-0.32 -1.26,-0.63 -1.9,-0.92c-5.98,-2.78 -12.37,-4.82 -19.06,-6.01c-0.74,-0.13 -1.48,-0.25 -2.22,-0.36c-3.74,-0.55 -7.56,-0.84 -11.45,-0.84c-43,0 -78,34.99 -78,78s35,78 78,78c12.5,0 24.32,-2.96 34.81,-8.2l8.68,14.94l3.46,-2.01l-8.6,-14.81c10.96,-6.22 20.28,-15 27.12,-25.54c4.03,-6.18 7.19,-12.97 9.34,-20.19c2.09,-7.03 3.21,-14.48 3.21,-22.18C284.74,74.42 267.05,47.9 241.37,35.13zM277.34,127.2c-0.24,0.76 -0.49,1.51 -0.76,2.26c-1.55,4.44 -3.53,8.68 -5.86,12.68c-0.4,0.68 -0.81,1.35 -1.23,2.02C256.41,165.07 233.17,179 206.73,179c-40.8,0 -74,-33.2 -74,-74s33.2,-74 74,-74c4.38,0 8.67,0.38 12.85,1.12c0.75,0.13 1.5,0.27 2.25,0.43c4.11,0.85 8.09,2.05 11.92,3.56c0.95,0.37 1.89,0.76 2.82,1.18c25.99,11.49 44.17,37.52 44.17,67.71C280.74,112.73 279.55,120.19 277.34,127.2z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M241.37,35.13h-0.01c-0.63,-0.32 -1.26,-0.63 -1.9,-0.92c-5.98,-2.78 -12.37,-4.82 -19.06,-6.01c-0.74,-0.13 -1.48,-0.25 -2.22,-0.36l-1.03,-3.13c-0.53,-1.63 0.36,-3.39 1.99,-3.92l14.15,-4.64c1.63,-0.53 3.39,0.36 3.92,1.99l4.64,14.15C242.18,33.3 241.96,34.35 241.37,35.13z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M291,138.5c0,6.35 -5.15,11.5 -11.5,11.5c-2.78,0 -5.33,-0.99 -7.31,-2.63c4.03,-6.18 7.19,-12.97 9.34,-20.19C286.91,128.14 291,132.84 291,138.5z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M268,138.5c0,2.06 0.54,3.99 1.49,5.66c0.42,-0.67 0.83,-1.34 1.23,-2.02c-0.46,-1.12 -0.72,-2.35 -0.72,-3.64c0,-4.22 2.76,-7.81 6.58,-9.04c0.27,-0.75 0.52,-1.5 0.76,-2.26C272.02,128.21 268,132.89 268,138.5z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M233.75,36.11l-8.67,2.84c-0.11,0.03 -0.22,0.05 -0.34,0.05c-0.48,0 -0.9,-0.31 -1.05,-0.76l-1.86,-5.69c-0.75,-0.16 -1.5,-0.3 -2.25,-0.43l2.21,6.74c0.43,1.31 1.65,2.14 2.95,2.14c0.32,0 0.65,-0.05 0.97,-0.15l10.86,-3.56C235.64,36.87 234.7,36.48 233.75,36.11z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M242.5,194.06l38.6,66.46c0.68,1.17 2.2,1.59 3.37,0.89l15.01,-8.71c1.17,-0.68 1.59,-2.2 0.89,-3.37l-38.6,-66.46c-0.68,-1.17 -2.2,-1.59 -3.37,-0.89l-15.01,8.71C242.22,191.36 241.83,192.88 242.5,194.06z"
+      android:fillColor="#F1F3F4"/>
+  <path
+      android:pathData="M326.73,100L334.73,109"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#DADCE0"/>
+  <path
+      android:pathData="M166,151.56L173,148.56"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#DADCE0"/>
+  <path
+      android:pathData="M235.84,119.68l-25.6,-44.23c-1.88,-3.26 -6.59,-3.26 -8.48,0l-25.6,44.23c-1.88,3.26 0.47,7.32 4.24,7.32h51.2C235.37,127 237.72,122.93 235.84,119.68z"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#EA4335"/>
+  <path
+      android:pathData="M203.88,117.12c-0.58,-0.59 -0.88,-1.3 -0.88,-2.14c0,-0.84 0.29,-1.54 0.88,-2.12c0.58,-0.57 1.29,-0.86 2.12,-0.86c0.83,0 1.54,0.29 2.12,0.86c0.58,0.57 0.88,1.28 0.88,2.12c0,0.84 -0.29,1.55 -0.88,2.14c-0.58,0.59 -1.29,0.88 -2.12,0.88C205.17,118 204.46,117.71 203.88,117.12zM203.5,99.09V91h5v8.09l-0.49,9.91h-4.02L203.5,99.09z"
+      android:fillColor="#EA4335"/>
+  <path
+      android:pathData="M91.73,102L82.73,98"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#DADCE0"/>
+</vector>
diff --git a/res/drawable/wifi_dpp_success.xml b/res/drawable/wifi_dpp_success.xml
new file mode 100644
index 0000000..5ef3d1f
--- /dev/null
+++ b/res/drawable/wifi_dpp_success.xml
@@ -0,0 +1,54 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="280dp"
+    android:viewportWidth="412"
+    android:viewportHeight="280">
+  <path
+      android:pathData="M185.13,171.87c-1.93,-1.91 -4.45,-2.87 -6.97,-2.87c-2.51,0 -5.03,0.96 -6.94,2.87l-0.12,0.12c0.62,0.34 1.25,0.67 1.89,0.98c1.43,-1.28 3.25,-1.97 5.17,-1.97c2.1,0 4.07,0.81 5.55,2.29c1.33,1.33 2.08,3.02 2.25,4.76c0.68,0.19 1.36,0.38 2.04,0.56C187.95,176.16 186.99,173.74 185.13,171.87z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M281.06,87.88C279.52,88.6 277.81,89 276,89c-6.62,0 -12,-5.38 -12,-12c0,-5.23 3.36,-9.69 8.04,-11.33c-0.35,-0.58 -0.71,-1.16 -1.08,-1.73C265.72,65.96 262,71.05 262,77c0,7.73 6.27,14 14,14c1.95,0 3.81,-0.4 5.49,-1.12C281.36,89.21 281.22,88.54 281.06,87.88z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M187.83,180.61c-0.34,1.9 -1.24,3.71 -2.7,5.17l-8.35,8.35c-3.85,3.83 -10.06,3.83 -13.91,0c-3.83,-3.84 -3.83,-10.06 0,-13.91l6.77,-6.77C175.32,176.56 181.42,178.99 187.83,180.61z"
+      android:fillColor="#4285F4"/>
+  <path
+      android:pathData="M290,77c0,5.04 -2.67,9.46 -6.67,11.93c-1.94,-9.23 -5.52,-17.87 -10.42,-25.59C273.9,63.12 274.94,63 276,63C283.73,63 290,69.27 290,77z"
+      android:fillColor="#FBBC04"/>
+  <path
+      android:pathData="M285,105c0,-5.51 -0.57,-10.88 -1.67,-16.07c-1.94,-9.23 -5.52,-17.87 -10.42,-25.59C259.07,41.51 234.7,27 207,27c-43.01,0 -78,34.99 -78,78c0,29.48 16.44,55.2 40.64,68.45c5.68,3.11 11.78,5.54 18.19,7.16c6.14,1.56 12.56,2.39 19.17,2.39c12.41,0 24.16,-2.92 34.59,-8.11l8.62,14.84l1.73,-1l1.73,-1.01l-8.54,-14.7C268.91,159.65 285,134.17 285,105zM207,179c-6.67,0 -13.14,-0.89 -19.29,-2.55c-5.23,-1.41 -10.22,-3.38 -14.92,-5.85C149.16,158.23 133,133.47 133,105c0,-40.8 33.2,-74 74,-74c26,0 48.91,13.48 62.1,33.82c5.02,7.71 8.63,16.4 10.47,25.72c0.94,4.67 1.43,9.51 1.43,14.46C281,145.8 247.8,179 207,179z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M374.55,125.39l-6.95,-6.95c-0.8,-0.8 -0.8,-2.1 0,-2.9l6.95,-6.95c0.8,-0.8 2.1,-0.8 2.9,0l6.95,6.95c0.8,0.8 0.8,2.1 0,2.9l-6.95,6.95C376.65,126.2 375.36,126.2 374.55,125.39z"
+      android:fillColor="#32A753"/>
+  <path
+      android:pathData="M57.33,138.1L46.9,127.67c-1.2,-1.2 -1.2,-3.15 0,-4.35l10.43,-10.43c1.2,-1.2 3.15,-1.2 4.35,0l10.43,10.43c1.2,1.2 1.2,3.15 0,4.35L61.67,138.1C60.48,139.3 58.52,139.3 57.33,138.1z"
+      android:fillColor="#FBBC04"/>
+  <path
+      android:pathData="M320.49,109.73l6.33,16.64c0.73,1.93 -0.9,3.93 -2.94,3.6l-17.62,-2.85c-2.04,-0.33 -2.96,-2.74 -1.65,-4.34l11.28,-13.79C317.2,107.38 319.76,107.81 320.49,109.73z"
+      android:fillColor="#EA4335"/>
+  <path
+      android:pathData="M110,49m-5,0a5,5 0,1 1,10 0a5,5 0,1 1,-10 0"
+      android:fillColor="#EA4335"/>
+  <path
+      android:pathData="M41.074,54.755l1.317,-1.505l16,14l-1.317,1.505z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M303.566,179.017l11,-1.999l0.358,1.968l-11,1.999z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M333.378,70.081l16,-6.005l0.703,1.872l-16,6.005z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M95.347,171.085l7.004,-3.003l0.788,1.838l-7.004,3.003z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M203.43,114.78l-9,-9.22l2.86,-2.79l6.21,6.36l14.42,-14.08l2.79,2.86z"
+      android:fillColor="#34A853"/>
+  <path
+      android:pathData="M242.5,194.06l38.6,66.46c0.68,1.17 2.2,1.59 3.37,0.89l15.01,-8.71c1.17,-0.68 1.59,-2.2 0.89,-3.37l-38.6,-66.46c-0.68,-1.17 -2.2,-1.59 -3.37,-0.89l-15.01,8.71C242.22,191.36 241.83,192.88 242.5,194.06z"
+      android:fillColor="#F1F3F4"/>
+  <path
+      android:pathData="M225.04,138h-36.08c-3.84,0 -6.96,-3.12 -6.96,-6.96V76.96c0,-3.84 3.12,-6.96 6.96,-6.96h36.08c3.84,0 6.96,3.12 6.96,6.96v54.08C232,134.88 228.88,138 225.04,138zM188.96,74c-1.63,0 -2.96,1.33 -2.96,2.96v54.08c0,1.63 1.33,2.96 2.96,2.96h36.08c1.63,0 2.96,-1.33 2.96,-2.96V76.96c0,-1.63 -1.33,-2.96 -2.96,-2.96H188.96z"
+      android:fillColor="#32A753"/>
+</vector>
diff --git a/res/layout/choose_lock_pattern_common.xml b/res/layout/choose_lock_pattern_common.xml
index b31062e..2ebcd9b 100644
--- a/res/layout/choose_lock_pattern_common.xml
+++ b/res/layout/choose_lock_pattern_common.xml
@@ -19,11 +19,11 @@
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:icon="@drawable/ic_lock"
     android:layout="@layout/sud_glif_blank_template"
-    settings:sucFooter="@layout/choose_lock_pattern_common_footer"
     settings:sucHeaderText="@string/lockpassword_choose_your_screen_lock_header">
 
     <com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
diff --git a/res/layout/choose_lock_pattern_common_footer.xml b/res/layout/choose_lock_pattern_common_footer.xml
deleted file mode 100644
index b582854..0000000
--- a/res/layout/choose_lock_pattern_common_footer.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2017 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.
--->
-
-<!-- TODO: Use aapt:attr when it is fixed (b/36809755) -->
-<com.google.android.setupdesign.view.ButtonBarLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/SudGlifButtonBar.Stackable"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <!-- left : skip -->
-    <Button android:id="@+id/skip_button"
-        style="@style/SudGlifButton.Secondary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/skip_label"
-        android:visibility="gone" />
-
-    <!-- left : retry -->
-    <Button android:id="@+id/footerLeftButton"
-        style="@style/SudGlifButton.Secondary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/lockpattern_tutorial_cancel_label" />
-
-    <Space
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:layout_weight="1" />
-
-    <!-- right : confirm or ok -->
-    <Button android:id="@+id/footerRightButton"
-        style="@style/SudGlifButton.Primary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/lockpattern_tutorial_continue_label" />
-
-</com.google.android.setupdesign.view.ButtonBarLayout>
diff --git a/res/layout/wifi_dpp_add_device_fragment.xml b/res/layout/wifi_dpp_add_device_fragment.xml
index 97f5764..479e626 100644
--- a/res/layout/wifi_dpp_add_device_fragment.xml
+++ b/res/layout/wifi_dpp_add_device_fragment.xml
@@ -38,6 +38,8 @@
                 android:id="@+id/wifi_ap_picture_view"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
+                android:src="@drawable/wifi_dpp_success"
+                android:scaleType="fitCenter"
                 app:layout_constraintTop_toBottomOf="@+id/header"/>
 
             <Button
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index c61059f..31b89f1 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1105,8 +1105,8 @@
     </string-array>
 
     <string-array name="wifi_privacy_entries">
-        <item>Use device MAC</item>
         <item>Use randomized MAC (default)</item>
+        <item>Use device MAC</item>
     </string-array>
 
     <string-array name="wifi_hidden_entries">
@@ -1121,8 +1121,8 @@
     </string-array>
 
     <string-array name="wifi_privacy_values" translatable="false">
-        <item>0</item>
         <item>1</item>
+        <item>0</item>
     </string-array>
 
     <!-- Titles for ui dark mode preference. -->
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 55ca4ba..1f0bb4e 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -50,6 +50,8 @@
 import com.android.settings.notification.RedactionInterstitial;
 
 import com.google.android.collect.Lists;
+import com.google.android.setupcompat.item.FooterButton;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
 import com.google.android.setupdesign.GlifLayout;
 
 import java.util.ArrayList;
@@ -171,7 +173,7 @@
     }
 
     public static class ChooseLockPatternFragment extends InstrumentedFragment
-            implements View.OnClickListener, SaveAndFinishWorker.Listener {
+            implements SaveAndFinishWorker.Listener {
 
         public static final int CONFIRM_EXISTING_REQUEST = 55;
 
@@ -193,8 +195,8 @@
         protected TextView mMessageText;
         protected LockPatternView mLockPatternView;
         protected TextView mFooterText;
-        private TextView mFooterLeftButton;
-        private TextView mFooterRightButton;
+        protected FooterButton mSkipOrClearButton;
+        private FooterButton mNextButton;
         protected List<LockPatternView.Cell> mChosenPattern = null;
         private ColorStateList mDefaultHeaderColorList;
 
@@ -232,11 +234,11 @@
         }
 
         protected void setRightButtonEnabled(boolean enabled) {
-            mFooterRightButton.setEnabled(enabled);
+            mNextButton.setEnabled(enabled);
         }
 
         protected void setRightButtonText(int text) {
-            mFooterRightButton.setText(text);
+            mNextButton.setText(getActivity(), text);
         }
 
         /**
@@ -287,8 +289,7 @@
                         mHeaderText.setTextColor(mDefaultHeaderColorList);
                     }
                     mFooterText.setText("");
-                    mFooterLeftButton.setEnabled(false);
-                    mFooterRightButton.setEnabled(false);
+                    mNextButton.setEnabled(false);
 
                     if (mTitleHeaderScrollView != null) {
                         mTitleHeaderScrollView.post(new Runnable() {
@@ -487,6 +488,27 @@
                     layout.setIcon(getActivity().getDrawable(R.drawable.ic_face_header));
                 }
             }
+
+            final ButtonFooterMixin mixin = layout.getMixin(ButtonFooterMixin.class);
+            mixin.setSecondaryButton(
+                    new FooterButton.Builder(getActivity())
+                            .setText(R.string.lockpattern_tutorial_cancel_label)
+                            .setListener(this::onSkipOrClearButtonClick)
+                            .setButtonType(FooterButton.ButtonType.OTHER)
+                            .setTheme(R.style.SudGlifButton_Secondary)
+                            .build()
+            );
+            mixin.setPrimaryButton(
+                    new FooterButton.Builder(getActivity())
+                            .setText(R.string.lockpattern_tutorial_continue_label)
+                            .setListener(this::onNextButtonClick)
+                            .setButtonType(FooterButton.ButtonType.NEXT)
+                            .setTheme(R.style.SudGlifButton_Primary)
+                            .build()
+            );
+            mSkipOrClearButton = mixin.getSecondaryButton();
+            mNextButton = mixin.getPrimaryButton();
+
             return layout;
         }
 
@@ -506,15 +528,9 @@
 
             mFooterText = (TextView) view.findViewById(R.id.footerText);
 
-            mFooterLeftButton = (TextView) view.findViewById(R.id.footerLeftButton);
-            mFooterRightButton = (TextView) view.findViewById(R.id.footerRightButton);
-
             mTitleHeaderScrollView = (ScrollView) view.findViewById(R.id
                     .scroll_layout_title_header);
 
-            mFooterLeftButton.setOnClickListener(this);
-            mFooterRightButton.setOnClickListener(this);
-
             // make it so unhandled touch events within the unlock screen go to the
             // lock pattern view.
             final LinearLayoutWithDefaultTouchRecepient topLayout
@@ -623,12 +639,12 @@
             }
         }
 
-        public void onClick(View v) {
-            if (v == mFooterLeftButton) {
-                handleLeftButton();
-            } else if (v == mFooterRightButton) {
-                handleRightButton();
-            }
+        protected void onSkipOrClearButtonClick(View view) {
+            handleLeftButton();
+        }
+
+        protected void onNextButtonClick(View view) {
+            handleRightButton();
         }
 
         public boolean onKeyDown(int keyCode, KeyEvent event) {
@@ -711,7 +727,7 @@
                 }
             }
 
-            updateFooterLeftButton(stage, mFooterLeftButton);
+            updateFooterLeftButton(stage);
 
             setRightButtonText(stage.rightMode.text);
             setRightButtonEnabled(stage.rightMode.enabled);
@@ -761,13 +777,13 @@
             }
         }
 
-        protected void updateFooterLeftButton(Stage stage, TextView footerLeftButton) {
+        protected void updateFooterLeftButton(Stage stage) {
             if (stage.leftMode == LeftButtonMode.Gone) {
-                footerLeftButton.setVisibility(View.GONE);
+                mSkipOrClearButton.setVisibility(View.GONE);
             } else {
-                footerLeftButton.setVisibility(View.VISIBLE);
-                footerLeftButton.setText(stage.leftMode.text);
-                footerLeftButton.setEnabled(stage.leftMode.enabled);
+                mSkipOrClearButton.setVisibility(View.VISIBLE);
+                mSkipOrClearButton.setText(getActivity(), stage.leftMode.text);
+                mSkipOrClearButton.setEnabled(stage.leftMode.enabled);
             }
         }
 
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 0a32468..736cd00 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -59,7 +59,7 @@
 
         @Nullable
         private Button mOptionsButton;
-        private Button mSkipButton;
+        private boolean mLeftButtonIsSkip;
 
         @Override
         public View onCreateView(
@@ -72,14 +72,20 @@
                                 .show(getChildFragmentManager(), null));
             }
             // Show the skip button during SUW but not during Settings > Biometric Enrollment
-            mSkipButton = view.findViewById(R.id.skip_button);
-            mSkipButton.setOnClickListener(v -> {
+            mSkipOrClearButton.setOnClickListener(this::onSkipOrClearButtonClick);
+            return view;
+        }
+
+        @Override
+        protected void onSkipOrClearButtonClick(View view) {
+            if (mLeftButtonIsSkip) {
                 SetupSkipDialog dialog = SetupSkipDialog.newInstance(
                         getActivity().getIntent()
                                 .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
                 dialog.show(getFragmentManager());
-                });
-            return view;
+                return;
+            }
+            super.onSkipOrClearButtonClick(view);
         }
 
         @Override
@@ -102,9 +108,11 @@
             }
 
             if (stage.leftMode == LeftButtonMode.Gone && stage == Stage.Introduction) {
-                mSkipButton.setVisibility(View.VISIBLE);
+                mSkipOrClearButton.setVisibility(View.VISIBLE);
+                mSkipOrClearButton.setText(getActivity(), R.string.skip_label);
+                mLeftButtonIsSkip = true;
             } else {
-                mSkipButton.setVisibility(View.GONE);
+                mLeftButtonIsSkip = false;
             }
         }
 
diff --git a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
index 18be542..3bcdc5f 100644
--- a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
@@ -61,7 +61,7 @@
         final DropDownPreference dropDownPreference = (DropDownPreference) preference;
         final int randomizationLevel = getRandomizationValue();
         dropDownPreference.setValue(Integer.toString(randomizationLevel));
-        updateSummary((DropDownPreference) preference, randomizationLevel);
+        updateSummary(dropDownPreference, randomizationLevel);
     }
 
     @Override
@@ -85,7 +85,20 @@
         return WifiConfiguration.RANDOMIZATION_PERSISTENT;
     }
 
+    private final int PREF_RANDOMIZATION_PERSISTENT = 0;
+    private final int PREF_RANDOMIZATION_NONE = 1;
+    @VisibleForTesting
+    protected int translateMacRandomizedValueToPrefValue(int macRandomized) {
+        if (macRandomized == WifiConfiguration.RANDOMIZATION_PERSISTENT) {
+            return PREF_RANDOMIZATION_PERSISTENT;
+        } else {
+            return PREF_RANDOMIZATION_NONE;
+        }
+    }
+
     private void updateSummary(DropDownPreference preference, int macRandomized) {
-        preference.setSummary(preference.getEntries()[macRandomized]);
+        // Translates value here to set RANDOMIZATION_PERSISTENT as first item in UI for better UX.
+        final int prefMacRandomized = translateMacRandomizedValueToPrefValue(macRandomized);
+        preference.setSummary(preference.getEntries()[prefMacRandomized]);
     }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
index 7e6e806..9a9a313 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
@@ -57,6 +57,7 @@
             // Update success UI.
             mTitle.setText(R.string.wifi_dpp_wifi_shared_with_device);
             mSummary.setVisibility(View.INVISIBLE);
+            mWifiApPictureView.setImageResource(R.drawable.wifi_dpp_success);
             mChooseDifferentNetwork.setVisibility(View.INVISIBLE);
             mButtonLeft.setText(R.string.wifi_dpp_add_another_device);
             mButtonLeft.setOnClickListener(v -> getFragmentManager().popBackStack());
@@ -71,6 +72,7 @@
             // Update fail UI.
             mTitle.setText(R.string.wifi_dpp_could_not_add_device);
             mSummary.setVisibility(View.INVISIBLE);
+            mWifiApPictureView.setImageResource(R.drawable.wifi_dpp_error);
             mChooseDifferentNetwork.setVisibility(View.INVISIBLE);
             mButtonRight.setText(R.string.retry);
         }
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
index 6b6c60e..e45869f 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
@@ -40,6 +40,9 @@
 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 import com.android.settings.testutils.shadow.ShadowUtils;
 
+import com.google.android.setupcompat.PartnerCustomizationLayout;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -143,11 +146,13 @@
 
     @Test
     public void skipButton_shouldBeVisible_duringNonFingerprintFlow() {
-        Button skipButton = mActivity.findViewById(R.id.skip_button);
-        assertThat(skipButton).isNotNull();
-        assertThat(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
+        PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
+        assertThat(skipOrClearButton).isNotNull();
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
 
-        skipButton.performClick();
+        skipOrClearButton.performClick();
         AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(chooserDialog).isNotNull();
     }
@@ -156,26 +161,33 @@
     public void clearButton_shouldBeVisible_duringRetryStage() {
         enterPattern();
 
-        Button clearButton = mActivity.findViewById(R.id.footerLeftButton);
-        assertThat(clearButton.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(clearButton.isEnabled()).isTrue();
+        PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.isEnabled()).isTrue();
 
-        clearButton.performClick();
+        skipOrClearButton.performClick();
         assertThat(findFragment(mActivity).mChosenPattern).isNull();
     }
 
     @Test
-    public void createActivity_enterPattern_clearButtonShouldBeVisible() {
+    public void createActivity_enterPattern_clearButtonShouldBeShown() {
         ChooseLockPatternFragment fragment = findFragment(mActivity);
 
-        Button skipButton = mActivity.findViewById(R.id.skip_button);
-        Button clearButton = mActivity.findViewById(R.id.footerLeftButton);
-        assertThat(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(clearButton.getVisibility()).isEqualTo(View.GONE);
+        PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
+        assertThat(skipOrClearButton.isEnabled()).isTrue();
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.getText())
+                .isEqualTo(application.getString(R.string.skip_label));
 
         enterPattern();
-        assertThat(skipButton.getVisibility()).isEqualTo(View.GONE);
-        assertThat(clearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.isEnabled()).isTrue();
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.getText())
+                .isEqualTo(application.getString(R.string.lockpattern_retry_button_text));
     }
 
     private ChooseLockPatternFragment findFragment(FragmentActivity activity) {
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java
index 20c5838..1e2e718 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiPrivacyPreferenceControllerTest.java
@@ -70,8 +70,9 @@
 
         mPreferenceController.updateState(mDropDownPreference);
 
-
-        assertThat(mDropDownPreference.getEntry()).isEqualTo(perferenceString[PRIVACY_TRUSTED]);
+        int prefValue = mPreferenceController.translateMacRandomizedValueToPrefValue(
+                PRIVACY_TRUSTED);
+        assertThat(mDropDownPreference.getEntry()).isEqualTo(perferenceString[prefValue]);
     }
 
     @Test
@@ -80,7 +81,9 @@
 
         mPreferenceController.updateState(mDropDownPreference);
 
-        assertThat(mDropDownPreference.getEntry()).isEqualTo(perferenceString[PRIVACY_RANDOMIZED]);
+        int prefValue = mPreferenceController.translateMacRandomizedValueToPrefValue(
+                PRIVACY_RANDOMIZED);
+        assertThat(mDropDownPreference.getEntry()).isEqualTo(perferenceString[prefValue]);
     }
 
     @Test
