Merge "Update SlicePreferenceController"
diff --git a/res/layout/choose_lock_password.xml b/res/layout/choose_lock_password.xml
index 68583b5..b779526 100644
--- a/res/layout/choose_lock_password.xml
+++ b/res/layout/choose_lock_password.xml
@@ -17,11 +17,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:importantForAutofill="noExcludeDescendants"
-    settings:sucFooter="@layout/choose_lock_password_footer"
     settings:sucHeaderText="@string/lockpassword_choose_your_screen_lock_header">
 
     <LinearLayout
diff --git a/res/layout/choose_lock_password_footer.xml b/res/layout/choose_lock_password_footer.xml
deleted file mode 100644
index 58d80cf..0000000
--- a/res/layout/choose_lock_password_footer.xml
+++ /dev/null
@@ -1,53 +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) -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/SudGlifButtonBar"
-    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 : clear -->
-    <Button android:id="@+id/clear_button"
-        style="@style/SudGlifButton.Secondary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:visibility="gone"
-        android:text="@string/lockpassword_clear_label" />
-
-    <Space
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:layout_weight="1" />
-
-    <!-- right : continue -->
-    <Button android:id="@+id/next_button"
-        style="@style/SudGlifButton.Primary"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/next_label" />
-
-</LinearLayout>
diff --git a/res/layout/network_request_dialog_title.xml b/res/layout/network_request_dialog_title.xml
index fa01085..186768e 100644
--- a/res/layout/network_request_dialog_title.xml
+++ b/res/layout/network_request_dialog_title.xml
@@ -26,7 +26,8 @@
       android:id="@+id/network_request_title_text"
       android:layout_width="0dp"
       android:layout_height="match_parent"
-      android:paddingLeft="16dip"
+      android:paddingLeft="24dp"
+      android:paddingTop="18dp"
       android:layout_weight="1"
       android:textSize="18sp"
       android:gravity="center_vertical"
diff --git a/res/layout/radio_info.xml b/res/layout/radio_info.xml
index 60b23c8..100521e 100644
--- a/res/layout/radio_info.xml
+++ b/res/layout/radio_info.xml
@@ -174,6 +174,20 @@
             android:layout_height="1dip"
             android:background="?android:attr/listDivider" />
 
+        <!-- Enable/Disable CBRS data -->
+        <Switch android:id="@+id/cbrs_data_switch"
+                android:textSize="14sp"
+                android:layout_marginTop="8dip"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/cbrs_data_switch_string" />
+
+        <!-- Horizontal Rule -->
+        <View
+            android:layout_width="fill_parent"
+            android:layout_height="1dip"
+            android:background="?android:attr/listDivider" />
+
         <!-- Ping stats -->
         <Button android:id="@+id/ping_test"
                 android:textSize="14sp"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a082074..f77c10d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -63,6 +63,9 @@
     <!-- EAB provisioning flag on. Only shown in diagnostic screen, so precise translation is not needed. -->
     <string name="eab_provisioned_switch_string">EAB/Presence Provisioned</string>
 
+    <!-- Cbrs enable disable flag. Only shown in diagnostic screen, so precise translation is not needed -->
+    <string name="cbrs_data_switch_string">Cbrs Data</string>
+
     <!-- Title for controlling on/off for Mobile phone's radio power. Only shown in diagnostic screen, so precise translation is not needed. -->
     <string name="radio_info_radio_power">Mobile Radio Power</string>
 
@@ -10455,6 +10458,8 @@
     <string name="network_connection_timeout_dialog_ok">Try again</string>
     <!-- Message for Network connection error state Dialog [CHAR LIMIT=NONE] -->
     <string name="network_connection_errorstate_dialog_message">Something came up. The application has cancelled the request to choose a device.</string>
+    <!-- Toast message when connection is successful [CHAR LIMIT=30] -->
+    <string name="network_connection_connect_successful">Connection successful</string>
 
     <!-- Summary for bluetooth devices count in Bluetooth devices slice. [CHAR LIMIT=NONE] -->
     <plurals name="show_bluetooth_devices">
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index 2791efa..251bfbc 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -213,6 +213,7 @@
     private Switch imsVtProvisionedSwitch;
     private Switch imsWfcProvisionedSwitch;
     private Switch eabProvisionedSwitch;
