diff --git a/res/drawable/ic_delete_accent.xml b/res/drawable/ic_delete_accent.xml
new file mode 100644
index 0000000..86a9cca
--- /dev/null
+++ b/res/drawable/ic_delete_accent.xml
@@ -0,0 +1,31 @@
+<!--
+  Copyright (C) 2018 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.
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?android:attr/colorAccent">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M15,4V3H9v1H4v2h1v13c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V6h1V4H15zM17,19H7V6h10V19z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9,8h2v9h-2z"/>
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M13,8h2v9h-2z"/>
+</vector>
diff --git a/res/layout/master_clear.xml b/res/layout/master_clear.xml
index 921347e..247eedc 100644
--- a/res/layout/master_clear.xml
+++ b/res/layout/master_clear.xml
@@ -14,122 +14,125 @@
      limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.setupwizardlib.GlifLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    android:theme="@style/SuwThemeGlifV3.Light"
+    android:icon="@drawable/ic_delete_accent"
+    app:suwHeaderText="@string/master_clear_title">
 
     <ScrollView
-            android:id="@+id/master_clear_scrollview"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_marginStart="@dimen/reset_master_clear_margin_start"
-            android:layout_marginEnd="@dimen/reset_master_clear_margin_end"
-            android:layout_marginTop="12dp"
-            android:layout_weight="1">
+        android:id="@+id/master_clear_scrollview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginStart="@dimen/reset_master_clear_margin_start"
+        android:layout_marginEnd="@dimen/reset_master_clear_margin_end">
+
         <LinearLayout
             android:id="@+id/master_clear_container"
+            style="@style/SuwContentFrame"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical">
+
             <TextView
+                style="@style/TextAppearance.SuwGlifItemSummary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                style="@style/master_clear_item_label"
-                android:includeFontPadding="false"
-                android:text="@string/master_clear_desc" />
-            <TextView android:id="@+id/also_erases_external"
+                android:text="@string/master_clear_desc"/>
+            <TextView
+                android:id="@+id/also_erases_external"
+                style="@style/TextAppearance.SuwGlifItemSummary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                style="@style/master_clear_item_label"
-                android:includeFontPadding="false"
                 android:visibility="gone"
-                android:text="@string/master_clear_desc_also_erases_external" />
-            <TextView android:id="@+id/also_erases_esim"
+                android:text="@string/master_clear_desc_also_erases_external"/>
+            <TextView
+                android:id="@+id/also_erases_esim"
+                style="@style/TextAppearance.SuwGlifItemSummary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                style="@style/master_clear_item_label"
-                android:includeFontPadding="false"
                 android:visibility="gone"
-                android:text="@string/master_clear_desc_also_erases_esim" />
-            <TextView android:id="@+id/accounts_label"
+                android:text="@string/master_clear_desc_also_erases_esim"/>
+            <TextView
+                android:id="@+id/accounts_label"
+                style="@style/TextAppearance.SuwGlifItemSummary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                style="@style/master_clear_item_label"
                 android:visibility="gone"
-                android:text="@string/master_clear_accounts" />
-            <LinearLayout android:id="@+id/accounts"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical"
-                    android:visibility="gone">
+                android:text="@string/master_clear_accounts"/>
+            <LinearLayout
+                android:id="@+id/accounts"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:visibility="gone">
                 <!-- Do not add any children here as they will be removed in the MasterClear.java
                     code. A list of accounts will be inserted programmatically. -->
             </LinearLayout>
-            <TextView android:id="@+id/other_users_present"
+            <TextView
+                android:id="@+id/other_users_present"
+                style="@style/TextAppearance.SuwGlifItemSummary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone"
-                android:textSize="18sp"
-                android:text="@string/master_clear_other_users_present" />
-            <TextView android:id="@+id/no_cancel_mobile_plan"
+                android:text="@string/master_clear_other_users_present"/>
+            <TextView
+                android:id="@+id/no_cancel_mobile_plan"
+                style="@style/TextAppearance.SuwGlifItemSummary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:visibility="gone"
-                android:textSize="18sp"
-                android:text="@string/master_clear_desc_no_cancel_mobile_plan" />
-            <TextView android:id="@+id/erase_external_option_text"
+                android:text="@string/master_clear_desc_no_cancel_mobile_plan"/>
+            <TextView
+                android:id="@+id/erase_external_option_text"
+                style="@style/TextAppearance.SuwGlifItemSummary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:textSize="18sp"
-                android:text="@string/master_clear_desc_erase_external_storage" />
-            <LinearLayout android:id="@+id/erase_external_container"
+                android:text="@string/master_clear_desc_erase_external_storage"/>
+            <LinearLayout
+                android:id="@+id/erase_external_container"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:focusable="true"
+                android:clickable="true">
+                <CheckBox
+                    android:id="@+id/erase_external"
+                    style="@style/SuwCheckBox"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical"
+                    android:focusable="false"
+                    android:clickable="false"
+                    android:duplicateParentState="true"/>
+                <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:orientation="horizontal"
-                    android:focusable="true"
-                    android:clickable="true">
-                <CheckBox android:id="@+id/erase_external"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="center_vertical"
-                        android:paddingEnd="@dimen/reset_checkbox_padding_end"
-                        android:focusable="false"
-                        android:clickable="false"
-                        android:duplicateParentState="true" />
-                <LinearLayout android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="center_vertical"
-                        android:orientation="vertical">
+                    android:layout_gravity="center_vertical"
+                    android:orientation="vertical">
                     <TextView
