Merge "Apply top intro preference for face settings page"
diff --git a/res/layout/wifi_dpp_qrcode_generator_fragment.xml b/res/layout/wifi_dpp_qrcode_generator_fragment.xml
index 76eecb0..1d9656c 100644
--- a/res/layout/wifi_dpp_qrcode_generator_fragment.xml
+++ b/res/layout/wifi_dpp_qrcode_generator_fragment.xml
@@ -42,6 +42,7 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:gravity="center"
+            android:id="@+id/wifi_dpp_layout"
             android:orientation="vertical">
 
             <ImageView
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2989d8a..984b36e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12431,7 +12431,14 @@
     <string name="calls_preference_title">Calls</string>
     <!-- Provider Model: SMS preference title -->
     <string name="sms_preference_title">SMS</string>
+    <!-- Network & internet preferences title [CHAR LIMIT=NONE] -->
+    <string name="network_and_internet_preferences_title">Preferences</string>
+    <!-- Network & internet preferences summary [CHAR LIMIT=NONE] -->
+    <string name="network_and_internet_preferences_summary">Connect to public networks</string>
 
     <!-- Summary for preference when Bedtime mode is on [CHAR LIMIT=NONE] -->
     <string name="aware_summary_when_bedtime_on">Unavailable because bedtime mode is on</string>
+
+    <!-- Toast message to inform reset notification importance is completed [CHAR LIMIT=NONE] -->
+    <string name="reset_importance_completed">Reset notification importance completed.</string>
 </resources>
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index fcc6bcc..6781e28 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -90,7 +90,7 @@
             android:key="toggle_force_bold_text"
             android:persistent="false"
             android:title="@string/force_bold_text"
-            settings:controller="com.android.settings.accessibility.ForceBoldTextPreferenceController"/>
+            settings:controller="com.android.settings.accessibility.FontWeightAdjustmentPreferenceController"/>
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/res/xml/dark_mode_settings.xml b/res/xml/dark_mode_settings.xml
index 0ebc044..e076b89 100644
--- a/res/xml/dark_mode_settings.xml
+++ b/res/xml/dark_mode_settings.xml
@@ -27,6 +27,11 @@
         settings:allowDividerBelow="true"
         settings:controller="com.android.settings.display.TwilightLocationPreferenceController"/>
 
+    <com.android.settingslib.widget.TopIntroPreference
+        android:key="dark_ui_top_intro"
+        android:title="@string/dark_ui_text"
+        settings:searchable="false"/>
+
     <DropDownPreference
         android:key="dark_ui_auto_mode"
         android:title="@string/dark_ui_auto_mode_title"
@@ -55,11 +60,4 @@
         settings:allowDividerBelow="true"
         settings:controller="com.android.settings.display.darkmode.DarkModeActivationPreferenceController"/>
 
-    <com.android.settingslib.widget.FooterPreference
-            android:key="dark_ui_footer"
-            android:title="@string/dark_ui_text"
-            android:selectable="false"
-            settings:searchable="false"
-            settings:allowDividerAbove="true"/>
-
 </PreferenceScreen>
diff --git a/res/xml/graphics_driver_settings.xml b/res/xml/graphics_driver_settings.xml
index a1fa78c..26c3193 100644
--- a/res/xml/graphics_driver_settings.xml
+++ b/res/xml/graphics_driver_settings.xml
@@ -20,12 +20,17 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/graphics_driver_dashboard_title">
 
+    <com.android.settingslib.widget.TopIntroPreference
+        android:key="top_info_graphics_driver"
+        android:title="@string/graphics_driver_footer_text"
+        settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverTopIntroPreferenceController"/>
+
     <ListPreference
         android:key="graphics_driver_all_apps_preference"
         android:title="@string/graphics_driver_all_apps_preference_title"
         android:dialogTitle="@string/graphics_driver_all_apps_preference_title"
-        settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverEnableForAllAppsPreferenceController">
-    </ListPreference>
+        settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverEnableForAllAppsPreferenceController"
+        settings:allowDividerAbove="true"/>
 
     <PreferenceCategory
         android:key="graphics_driver_category"
@@ -33,11 +38,4 @@
         settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverAppPreferenceController">
     </PreferenceCategory>
 
-    <com.android.settingslib.widget.FooterPreference
-        android:key="graphics_driver_footer"
-        android:title="@string/graphics_driver_footer_text"
-        android:selectable="false"
-        settings:controller="com.android.settings.development.graphicsdriver.GraphicsDriverFooterPreferenceController">
-    </com.android.settingslib.widget.FooterPreference>
-
 </PreferenceScreen>
diff --git a/res/xml/network_provider_settings.xml b/res/xml/network_provider_settings.xml
index 2af2e91..a3fecf6 100644
--- a/res/xml/network_provider_settings.xml
+++ b/res/xml/network_provider_settings.xml
@@ -33,7 +33,8 @@
 
     <Preference
         android:key="configure_wifi_settings"
-        android:title="@string/wifi_configure_settings_preference_title"
+        android:title="@string/network_and_internet_preferences_title"
+        android:summary="@string/network_and_internet_preferences_summary"
         settings:allowDividerAbove="true"
         android:fragment="com.android.settings.wifi.ConfigureWifiSettings"/>
 
diff --git a/res/xml/night_display_settings.xml b/res/xml/night_display_settings.xml
index 8b7e41a..9acccf6 100644
--- a/res/xml/night_display_settings.xml
+++ b/res/xml/night_display_settings.xml
@@ -27,10 +27,16 @@
         settings:controller="com.android.settings.display.TwilightLocationPreferenceController"
         settings:allowDividerBelow="true"/>
 