+    private Switch cbrsDataSwitch;
     private Spinner preferredNetworkType;
     private Spinner cellInfoRefreshRateSpinner;
 
@@ -450,6 +451,9 @@
         imsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
         eabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch);
 
+        cbrsDataSwitch = (Switch) findViewById(R.id.cbrs_data_switch);
+        cbrsDataSwitch.setVisibility(isCbrsSupported() ? View.VISIBLE : View.GONE);
+
         radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
 
         mDownlinkKbps = (TextView) findViewById(R.id.dl_kbps);
@@ -526,6 +530,11 @@
         imsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
         eabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
 
+        if (isCbrsSupported()) {
+            cbrsDataSwitch.setChecked(getCbrsDataState());
+            cbrsDataSwitch.setOnCheckedChangeListener(mCbrsDataSwitchChangeListener);
+        }
+
         mTelephonyManager.listen(mPhoneStateListener,
                   PhoneStateListener.LISTEN_CALL_STATE
         //b/27803938 - RadioInfo currently cannot read PRECISE_CALL_STATE
@@ -1483,4 +1492,38 @@
         }
     };
 
+    boolean isCbrsSupported() {
+        return getResources().getBoolean(
+              com.android.internal.R.bool.config_cbrs_supported);
+    }
+
+    void updateCbrsDataState(boolean state) {
+        Log.d(TAG, "setCbrsDataSwitchState() state:" + ((state)? "on":"off"));
+        if (mTelephonyManager != null) {
+            QueuedWork.queue(new Runnable() {
+                public void run() {
+                  mTelephonyManager.setOpportunisticNetworkState(state);
+                  cbrsDataSwitch.setChecked(getCbrsDataState());
+                }
+            }, false);
+        }
+    }
+
+    boolean getCbrsDataState() {
+        boolean state = false;
+        if (mTelephonyManager != null) {
+            state = mTelephonyManager.isOpportunisticNetworkEnabled();
+        }
+        Log.d(TAG, "getCbrsDataState() state:" +((state)? "on":"off"));
+        return state;
+    }
+
+    OnCheckedChangeListener mCbrsDataSwitchChangeListener = new OnCheckedChangeListener() {
+        @Override
+        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+            updateCbrsDataState(isChecked);
+        }
+    };
+
+
 }
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 6ff93f3..0ae664c 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -47,7 +47,6 @@
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.inputmethod.EditorInfo;
-import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
@@ -69,6 +68,8 @@
 import com.android.settings.notification.RedactionInterstitial;
 import com.android.settings.widget.ImeAwareEditText;
 
+import com.google.android.setupcompat.item.FooterButton;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
 import com.google.android.setupdesign.GlifLayout;
 
 import java.util.ArrayList;
@@ -168,8 +169,7 @@
     }
 
     public static class ChooseLockPasswordFragment extends InstrumentedFragment