+                        style="@style/TextAppearance.SuwGlifItemTitle"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:paddingTop="@dimen/reset_checkbox_title_padding_top"
-                        android:textSize="@dimen/reset_checkbox_title_text_size"
-                        android:text="@string/erase_external_storage" />
+                        android:text="@string/erase_external_storage"/>
                     <TextView
+                        style="@style/TextAppearance.SuwGlifItemSummary"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:paddingTop="@dimen/reset_checkbox_summary_padding_top"
-                        android:textSize="@dimen/reset_checkbox_summary_text_size"
-                        android:text="@string/erase_external_storage_description" />
+                        android:text="@string/erase_external_storage_description"/>
                 </LinearLayout>
             </LinearLayout>
-            <include layout="@layout/reset_esim_checkbox"
-                 android:layout_marginTop="40dp"
-                 android:id="@+id/erase_esim_container"
-                 android:layout_width="match_parent"
-                 android:layout_height="wrap_content" />
+            <include
+                layout="@layout/reset_esim_checkbox"
+                android:layout_marginTop="40dp"
+                android:id="@+id/erase_esim_container"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"/>
         </LinearLayout>
     </ScrollView>
-    <Button
-            android:id="@+id/initiate_master_clear"
-            android:layout_gravity="center_horizontal"
-            android:layout_marginTop="20dip"
-            android:layout_marginBottom="12dip"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/master_clear_button_text"
-            android:gravity="center" />
-
-</LinearLayout>
+</com.android.setupwizardlib.GlifLayout>
diff --git a/res/layout/master_clear_account.xml b/res/layout/master_clear_account.xml
index 4a0552d..0b522f2 100644
--- a/res/layout/master_clear_account.xml
+++ b/res/layout/master_clear_account.xml
@@ -20,8 +20,7 @@
     android:layout_height="wrap_content"
     android:gravity="center_vertical"
     android:orientation="horizontal"
-    android:paddingStart="16dp"
-    android:paddingEnd="16dp">
+    style="@style/SuwDescription.Glif" >
     <ImageView
         android:id="@android:id/icon"
         android:layout_width="56dp"
@@ -31,6 +30,6 @@
         android:id="@android:id/title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textSize="18sp"/>
+        style="@style/TextAppearance.SuwGlifItemSummary"/>
 </LinearLayout>
 
diff --git a/res/layout/master_clear_confirm.xml b/res/layout/master_clear_confirm.xml
index 4ab3a0f..146fb77 100644
--- a/res/layout/master_clear_confirm.xml
+++ b/res/layout/master_clear_confirm.xml
@@ -4,37 +4,37 @@
      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.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.setupwizardlib.GlifLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
-    >
+    android:theme="@style/SuwThemeGlifV3.Light"
+    android:id="@+id/setup_wizard_layout"
+    android:icon="@drawable/ic_delete_accent"
+    app:suwHeaderText="@string/master_clear_confirm_title">
 
-    <TextView
-        android:id="@+id/master_clear_confirm"
-        android:layout_width="wrap_content"
+    <LinearLayout
+        style="@style/SuwContentFrame"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginStart="12dp"
-        android:layout_marginEnd="12dp"
-        android:layout_marginTop="12dp"
-        android:textSize="20sp"
-        android:text="@string/master_clear_final_desc" />
+        android:orientation="vertical">
 
-    <Button android:id="@+id/execute_master_clear"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginTop="40dip"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/master_clear_final_button_text"
-        android:gravity="center" />
-        
-</LinearLayout>
+        <TextView
+            android:id="@+id/master_clear_confirm"
+            style="@style/SuwItemTitle.GlifDescription"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/master_clear_final_desc"/>
+    </LinearLayout>
+</com.android.setupwizardlib.GlifLayout>
diff --git a/res/layout/reset_esim_checkbox.xml b/res/layout/reset_esim_checkbox.xml
index fb15fe6..e2ae4bb 100644
--- a/res/layout/reset_esim_checkbox.xml
+++ b/res/layout/reset_esim_checkbox.xml
@@ -15,6 +15,7 @@
 -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/SuwDescription"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