+    <com.android.settingslib.widget.TopIntroPreference
+        android:key="night_display_top_intro"
+        android:title="@string/night_display_text"
+        settings:controller="com.android.settings.display.NightDisplayTopIntroPreferenceController"/>
+
     <DropDownPreference
         android:key="night_display_auto_mode"
         android:title="@string/night_display_auto_mode_title"
         android:summary="%s"
+        settings:allowDividerAbove="true"
         settings:controller="com.android.settings.display.NightDisplayAutoModePreferenceController"/>
 
     <Preference
@@ -59,11 +65,4 @@
         settings:keywords="@string/keywords_display_night_display"
         settings:controller="com.android.settings.display.NightDisplayActivationPreferenceController"/>
 
-    <com.android.settingslib.widget.FooterPreference
-        android:key="night_display_footer"
-        android:title="@string/night_display_text"
-        android:selectable="false"
-        settings:allowDividerAbove="true"
-        settings:controller="com.android.settings.display.NightDisplayFooterPreferenceController"/>
-
 </PreferenceScreen>
diff --git a/res/xml/tether_prefs.xml b/res/xml/tether_prefs.xml
index 9367a9b..cca4e5f 100644
--- a/res/xml/tether_prefs.xml
+++ b/res/xml/tether_prefs.xml
@@ -19,12 +19,17 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/tether_settings_title_all">
 
+    <com.android.settingslib.widget.TopIntroPreference
+        android:key="tether_prefs_top_intro"
+        settings:searchable="false"/>
+
     <com.android.settings.widget.FixedLineSummaryPreference
         android:key="wifi_tether"
         android:title="@string/wifi_hotspot_checkbox_text"
         android:summary="@string/summary_placeholder"
         android:fragment="com.android.settings.wifi.tether.WifiTetherSettings"
-        settings:summaryLineCount="2" />
+        settings:allowDividerAbove="true"
+        settings:summaryLineCount="2"/>
 
     <SwitchPreference
         android:key="usb_tether_settings"
@@ -49,9 +54,4 @@
         android:summary="@string/tether_settings_disabled_on_data_saver"
         android:selectable="false"
         settings:allowDividerAbove="true" />
-
-    <com.android.settingslib.widget.FooterPreference
-        android:key="tether_prefs_footer"
-        android:selectable="false"
-        settings:searchable="false"/>
 </PreferenceScreen>
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index 7726a18..5cafa1a 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -20,6 +20,11 @@
     android:key="user_settings_screen"
     android:title="@string/user_settings_title">
 
+    <com.android.settingslib.widget.TopIntroPreference
+        android:key="multiuser_top_intro"
+        android:title="@string/user_settings_footer_text"
+        settings:controller="com.android.settings.users.MultiUserTopIntroPreferenceController"/>
+
     <PreferenceCategory
         android:key="user_list"
         android:title="@string/user_list_title"
@@ -45,11 +50,4 @@
         android:order="105"
         settings:allowDividerAbove="true"/>
 
-    <com.android.settingslib.widget.FooterPreference
-        android:key="multiuser_footer"
-        android:title="@string/user_settings_footer_text"
-        android:selectable="false"
-        settings:searchable="false"
-        settings:controller="com.android.settings.users.MultiUserFooterPreferenceController"/>
-
 </PreferenceScreen>
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 74a0897..c33f7db 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -78,7 +78,7 @@
     private static final String KEY_ENABLE_ETHERNET_TETHERING = "enable_ethernet_tethering";
     private static final String KEY_DATA_SAVER_FOOTER = "disabled_on_data_saver";
     @VisibleForTesting
-    static final String KEY_TETHER_PREFS_FOOTER = "tether_prefs_footer";
+    static final String KEY_TETHER_PREFS_TOP_INTRO = "tether_prefs_top_intro";
 
     private static final String TAG = "TetheringSettings";
 
@@ -155,7 +155,7 @@
         }
 
         setupTetherPreference();
-        setFooterPreferenceTitle();
+        setTopIntroPreferenceTitle();
 
         mDataSaverBackend.addListener(this);
 
@@ -231,14 +231,14 @@
     }
 
     @VisibleForTesting
-    void setFooterPreferenceTitle() {
-        final Preference footerPreference = findPreference(KEY_TETHER_PREFS_FOOTER);
+    void setTopIntroPreferenceTitle() {
+        final Preference topIntroPreference = findPreference(KEY_TETHER_PREFS_TOP_INTRO);
         final WifiManager wifiManager =
                 (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
         if (wifiManager.isStaApConcurrencySupported()) {
-            footerPreference.setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
+            topIntroPreference.setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
         } else {
-            footerPreference.setTitle(R.string.tethering_footer_info);
+            topIntroPreference.setTitle(R.string.tethering_footer_info);
         }
     }
 
diff --git a/src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
similarity index 70%
rename from src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java
rename to src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
index c8a3203..97f96a4 100644
--- a/src/com/android/settings/accessibility/ForceBoldTextPreferenceController.java
+++ b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
@@ -17,15 +17,17 @@
 package com.android.settings.accessibility;
 
 import android.content.Context;
-import android.content.res.Configuration;
+import android.graphics.fonts.FontStyle;
 import android.provider.Settings;
 
 import com.android.settings.core.TogglePreferenceController;
 
 /** PreferenceController for displaying all text in bold. */
-public class ForceBoldTextPreferenceController extends TogglePreferenceController {
+public class FontWeightAdjustmentPreferenceController extends TogglePreferenceController {
+    static final int BOLD_TEXT_ADJUSTMENT =
+            FontStyle.FONT_WEIGHT_BOLD - FontStyle.FONT_WEIGHT_NORMAL;
 
-    public ForceBoldTextPreferenceController(Context context, String preferenceKey) {
+    public FontWeightAdjustmentPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
     }
 
@@ -37,14 +39,12 @@
     @Override
     public boolean isChecked() {
         return Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, Configuration.FORCE_BOLD_TEXT_NO)
-                == Configuration.FORCE_BOLD_TEXT_YES;
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, 0) == BOLD_TEXT_ADJUSTMENT;
     }
 
     @Override
     public boolean setChecked(boolean isChecked) {
         return Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT,
-                (isChecked ? Configuration.FORCE_BOLD_TEXT_YES : Configuration.FORCE_BOLD_TEXT_NO));
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, (isChecked ? BOLD_TEXT_ADJUSTMENT : 0));
     }
 }