-            implements OnClickListener, OnEditorActionListener, TextWatcher,
-            SaveAndFinishWorker.Listener {
+            implements OnEditorActionListener, TextWatcher, SaveAndFinishWorker.Listener {
         private static final String KEY_FIRST_PIN = "first_pin";
         private static final String KEY_UI_STAGE = "ui_stage";
         private static final String KEY_CURRENT_PASSWORD = "current_password";
@@ -210,9 +210,8 @@
         private String mFirstPin;
         private RecyclerView mPasswordRestrictionView;
         protected boolean mIsAlphaMode;
-        protected Button mSkipButton;
-        private Button mClearButton;
-        private Button mNextButton;
+        protected FooterButton mSkipOrClearButton;
+        private FooterButton mNextButton;
         private TextView mMessage;
 
         private TextChangedHandler mTextChangedHandler;
@@ -408,13 +407,25 @@
             ViewGroup container = view.findViewById(R.id.password_container);
             container.setOpticalInsets(Insets.NONE);
 
-            mSkipButton = view.findViewById(R.id.skip_button);
-            mSkipButton.setOnClickListener(this);
-            mNextButton = view.findViewById(R.id.next_button);
-            mNextButton.setOnClickListener(this);
-            mClearButton = view.findViewById(R.id.clear_button);
-            mClearButton.setOnClickListener(this);
-
+            final ButtonFooterMixin mixin = mLayout.getMixin(ButtonFooterMixin.class);
+            mixin.setSecondaryButton(
+                    new FooterButton.Builder(getActivity())
+                            .setText(R.string.lockpassword_clear_label)
+                            .setListener(this::onSkipOrClearButtonClick)
+                            .setButtonType(FooterButton.ButtonType.SKIP)
+                            .setTheme(R.style.SudGlifButton_Secondary)
+                            .build()
+            );
+            mixin.setPrimaryButton(
+                    new FooterButton.Builder(getActivity())
+                            .setText(R.string.next_label)
+                            .setListener(this::onNextButtonClick)
+                            .setButtonType(FooterButton.ButtonType.NEXT)
+                            .setTheme(R.style.SudGlifButton_Primary)
+                            .build()
+            );
+            mSkipOrClearButton = mixin.getSecondaryButton();
+            mNextButton = mixin.getPrimaryButton();
 
             mMessage = view.findViewById(R.id.message);
             if (mForFingerprint) {
@@ -777,19 +788,15 @@
         }
 
         protected void setNextText(int text) {
-            mNextButton.setText(text);
+            mNextButton.setText(getActivity(), text);
         }
 
-        public void onClick(View v) {
-            switch (v.getId()) {
-                case R.id.next_button:
-                    handleNext();
-                    break;
+        protected void onSkipOrClearButtonClick(View view) {
+            mPasswordEntry.setText("");
+        }
 
-                case R.id.clear_button:
-                    mPasswordEntry.setText("");
-                    break;
-            }
+        protected void onNextButtonClick(View view) {
+            handleNext();
         }
 
         public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
@@ -894,13 +901,12 @@
                 mPasswordRequirementAdapter.setRequirements(messages);
                 // Enable/Disable the next button accordingly.
                 setNextEnabled(errorCode == NO_ERROR);
-                mClearButton.setVisibility(View.GONE);
             } else {
                 // Hide password requirement view when we are just asking user to confirm the pw.
                 mPasswordRestrictionView.setVisibility(View.GONE);
                 setHeaderText(getString(mUiStage.getHint(mIsAlphaMode, getStageType())));
                 setNextEnabled(canInput && length >= mPasswordMinLength);
-                mClearButton.setVisibility(toVisibility(canInput && length > 0));
+                mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
             }
             int message = mUiStage.getMessage(mIsAlphaMode, getStageType());
             if (message != 0) {
diff --git a/src/com/android/settings/password/SetupChooseLockPassword.java b/src/com/android/settings/password/SetupChooseLockPassword.java
index 2c443c2..213351b 100644
--- a/src/com/android/settings/password/SetupChooseLockPassword.java
+++ b/src/com/android/settings/password/SetupChooseLockPassword.java
@@ -72,8 +72,11 @@
     public static class SetupChooseLockPasswordFragment extends ChooseLockPasswordFragment
             implements OnLockTypeSelectedListener {
 
+        private static final String TAG_SKIP_SCREEN_LOCK_DIALOG = "skip_screen_lock_dialog";
+
         @Nullable
         private Button mOptionsButton;
+        private boolean mLeftButtonIsSkip;
 
         @Override
         public void onViewCreated(View view, Bundle savedInstanceState) {
@@ -92,26 +95,22 @@
             if (showOptionsButton && anyOptionsShown) {
                 mOptionsButton = view.findViewById(R.id.screen_lock_options);
                 mOptionsButton.setVisibility(View.VISIBLE);
-                mOptionsButton.setOnClickListener(this);
+                mOptionsButton.setOnClickListener((btn) ->
+                        ChooseLockTypeDialogFragment.newInstance(mUserId)
+                                .show(getChildFragmentManager(), TAG_SKIP_SCREEN_LOCK_DIALOG));
             }
         }
 
         @Override
-        public void onClick(View v) {
-            switch (v.getId()) {
-                case R.id.screen_lock_options:
-                    ChooseLockTypeDialogFragment.newInstance(mUserId)
-                            .show(getChildFragmentManager(), null);
-                    break;
-                case R.id.skip_button:
-                    SetupSkipDialog dialog = SetupSkipDialog.newInstance(
-                            getActivity().getIntent()
-                                    .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
-                    dialog.show(getFragmentManager());
-                    break;
-                default:
-                    super.onClick(v);
+        protected void onSkipOrClearButtonClick(View view) {
+            if (mLeftButtonIsSkip) {
+                SetupSkipDialog dialog = SetupSkipDialog.newInstance(
+                        getActivity().getIntent()
+                                .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false));
+                dialog.show(getFragmentManager());
+                return;
             }
+            super.onSkipOrClearButtonClick(view);
         }
 
         @Override
@@ -137,9 +136,11 @@
             super.updateUi();
             // Show the skip button during SUW but not during Settings > Biometric Enrollment
             if (mUiStage == Stage.Introduction) {
-                mSkipButton.setVisibility(View.VISIBLE);
+                mSkipOrClearButton.setText(getActivity(), R.string.skip_label);
+                mLeftButtonIsSkip = true;
             } else {
-                mSkipButton.setVisibility(View.GONE);
+                mSkipOrClearButton.setText(getActivity(), R.string.lockpassword_clear_label);
+                mLeftButtonIsSkip = false;
             }
 
             if (mOptionsButton != null) {
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 736cd00..3a69844 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -57,6 +57,8 @@
     public static class SetupChooseLockPatternFragment extends ChooseLockPatternFragment
             implements ChooseLockTypeDialogFragment.OnLockTypeSelectedListener {
 
+        private static final String TAG_SKIP_SCREEN_LOCK_DIALOG = "skip_screen_lock_dialog";
+
         @Nullable
         private Button mOptionsButton;
         private boolean mLeftButtonIsSkip;
@@ -69,7 +71,7 @@
                 mOptionsButton = view.findViewById(R.id.screen_lock_options);
                 mOptionsButton.setOnClickListener((btn) ->
                         ChooseLockTypeDialogFragment.newInstance(mUserId)
-                                .show(getChildFragmentManager(), null));
+                                .show(getChildFragmentManager(), TAG_SKIP_SCREEN_LOCK_DIALOG));
             }
             // Show the skip button during SUW but not during Settings > Biometric Enrollment
             mSkipOrClearButton.setOnClickListener(this::onSkipOrClearButtonClick);
diff --git a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
index 0ed8544..921552d 100644
--- a/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
+++ b/src/com/android/settings/wifi/NetworkRequestDialogFragment.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.wifi;
 
+import android.app.Activity;
 import android.app.Dialog;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
@@ -29,6 +30,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -36,6 +38,7 @@
 import android.widget.BaseAdapter;
 import android.widget.ProgressBar;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
@@ -65,15 +68,9 @@
     /** Message sent to us to stop scanning wifi and pop up timeout dialog. */
     private static final int MESSAGE_STOP_SCAN_WIFI_LIST = 0;
 
-    /** Message sent to us to finish activity. */
-    private static final int MESSAGE_FINISH_ACTIVITY = 1;
-
     /** Spec defines there should be 5 wifi ap on the list at most. */
     private static final int MAX_NUMBER_LIST_ITEM = 5;
 
-    /** Holding time to let user be aware that selected wifi ap is connected */
-    private static final int DELAY_TIME_USER_AWARE_CONNECTED_MS = 1 * 1000;
-
     /** Delayed time to stop scanning wifi. */
     private static final int DELAY_TIME_STOP_SCAN_MS = 30 * 1000;
 
@@ -184,7 +181,6 @@
     public void onDestroy() {
         super.onDestroy();
 
-        mHandler.removeMessages(MESSAGE_FINISH_ACTIVITY);
         if (mFilterWifiTracker != null) {
             mFilterWifiTracker.onDestroy();
             mFilterWifiTracker = null;
@@ -215,10 +211,7 @@
             switch (msg.what) {
                 case MESSAGE_STOP_SCAN_WIFI_LIST:
                     removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
-                    stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE.TIME_OUT);
-                    break;
-                case MESSAGE_FINISH_ACTIVITY:
-                    stopScanningAndMaybePopErrorDialog(/* ERROR_DIALOG_TYPE */ null);
+                    stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.TIME_OUT);
                     break;
                 default:
                     // Do nothing.
@@ -227,29 +220,21 @@
         }
     };
 
-    protected void stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE type) {
+    protected void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
         // Dismisses current dialog.
         final Dialog dialog =  getDialog();
         if (dialog != null && dialog.isShowing()) {
             dismiss();
         }
 
-        if (type  == null) {
-            // If no error, finishes activity.
-            if (getActivity() != null) {
-                getActivity().finish();
-            }
-        } else {
-            // Throws error dialog.
-            final NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment
-                    .newInstance();
-            final Bundle bundle = new Bundle();
-            bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
-            fragment.setArguments(bundle);
-            fragment.show(getActivity().getSupportFragmentManager(),
-                    NetworkRequestDialogFragment.class.getSimpleName());
-        }
-
+        // Throws error dialog.
+        final NetworkRequestErrorDialogFragment fragment = NetworkRequestErrorDialogFragment
+                .newInstance();
+        final Bundle bundle = new Bundle();
+        bundle.putSerializable(NetworkRequestErrorDialogFragment.DIALOG_TYPE, type);
+        fragment.setArguments(bundle);
+        fragment.show(getActivity().getSupportFragmentManager(),
+                NetworkRequestDialogFragment.class.getSimpleName());
     }
 
     @Override
@@ -287,7 +272,13 @@
 
             final TextView summary = view.findViewById(android.R.id.summary);
             if (summary != null) {
-                summary.setText(accessPoint.getSettingsSummary());
+                final String summaryString = accessPoint.getSettingsSummary();
+                if (TextUtils.isEmpty(summaryString)) {
+                    summary.setVisibility(View.GONE);
+                } else {
+                    summary.setVisibility(View.VISIBLE);
+                    summary.setText(summaryString);
+                }
             }
 
             final PreferenceImageView imageView = view.findViewById(android.R.id.icon);
@@ -306,7 +297,7 @@
 
     @Override
     public void onAbort() {
-        stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
+        stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
     }
 
     @Override
@@ -354,24 +345,17 @@
 
     @Override
     public void onUserSelectionConnectSuccess(WifiConfiguration wificonfiguration) {
-        // Removes the progress icon.
-        final Dialog dialog = getDialog();
-        if (dialog != null) {
-            final View view = dialog.findViewById(R.id.network_request_title_progress);
-            if (view != null) {
-                view.setVisibility(View.GONE);
-            }
+        final Activity activity = getActivity();
+        if (activity != null) {
+            Toast.makeText(activity, R.string.network_connection_connect_successful,
+                    Toast.LENGTH_SHORT).show();
+            activity.finish();
         }
-
-        // Posts delay to finish self since connection is success.
-        mHandler.removeMessages(MESSAGE_STOP_SCAN_WIFI_LIST);
-        mHandler.sendEmptyMessageDelayed(MESSAGE_FINISH_ACTIVITY,
-                DELAY_TIME_USER_AWARE_CONNECTED_MS);
     }
 
     @Override
     public void onUserSelectionConnectFailure(WifiConfiguration wificonfiguration) {
-        stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
+        stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE.ABORT);
     }
 
     private final class FilterWifiTracker {
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index bee66cc..946ab69 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -37,6 +37,9 @@
 import com.android.settings.testutils.shadow.ShadowUtils;
 import com.android.settings.widget.ScrollToParentEditText;
 
+import com.google.android.setupcompat.PartnerCustomizationLayout;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -137,17 +140,19 @@
     public void createActivity_skipButtonInIntroductionStage_shouldBeVisible() {
         SetupChooseLockPassword activity = createSetupChooseLockPassword();
 
-        Button skipButton = activity.findViewById(R.id.skip_button);
-        assertThat(skipButton).isNotNull();
-        assertThat(skipButton.getVisibility()).isEqualTo(View.VISIBLE);
+        final PartnerCustomizationLayout layout = activity.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();
-        AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        skipOrClearButton.performClick();
+        final AlertDialog chooserDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(chooserDialog).isNotNull();
     }
 
     @Test
-    public void createActivity_inputPasswordInConfirmStage_clearButtonShouldBeVisible() {
+    public void createActivity_inputPasswordInConfirmStage_clearButtonShouldBeShown() {
         SetupChooseLockPassword activity = createSetupChooseLockPassword();
 
         SetupChooseLockPasswordFragment fragment =
@@ -158,15 +163,17 @@
         passwordEntry.setText("");
         fragment.updateStage(Stage.NeedToConfirm);
 
-        Button skipButton = activity.findViewById(R.id.skip_button);
-        Button clearButton = activity.findViewById(R.id.clear_button);
-        assertThat(skipButton.getVisibility()).isEqualTo(View.GONE);
-        assertThat(clearButton.getVisibility()).isEqualTo(View.GONE);
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
+        assertThat(skipOrClearButton.isEnabled()).isTrue();
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.GONE);
 
         passwordEntry.setText("1234");
         fragment.updateUi();
-        assertThat(skipButton.getVisibility()).isEqualTo(View.GONE);
-        assertThat(clearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(skipOrClearButton.getText())
+                .isEqualTo(application.getString(R.string.lockpassword_clear_label));
     }
 
     private SetupChooseLockPassword createSetupChooseLockPassword() {
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
index 17516e9..d84d665 100644
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
@@ -119,7 +119,7 @@
         ERROR_DIALOG_TYPE errorType = null;
 
         @Override
-        public void stopScanningAndMaybePopErrorDialog(ERROR_DIALOG_TYPE type) {
+        public void stopScanningAndPopErrorDialog(ERROR_DIALOG_TYPE type) {
             bCalledStopAndPop = true;
             errorType = type;
         }
@@ -152,25 +152,19 @@
     }
 
     @Test
-    public void updateAccessPointList_onUserSelectionConnectSuccess_shouldCloseTheDialog() {
+    public void updateAccessPointList_onUserSelectionConnectSuccess_shouldFinishActivity() {
         // Assert
-        FakeNetworkRequestDialogFragment fakeFragment = new FakeNetworkRequestDialogFragment();
-        FakeNetworkRequestDialogFragment spyFakeFragment = spy(fakeFragment);
-
-        List<AccessPoint> accessPointList = createAccessPointList();
-        when(spyFakeFragment.getAccessPointList()).thenReturn(accessPointList);
-
-        spyFakeFragment.show(mActivity.getSupportFragmentManager(), null);
+        final FragmentActivity spyActivity = spy(mActivity);
+        when(networkRequestDialogFragment.getActivity()).thenReturn(spyActivity);
+        networkRequestDialogFragment.show(spyActivity.getSupportFragmentManager(), "onUserSelectionConnectSuccess");
 
         // Action
-        WifiConfiguration config = new WifiConfiguration();
+        final WifiConfiguration config = new WifiConfiguration();
         config.SSID = "Test AP 3";
-        spyFakeFragment.onUserSelectionConnectSuccess(config);
+        networkRequestDialogFragment.onUserSelectionConnectSuccess(config);
 
         // Check
-        ShadowLooper.getShadowMainLooper().runToEndOfTasks();
-        assertThat(fakeFragment.bCalledStopAndPop).isTrue();
-        assertThat(fakeFragment.errorType).isNull();
+        verify(spyActivity).finish();
     }
 
     @Test
diff --git a/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java
index 57a4965..269be26 100644
--- a/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java
+++ b/tests/unit/src/com/android/settings/password/ChooseLockPasswordTest.java
@@ -24,12 +24,16 @@
 import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.hamcrest.CoreMatchers.not;
 
+import android.app.Activity;
 import android.app.Instrumentation;
 import android.content.Context;
 import android.content.Intent;
 import android.view.KeyEvent;
+import android.view.View;
 
 import androidx.test.InstrumentationRegistry;
 import androidx.test.espresso.action.ViewActions;
@@ -38,6 +42,9 @@
 
 import com.android.settings.R;
 
+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;
@@ -54,28 +61,41 @@
     }
 
     @Test
-    public void clearNotVisible_when_activityLaunchedInitially() {
-        mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
-        onView(withId(R.id.clear_button)).check(matches(
-                withEffectiveVisibility(ViewMatchers.Visibility.GONE)));
+    public void clearIsNotShown_when_activityLaunchedInitially() {
+        final Activity activity =
+                mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class)
+                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.GONE);
     }
 
     @Test
-    public void clearNotEnabled_when_nothingEntered() {
-        mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+    public void clearIsNotShown_when_nothingEntered() {
+        final Activity activity =
+                mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER));
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()))
-            .check(matches(not(isEnabled())));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.GONE);
     }
 
     @Test
-    public void clearEnabled_when_somethingEnteredToConfirm() {
-        mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+    public void clearIsShown_when_somethingEnteredToConfirm() {
+        final Activity activity =
+                mInstrumentation.startActivitySync(new Intent(mContext, ChooseLockPassword.class));
+        final PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER))
                 .perform(ViewActions.typeText("1"));
         // clear should be present if text field contains content
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()));
+        assertThat(layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getText())
+                .isEqualTo(mContext.getString(R.string.lockpassword_clear_label));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.VISIBLE);
     }
 }