@@ -24,14 +25,14 @@
 
     <CheckBox
         android:id="@+id/erase_esim"
+        style="@style/SuwCheckBox"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
-        android:paddingEnd="@dimen/reset_checkbox_padding_end"
         android:focusable="false"
         android:clickable="false"
         android:checked="true"
-        android:duplicateParentState="true" />
+        android:duplicateParentState="true"/>
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -41,16 +42,14 @@
 
         <TextView
             android:id="@+id/erase_esim_title"
+            style="@style/TextAppearance.SuwGlifItemTitle"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:paddingTop="@dimen/reset_checkbox_title_padding_top"
-            android:textSize="@dimen/reset_checkbox_title_text_size" />
+            android:layout_height="wrap_content"/>
 
         <TextView
+            style="@style/TextAppearance.SuwGlifItemSummary"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:paddingTop="@dimen/reset_checkbox_summary_padding_top"
-            android:textSize="@dimen/reset_checkbox_summary_text_size"
-            android:text="@string/reset_esim_desc" />
+            android:text="@string/reset_esim_desc"/>
     </LinearLayout>
 </LinearLayout>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4d16851..a11dd5f 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -301,7 +301,7 @@
     <!-- Margin for the reset screens -->
     <dimen name="reset_network_margin_start">72dp</dimen>
     <dimen name="reset_network_margin_end">12dp</dimen>
-    <dimen name="reset_master_clear_margin_start">72dp</dimen>
+    <dimen name="reset_master_clear_margin_start">32dp</dimen>
     <dimen name="reset_master_clear_margin_end">12dp</dimen>
 
     <!-- Padding for screen pinning -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 88ff2bb..b096cf8 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -458,9 +458,4 @@
         <item name="android:paddingBottom">24dp</item>
     </style>
 
-    <style name="master_clear_item_label" parent="android:Widget.TextView">
-        <item name="android:textDirection">locale</item>
-        <item name="android:textSize">18sp</item>
-    </style>
-
 </resources>
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
index 6c91aea..dbb106e 100644
--- a/res/xml/top_level_settings.xml
+++ b/res/xml/top_level_settings.xml
@@ -120,6 +120,7 @@
         android:summary="@string/support_summary"
         android:title="@string/page_tab_title_support"
         android:icon="@drawable/ic_homepage_support"
-        android:order="100"/>
+        android:order="100"
+        settings:controller="com.android.settings.support.SupportPreferenceController"/>
 
 </PreferenceScreen>
\ No newline at end of file
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index c8ec448..97942fe 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -21,7 +21,7 @@
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AuthenticatorDescription;
-import android.annotation.Nullable;
+import android.app.ActionBar;
 import android.app.Activity;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -31,6 +31,7 @@
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
+import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Environment;
@@ -61,8 +62,9 @@
 import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
 import com.android.settings.password.ChooseLockSettingsHelper;
 import com.android.settings.password.ConfirmLockPattern;
-import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.setupwizardlib.TemplateLayout;
+import com.android.setupwizardlib.template.ButtonFooterMixin;
 
 import java.util.List;
 