diff --git a/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceController.java b/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceController.java
similarity index 85%
rename from src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceController.java
rename to src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceController.java
index 5595f39..3d449d9 100644
--- a/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceController.java
+++ b/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceController.java
@@ -33,12 +33,12 @@
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
-import com.android.settingslib.widget.FooterPreference;
+import com.android.settingslib.widget.TopIntroPreference;
 
 /**
- * Controller of footer preference for Graphics Driver Preferences dashboard.
+ * Controller of top info preference for Graphics Driver Preferences dashboard.
  */
-public class GraphicsDriverFooterPreferenceController extends BasePreferenceController
+public class GraphicsDriverTopIntroPreferenceController extends BasePreferenceController
         implements GraphicsDriverContentObserver.OnGraphicsDriverContentChangedListener,
         LifecycleObserver, OnStart, OnStop {
 
@@ -46,9 +46,9 @@
     @VisibleForTesting
     GraphicsDriverContentObserver mGraphicsDriverContentObserver;
 
-    private FooterPreference mPreference;
+    private TopIntroPreference mPreference;
 
-    public GraphicsDriverFooterPreferenceController(Context context, String key) {
+    public GraphicsDriverTopIntroPreferenceController(Context context, String key) {
         super(context, key);
         mContentResolver = context.getContentResolver();
         mGraphicsDriverContentObserver =
@@ -83,8 +83,8 @@
 
     @Override
     public void updateState(Preference preference) {
-        final FooterPreference footerPref = (FooterPreference) preference;
-        footerPref.setVisible(isAvailable());
+        final TopIntroPreference topIntroPref = (TopIntroPreference) preference;
+        topIntroPref.setVisible(isAvailable());
     }
 
     @Override
diff --git a/src/com/android/settings/display/NightDisplayFooterPreferenceController.java b/src/com/android/settings/display/NightDisplayTopIntroPreferenceController.java
similarity index 78%
rename from src/com/android/settings/display/NightDisplayFooterPreferenceController.java
rename to src/com/android/settings/display/NightDisplayTopIntroPreferenceController.java
index 14fe25e..a40044b 100644
--- a/src/com/android/settings/display/NightDisplayFooterPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayTopIntroPreferenceController.java
@@ -21,9 +21,13 @@
 
 import com.android.settings.core.BasePreferenceController;
 
-public class NightDisplayFooterPreferenceController extends BasePreferenceController {
+/**
+ * NightDisplayTopIntroPreferenceController can control the visibility of night display top info
+ * preference.
+ */
+public class NightDisplayTopIntroPreferenceController extends BasePreferenceController {
 
-    public NightDisplayFooterPreferenceController(Context context, String key) {
+    public NightDisplayTopIntroPreferenceController(Context context, String key) {
         super(context, key);
     }
 
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index 5a42a5a..df62190 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -828,10 +828,12 @@
 
     @VisibleForTesting
     void setAdditionalSettingsSummaries() {
-        mConfigureWifiSettingsPreference.setSummary(getString(
-                isWifiWakeupEnabled()
-                        ? R.string.wifi_configure_settings_preference_summary_wakeup_on
-                        : R.string.wifi_configure_settings_preference_summary_wakeup_off));
+        if (!FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+            mConfigureWifiSettingsPreference.setSummary(getString(
+                    isWifiWakeupEnabled()
+                            ? R.string.wifi_configure_settings_preference_summary_wakeup_on
+                            : R.string.wifi_configure_settings_preference_summary_wakeup_off));
+        }
 
         final int numSavedNetworks = mWifiPickerTracker.getNumSavedNetworks();
         final int numSavedSubscriptions = mWifiPickerTracker.getNumSavedSubscriptions();
diff --git a/src/com/android/settings/notification/ImportanceResetPreferenceController.java b/src/com/android/settings/notification/ImportanceResetPreferenceController.java
index b374129..3c66f1a 100644
--- a/src/com/android/settings/notification/ImportanceResetPreferenceController.java
+++ b/src/com/android/settings/notification/ImportanceResetPreferenceController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.view.View;
 import android.widget.Button;
+import android.widget.Toast;
 
 import androidx.preference.Preference;
 
@@ -57,6 +58,8 @@
     @Override
     public void onClick(View v) {
         mBackend.resetNotificationImportance();
+        Toast.makeText(mContext, R.string.reset_importance_completed, Toast.LENGTH_SHORT)
+                            .show();
     }
 
     @Override
diff --git a/src/com/android/settings/users/MultiUserFooterPreferenceController.java b/src/com/android/settings/users/MultiUserTopIntroPreferenceController.java
similarity index 83%
rename from src/com/android/settings/users/MultiUserFooterPreferenceController.java
rename to src/com/android/settings/users/MultiUserTopIntroPreferenceController.java
index 03ed6ce..a8076c2 100644
--- a/src/com/android/settings/users/MultiUserFooterPreferenceController.java
+++ b/src/com/android/settings/users/MultiUserTopIntroPreferenceController.java
@@ -23,12 +23,16 @@
 
 import com.android.settings.core.BasePreferenceController;
 
-public class MultiUserFooterPreferenceController extends BasePreferenceController {
+/**
+ * MultiUserTopIntroPreferenceController can control the visibility of multi user top info
+ * preference.
+ */
+public class MultiUserTopIntroPreferenceController extends BasePreferenceController {
 
     @VisibleForTesting
     final UserCapabilities mUserCaps;
 
-    public MultiUserFooterPreferenceController(Context context, String key) {
+    public MultiUserTopIntroPreferenceController(Context context, String key) {
         super(context, key);
         mUserCaps = UserCapabilities.create(context);
     }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index d92418d..63ccb6b 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -110,7 +110,7 @@
     private static final String KEY_ADD_GUEST = "guest_add";
     private static final String KEY_ADD_USER = "user_add";
     private static final String KEY_ADD_USER_WHEN_LOCKED = "user_settings_add_users_when_locked";
-    private static final String KEY_MULTIUSER_FOOTER = "multiuser_footer";
+    private static final String KEY_MULTIUSER_TOP_INTRO = "multiuser_top_intro";
 
     private static final int MENU_REMOVE_USER = Menu.FIRST;
 
@@ -169,7 +169,7 @@
     private EditUserInfoController mEditUserInfoController =
             new EditUserInfoController(Utils.FILE_PROVIDER_AUTHORITY);
     private AddUserWhenLockedPreferenceController mAddUserWhenLockedPreferenceController;
-    private MultiUserFooterPreferenceController mMultiUserFooterPreferenceController;
+    private MultiUserTopIntroPreferenceController mMultiUserTopIntroPreferenceController;
     private UserCreatingDialog mUserCreatingDialog;
 
     private CharSequence mPendingUserName;
@@ -240,12 +240,12 @@
         mAddUserWhenLockedPreferenceController = new AddUserWhenLockedPreferenceController(
                 activity, KEY_ADD_USER_WHEN_LOCKED);
 
-        mMultiUserFooterPreferenceController = new MultiUserFooterPreferenceController(activity,
-                KEY_MULTIUSER_FOOTER);
+        mMultiUserTopIntroPreferenceController = new MultiUserTopIntroPreferenceController(activity,
+                KEY_MULTIUSER_TOP_INTRO);
 
         final PreferenceScreen screen = getPreferenceScreen();
         mAddUserWhenLockedPreferenceController.displayPreference(screen);
-        mMultiUserFooterPreferenceController.displayPreference(screen);
+        mMultiUserTopIntroPreferenceController.displayPreference(screen);
 
         screen.findPreference(mAddUserWhenLockedPreferenceController.getPreferenceKey())
                 .setOnPreferenceChangeListener(mAddUserWhenLockedPreferenceController);
@@ -936,14 +936,14 @@
         // Remove everything from mUserListCategory and add new users.
         mUserListCategory.removeAll();
 
-        // If multi-user is disabled, just show footer and return.
+        // If multi-user is disabled, just show top info and return.
         final Preference addUserOnLockScreen = getPreferenceScreen().findPreference(
                 mAddUserWhenLockedPreferenceController.getPreferenceKey());
         mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen);
 
-        final Preference multiUserFooterPrefence = getPreferenceScreen().findPreference(
-                mMultiUserFooterPreferenceController.getPreferenceKey());
-        mMultiUserFooterPreferenceController.updateState(multiUserFooterPrefence);
+        final Preference multiUserTopIntroPrefence = getPreferenceScreen().findPreference(
+                mMultiUserTopIntroPreferenceController.getPreferenceKey());
+        mMultiUserTopIntroPreferenceController.updateState(multiUserTopIntroPrefence);
         mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
 
         updateAddGuest(context, users.stream().anyMatch(UserInfo::isGuest));
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 3009ae7..81ca183 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -21,6 +21,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.util.FeatureFlagUtils;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -43,6 +45,14 @@
     private UseOpenWifiPreferenceController mUseOpenWifiPreferenceController;
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+            getActivity().setTitle(R.string.network_and_internet_preferences_title);
+        }
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.CONFIGURE_WIFI;
     }
@@ -54,7 +64,10 @@
 
     @Override
     public int getInitialExpandedChildCount() {
-        int tileLimit = 2;
+        int tileLimit = 1;
+        if (mWifiWakeupPreferenceController.isAvailable()) {
+            tileLimit++;
+        }
         if (mUseOpenWifiPreferenceController.isAvailable()) {
             tileLimit++;
         }
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 5c7820c..2804393 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -106,6 +106,7 @@
     @VisibleForTesting
     static final int MENU_ID_FORGET = Menu.FIRST + 3;
     static final int MENU_ID_MODIFY = Menu.FIRST + 4;
+    static final int MENU_ID_SHARE = Menu.FIRST + 5;
 
     // Max age of tracked WifiEntries
     private static final long MAX_SCAN_AGE_MILLIS = 15_000;
@@ -499,7 +500,8 @@
         }
 
         if (mSelectedWifiEntry.canDisconnect()) {
-            menu.add(Menu.NONE, MENU_ID_DISCONNECT, 0 /* order */,
+            menu.add(Menu.NONE, MENU_ID_SHARE, 0 /* order */, R.string.share);
+            menu.add(Menu.NONE, MENU_ID_DISCONNECT, 1 /* order */,
                     R.string.wifi_disconnect_button_text);
         }
 
@@ -538,6 +540,10 @@
             case MENU_ID_FORGET:
                 forget(mSelectedWifiEntry);
                 return true;
+            case MENU_ID_SHARE:
+                WifiDppUtils.showLockScreen(getContext(),
+                        () -> launchWifiDppConfiguratorActivity(mSelectedWifiEntry));
+                return true;
             case MENU_ID_MODIFY:
                 showDialog(mSelectedWifiEntry, WifiConfigUiBase2.MODE_MODIFY);
                 return true;
@@ -1115,6 +1121,23 @@
                 .launch();
     }
 
+    private void launchWifiDppConfiguratorActivity(WifiEntry wifiEntry) {
+        final Intent intent = WifiDppUtils.getConfiguratorQrCodeGeneratorIntentOrNull(getContext(),
+                mWifiManager, wifiEntry);
+
+        if (intent == null) {
+            Log.e(TAG, "Launch Wi-Fi DPP QR code generator with a wrong Wi-Fi network!");
+        } else {
+            mMetricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
+                    SettingsEnums.ACTION_SETTINGS_SHARE_WIFI_QR_CODE,
+                    SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR,
+                    /* key */ null,
+                    /* value */ Integer.MIN_VALUE);
+
+            startActivity(intent);
+        }
+    }
+
     /** Helper method to return whether a WifiEntry is disabled due to a wrong password */
     private static boolean isDisabledByWrongPassword(WifiEntry wifiEntry) {
         WifiConfiguration config = wifiEntry.getWifiConfiguration();
diff --git a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
index e9fd350..5869705 100644
--- a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
@@ -26,6 +26,7 @@
 import android.location.LocationManager;
 import android.net.wifi.WifiManager;
 import android.provider.Settings;
+import android.util.FeatureFlagUtils;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.fragment.app.Fragment;
@@ -44,6 +45,7 @@
  * {@link TogglePreferenceController} that controls whether the Wi-Fi Wakeup feature should be
  * enabled.
  */
+// TODO(b/167474581): Should clean up this controller when Provider Model finished.
 public class WifiWakeupPreferenceController extends TogglePreferenceController implements
         LifecycleObserver, OnPause, OnResume {
 
@@ -89,6 +91,9 @@
 
     @Override
     public int getAvailabilityStatus() {
+        if (FeatureFlagUtils.isEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+            return CONDITIONALLY_UNAVAILABLE;
+        }
         return AVAILABLE;
     }
 
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
index 603ea10..aa67bde 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
@@ -16,9 +16,17 @@
 
 package com.android.settings.wifi.dpp;
 
+import android.annotation.Nullable;
 import android.app.settings.SettingsEnums;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -27,9 +35,13 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.app.chooser.DisplayResolveInfo;
+import com.android.internal.app.chooser.TargetInfo;
 import com.android.settings.R;
 import com.android.settings.wifi.qrcode.QrCodeGenerator;
 
@@ -45,6 +57,15 @@
     private ImageView mQrCodeView;
     private String mQrCode;
 
+    private static final String CHIP_LABEL_METADATA_KEY = "android.service.chooser.chip_label";
+    private static final String CHIP_ICON_METADATA_KEY = "android.service.chooser.chip_icon";
+    private static final String EXTRA_WIFI_CREDENTIALS_BUNDLE =
+            "android.intent.extra.WIFI_CREDENTIALS_BUNDLE";
+    private static final String EXTRA_SSID = "android.intent.extra.SSID";
+    private static final String EXTRA_PASSWORD = "android.intent.extra.PASSWORD";
+    private static final String EXTRA_SECURITY_TYPE = "android.intent.extra.SECURITY_TYPE";
+    private static final String EXTRA_HIDDEN_SSID = "android.intent.extra.HIDDEN_SSID";
+
     @Override
     public int getMetricsCategory() {
         return SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR;
@@ -56,10 +77,12 @@
 
         // setTitle for TalkBack
         final WifiNetworkConfig wifiNetworkConfig = getWifiNetworkConfigFromHostActivity();
-        if (wifiNetworkConfig.isHotspot()) {
-            getActivity().setTitle(R.string.wifi_dpp_share_hotspot);
-        } else {
-            getActivity().setTitle(R.string.wifi_dpp_share_wifi);
+        if (getActivity() != null) {
+            if (wifiNetworkConfig.isHotspot()) {
+                getActivity().setTitle(R.string.wifi_dpp_share_hotspot);
+            } else {
+                getActivity().setTitle(R.string.wifi_dpp_share_wifi);
+            }
         }
     }
 
@@ -112,10 +135,127 @@
             }
         }
 
+        final Intent intent = new Intent().setComponent(getNearbySharingComponent());
+        addActionButton(view.findViewById(R.id.wifi_dpp_layout), createNearbyButton(intent, v -> {
+            intent.setAction(Intent.ACTION_SEND);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+            Bundle wifiCredentialBundle = new Bundle();
+
+            String ssid = WifiDppUtils.removeFirstAndLastDoubleQuotes(wifiNetworkConfig.getSsid());
+
+            String passwordExtra = wifiNetworkConfig.getPreSharedKey();
+            String securityType = wifiNetworkConfig.getSecurity();
+            boolean hiddenSsid = wifiNetworkConfig.getHiddenSsid();
+
+            wifiCredentialBundle.putString(EXTRA_SSID, ssid);
+            wifiCredentialBundle.putString(EXTRA_PASSWORD, passwordExtra);
+            wifiCredentialBundle.putString(EXTRA_SECURITY_TYPE, securityType);
+            wifiCredentialBundle.putBoolean(EXTRA_HIDDEN_SSID, hiddenSsid);
+
+            intent.putExtra(EXTRA_WIFI_CREDENTIALS_BUNDLE, wifiCredentialBundle);
+            startActivity(intent);
+        }));
+
         mQrCode = wifiNetworkConfig.getQrCode();
         setQrCode();
     }
 
+    @VisibleForTesting ComponentName getNearbySharingComponent() {
+        String nearbyComponent = Settings.Secure.getString(
+                getContext().getContentResolver(),
+                Settings.Secure.NEARBY_SHARING_COMPONENT);
+        if (TextUtils.isEmpty(nearbyComponent)) {
+            nearbyComponent = getString(
+                    com.android.internal.R.string.config_defaultNearbySharingComponent);
+        }
+        if (TextUtils.isEmpty(nearbyComponent)) {
+            return null;
+        }
+        return ComponentName.unflattenFromString(nearbyComponent);
+    }
+
+    private TargetInfo getNearbySharingTarget(Intent originalIntent) {
+        final ComponentName cn = getNearbySharingComponent();
+        if (cn == null) return null;
+
+        final Intent resolveIntent = new Intent(originalIntent);
+        resolveIntent.setComponent(cn);
+        PackageManager pm = getContext().getPackageManager();
+        final ResolveInfo resolveInfo = pm.resolveActivity(
+                resolveIntent, PackageManager.GET_META_DATA);
+        if (resolveInfo == null || resolveInfo.activityInfo == null) {
+            Log.e(TAG, "Device-specified nearby sharing component (" + cn
+                    + ") not available");
+            return null;
+        }
+
+        // Allow the nearby sharing component to provide a more appropriate icon and label
+        // for the chip.
+        CharSequence name = null;
+        Drawable icon = null;
+        final Bundle metaData = resolveInfo.activityInfo.metaData;
+        if (metaData != null) {
+            try {
+                final Resources pkgRes = pm.getResourcesForActivity(cn);
+                final int nameResId = metaData.getInt(CHIP_LABEL_METADATA_KEY);
+                name = pkgRes.getString(nameResId);
+                final int resId = metaData.getInt(CHIP_ICON_METADATA_KEY);
+                icon = pkgRes.getDrawable(resId);
+            } catch (Resources.NotFoundException ex) {
+            } catch (PackageManager.NameNotFoundException ex) {
+            }
+        }
+        if (TextUtils.isEmpty(name)) {
+            name = resolveInfo.loadLabel(pm);
+        }
+        if (icon == null) {
+            icon = resolveInfo.loadIcon(pm);
+        }
+
+        final DisplayResolveInfo dri = new DisplayResolveInfo(
+                originalIntent, resolveInfo, name, "", resolveIntent, null);
+        dri.setDisplayIcon(icon);
+        return dri;
+    }
+
+    private Button createActionButton(Drawable icon, CharSequence title, View.OnClickListener r) {
+        Button b = (Button) LayoutInflater.from(getContext()).inflate(
+                com.android.internal.R.layout.chooser_action_button, null);
+        if (icon != null) {
+            final int size = getResources()
+                    .getDimensionPixelSize(
+                            com.android.internal.R.dimen.chooser_action_button_icon_size);
+            icon.setBounds(0, 0, size, size);
+            b.setCompoundDrawablesRelative(icon, null, null, null);
+        }
+        b.setText(title);
+        b.setOnClickListener(r);
+        return b;
+    }
+
+    private void addActionButton(ViewGroup parent, Button b) {
+        if (b == null) return;
+        final ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
+                ViewGroup.LayoutParams.WRAP_CONTENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT
+        );
+        final int gap = getResources().getDimensionPixelSize(
+                com.android.internal.R.dimen.resolver_icon_margin) / 2;
+        lp.setMarginsRelative(gap, 0, gap, 0);
+        parent.addView(b, lp);
+    }
+
+    @VisibleForTesting
+    @Nullable
+    Button createNearbyButton(Intent originalIntent, View.OnClickListener r) {
+        final TargetInfo ti = getNearbySharingTarget(originalIntent);
+        if (ti == null) return null;
+
+        return createActionButton(ti.getDisplayIcon(getContext()), ti.getDisplayLabel(), r);
+    }
+
     private void setQrCode() {
         try {
             final int qrcodeSize = getContext().getResources().getDimensionPixelSize(
diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
index bd3eaa6..2957e1f 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
@@ -145,7 +145,7 @@
         return wifiConfiguration.preSharedKey;
     }
 
-    private static String removeFirstAndLastDoubleQuotes(String str) {
+    static String removeFirstAndLastDoubleQuotes(String str) {
         if (TextUtils.isEmpty(str)) {
             return str;
         }
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index 324d68c..2858ab4 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -224,7 +224,7 @@
     private SliceAction getActivityAction(int requestCode, Intent intent, IconCompat icon,
             CharSequence title) {
         final PendingIntent pi = PendingIntent.getActivity(mContext, requestCode, intent,
-                0 /* flags */);
+                PendingIntent.FLAG_IMMUTABLE /* flags */);
         return SliceAction.createDeeplink(pi, icon, ListBuilder.ICON_IMAGE, title);
     }
 
@@ -289,7 +289,7 @@
     private PendingIntent getPrimaryAction() {
         final Intent intent = getIntent();
         return PendingIntent.getActivity(mContext, 0 /* requestCode */,
-                intent, 0 /* flags */);
+                intent, PendingIntent.FLAG_IMMUTABLE /* flags */);
     }
 
     private Set<String> getKeywords() {
diff --git a/tests/robotests/src/com/android/settings/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
index be14eda..f217e21 100644
--- a/tests/robotests/src/com/android/settings/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
@@ -158,13 +158,13 @@
         final TetherSettings spyTetherSettings = spy(new TetherSettings());
         when(spyTetherSettings.getContext()).thenReturn(mContext);
         final Preference mockPreference = mock(Preference.class);
-        when(spyTetherSettings.findPreference(TetherSettings.KEY_TETHER_PREFS_FOOTER))
+        when(spyTetherSettings.findPreference(TetherSettings.KEY_TETHER_PREFS_TOP_INTRO))
             .thenReturn(mockPreference);
         final WifiManager mockWifiManager = mock(WifiManager.class);
         when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mockWifiManager);
         when(mockWifiManager.isStaApConcurrencySupported()).thenReturn(true);
 
-        spyTetherSettings.setFooterPreferenceTitle();
+        spyTetherSettings.setTopIntroPreferenceTitle();
 
         verify(mockPreference, never()).setTitle(R.string.tethering_footer_info);
         verify(mockPreference).setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
diff --git a/tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
similarity index 71%
rename from tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
index 46e1f48..eb49edd 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ForceBoldTextPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceControllerTest.java
@@ -32,20 +32,20 @@
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
-public class ForceBoldTextPreferenceControllerTest {
-    private static final int ON = 2;
-    private static final int OFF = 1;
-    private static final int UNKNOWN = 0;
+public class FontWeightAdjustmentPreferenceControllerTest {
+    private static final int ON = FontWeightAdjustmentPreferenceController.BOLD_TEXT_ADJUSTMENT;
+    private static final int OFF = 0;
 
     private Context mContext;
     private SwitchPreference mPreference;
-    private ForceBoldTextPreferenceController mController;
+    private FontWeightAdjustmentPreferenceController mController;
 
     @Before
     public void setUp() {
         mContext = RuntimeEnvironment.application;
         mPreference = new SwitchPreference(mContext);
-        mController = new ForceBoldTextPreferenceController(mContext, "force_bold_text");
+        mController = new FontWeightAdjustmentPreferenceController(
+                mContext, "font_weight_adjustment");
     }
 
     @Test
@@ -55,9 +55,9 @@
     }
 
     @Test
-    public void isChecked_enabledTextContrast_shouldReturnTrue() {
+    public void isChecked_enabledBoldText_shouldReturnTrue() {
         Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, ON);
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, ON);
 
         mController.updateState(mPreference);
 
@@ -66,9 +66,9 @@
     }
 
     @Test
-    public void isChecked_disabledTextContrast_shouldReturnFalse() {
+    public void isChecked_disabledBoldText_shouldReturnFalse() {
         Settings.Secure.putInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, OFF);
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF);
 
         mController.updateState(mPreference);
 
@@ -77,19 +77,18 @@
     }
 
     @Test
-    public void setChecked_setTrue_shouldEnableTextContrast() {
+    public void setChecked_setTrue_shouldEnableBoldText() {
         mController.setChecked(true);
 
         assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, UNKNOWN)).isEqualTo(ON);
-
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF)).isEqualTo(ON);
     }
 
     @Test
-    public void setChecked_setFalse_shouldDisableTextContrast() {
+    public void setChecked_setFalse_shouldDisableBoldText() {
         mController.setChecked(false);
 
         assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.FORCE_BOLD_TEXT, UNKNOWN)).isEqualTo(OFF);
+                Settings.Secure.FONT_WEIGHT_ADJUSTMENT, OFF)).isEqualTo(OFF);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceControllerTest.java
index 1e4c496..28e5c5a 100644
--- a/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/graphicsdriver/GraphicsDriverTopIntroPreferenceControllerTest.java
@@ -34,7 +34,7 @@
 
 import androidx.preference.PreferenceScreen;
 
-import com.android.settingslib.widget.FooterPreference;
+import com.android.settingslib.widget.TopIntroPreference;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -45,25 +45,25 @@
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
-public class GraphicsDriverFooterPreferenceControllerTest {
+public class GraphicsDriverTopIntroPreferenceControllerTest {
 
     @Mock
     private PreferenceScreen mScreen;
     @Mock
-    private FooterPreference mPreference;
+    private TopIntroPreference mPreference;
     @Mock
     private GraphicsDriverContentObserver mGraphicsDriverContentObserver;
 
     private Context mContext;
     private ContentResolver mResolver;
-    private GraphicsDriverFooterPreferenceController mController;
+    private GraphicsDriverTopIntroPreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = RuntimeEnvironment.application;
         mResolver = mContext.getContentResolver();
-        mController = spy(new GraphicsDriverFooterPreferenceController(mContext, "key"));
+        mController = spy(new GraphicsDriverTopIntroPreferenceController(mContext, "key"));
         when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
     }
 
diff --git a/tests/robotests/src/com/android/settings/display/NightDisplayFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/NightDisplayTopIntroPreferenceControllerTest.java
similarity index 74%
rename from tests/robotests/src/com/android/settings/display/NightDisplayFooterPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/display/NightDisplayTopIntroPreferenceControllerTest.java
index efb26fa..10f7f0b 100644
--- a/tests/robotests/src/com/android/settings/display/NightDisplayFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/NightDisplayTopIntroPreferenceControllerTest.java
@@ -1,15 +1,17 @@
 /*
  * 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
+ * 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.
+ * 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.display;
@@ -31,14 +33,14 @@
 
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = SettingsShadowResources.class)
-public class NightDisplayFooterPreferenceControllerTest {
+public class NightDisplayTopIntroPreferenceControllerTest {
 
-    private NightDisplayFooterPreferenceController mController;
+    private NightDisplayTopIntroPreferenceController mController;
 
     @Before
     public void setUp() {
         mController =
-                new NightDisplayFooterPreferenceController(RuntimeEnvironment.application, "key");
+                new NightDisplayTopIntroPreferenceController(RuntimeEnvironment.application, "key");
     }
 
     @After
diff --git a/tests/robotests/src/com/android/settings/users/MultiUserFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/users/MultiUserTopIntroPreferenceControllerTest.java
similarity index 89%
rename from tests/robotests/src/com/android/settings/users/MultiUserFooterPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/users/MultiUserTopIntroPreferenceControllerTest.java
index 69825b4..bc0b060 100644
--- a/tests/robotests/src/com/android/settings/users/MultiUserFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/users/MultiUserTopIntroPreferenceControllerTest.java
@@ -32,15 +32,15 @@
 
 @RunWith(RobolectricTestRunner.class)
 @Ignore
-public class MultiUserFooterPreferenceControllerTest {
+public class MultiUserTopIntroPreferenceControllerTest {
 
     private Context mContext;
-    private MultiUserFooterPreferenceController mController;
+    private MultiUserTopIntroPreferenceController mController;
 
     @Before
     public void setUp() {
         mContext = RuntimeEnvironment.application;
-        mController = new MultiUserFooterPreferenceController(mContext, "footer");
+        mController = new MultiUserTopIntroPreferenceController(mContext, "top_info");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index ec2fdc6..3494c63 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -128,8 +128,8 @@
         mFragment = spy(new UserSettings());
         ReflectionHelpers.setField(mFragment, "mAddUserWhenLockedPreferenceController",
                 mock(AddUserWhenLockedPreferenceController.class));
-        ReflectionHelpers.setField(mFragment, "mMultiUserFooterPreferenceController",
-                mock(MultiUserFooterPreferenceController.class));
+        ReflectionHelpers.setField(mFragment, "mMultiUserTopIntroPreferenceController",
+                mock(MultiUserTopIntroPreferenceController.class));
         ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
         ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
         ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragmentTest.java
new file mode 100644
index 0000000..b36d7f5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragmentTest.java
@@ -0,0 +1,161 @@
+/*
+ * 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.wifi.dpp;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+
+import androidx.fragment.app.FragmentTransaction;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+
+@RunWith(AndroidJUnit4.class)
+public class WifiDppQrCodeGeneratorFragmentTest {
+
+    private WifiDppConfiguratorActivity mActivity;
+    private WifiDppQrCodeGeneratorFragment mFragment;
+    private Context mContext;
+
+
+    @Before
+    public void setUp() {
+        Intent intent =
+                new Intent(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_GENERATOR);
+        intent.putExtra(WifiDppUtils.EXTRA_WIFI_SSID, "GoogleGuest");
+        intent.putExtra(WifiDppUtils.EXTRA_WIFI_SECURITY, "WPA");
+        intent.putExtra(WifiDppUtils.EXTRA_WIFI_PRE_SHARED_KEY, "\\012345678,");
+
+        MockitoAnnotations.initMocks(this);
+        mActivity = Robolectric.setupActivity(WifiDppConfiguratorActivity.class);
+        mActivity.setWifiNetworkConfig(WifiNetworkConfig.getValidConfigOrNull(intent));
+        mActivity.startActivity(intent);
+
+        mFragment = spy(new WifiDppQrCodeGeneratorFragment());
+        FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
+        ft.add(mFragment, null);
+        ft.commit();
+
+        mContext = spy(InstrumentationRegistry.getTargetContext());
+        when(mFragment.getContext()).thenReturn(mContext);
+    }
+
+    @Test
+    public void rotateScreen_shouldNotCrash() {
+        mActivity.setRequestedOrientation(
+                ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+        mActivity.setRequestedOrientation(
+                ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+    }
+
+    @Test
+    public void createNearbyButton_returnsNull() {
+        assertThat(mFragment.createNearbyButton(new Intent(), v -> {
+        })).isNull();
+    }
+
+    private static ResolveInfo createResolveInfo(int userId) {
+        final ResolveInfo resolveInfo = new ResolveInfo();
+        resolveInfo.activityInfo = createActivityInfo();
+        resolveInfo.targetUserId = userId;
+        return resolveInfo;
+    }
+
+    private static ActivityInfo createActivityInfo() {
+        ActivityInfo ai = new ActivityInfo();
+        ai.name = "activity_name";
+        ai.packageName = "foo_bar";
+        ai.enabled = true;
+        ai.exported = true;
+        ai.permission = null;
+        ai.applicationInfo = new ApplicationInfo();
+        ai.applicationInfo.packageName = "com.google.android.gms";
+
+        Bundle metadata = mock(Bundle.class);
+        when(metadata.getInt(anyString())).thenReturn(1);
+        ai.metaData = metadata;
+        return ai;
+    }
+
+    @Test
+    public void createNearbyButtonFromSetting_notNull()
+            throws PackageManager.NameNotFoundException {
+        doReturn(ComponentName.unflattenFromString(
+                "com.google.android.gms/com.google.android.gms.nearby.sharing.ShareSheetActivity"))
+                .when(mFragment).getNearbySharingComponent();
+        PackageManager packageManager = mock(PackageManager.class);
+        doReturn(createResolveInfo(0)).when(packageManager).resolveActivity(any(), anyInt());
+
+        Resources resources = mock(Resources.class);
+        when(resources.getString(anyInt())).thenReturn("Nearby");
+        Drawable drawable = mock(Drawable.class);
+        when(resources.getDrawable(anyInt())).thenReturn(drawable);
+
+        when(packageManager.getResourcesForActivity(any())).thenReturn(resources);
+
+        when(mContext.getPackageManager()).thenReturn(packageManager);
+
+
+        assertThat(mFragment.createNearbyButton(new Intent(), v -> {
+        })).isNotNull();
+    }
+
+    @Test
+    public void createNearbyButtonFromConfig_notNull() throws PackageManager.NameNotFoundException {
+        doReturn(
+                "com.google.android.gms/com.google.android.gms.nearby.sharing.ShareSheetActivity")
+                .when(mFragment).getString(anyInt());
+        PackageManager packageManager = mock(PackageManager.class);
+        doReturn(createResolveInfo(0)).when(packageManager).resolveActivity(any(), anyInt());
+
+        Resources resources = mock(Resources.class);
+        when(resources.getString(anyInt())).thenReturn("Nearby");
+        Drawable drawable = mock(Drawable.class);
+        when(resources.getDrawable(anyInt())).thenReturn(drawable);
+
+        when(packageManager.getResourcesForActivity(any())).thenReturn(resources);
+
+        when(mContext.getPackageManager()).thenReturn(packageManager);
+
+
+        assertThat(mFragment.createNearbyButton(new Intent(), v -> {
+        })).isNotNull();
+    }
+}