diff --git a/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java b/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
index 1b12c54..67c5cce 100644
--- a/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
+++ b/tests/unit/src/com/android/settings/password/SetupChooseLockPasswordAppTest.java
@@ -30,8 +30,12 @@
 
 import static org.hamcrest.CoreMatchers.not;
 
+import android.content.Context;
 import android.view.KeyEvent;
+import android.view.View;
+import android.widget.Button;
 
+import androidx.test.InstrumentationRegistry;
 import androidx.test.espresso.action.ViewActions;
 import androidx.test.espresso.matcher.ViewMatchers;
 import androidx.test.filters.MediumTest;
@@ -40,6 +44,10 @@
 
 import com.android.settings.R;
 
+import com.google.android.setupcompat.PartnerCustomizationLayout;
+import com.google.android.setupcompat.template.ButtonFooterMixin;
+
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -48,6 +56,8 @@
 @MediumTest
 public class SetupChooseLockPasswordAppTest {
 
+    private Context mContext;
+
     @Rule
     public ActivityTestRule<SetupChooseLockPassword> mActivityTestRule =
             new ActivityTestRule<>(
@@ -55,42 +65,56 @@
                     true /* enable touch at launch */,
                     false /* don't launch at every test */);
 
+    @Before
+    public void setUp() {
+        mContext = InstrumentationRegistry.getTargetContext();
+    }
+
     @Test
     public void testSkipDialogIsShown() throws Throwable {
         SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        final Button skipOrClearButton =
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
 
-        onView(withId(R.id.cancel_button))
-                .check(matches(withText(R.string.skip_label)))
-                .check(matches(isDisplayed()))
-                .perform(click());
-        onView(withId(android.R.id.button1)).check(matches(isDisplayed())).perform(click());
-
+        assertThat(skipOrClearButton.getText()).isEqualTo(mContext.getString(R.string.skip_label));
+        assertThat(skipOrClearButton.getVisibility()).isEqualTo(View.VISIBLE);
+        skipOrClearButton.performClick();
         assertThat(activity.isFinishing()).named("Is finishing").isTrue();
     }
 
     @Test
-    public void clearNotVisible_when_activityLaunchedInitially() {
-        mActivityTestRule.launchActivity(null);
-        onView(withId(R.id.clear_button)).check(matches(
-                withEffectiveVisibility(ViewMatchers.Visibility.GONE)));
+    public void clearIsNotShown_when_activityLaunchedInitially() {
+        SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        assertThat(layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getText())
+                .isEqualTo(mContext.getString(R.string.lockpassword_clear_label));
     }
 
     @Test
-    public void clearNotEnabled_when_nothingEntered() throws Throwable {
-        mActivityTestRule.launchActivity(null);
+    public void clearIsNotShown_when_nothingEntered() throws Throwable {
+        SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER));
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()))
-                .check(matches(not(isEnabled())));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.GONE);
     }
 
     @Test
-    public void clearEnabled_when_somethingEnteredToConfirm() {
+    public void clearIsShown_when_somethingEnteredToConfirm() {
+        SetupChooseLockPassword activity = mActivityTestRule.launchActivity(null);
+        PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
+               .perform(pressKey(KeyEvent.KEYCODE_ENTER));
         mActivityTestRule.launchActivity(null);
         onView(withId(R.id.password_entry)).perform(ViewActions.typeText("1234"))
                 .perform(pressKey(KeyEvent.KEYCODE_ENTER))
                 .perform(ViewActions.typeText("1"));
         // clear should be present if text field contains content
-        onView(withId(R.id.clear_button)).check(matches(isDisplayed()));
+        assertThat(
+                layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().getVisibility())
+                        .isEqualTo(View.VISIBLE);
     }
 }