@@ -79,8 +81,10 @@
 public class MasterClear extends InstrumentedFragment implements OnGlobalLayoutListener {
     private static final String TAG = "MasterClear";
 
-    @VisibleForTesting static final int KEYGUARD_REQUEST = 55;
-    @VisibleForTesting static final int CREDENTIAL_CONFIRM_REQUEST = 56;
+    @VisibleForTesting
+    static final int KEYGUARD_REQUEST = 55;
+    @VisibleForTesting
+    static final int CREDENTIAL_CONFIRM_REQUEST = 56;
 
     private static final String KEY_SHOW_ESIM_RESET_CHECKBOX
             = "masterclear.allow_retain_esim_profiles_after_fdr";
@@ -89,27 +93,41 @@
     static final String ERASE_ESIMS_EXTRA = "erase_esim";
 
     private View mContentView;
-    @VisibleForTesting Button mInitiateButton;
+    @VisibleForTesting
+    Button mInitiateButton;
     private View mExternalStorageContainer;
-    @VisibleForTesting CheckBox mExternalStorage;
+    @VisibleForTesting
+    CheckBox mExternalStorage;
     private View mEsimStorageContainer;
-    @VisibleForTesting CheckBox mEsimStorage;
-    @VisibleForTesting ScrollView mScrollView;
+    @VisibleForTesting
+    CheckBox mEsimStorage;
+    @VisibleForTesting
+    ScrollView mScrollView;
 
     @Override
     public void onGlobalLayout() {
         mInitiateButton.setEnabled(hasReachedBottom(mScrollView));
     }
 
-    @Override
-    public void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        getActivity().setTitle(R.string.master_clear_short_title);
+    private void setUpActionBarAndTitle() {
+        final Activity activity = getActivity();
+        if (activity == null) {
+            Log.e(TAG, "No activity attached, skipping setUpActionBarAndTitle");
+            return;
+        }
+        final ActionBar actionBar = activity.getActionBar();
+        if (actionBar == null) {
+            Log.e(TAG, "No actionbar, skipping setUpActionBarAndTitle");
+            return;
+        }
+        actionBar.hide();
+        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
     }
 
     /**
      * Keyguard validation is run using the standard {@link ConfirmLockPattern}
      * component as a subactivity
+     *
      * @param request the request code to be returned once confirmation finishes
      * @return true if confirmation launched
      */
@@ -189,8 +207,8 @@
         Account[] accounts = am.getAccountsByType(accountType);
         if (accounts != null && accounts.length > 0) {
             final Intent requestAccountConfirmation = new Intent()
-                .setPackage(packageName)
-                .setComponent(new ComponentName(packageName, className));
+                    .setPackage(packageName)
+                    .setComponent(new ComponentName(packageName, className));
             // Check to make sure that the intent is supported.
             final PackageManager pm = context.getPackageManager();
             final ResolveInfo resolution = pm.resolveActivity(requestAccountConfirmation, 0);
@@ -259,8 +277,9 @@
      */
     @VisibleForTesting
     void establishInitialState() {
-        mInitiateButton = mContentView.findViewById(R.id.initiate_master_clear);
-        mInitiateButton.setOnClickListener(mInitiateListener);
+        setUpActionBarAndTitle();
+        setUpInitiateButton();
+
         mExternalStorageContainer = mContentView.findViewById(R.id.erase_external_container);
         mExternalStorage = mContentView.findViewById(R.id.erase_external);
         mEsimStorageContainer = mContentView.findViewById(R.id.erase_esim_container);
@@ -334,7 +353,7 @@
         mScrollView.setOnScrollChangeListener(new OnScrollChangeListener() {
             @Override
             public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX,
-                int oldScrollY) {
+                    int oldScrollY) {
                 if (v instanceof ScrollView && hasReachedBottom((ScrollView) v)) {
                     mInitiateButton.setEnabled(true);
                     mScrollView.setOnScrollChangeListener(null);
@@ -360,8 +379,8 @@
         }
         ContentResolver cr = context.getContentResolver();
         return Settings.Global.getInt(cr, Settings.Global.EUICC_PROVISIONED, 0) != 0
-                ||  Settings.Global.getInt(
-                        cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+                || Settings.Global.getInt(
+                cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
     }
 
     @VisibleForTesting
@@ -388,21 +407,36 @@
         return diff <= 0;
     }
 
+    private void setUpInitiateButton() {
+        if (mInitiateButton != null) {
+            return;
+        }
+
+        final TemplateLayout layout = mContentView.findViewById(R.id.setup_wizard_layout);
+        final ButtonFooterMixin buttonFooterMixin = layout.getMixin(ButtonFooterMixin.class);
+        buttonFooterMixin.removeAllViews();
+        buttonFooterMixin.addSpace();
+        buttonFooterMixin.addSpace();
+        mInitiateButton = buttonFooterMixin.addButton(R.string.master_clear_button_text,
+                R.style.SuwGlifButton_Primary);
+        mInitiateButton.setOnClickListener(mInitiateListener);
+    }
+
     private void getContentDescription(View v, StringBuffer description) {
-       if (v.getVisibility() != View.VISIBLE) {
-           return;
-       }
-       if (v instanceof ViewGroup) {
-           ViewGroup vGroup = (ViewGroup) v;
-           for (int i = 0; i < vGroup.getChildCount(); i++) {
-               View nextChild = vGroup.getChildAt(i);
-               getContentDescription(nextChild, description);
-           }
-       } else if (v instanceof TextView) {
-           TextView vText = (TextView) v;
-           description.append(vText.getText());
-           description.append(","); // Allow Talkback to pause between sections.
-       }
+        if (v.getVisibility() != View.VISIBLE) {
+            return;
+        }
+        if (v instanceof ViewGroup) {
+            ViewGroup vGroup = (ViewGroup) v;
+            for (int i = 0; i < vGroup.getChildCount(); i++) {
+                View nextChild = vGroup.getChildAt(i);
+                getContentDescription(nextChild, description);
+            }
+        } else if (v instanceof TextView) {
+            TextView vText = (TextView) v;
+            description.append(vText.getText());
+            description.append(","); // Allow Talkback to pause between sections.
+        }
     }
 
     private boolean isExtStorageEncrypted() {
@@ -412,7 +446,7 @@
 
     private void loadAccountList(final UserManager um) {
         View accountsLabel = mContentView.findViewById(R.id.accounts_label);
-        LinearLayout contents = (LinearLayout)mContentView.findViewById(R.id.accounts);
+        LinearLayout contents = (LinearLayout) mContentView.findViewById(R.id.accounts);
         contents.removeAllViews();
 
         Context context = getActivity();
@@ -421,7 +455,7 @@
 
         AccountManager mgr = AccountManager.get(context);
 
-        LayoutInflater inflater = (LayoutInflater)context.getSystemService(
+        LayoutInflater inflater = (LayoutInflater) context.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
 
         int accountsCount = 0;
diff --git a/src/com/android/settings/MasterClearConfirm.java b/src/com/android/settings/MasterClearConfirm.java
index cfd20eb..8ebb710 100644
--- a/src/com/android/settings/MasterClearConfirm.java
+++ b/src/com/android/settings/MasterClearConfirm.java
@@ -16,18 +16,23 @@
 
 package com.android.settings;
 
+
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
+import android.app.ActionBar;
+import android.app.Activity;
 import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
+import android.graphics.Color;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.service.oemlock.OemLockManager;
 import android.service.persistentdata.PersistentDataBlockManager;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -37,8 +42,9 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper;
-import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.setupwizardlib.TemplateLayout;
+import com.android.setupwizardlib.template.ButtonFooterMixin;
 
 /**
  * Confirm and execute a reset of the device to a clean "just out of the box"
@@ -51,6 +57,7 @@
  * This is the confirmation screen.
  */
 public class MasterClearConfirm extends InstrumentedFragment {
+    private final static String TAG = "MasterClearConfirm";
 
     private View mContentView;
     private boolean mEraseSdCard;
@@ -103,9 +110,11 @@
                         mProgressDialog.show();
 
                         // need to prevent orientation changes as we're about to go into
-                        // a long IO request, so we won't be able to access inflate resources on flash
+                        // a long IO request, so we won't be able to access inflate resources on
+                        // flash
                         mOldOrientation = getActivity().getRequestedOrientation();
-                        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
+                        getActivity().setRequestedOrientation(
+                                ActivityInfo.SCREEN_ORIENTATION_LOCKED);
                     }
                 }.execute();
             } else {
@@ -140,8 +149,29 @@
      * Configure the UI for the final confirmation interaction
      */
     private void establishFinalConfirmationState() {
-        mContentView.findViewById(R.id.execute_master_clear)
-                .setOnClickListener(mFinalClickListener);
+        final TemplateLayout layout = mContentView.findViewById(R.id.setup_wizard_layout);
+
+        final ButtonFooterMixin buttonFooterMixin = layout.getMixin(ButtonFooterMixin.class);
+        buttonFooterMixin.removeAllViews();
+        buttonFooterMixin.addSpace();
+        buttonFooterMixin.addSpace();
+        buttonFooterMixin.addButton(R.string.master_clear_button_text,
+                R.style.SuwGlifButton_Primary).setOnClickListener(mFinalClickListener);
+    }
+
+    private void setUpActionBarAndTitle() {
+        final Activity activity = getActivity();
+        if (activity == null) {
+            Log.e(TAG, "No activity attached, skipping setUpActionBarAndTitle");
+            return;
+        }
+        final ActionBar actionBar = activity.getActionBar();
+        if (actionBar == null) {
+            Log.e(TAG, "No actionbar, skipping setUpActionBarAndTitle");
+            return;
+        }
+        actionBar.hide();
+        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
     }
 
     @Override
@@ -160,6 +190,7 @@
             return new View(getActivity());
         }
         mContentView = inflater.inflate(R.layout.master_clear_confirm, null);
+        setUpActionBarAndTitle();
         establishFinalConfirmationState();
         setAccessibilityTitle();
         return mContentView;
@@ -167,8 +198,7 @@
 
     private void setAccessibilityTitle() {
         CharSequence currentTitle = getActivity().getTitle();
-        TextView confirmationMessage =
-                (TextView) mContentView.findViewById(R.id.master_clear_confirm);
+        TextView confirmationMessage = mContentView.findViewById(R.id.master_clear_confirm);
         if (confirmationMessage != null) {
             String accessibleText = new StringBuilder(currentTitle).append(",").append(
                     confirmationMessage.getText()).toString();
diff --git a/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java b/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java
index b0e35d3..0fcec05 100644
--- a/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothA2dpHwOffloadPreferenceController.java
@@ -66,20 +66,6 @@
         }
     }
 
-    @Override
-    protected void onDeveloperOptionsSwitchDisabled() {
-        super.onDeveloperOptionsSwitchDisabled();
-        final boolean offloadSupported =
-                SystemProperties.getBoolean(A2DP_OFFLOAD_SUPPORTED_PROPERTY, false);
-        if (offloadSupported) {
-            ((SwitchPreference) mPreference).setChecked(false);
-            SystemProperties.set(A2DP_OFFLOAD_DISABLED_PROPERTY, "false");
-        } else {
-            ((SwitchPreference) mPreference).setChecked(true);
-            SystemProperties.set(A2DP_OFFLOAD_DISABLED_PROPERTY, "true");
-        }
-    }
-
     public void onA2dpHwDialogConfirmed() {
         final boolean offloadDisabled =
                 SystemProperties.getBoolean(A2DP_OFFLOAD_DISABLED_PROPERTY, false);
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index c450157..8f70b2b 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -33,6 +33,7 @@
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.support.SupportPreferenceController;
 import com.android.settingslib.core.instrumentation.Instrumentable;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -68,6 +69,12 @@
     }
 
     @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        use(SupportPreferenceController.class).setActivity(getActivity());
+    }
+
+    @Override
     public int getHelpResource() {
         // Disable the help icon because this page uses a full search view in actionbar.
         return 0;
diff --git a/src/com/android/settings/support/SupportPreferenceController.java b/src/com/android/settings/support/SupportPreferenceController.java
new file mode 100644
index 0000000..793842f
--- /dev/null
+++ b/src/com/android/settings/support/SupportPreferenceController.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2018 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.settings.support;
+
+import android.app.Activity;
+import android.content.Context;
+import android.text.TextUtils;
+
+import androidx.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.overlay.SupportFeatureProvider;
+
+public class SupportPreferenceController extends BasePreferenceController {
+
+    private final SupportFeatureProvider mSupportFeatureProvider;
+
+    private Activity mActivity;
+
+    public SupportPreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+        mSupportFeatureProvider = FeatureFactory.getFactory(context)
+                .getSupportFeatureProvider(context);
+    }
+
+    public void setActivity(Activity activity) {
+        mActivity = activity;
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return mSupportFeatureProvider == null ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (preference == null || mActivity == null ||
+                !TextUtils.equals(preference.getKey(), getPreferenceKey())) {
+            return false;
+        }
+        mSupportFeatureProvider.startSupport(mActivity);
+        return true;
+
+    }
+}
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 2e6611f..d6c1931 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -123,7 +123,8 @@
     private final ArrayAdapter<String> mPhase2FullAdapter;
 
     // e.g. AccessPoint.SECURITY_NONE
-    private int mAccessPointSecurity;
+    @VisibleForTesting
+    int mAccessPointSecurity;
     private TextView mPasswordView;
 
     private String mUnspecifiedCertString;
@@ -465,7 +466,8 @@
         } else {
             enabled = ipAndProxyFieldsAreValid();
         }
-        if (mAccessPointSecurity == AccessPoint.SECURITY_EAP) {
+        if (mAccessPointSecurity == AccessPoint.SECURITY_EAP && mEapCaCertSpinner != null
+                && mView.findViewById(R.id.l_ca_cert).getVisibility() != View.GONE) {
             String caCertSelection = (String) mEapCaCertSpinner.getSelectedItem();
             if (caCertSelection.equals(mUnspecifiedCertString)) {
                 // Disallow submit if the user has not selected a CA certificate for an EAP network
@@ -481,7 +483,8 @@
                 enabled = false;
             }
         }
-        if (mAccessPointSecurity == AccessPoint.SECURITY_EAP
+        if (mAccessPointSecurity == AccessPoint.SECURITY_EAP && mEapUserCertSpinner != null
+                && mView.findViewById(R.id.l_user_cert).getVisibility() != View.GONE
                 && mEapUserCertSpinner.getSelectedItem().equals(mUnspecifiedCertString)) {
             // Disallow submit if the user has not selected a user certificate for an EAP network
             // configuration.
diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java
index e124365..174f5ab 100644
--- a/tests/robotests/src/com/android/settings/MasterClearTest.java
+++ b/tests/robotests/src/com/android/settings/MasterClearTest.java
@@ -122,8 +122,8 @@
 
         verify(context).startActivity(intent.capture());
         assertThat(intent.getValue().getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS)
-            .getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false))
-            .isTrue();
+                .getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false))
+                .isTrue();
     }
 
     @Test
@@ -139,8 +139,8 @@
 
         verify(context).startActivity(intent.capture());
         assertThat(intent.getValue().getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS)
-            .getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false))
-            .isFalse();
+                .getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false))
+                .isFalse();
     }
 
     @Test
@@ -210,11 +210,10 @@
         ShadowUtils.setIsDemoUser(true);
 
         final ComponentName componentName =
-            ComponentName.unflattenFromString("com.android.retaildemo/.DeviceAdminReceiver");
+                ComponentName.unflattenFromString("com.android.retaildemo/.DeviceAdminReceiver");
         ShadowUtils.setDeviceOwnerComponent(componentName);
 
-        mMasterClear.mInitiateListener
-            .onClick(mContentView.findViewById(R.id.initiate_master_clear));
+        mMasterClear.mInitiateListener.onClick(mContentView);
         final Intent intent = mShadowActivity.getNextStartedActivity();
         assertThat(Intent.ACTION_FACTORY_RESET).isEqualTo(intent.getAction());
         assertThat(componentName).isNotNull();
@@ -240,7 +239,8 @@
         doNothing().when(mMasterClear).establishInitialState();
 
         mMasterClear
-            .onActivityResultInternal(MasterClear.KEYGUARD_REQUEST, Activity.RESULT_CANCELED, null);
+                .onActivityResultInternal(MasterClear.KEYGUARD_REQUEST, Activity.RESULT_CANCELED,
+                        null);
 
         verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST));
         verify(mMasterClear, times(1)).establishInitialState();
@@ -255,7 +255,7 @@
         doNothing().when(mMasterClear).showAccountCredentialConfirmation(eq(mMockIntent));
 
         mMasterClear
-            .onActivityResultInternal(MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null);
+                .onActivityResultInternal(MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null);
 
         verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST));
         verify(mMasterClear, times(0)).establishInitialState();
@@ -270,7 +270,7 @@
         doNothing().when(mMasterClear).showFinalConfirmation();
 
         mMasterClear
-            .onActivityResultInternal(MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null);
+                .onActivityResultInternal(MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null);
 
         verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST));
         verify(mMasterClear, times(0)).establishInitialState();
@@ -281,14 +281,14 @@
     @Test
     public void testOnActivityResultInternal_confirmRequestTriggeringShowFinal() {
         doReturn(true).when(mMasterClear)
-            .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
+                .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
         doNothing().when(mMasterClear).showFinalConfirmation();
 
         mMasterClear.onActivityResultInternal(
-            MasterClear.CREDENTIAL_CONFIRM_REQUEST, Activity.RESULT_OK, null);
+                MasterClear.CREDENTIAL_CONFIRM_REQUEST, Activity.RESULT_OK, null);
 
         verify(mMasterClear, times(1))
-            .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
+                .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
         verify(mMasterClear, times(0)).establishInitialState();
         verify(mMasterClear, times(0)).getAccountConfirmationIntent();
         verify(mMasterClear, times(1)).showFinalConfirmation();
@@ -306,9 +306,9 @@
         when(mMasterClear.getActivity()).thenReturn(mMockActivity);
         when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE);
         when(mMockActivity.getString(R.string.account_confirmation_package))
-            .thenReturn(TEST_CONFIRMATION_PACKAGE);
+                .thenReturn(TEST_CONFIRMATION_PACKAGE);
         when(mMockActivity.getString(R.string.account_confirmation_class))
-            .thenReturn(TEST_CONFIRMATION_CLASS);
+                .thenReturn(TEST_CONFIRMATION_CLASS);
 
         Account[] accounts = new Account[0];
         when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager);
@@ -321,10 +321,10 @@
         when(mMasterClear.getActivity()).thenReturn(mMockActivity);
         when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE);
         when(mMockActivity.getString(R.string.account_confirmation_package))
-            .thenReturn(TEST_CONFIRMATION_PACKAGE);
+                .thenReturn(TEST_CONFIRMATION_PACKAGE);
         when(mMockActivity.getString(R.string.account_confirmation_class))
-            .thenReturn(TEST_CONFIRMATION_CLASS);
-        Account[] accounts = new Account[] { new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE) };
+                .thenReturn(TEST_CONFIRMATION_CLASS);
+        Account[] accounts = new Account[]{new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE)};
         when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager);
         when(mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE)).thenReturn(accounts);
         // The package manager should not resolve the confirmation intent targeting the non-existent
@@ -339,11 +339,11 @@
         // Only try to show account confirmation if the appropriate resource overlays are available.
         when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE);
         when(mMockActivity.getString(R.string.account_confirmation_package))
-            .thenReturn(TEST_CONFIRMATION_PACKAGE);
+                .thenReturn(TEST_CONFIRMATION_PACKAGE);
         when(mMockActivity.getString(R.string.account_confirmation_class))
-            .thenReturn(TEST_CONFIRMATION_CLASS);
+                .thenReturn(TEST_CONFIRMATION_CLASS);
         // Add accounts to trigger the search for a resolving intent.
-        Account[] accounts = new Account[] { new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE) };
+        Account[] accounts = new Account[]{new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE)};
         when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager);
         when(mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE)).thenReturn(accounts);
         // The package manager should not resolve the confirmation intent targeting the non-existent
@@ -366,17 +366,19 @@
     public void testShowAccountCredentialConfirmation() {
         // Finally mock out the startActivityForResultCall
         doNothing().when(mMasterClear)
-            .startActivityForResult(eq(mMockIntent), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
+                .startActivityForResult(eq(mMockIntent),
+                        eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
         mMasterClear.showAccountCredentialConfirmation(mMockIntent);
         verify(mMasterClear, times(1))
-            .startActivityForResult(eq(mMockIntent), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
+                .startActivityForResult(eq(mMockIntent),
+                        eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST));
     }
 
     @Test
     public void testIsValidRequestCode() {
         assertThat(mMasterClear.isValidRequestCode(MasterClear.KEYGUARD_REQUEST)).isTrue();
         assertThat(mMasterClear.isValidRequestCode(MasterClear.CREDENTIAL_CONFIRM_REQUEST))
-            .isTrue();
+                .isTrue();
         assertThat(mMasterClear.isValidRequestCode(0)).isFalse();
     }
 
diff --git a/tests/robotests/src/com/android/settings/support/SupportPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/support/SupportPreferenceControllerTest.java
new file mode 100644
index 0000000..d805047
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/support/SupportPreferenceControllerTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2018 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.settings.support;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+
+import android.app.Activity;
+
+import androidx.preference.Preference;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class SupportPreferenceControllerTest {
+
+
+    private Activity mActivity;
+    private FakeFeatureFactory mFeatureFactory;
+    private Preference mPreference;
+
+    @Before
+    public void setUp() {
+        mActivity = Robolectric.setupActivity(Activity.class);
+        mFeatureFactory = FakeFeatureFactory.setupForTest();
+        mPreference = new Preference(mActivity);
+        mPreference.setKey("test_key");
+    }
+
+    @Test
+    public void getAvailability_noSupport_unavailable() {
+        ReflectionHelpers.setField(mFeatureFactory, "supportFeatureProvider", null);
+        assertThat(new SupportPreferenceController(mActivity, "test_key").getAvailabilityStatus())
+                .isEqualTo(UNSUPPORTED_ON_DEVICE);
+    }
+
+    @Test
+    public void getAvailability_hasSupport_available() {
+        assertThat(new SupportPreferenceController(mActivity, "test_key").getAvailabilityStatus())
+                .isEqualTo(AVAILABLE);
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_shouldLaunchSupport() {
+        final SupportPreferenceController controller = new SupportPreferenceController(mActivity,
+                mPreference.getKey());
+        controller.setActivity(mActivity);
+
+        assertThat(controller.handlePreferenceTreeClick(mPreference)).isTrue();
+        verify(mFeatureFactory.supportFeatureProvider).startSupport(mActivity);
+    }
+
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index 54be773..471c991 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -57,11 +57,10 @@
     @Mock
     private Context mContext;
     @Mock
-    private View mView;
-    @Mock
     private AccessPoint mAccessPoint;
     @Mock
     private KeyStore mKeyStore;
+    private View mView;
     private Spinner mHiddenSettingsSpinner;
 
     public WifiConfigController mController;
@@ -74,6 +73,7 @@
     private static final String SHORT_PSK = "abcdefg";
     // Valid PSK pass phrase
     private static final String GOOD_PSK = "abcdefghijklmnopqrstuvwxyz";
+    private static final String GOOD_SSID = "abc";
     private static final int DHCP = 0;
 
     @Before
@@ -185,6 +185,9 @@
 
     @Test
     public void isSubmittable_EapToPskWithValidPassword_shouldReturnTrue() {
+        mController = new TestWifiConfigController(mConfigUiBase, mView, null,
+                WifiConfigUiBase.MODE_CONNECT);
+        final TextView ssid = mView.findViewById(R.id.ssid);
         final TextView password = mView.findViewById(R.id.password);
         final Spinner securitySpinner = mView.findViewById(R.id.security);
         assertThat(password).isNotNull();
@@ -195,6 +198,16 @@
         mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_EAP, 0);
         mController.onItemSelected(securitySpinner, null, AccessPoint.SECURITY_PSK, 0);
         password.setText(GOOD_PSK);
+        ssid.setText(GOOD_SSID);
+
+        assertThat(mController.isSubmittable()).isTrue();
+    }
+
+    @Test
+    public void isSubmittable_EapWithAkaMethod_shouldReturnTrue() {
+        when(mAccessPoint.isSaved()).thenReturn(true);
+        mController.mAccessPointSecurity = AccessPoint.SECURITY_EAP;
+        mView.findViewById(R.id.l_ca_cert).setVisibility(View.GONE);
 
         assertThat(mController.isSubmittable()).isTrue();
     }
