Merge "GUP: Add stub UI"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 871f609..0634ff1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3050,7 +3050,7 @@
             <intent-filter>
                 <action android:name="android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_SCANNER"/>
                 <action android:name="android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_GENERATOR"/>
-                <action android:name="android.settings.WIFI_DPP_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK"/>
+                <action android:name="android.settings.PROCESS_WIFI_DPP_QR_CODE"/>
                 <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
         </activity>
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index fd0fc6c..7b0b28e 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -2,6 +2,18 @@
 <issues format="4">
 
     <issue
+        id="LintError"
+        severity="Error"
+        message="No `.class` files were found in project &quot;.&quot;, so none of the classfile based checks could be run. Does the project need to be built first?"
+        category="Lint"
+        priority="10"
+        summary="Lint Failure"
+        explanation="This issue type represents a problem running lint itself. Examples include failure to find bytecode for source files (which means certain detectors could not be run), parsing errors in lint configuration files, etc.&#xA;These errors are not errors in your own code, but they are shown to make it clear that some checks were not completed.">
+        <location
+            file="."/>
+    </issue>
+
+    <issue
         id="HardCodedColor"
         severity="Error"
         message="Avoid using hardcoded color"
@@ -233,6 +245,22 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="  &lt;color name=&quot;homepage_status_bar_color&quot;>#cc000000&lt;/color>"
+        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values-night/colors.xml"
+            line="25"
+            column="3"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;crypt_keeper_clock_foreground&quot;>#ff666666&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1289,11 +1317,27 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;homepage_status_bar_color&quot;>#ccFFFFFF&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="133"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;qr_corner_line_color&quot;>#ffdadce0&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="133"
+            line="136"
             column="5"/>
     </issue>
 
@@ -1309,7 +1353,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="134"
+            line="137"
             column="5"/>
     </issue>
 
@@ -1325,7 +1369,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="135"
+            line="138"
             column="5"/>
     </issue>
 
@@ -2477,7 +2521,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/strings.xml"
-            line="5883"
+            line="5885"
             column="36"/>
     </issue>
 
@@ -2509,7 +2553,7 @@
         errorLine2="                                           ^">
         <location
             file="res/values/styles.xml"
-            line="415"
+            line="388"
             column="44"/>
     </issue>
 
@@ -2525,7 +2569,7 @@
         errorLine2="                                           ^">
         <location
             file="res/values/styles.xml"
-            line="421"
+            line="394"
             column="44"/>
     </issue>
 
@@ -2541,7 +2585,7 @@
         errorLine2="                                           ^">
         <location
             file="res/values/styles.xml"
-            line="422"
+            line="395"
             column="44"/>
     </issue>
 
@@ -2557,7 +2601,7 @@
         errorLine2="                                 ^">
         <location
             file="res/values/styles.xml"
-            line="457"
+            line="430"
             column="34"/>
     </issue>
 
diff --git a/res/layout/homepage_dismissal_view.xml b/res/layout/homepage_dismissal_view.xml
index e60b375..e31d436 100644
--- a/res/layout/homepage_dismissal_view.xml
+++ b/res/layout/homepage_dismissal_view.xml
@@ -40,6 +40,7 @@
             style="@style/ContextualCardDismissalButton"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/homepage_card_dismissal_margin_bottom"
             android:text="@string/contextual_card_dismiss_keep"/>
 
         <Button
@@ -47,6 +48,7 @@
             style="@style/ContextualCardDismissalButton"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/homepage_card_dismissal_margin_bottom"
             android:text="@string/contextual_card_dismiss_remove"/>
 
     </LinearLayout>
diff --git a/res/layout/homepage_slice_tile.xml b/res/layout/homepage_slice_tile.xml
index 9fa7d61..2b7c1b0 100644
--- a/res/layout/homepage_slice_tile.xml
+++ b/res/layout/homepage_slice_tile.xml
@@ -30,6 +30,7 @@
             android:id="@+id/slice_view"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
             android:paddingStart="@dimen/homepage_card_padding_start"
             android:paddingEnd="@dimen/homepage_card_padding_end"/>
 
diff --git a/res/layout/settings_homepage_container.xml b/res/layout/settings_homepage_container.xml
index 75d449f..1e5bdce 100644
--- a/res/layout/settings_homepage_container.xml
+++ b/res/layout/settings_homepage_container.xml
@@ -31,8 +31,9 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical"
-            android:paddingTop="@dimen/app_bar_height"
-            android:descendantFocusability="blocksDescendants">
+            android:descendantFocusability="blocksDescendants"
+            android:paddingTop="104dp">
+            <!-- height of status bar(24dp) + height of action bar(48dp) + top/bottom margins(16dp) -->
 
             <FrameLayout
                 android:id="@+id/contextual_cards_content"
@@ -52,6 +53,13 @@
     <com.google.android.material.appbar.AppBarLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
+
+        <Space
+            android:layout_width="match_parent"
+            android:layout_height="@*android:dimen/status_bar_height"
+            android:background="@android:color/transparent"
+            app:layout_scrollFlags="scroll|enterAlways"/>
+
         <include layout="@layout/search_bar"/>
     </com.google.android.material.appbar.AppBarLayout>
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index 2a395b6..df676fc 100644
--- a/res/layout/wifi_dialog.xml
+++ b/res/layout/wifi_dialog.xml
@@ -68,7 +68,7 @@
                         android:layout_centerVertical="true"
                         android:layout_margin="5dp"
                         android:background="@null"
-                        android:src="@drawable/ic_qrcode_24dp"
+                        android:src="@drawable/ic_scan_24dp"
                         android:visibility="gone"
                         android:contentDescription="@string/wifi_add_network" />
                 </RelativeLayout>
@@ -303,7 +303,7 @@
                         android:layout_centerVertical="true"
                         android:layout_margin="5dp"
                         android:background="@null"
-                        android:src="@drawable/ic_qrcode_24dp"
+                        android:src="@drawable/ic_scan_24dp"
                         android:visibility="gone"
                         android:contentDescription="@string/wifi_add_network" />
                 </RelativeLayout>
diff --git a/res/layout/wifi_dpp_add_device_fragment.xml b/res/layout/wifi_dpp_add_device_fragment.xml
index 03add62..5e70396 100644
--- a/res/layout/wifi_dpp_add_device_fragment.xml
+++ b/res/layout/wifi_dpp_add_device_fragment.xml
@@ -24,22 +24,19 @@
 
     <include layout="@layout/wifi_dpp_fragment_header"/>
 
-    <ProgressBar
-      android:id="@+id/progress_bar"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:indeterminate="true"/>
-
     <ImageView
         android:id="@+id/wifi_ap_picture_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="center"/>
 
-    <TextView android:id="@+id/choose_different_network"
+    <TextView
+        android:id="@+id/choose_different_network"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_gravity="center"/>
+        android:layout_gravity="center"
+        android:layout_marginTop="8dp"
+        android:text="@string/wifi_dpp_choose_different_network"/>
 
     <include layout="@layout/wifi_dpp_fragment_footer"
         android:gravity="center|bottom"/>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index bc06f47..f864e03 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -21,5 +21,7 @@
   <color name="switchbar_switch_thumb_tint">@android:color/black</color>
   <color name="homepage_accessibility_background">#783BE5</color>
   <color name="homepage_support_background">#3F5FBD</color>
+  <!-- 80% black for status bar of homepage -->
+  <color name="homepage_status_bar_color">#cc000000</color>
 </resources>
 
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 2103649..5539d68 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -129,6 +129,9 @@
     <!-- launcher icon color -->
     <color name="icon_launcher_setting_color">@*android:color/accent_device_default_light</color>
 
+    <!-- 80% white for status bar of homepage -->
+    <color name="homepage_status_bar_color">#ccFFFFFF</color>
+
     <!-- QR code scanner colors -->
     <color name="qr_corner_line_color">#ffdadce0</color>
     <color name="qr_focused_corner_line_color">#ff1a73e8</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 383f564..b250eff 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -105,8 +105,6 @@
     <dimen name="search_bar_avatar_size">32dp</dimen>
     <dimen name="search_bar_avatar_start_margin">4dp</dimen>
     <dimen name="search_bar_avatar_end_margin">16dp</dimen>
-    <!-- appbar height is equal search bar height (48dp) plus search bar top and bottom margin  -->
-    <dimen name="app_bar_height">80dp</dimen>
 
     <!-- Dimensions for Wifi Assistant Card -->
     <dimen name="wifi_assistant_padding_top_bottom">16dp</dimen>
@@ -332,6 +330,7 @@
     <dimen name="homepage_half_card_padding_top">12dp</dimen>
     <dimen name="homepage_half_card_padding_bottom">16dp</dimen>
     <dimen name="homepage_half_card_title_margin_top">12dp</dimen>
+    <dimen name="homepage_card_dismissal_margin_bottom">2dp</dimen>
 
     <!-- Horizontal divider size and margin -->
     <dimen name="horizontal_divider_margin_top">4dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f0a57ab..61b6c14 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2077,13 +2077,13 @@
     <!-- Label for the spinner to show Wifi MAC randomization [CHAR LIMIT=25] -->
     <string name="wifi_privacy_settings">Privacy</string>
     <!-- Title for the fragment to add a device into the wifi network [CHAR LIMIT=50]  -->
-    <string name="wifi_dpp_add_device_to_network">Add a device to this network</string>
+    <string name="wifi_dpp_add_device_to_network">Add a device</string>
     <!-- Hint for the user to center another device's QR code in the below camera window [CHAR LIMIT=120] -->
-    <string name="wifi_dpp_center_qr_code">Center the device\u2019s QR code below to add device to \u201c<xliff:g id="ssid" example="OfficeWifi">%1$s</xliff:g>\u201d</string>
+    <string name="wifi_dpp_center_qr_code">Center the QR code below to add the device to \u201c<xliff:g id="ssid" example="OfficeWifi">%1$s</xliff:g>\u201d</string>
     <!-- Title for the fragment to scan QR code [CHAR LIMIT=50]  -->
     <string name="wifi_dpp_scan_qr_code">Scan QR code</string>
     <!-- Hint for the user to center another device's QR code in the below camera window [CHAR LIMIT=NONE] -->
-    <string name="wifi_dpp_scan_qr_code_join_network">Join \u201c<xliff:g id="ssid" example="OfficeWifi">%1$s</xliff:g>\u201d by scanning a QR code</string>
+    <string name="wifi_dpp_scan_qr_code_join_network">Center the QR code below to connect to \u201c<xliff:g id="ssid" example="OfficeWifi">%1$s</xliff:g>\u201d</string>
     <!-- Hint for the user to center another device's QR code in the below camera window [CHAR LIMIT=NONE] -->
     <string name="wifi_dpp_scan_qr_code_join_unknown_network">Join Wi\u2011Fi by scanning a QR code</string>
     <!-- Title for the fragment to share Wi-Fi [CHAR LIMIT=50]  -->
@@ -2091,7 +2091,19 @@
     <!-- Hint for the user to use another device to scan QR code on screen to join Wi-Fi [CHAR LIMIT=NONE] -->
     <string name="wifi_dpp_scan_qr_code_with_another_device">Scan this QR code with another device to join \u201c<xliff:g id="ssid" example="OfficeWifi">%1$s</xliff:g>\u201d</string>
     <!-- Hint for QR code detection [CHAR LIMIT=NONE]  -->
-    <string name="wifi_dpp_could_not_detect_valid_qr_code">Could not detect valid QR code</string>
+    <string name="wifi_dpp_could_not_detect_valid_qr_code">Couldn\u2019t read QR code</string>
+    <!-- Title for the fragment choose network [CHAR LIMIT=50]  -->
+    <string name="wifi_dpp_choose_network">Choose network</string>
+    <!-- Hint for the user to center another device's QR code in the below camera window [CHAR LIMIT=NONE] -->
+    <string name="wifi_dpp_choose_network_to_connect_device">To connect your device, choose a network</string>
+    <!-- Hint for the user to add the device to a Wi-Fi network [CHAR LIMIT=NONE] -->
+    <string name="wifi_dpp_add_device_to_wifi">Add this device to \u201c<xliff:g id="ssid" example="OfficeWifi">%1$s</xliff:g>\u201d?</string>
+    <!-- Title for the fragment to tell the user that Wi-Fi shared with device successfully [CHAR LIMIT=50]  -->
+    <string name="wifi_dpp_wifi_shared_with_device">Wi\u2011Fi shared with device</string>
+    <!-- Button label to add another device to Wi-Fi [CHAR LIMIT=50]  -->
+    <string name="wifi_dpp_add_another_device">Add another device</string>
+    <!-- Button label to choose different Wi-Fi network [CHAR LIMIT=80]  -->
+    <string name="wifi_dpp_choose_different_network">Choose different network</string>
     <!-- Label for the check box to share a network with other users on the same device -->
     <string name="wifi_shared">Share with other device users</string>
     <!-- Hint for unchanged fields -->
@@ -9461,10 +9473,14 @@
     <string name="notification_log_details_parcel">parcel size</string>
     <!-- Notification log debug tool: notification ashmem size -->
     <string name="notification_log_details_ashmem">ashmem</string>
+    <!-- Notification log debug tool: header: notification alert info -->
+    <string name="notification_log_details_alerted">notification alerted</string>
     <!-- Notification log debug tool: header: notification sound info -->
     <string name="notification_log_details_sound">sound</string>
     <!-- Notification log debug tool: header: notification vibration info -->
     <string name="notification_log_details_vibrate">vibrate</string>
+    <!-- Notification log debug tool: header: notification vibration info -->
+    <string name="notification_log_details_vibrate_pattern">pattern</string>
     <!-- Notification log debug tool: the word 'default' -->
     <string name="notification_log_details_default">default</string>
     <!-- Notification log debug tool: the word 'none' -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 98b6283..c15a3fb 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -459,6 +459,7 @@
 
     <style name="ContextualCardDismissalButton"
            parent="android:Widget.DeviceDefault.Button.Borderless.Colored">
+        <item name="android:minHeight">16dp</item>
         <item name="android:textAllCaps">false</item>
     </style>
 
diff --git a/res/xml/prevent_ringing_gesture_settings.xml b/res/xml/prevent_ringing_gesture_settings.xml
index 62f0223..4b0edc3 100644
--- a/res/xml/prevent_ringing_gesture_settings.xml
+++ b/res/xml/prevent_ringing_gesture_settings.xml
@@ -26,8 +26,11 @@
         app:animation="@raw/gesture_prevent_ringing"
         app:preview="@drawable/gesture_prevent_ringing" />
 
+    <com.android.settingslib.widget.LayoutPreference
+        android:key="gesture_prevent_ringing_switch"
+        android:layout="@layout/styled_switch_bar" />
+
     <PreferenceCategory
         android:key="gesture_prevent_ringing_category"
-        android:title="@string/gesture_prevent_ringing_title">
-    </PreferenceCategory>
+        android:title="@string/gesture_prevent_ringing_title" />
 </PreferenceScreen>
\ No newline at end of file
diff --git a/src/com/android/settings/gestures/PreventRingingGesturePreferenceController.java b/src/com/android/settings/gestures/PreventRingingGesturePreferenceController.java
index cb9bf4f..8f037ce 100644
--- a/src/com/android/settings/gestures/PreventRingingGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PreventRingingGesturePreferenceController.java
@@ -46,7 +46,7 @@
         OnResume, OnPause, OnCreate, PreferenceControllerMixin {
 
     @VisibleForTesting static final String KEY_VIBRATE = "prevent_ringing_option_vibrate";
-    @VisibleForTesting static final String KEY_NONE = "prevent_ringing_option_none";
+
     @VisibleForTesting static final String KEY_MUTE = "prevent_ringing_option_mute";
 
     private final String KEY_VIDEO_PAUSED = "key_video_paused";
@@ -57,9 +57,8 @@
     private VideoPreference mVideoPreference;
     private boolean mVideoPaused;
 
-    private PreferenceCategory mPreferenceCategory;
+    @VisibleForTesting PreferenceCategory mPreferenceCategory;
     @VisibleForTesting RadioButtonPreference mVibratePref;
-    @VisibleForTesting RadioButtonPreference mNonePref;
     @VisibleForTesting RadioButtonPreference mMutePref;
 
     private SettingObserver mSettingObserver;
@@ -80,7 +79,6 @@
             mPreferenceCategory = (PreferenceCategory) screen.findPreference(getPreferenceKey());
             mVibratePref = makeRadioPreference(KEY_VIBRATE, R.string.prevent_ringing_option_vibrate);
             mMutePref = makeRadioPreference(KEY_MUTE, R.string.prevent_ringing_option_mute);
-            mNonePref = makeRadioPreference(KEY_NONE, R.string.prevent_ringing_option_none);
 
             if (mPreferenceCategory != null) {
                 mSettingObserver = new SettingObserver(mPreferenceCategory);
@@ -124,19 +122,21 @@
     public void updateState(Preference preference) {
         int preventRingingSetting = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.VOLUME_HUSH_GESTURE, Settings.Secure.VOLUME_HUSH_VIBRATE);
-
         final boolean isVibrate = preventRingingSetting == Settings.Secure.VOLUME_HUSH_VIBRATE;
         final boolean isMute = preventRingingSetting == Settings.Secure.VOLUME_HUSH_MUTE;
-        final boolean isOff = preventRingingSetting == Settings.Secure.VOLUME_HUSH_OFF
-                || (!isVibrate && !isMute);
         if (mVibratePref != null && mVibratePref.isChecked() != isVibrate) {
             mVibratePref.setChecked(isVibrate);
         }
         if (mMutePref != null && mMutePref.isChecked() != isMute) {
             mMutePref.setChecked(isMute);
         }
-        if (mNonePref != null && mNonePref.isChecked() != isOff) {
-            mNonePref.setChecked(isOff);
+
+        if (preventRingingSetting == Settings.Secure.VOLUME_HUSH_OFF) {
+            mVibratePref.setEnabled(false);
+            mMutePref.setEnabled(false);
+        } else {
+            mVibratePref.setEnabled(true);
+            mMutePref.setEnabled(true);
         }
     }
 
@@ -173,13 +173,12 @@
 
     private int keyToSetting(String key) {
         switch (key) {
-            case KEY_NONE:
-                return Settings.Secure.VOLUME_HUSH_OFF;
             case KEY_MUTE:
                 return Settings.Secure.VOLUME_HUSH_MUTE;
             case KEY_VIBRATE:
-            default:
                 return Settings.Secure.VOLUME_HUSH_VIBRATE;
+            default:
+                return Settings.Secure.VOLUME_HUSH_OFF;
         }
     }
 
diff --git a/src/com/android/settings/gestures/PreventRingingGestureSettings.java b/src/com/android/settings/gestures/PreventRingingGestureSettings.java
index 3e8ae85..420a019 100644
--- a/src/com/android/settings/gestures/PreventRingingGestureSettings.java
+++ b/src/com/android/settings/gestures/PreventRingingGestureSettings.java
@@ -35,7 +35,6 @@
 public class PreventRingingGestureSettings extends DashboardFragment {
 
     private static final String TAG = "RingingGestureSettings";
-    private static final String KEY_PREVENT_RINGING = "gesture_prevent_ringing";
 
     @Override
     public void onAttach(Context context) {
@@ -51,6 +50,7 @@
             Lifecycle lifecycle) {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new PreventRingingGesturePreferenceController(context, lifecycle));
+        controllers.add(new PreventRingingSwitchPreferenceController(context));
         return controllers;
     }
 
diff --git a/src/com/android/settings/gestures/PreventRingingSwitchPreferenceController.java b/src/com/android/settings/gestures/PreventRingingSwitchPreferenceController.java
new file mode 100644
index 0000000..b94cfff
--- /dev/null
+++ b/src/com/android/settings/gestures/PreventRingingSwitchPreferenceController.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2019 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.gestures;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.provider.Settings;
+import android.widget.Switch;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.widget.SwitchBar;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.widget.LayoutPreference;
+
+public class PreventRingingSwitchPreferenceController extends AbstractPreferenceController
+    implements PreferenceControllerMixin, SwitchBar.OnSwitchChangeListener {
+
+    private static final String KEY = "gesture_prevent_ringing_switch";
+    private final Context mContext;
+    private SettingObserver mSettingObserver;
+
+    @VisibleForTesting SwitchBar mSwitch;
+
+    public PreventRingingSwitchPreferenceController(Context context) {
+        super(context);
+        mContext = context;
+    }
+
+    @Override
+    public String getPreferenceKey() {
+        return KEY;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        if (isAvailable()) {
+            LayoutPreference pref = (LayoutPreference) screen.findPreference(getPreferenceKey());
+            if (pref != null) {
+                mSettingObserver = new SettingObserver(pref);
+                mSwitch = pref.findViewById(R.id.switch_bar);
+                if (mSwitch != null) {
+                    mSwitch.addOnSwitchChangeListener(this);
+                    mSwitch.show();
+                }
+            }
+        }
+    }
+
+    public void setChecked(boolean isChecked) {
+        if (mSwitch != null) {
+            mSwitch.setChecked(isChecked);
+        }
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        int preventRingingSetting = Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.VOLUME_HUSH_GESTURE, Settings.Secure.VOLUME_HUSH_VIBRATE);
+        setChecked(preventRingingSetting != Settings.Secure.VOLUME_HUSH_OFF);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        return mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_volumeHushGestureEnabled);
+    }
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.VOLUME_HUSH_GESTURE, isChecked ? Settings.Secure.VOLUME_HUSH_VIBRATE
+                        : Settings.Secure.VOLUME_HUSH_OFF);
+    }
+
+    private class SettingObserver extends ContentObserver {
+        private final Uri VOLUME_HUSH_GESTURE = Settings.Secure.getUriFor(
+                Settings.Secure.VOLUME_HUSH_GESTURE);
+
+        private final Preference mPreference;
+
+        public SettingObserver(Preference preference) {
+            super(new Handler());
+            mPreference = preference;
+        }
+
+        public void register(ContentResolver cr) {
+            cr.registerContentObserver(VOLUME_HUSH_GESTURE, false, this);
+        }
+
+        public void unregister(ContentResolver cr) {
+            cr.unregisterContentObserver(this);
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            super.onChange(selfChange, uri);
+            if (uri == null || VOLUME_HUSH_GESTURE.equals(uri)) {
+                updateState(mPreference);
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index d3f11a0..d40006f 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -19,6 +19,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.FeatureFlagUtils;
+import android.view.View;
 import android.widget.ImageView;
 import android.widget.Toolbar;
 
@@ -47,6 +48,7 @@
             return;
         }
 
+        updateWindowProperties();
         setContentView(R.layout.settings_homepage_container);
 
         final Toolbar toolbar = findViewById(R.id.search_action_bar);
@@ -73,4 +75,15 @@
         }
         fragmentTransaction.commit();
     }
+
+    private void updateWindowProperties() {
+        final View decorView = getWindow().getDecorView();
+        decorView.setSystemUiVisibility(
+                decorView.getSystemUiVisibility() |
+                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
+                        View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+        );
+
+        getWindow().setStatusBarColor(getResources().getColor(R.color.homepage_status_bar_color));
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
index 6a75274..b2bec7f 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
@@ -273,7 +273,7 @@
     private SliceAction buildBluetoothDetailDeepLinkAction(CachedBluetoothDevice bluetoothDevice) {
         return SliceAction.createDeeplink(
                 getBluetoothDetailIntent(bluetoothDevice),
-                IconCompat.createWithResource(mContext, R.drawable.ic_settings),
+                IconCompat.createWithResource(mContext, R.drawable.ic_settings_24dp),
                 ListBuilder.ICON_IMAGE,
                 bluetoothDevice.getName());
     }
@@ -287,9 +287,7 @@
         final CharSequence title = mContext.getText(R.string.bluetooth_pairing_pref_title);
         final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.ic_menu_add);
         final SliceAction sliceAction = SliceAction.createDeeplink(
-                getPairNewDeviceIntent(),
-                IconCompat.createWithResource(mContext, R.drawable.ic_settings),
-                ListBuilder.ICON_IMAGE, title);
+                getPairNewDeviceIntent(), icon, ListBuilder.ICON_IMAGE, title);
 
         return new ListBuilder.RowBuilder()
                 .setTitleItem(icon, ListBuilder.ICON_IMAGE)
diff --git a/src/com/android/settings/location/AppLocationPermissionPreferenceController.java b/src/com/android/settings/location/AppLocationPermissionPreferenceController.java
index 5bfc584..1fd1986 100644
--- a/src/com/android/settings/location/AppLocationPermissionPreferenceController.java
+++ b/src/com/android/settings/location/AppLocationPermissionPreferenceController.java
@@ -6,9 +6,10 @@
 
 import android.content.Context;
 import android.location.LocationManager;
-import android.permission.RuntimePermissionPresenter;
+import android.permission.PermissionControllerManager;
 import android.provider.Settings;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
@@ -24,9 +25,11 @@
 
     private static final String KEY_APP_LEVEL_PERMISSIONS = "app_level_permissions";
     /** Total number of apps that has location permission. */
-    private int mNumTotal = -1;
+    @VisibleForTesting
+    int mNumTotal = -1;
     /** Total number of apps that has background location permission. */
-    private int mNumBackground = -1;
+    @VisibleForTesting
+    int mNumBackground = -1;
     private final LocationManager mLocationManager;
     private Preference mPreference;
 
@@ -70,7 +73,9 @@
         if (!mLocationManager.isLocationEnabled()) {
             return;
         }
-        RuntimePermissionPresenter.getInstance(mContext).countPermissionApps(
+        PermissionControllerManager permController =
+                mContext.getSystemService(PermissionControllerManager.class);
+        permController.countPermissionApps(
                 Arrays.asList(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION), false, false,
                 (numApps) -> {
                     mNumTotal = numApps;
@@ -79,7 +84,7 @@
                     }
                 }, null);
 
-        RuntimePermissionPresenter.getInstance(mContext).countPermissionApps(
+        permController.countPermissionApps(
                 Collections.singletonList(ACCESS_BACKGROUND_LOCATION), true, false,
                 (numApps) -> {
                     mNumBackground = numApps;
diff --git a/src/com/android/settings/location/TopLevelLocationPreferenceController.java b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
index 455af21..6d7789f 100644
--- a/src/com/android/settings/location/TopLevelLocationPreferenceController.java
+++ b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
@@ -8,7 +8,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.location.LocationManager;
-import android.permission.RuntimePermissionPresenter;
+import android.permission.PermissionControllerManager;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
@@ -70,7 +70,7 @@
         if (!mLocationManager.isLocationEnabled()) {
             return;
         }
-        RuntimePermissionPresenter.getInstance(mContext).countPermissionApps(
+        mContext.getSystemService(PermissionControllerManager.class).countPermissionApps(
                 Arrays.asList(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION), false, false,
                 (numApps) -> {
                     setLocationAppCount(numApps);
diff --git a/src/com/android/settings/nfc/AndroidBeamPreferenceController.java b/src/com/android/settings/nfc/AndroidBeamPreferenceController.java
index 181faa5..b784dc5 100644
--- a/src/com/android/settings/nfc/AndroidBeamPreferenceController.java
+++ b/src/com/android/settings/nfc/AndroidBeamPreferenceController.java
@@ -16,6 +16,7 @@
 package com.android.settings.nfc;
 
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.nfc.NfcAdapter;
 
 import androidx.preference.PreferenceScreen;
@@ -54,6 +55,10 @@
     @Override
     @AvailabilityStatus
     public int getAvailabilityStatus() {
+        PackageManager pm = mContext.getPackageManager();
+        if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)) {
+                return UNSUPPORTED_ON_DEVICE;
+        }
         return mNfcAdapter != null
                 ? AVAILABLE
                 : UNSUPPORTED_ON_DEVICE;
diff --git a/src/com/android/settings/notification/NotificationStation.java b/src/com/android/settings/notification/NotificationStation.java
index d3ebc08..116980f 100644
--- a/src/com/android/settings/notification/NotificationStation.java
+++ b/src/com/android/settings/notification/NotificationStation.java
@@ -16,10 +16,13 @@
 
 package com.android.settings.notification;
 
+import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
+
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.INotificationManager;
 import android.app.Notification;
+import android.app.NotificationChannel;
 import android.app.PendingIntent;
 import android.content.ComponentName;
 import android.content.Context;
@@ -354,28 +357,53 @@
                         getString(R.string.notification_log_details_group_summary)));
             }
         }
-        sb.append("\n")
-                .append(bold(getString(R.string.notification_log_details_sound)))
-                .append(delim);
-        if (0 != (n.defaults & Notification.DEFAULT_SOUND)) {
-            sb.append(getString(R.string.notification_log_details_default));
-        } else if (n.sound != null) {
-            sb.append(n.sound.toString());
-        } else {
-            sb.append(getString(R.string.notification_log_details_none));
-        }
-        sb.append("\n")
-                .append(bold(getString(R.string.notification_log_details_vibrate)))
-                .append(delim);
-        if (0 != (n.defaults & Notification.DEFAULT_VIBRATE)) {
-            sb.append(getString(R.string.notification_log_details_default));
-        } else if (n.vibrate != null) {
-            for (int vi=0;vi<n.vibrate.length;vi++) {
-                if (vi > 0) sb.append(',');
-                sb.append(String.valueOf(n.vibrate[vi]));
+        if (info.active) {
+            // mRanking only applies to active notifications
+            if (mRanking != null && mRanking.getRanking(sbn.getKey(), rank)) {
+                if (rank.getLastAudiblyAlertedMillis() > 0) {
+                    sb.append("\n")
+                            .append(bold(getString(R.string.notification_log_details_alerted)));
+                }
             }
-        } else {
-            sb.append(getString(R.string.notification_log_details_none));
+        }
+        try {
+            NotificationChannel channel = mNoMan.getNotificationChannelForPackage(
+                    sbn.getPackageName(), sbn.getUid(), n.getChannelId(), false);
+            sb.append("\n")
+                    .append(bold(getString(R.string.notification_log_details_sound)))
+                    .append(delim);
+            if (channel.getImportance() == IMPORTANCE_UNSPECIFIED) {
+
+                if (0 != (n.defaults & Notification.DEFAULT_SOUND)) {
+                    sb.append(getString(R.string.notification_log_details_default));
+                } else if (n.sound != null) {
+                    sb.append(n.sound.toString());
+                } else {
+                    sb.append(getString(R.string.notification_log_details_none));
+                }
+            } else {
+                sb.append(String.valueOf(channel.getSound()));
+            }
+            sb.append("\n")
+                    .append(bold(getString(R.string.notification_log_details_vibrate)))
+                    .append(delim);
+            if (channel.getImportance() == IMPORTANCE_UNSPECIFIED) {
+                if (0 != (n.defaults & Notification.DEFAULT_VIBRATE)) {
+                    sb.append(getString(R.string.notification_log_details_default));
+                } else if (n.vibrate != null) {
+                    sb.append(getString(R.string.notification_log_details_vibrate_pattern));
+                } else {
+                    sb.append(getString(R.string.notification_log_details_none));
+                }
+            } else {
+                if (channel.getVibrationPattern() != null) {
+                    sb.append(getString(R.string.notification_log_details_vibrate_pattern));
+                } else {
+                    sb.append(getString(R.string.notification_log_details_none));
+                }
+            }
+        } catch (RemoteException e) {
+            Log.d(TAG, "cannot read channel info", e);
         }
         sb.append("\n")
                 .append(bold(getString(R.string.notification_log_details_visibility)))
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 95e912d..eddae06 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -240,7 +240,7 @@
         mAddPreference.setIcon(R.drawable.ic_menu_add);
         mAddPreference.setTitle(R.string.wifi_add_network);
         if (WifiDppUtils.isSharingNetworkEnabled(getContext())) {
-            mAddPreference.setButtonIcon(R.drawable.ic_qrcode_24dp);
+            mAddPreference.setButtonIcon(R.drawable.ic_scan_24dp);
             mAddPreference.setButtonOnClickListener((View v) -> {
                 // Launch QR code scanner to join a network.
                 getContext().startActivity(
diff --git a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
index 90fb850..12814f8 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.wifi.dpp;
 
+import android.app.ActionBar;
+import android.app.Activity;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -33,7 +35,6 @@
  * to the Wi-Fi network.
  */
 public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
-    private ProgressBar mProgressBar;
     private ImageView mWifiApPictureView;
     private TextView mChooseDifferentNetwork;
     private Button mButtonLeft;
@@ -45,6 +46,16 @@
     }
 
     @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        final ActionBar actionBar = getActivity().getActionBar();
+        if (actionBar != null) {
+            actionBar.hide();
+        }
+    }
+
+    @Override
     public final View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         return inflater.inflate(R.layout.wifi_dpp_add_device_fragment, container,
@@ -55,10 +66,26 @@
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
 
-        mProgressBar = view.findViewById(R.id.progress_bar);
+        final WifiNetworkConfig wifiNetworkConfig = ((WifiDppConfiguratorActivity) getActivity())
+                .getWifiNetworkConfig();
+        if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
+            throw new IllegalStateException("Invalid Wi-Fi network for configuring");
+        }
+        mSummary.setText(getString(R.string.wifi_dpp_add_device_to_wifi,
+                wifiNetworkConfig.getSsid()));
+
         mWifiApPictureView = view.findViewById(R.id.wifi_ap_picture_view);
         mChooseDifferentNetwork = view.findViewById(R.id.choose_different_network);
         mButtonLeft = view.findViewById(R.id.button_left);
+        mButtonLeft.setText(R.string.cancel);
+        mButtonLeft.setOnClickListener(v -> getFragmentManager().popBackStack());
+
         mButtonRight = view.findViewById(R.id.button_right);
+        mButtonRight.setText(R.string.wifi_dpp_share_wifi);
+        mButtonRight.setOnClickListener(v -> startWifiDppInitiator());
+    }
+
+    private void startWifiDppInitiator() {
+        //TODO(b/122331217): starts Wi-Fi DPP initiator handshake here
     }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java b/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java
index a3e6db3..8037e23 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.wifi.dpp;
 
+import android.app.ActionBar;
+import android.app.Activity;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -41,6 +43,16 @@
     }
 
     @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        final ActionBar actionBar = getActivity().getActionBar();
+        if (actionBar != null) {
+            actionBar.hide();
+        }
+    }
+
+    @Override
     public final View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         return inflater.inflate(R.layout.wifi_dpp_choose_saved_wifi_network_fragment, container,
@@ -51,8 +63,18 @@
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
 
-        mSavedWifiNetworkList = view.findViewById(R.id.saved_wifi_network_list);
+        mTitle.setText(R.string.wifi_dpp_choose_network);
+        mSummary.setText(R.string.wifi_dpp_choose_network_to_connect_device);
+
         mButtonLeft = view.findViewById(R.id.button_left);
+        mButtonLeft.setText(R.string.cancel);
+        mButtonLeft.setOnClickListener(v -> {
+            Activity activity = getActivity();
+            activity.setResult(Activity.RESULT_CANCELED);
+            activity.finish();
+        });
+
         mButtonRight = view.findViewById(R.id.button_right);
+        mButtonRight.setVisibility(View.GONE);
     }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
index e89ebaa..9c65d10 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
@@ -44,7 +44,7 @@
  * {@code WifiDppUtils.EXTRA_WIFI_PRE_SHARED_KEY}
  * {@code WifiDppUtils.EXTRA_WIFI_HIDDEN_SSID}
  *
- * For intent action {@code ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK}, specify Wi-Fi (DPP)
+ * For intent action {@code ACTION_PROCESS_WIFI_DPP_QR_CODE}, specify Wi-Fi (DPP)
  * QR code in {@code WifiDppUtils.EXTRA_QR_CODE}
  */
 public class WifiDppConfiguratorActivity extends InstrumentedActivity implements
@@ -58,8 +58,8 @@
             "android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_SCANNER";
     public static final String ACTION_CONFIGURATOR_QR_CODE_GENERATOR =
             "android.settings.WIFI_DPP_CONFIGURATOR_QR_CODE_GENERATOR";
-    public static final String ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK =
-            "android.settings.WIFI_DPP_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK";
+    public static final String ACTION_PROCESS_WIFI_DPP_QR_CODE =
+            "android.settings.PROCESS_WIFI_DPP_QR_CODE";
 
     private FragmentManager mFragmentManager;
 
@@ -72,6 +72,9 @@
     /** The information from Wi-Fi DPP QR code */
     private String mInformation;
 
+    /** The Wi-Fi DPP QR code from intent ACTION_PROCESS_WIFI_DPP_QR_CODE */
+    private WifiQrCode mWifiDppQrCode;
+
     @Override
     public int getMetricsCategory() {
         return MetricsProto.MetricsEvent.SETTINGS_WIFI_DPP_CONFIGURATOR;
@@ -115,8 +118,14 @@
                     showQrCodeGeneratorFragment();
                 }
                 break;
-            case ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK:
-                showChooseSavedWifiNetworkFragment(/* addToBackStack */ false);
+            case ACTION_PROCESS_WIFI_DPP_QR_CODE:
+                String qrCode = intent.getStringExtra(WifiDppUtils.EXTRA_QR_CODE);
+                mWifiDppQrCode = getValidWiFiDppQrCodeOrNull(qrCode);
+                if (mWifiDppQrCode == null) {
+                    cancelActivity = true;
+                } else {
+                    showChooseSavedWifiNetworkFragment(/* addToBackStack */ false);
+                }
                 break;
             default:
                 cancelActivity = true;
@@ -199,6 +208,21 @@
         fragmentTransaction.commit();
     }
 
+    private WifiQrCode getValidWiFiDppQrCodeOrNull(String qrCode) {
+        WifiQrCode wifiQrCode;
+        try {
+            wifiQrCode = new WifiQrCode(qrCode);
+        } catch(IllegalArgumentException e) {
+            return null;
+        }
+
+        if (WifiQrCode.SCHEME_DPP.equals(wifiQrCode.getScheme())) {
+            return wifiQrCode;
+        }
+
+        return null;
+    }
+
     @Override
     public WifiNetworkConfig getWifiNetworkConfig() {
         return mWifiNetworkConfig;
@@ -212,6 +236,10 @@
         return mInformation;
     }
 
+    public WifiQrCode getWifiDppQrCode() {
+        return mWifiDppQrCode;
+    }
+
     @Override
     public boolean setWifiNetworkConfig(WifiNetworkConfig config) {
         if(!WifiNetworkConfig.isValidConfig(config)) {
@@ -223,7 +251,7 @@
     }
 
     @Override
-    public boolean onNavigateUp(){
+    public boolean onNavigateUp() {
         Fragment fragment = mFragmentManager.findFragmentById(R.id.fragment_container);
         if (fragment instanceof WifiDppQrCodeGeneratorFragment) {
             setResult(Activity.RESULT_CANCELED);
@@ -245,7 +273,6 @@
     public void onScanWifiDppSuccess(String publicKey, String information) {
         mPublicKey = publicKey;
         mInformation = information;
-        mWifiNetworkConfig = null;
 
         showAddDeviceFragment(/* addToBackStack */ true);
     }
diff --git a/tests/robotests/src/com/android/settings/gestures/PreventRingingGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PreventRingingGesturePreferenceControllerTest.java
index 84fef5d..956d8bf 100644
--- a/tests/robotests/src/com/android/settings/gestures/PreventRingingGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PreventRingingGesturePreferenceControllerTest.java
@@ -18,44 +18,47 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
-import static org.mockito.MockitoAnnotations.initMocks;
 
 import android.content.Context;
 import android.content.res.Resources;
-import android.preference.PreferenceCategory;
 import android.provider.Settings;
 
-import androidx.preference.PreferenceScreen;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
 
 import com.android.settings.widget.RadioButtonPreference;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
 public class PreventRingingGesturePreferenceControllerTest {
-
     private Context mContext;
     private Resources mResources;
     private PreventRingingGesturePreferenceController mController;
 
+    @Mock
+    private Preference mPreference;
+
     @Before
     public void setUp() {
+        MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         mResources = mock(Resources.class);
         when(mContext.getResources()).thenReturn(mResources);
         when(mResources.getBoolean(com.android.internal.R.bool.config_volumeHushGestureEnabled))
                 .thenReturn(true);
         mController = new PreventRingingGesturePreferenceController(mContext, null);
+        mController.mPreferenceCategory = new PreferenceCategory(mContext);
         mController.mVibratePref = new RadioButtonPreference(mContext);
-        mController.mNonePref = new RadioButtonPreference(mContext);
         mController.mMutePref = new RadioButtonPreference(mContext);
     }
 
@@ -79,9 +82,10 @@
     public void testUpdateState_mute() {
         Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
                 Settings.Secure.VOLUME_HUSH_MUTE);
-        mController.updateState(null);
+        mController.updateState(mPreference);
+        assertThat(mController.mVibratePref.isEnabled()).isTrue();
+        assertThat(mController.mMutePref.isEnabled()).isTrue();
         assertThat(mController.mVibratePref.isChecked()).isFalse();
-        assertThat(mController.mNonePref.isChecked()).isFalse();
         assertThat(mController.mMutePref.isChecked()).isTrue();
     }
 
@@ -89,9 +93,21 @@
     public void testUpdateState_vibrate() {
         Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
                 Settings.Secure.VOLUME_HUSH_VIBRATE);
-        mController.updateState(null);
+        mController.updateState(mPreference);
+        assertThat(mController.mVibratePref.isEnabled()).isTrue();
+        assertThat(mController.mMutePref.isEnabled()).isTrue();
         assertThat(mController.mVibratePref.isChecked()).isTrue();
-        assertThat(mController.mNonePref.isChecked()).isFalse();
+        assertThat(mController.mMutePref.isChecked()).isFalse();
+    }
+
+    @Test
+    public void testUpdateState_off() {
+        Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
+                Settings.Secure.VOLUME_HUSH_OFF);
+        mController.updateState(mPreference);
+        assertThat(mController.mVibratePref.isEnabled()).isFalse();
+        assertThat(mController.mMutePref.isEnabled()).isFalse();
+        assertThat(mController.mVibratePref.isChecked()).isFalse();
         assertThat(mController.mMutePref.isChecked()).isFalse();
     }
 
@@ -99,9 +115,8 @@
     public void testUpdateState_other() {
         Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
                 7);
-        mController.updateState(null);
+        mController.updateState(mPreference);
         assertThat(mController.mVibratePref.isChecked()).isFalse();
-        assertThat(mController.mNonePref.isChecked()).isTrue();
         assertThat(mController.mMutePref.isChecked()).isFalse();
     }
 
@@ -132,19 +147,4 @@
                 Settings.Secure.getInt(mContext.getContentResolver(),
                         Settings.Secure.VOLUME_HUSH_GESTURE, Settings.Secure.VOLUME_HUSH_OFF));
     }
-
-    @Test
-    public void testRadioButtonClicked_off() {
-        RadioButtonPreference rbPref = new RadioButtonPreference(mContext);
-        rbPref.setKey(PreventRingingGesturePreferenceController.KEY_NONE);
-
-        Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
-                Settings.Secure.VOLUME_HUSH_MUTE);
-
-        mController.onRadioButtonClicked(rbPref);
-
-        assertThat(Settings.Secure.VOLUME_HUSH_OFF).isEqualTo(
-                Settings.Secure.getInt(mContext.getContentResolver(),
-                        Settings.Secure.VOLUME_HUSH_GESTURE, Settings.Secure.VOLUME_HUSH_VIBRATE));
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/PreventRingingSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PreventRingingSwitchPreferenceControllerTest.java
new file mode 100644
index 0000000..5f221f5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/gestures/PreventRingingSwitchPreferenceControllerTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2019 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.gestures;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+
+import com.android.settings.widget.SwitchBar;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class PreventRingingSwitchPreferenceControllerTest {
+    private Context mContext;
+    private Resources mResources;
+    private PreventRingingSwitchPreferenceController mController;
+    private Preference mPreference = mock(Preference.class);
+
+    @Before
+    public void setUp() {
+        mContext = spy(RuntimeEnvironment.application);
+        mResources = mock(Resources.class);
+        when(mContext.getResources()).thenReturn(mResources);
+        when(mResources.getBoolean(com.android.internal.R.bool.config_volumeHushGestureEnabled))
+                .thenReturn(true);
+        mController = new PreventRingingSwitchPreferenceController(mContext);
+        mController.mSwitch = mock(SwitchBar.class);
+    }
+
+    @Test
+    public void testIsAvailable_configIsTrue_shouldReturnTrue() {
+        when(mResources.getBoolean(
+                com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(true);
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void testIsAvailable_configIsFalse_shouldReturnFalse() {
+        when(mResources.getBoolean(
+                com.android.internal.R.bool.config_volumeHushGestureEnabled)).thenReturn(false);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void testOn_updateState_hushOff() {
+        Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
+                Settings.Secure.VOLUME_HUSH_OFF);
+        mController.updateState(mPreference);
+        verify(mController.mSwitch, times(1)).setChecked(false);
+    }
+
+    @Test
+    public void testOn_updateState_hushVibrate() {
+        Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
+                Settings.Secure.VOLUME_HUSH_VIBRATE);
+        mController.updateState(mPreference);
+        verify(mController.mSwitch, times(1)).setChecked(true);
+    }
+
+    @Test
+    public void testOn_updateState_hushMute() {
+        Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.VOLUME_HUSH_GESTURE,
+                Settings.Secure.VOLUME_HUSH_MUTE);
+        mController.updateState(mPreference);
+        verify(mController.mSwitch, times(1)).setChecked(true);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/location/AppLocationPermissionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/AppLocationPermissionPreferenceControllerTest.java
index 6379e44..bddd5fe 100644
--- a/tests/robotests/src/com/android/settings/location/AppLocationPermissionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/AppLocationPermissionPreferenceControllerTest.java
@@ -3,10 +3,12 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
+import android.location.LocationManager;
 import android.provider.Settings;
 
 import androidx.lifecycle.LifecycleOwner;
 
+import com.android.settings.R;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
@@ -27,6 +29,7 @@
 
     private LifecycleOwner mLifecycleOwner;
     private Lifecycle mLifecycle;
+    private LocationManager mLocationManager;
 
     @Before
     public void setUp() {
@@ -35,6 +38,7 @@
         mLifecycleOwner = () -> mLifecycle;
         mLifecycle = new Lifecycle(mLifecycleOwner);
         mController = new AppLocationPermissionPreferenceController(mContext, mLifecycle);
+        mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
     }
 
     @Test
@@ -52,4 +56,40 @@
 
         assertThat(mController.isAvailable()).isTrue();
     }
+
+    @Test
+    public void getSummary_whenLocationIsOff_shouldReturnStringForOff() {
+        mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle());
+
+        assertThat(mController.getSummary()).isEqualTo(
+                mContext.getString(R.string.location_app_permission_summary_location_off));
+    }
+
+    @Test
+    public void getSummary_whenLocationIsOn_shouldReturnLoadingString() {
+        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
+
+        assertThat(mController.getSummary()).isEqualTo(
+                mContext.getString(R.string.location_settings_loading_app_permission_stats));
+    }
+
+    @Test
+    public void getSummary_whenLocationAppCountIsOne_shouldShowSingularString() {
+        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
+        mController.mNumBackground = 1;
+        mController.mNumTotal = 1;
+
+        assertThat(mController.getSummary()).isEqualTo(mContext.getResources().getQuantityString(
+                R.plurals.location_app_permission_summary_location_on, 1, 1, 1));
+    }
+
+    @Test
+    public void getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString() {
+        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
+        mController.mNumBackground = 5;
+        mController.mNumTotal = 10;
+
+        assertThat(mController.getSummary()).isEqualTo(mContext.getResources().getQuantityString(
+                R.plurals.location_app_permission_summary_location_on, 5, 5, 10));
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
new file mode 100644
index 0000000..3b33558
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2019 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.location;
+
+import static com.google.common.truth.Truth.assertThat;
+
+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.Context;
+import android.graphics.drawable.Drawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settingslib.location.RecentLocationAccesses;
+import com.android.settingslib.widget.LayoutPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(RobolectricTestRunner.class)
+public class RecentLocationAccessPreferenceControllerTest {
+    @Mock
+    private LayoutPreference mLayoutPreference;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private RecentLocationAccesses mRecentLocationApps;
+
+    private Context mContext;
+    private RecentLocationAccessPreferenceController mController;
+    private View mAppEntitiesHeaderView;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+        mController = spy(
+                new RecentLocationAccessPreferenceController(mContext, mRecentLocationApps));
+        final String key = mController.getPreferenceKey();
+        mAppEntitiesHeaderView = LayoutInflater.from(mContext).inflate(
+                R.layout.app_entities_header, null /* root */);
+        when(mScreen.findPreference(key)).thenReturn(mLayoutPreference);
+        when(mLayoutPreference.getKey()).thenReturn(key);
+        when(mLayoutPreference.getContext()).thenReturn(mContext);
+        when(mLayoutPreference.findViewById(R.id.app_entities_header)).thenReturn(
+                mAppEntitiesHeaderView);
+    }
+
+    /** Verifies the title text, details text are correct, and the click listener is set. */
+    @Test
+    public void updateState_whenAppListIsEmpty_shouldDisplayTitleTextAndDetailsText() {
+        doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppListSorted();
+        mController.displayPreference(mScreen);
+        mController.updateState(mLayoutPreference);
+
+        final TextView title = mAppEntitiesHeaderView.findViewById(R.id.header_title);
+        assertThat(title.getText()).isEqualTo(
+                mContext.getText(R.string.location_category_recent_location_access));
+        final TextView details = mAppEntitiesHeaderView.findViewById(R.id.header_details);
+        assertThat(details.getText()).isEqualTo(
+                mContext.getText(R.string.location_recent_location_access_view_details));
+        assertThat(details.hasOnClickListeners()).isTrue();
+    }
+
+    @Test
+    public void updateState_whenAppListMoreThanThree_shouldDisplayTopThreeApps() {
+        final List<RecentLocationAccesses.Access> accesses = createMockAccesses(6);
+        doReturn(accesses).when(mRecentLocationApps).getAppListSorted();
+        mController.displayPreference(mScreen);
+        mController.updateState(mLayoutPreference);
+
+        // The widget can display the top 3 apps from the list when there're more than 3.
+        final View app1View = mAppEntitiesHeaderView.findViewById(R.id.app1_view);
+        final ImageView appIconView1 = app1View.findViewById(R.id.app_icon);
+        final TextView appTitle1 = app1View.findViewById(R.id.app_title);
+        final TextView appSummary1 = app1View.findViewById(R.id.app_summary);
+
+        assertThat(app1View.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(appIconView1.getDrawable()).isNotNull();
+        assertThat(appTitle1.getText()).isEqualTo("appTitle0");
+        assertThat(appSummary1.getText()).isEqualTo("appSummary0");
+
+        final View app2View = mAppEntitiesHeaderView.findViewById(R.id.app2_view);
+        final ImageView appIconView2 = app2View.findViewById(R.id.app_icon);
+        final TextView appTitle2 = app2View.findViewById(R.id.app_title);
+        final TextView appSummary2 = app2View.findViewById(R.id.app_summary);
+
+        assertThat(app2View.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(appIconView2.getDrawable()).isNotNull();
+        assertThat(appTitle2.getText()).isEqualTo("appTitle1");
+        assertThat(appSummary2.getText()).isEqualTo("appSummary1");
+
+        final View app3View = mAppEntitiesHeaderView.findViewById(R.id.app3_view);
+        final ImageView appIconView3 = app3View.findViewById(R.id.app_icon);
+        final TextView appTitle3 = app3View.findViewById(R.id.app_title);
+        final TextView appSummary3 = app3View.findViewById(R.id.app_summary);
+
+        assertThat(app3View.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(appIconView3.getDrawable()).isNotNull();
+        assertThat(appTitle3.getText()).isEqualTo("appTitle2");
+        assertThat(appSummary3.getText()).isEqualTo("appSummary2");
+    }
+
+    private List<RecentLocationAccesses.Access> createMockAccesses(int count) {
+        final List<RecentLocationAccesses.Access> accesses = new ArrayList<>();
+        for (int i = 0; i < count; i++) {
+            final Drawable icon = mock(Drawable.class);
+            // Add mock accesses
+            final RecentLocationAccesses.Access access = new RecentLocationAccesses.Access(
+                    "packageName", android.os.Process.myUserHandle(), icon,
+                    "appTitle" + i, "appSummary" + i, 1000 - i);
+            accesses.add(access);
+        }
+        return accesses;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java
index 8ed9dcc..cd70d66 100644
--- a/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.nfc.NfcAdapter;
 import android.nfc.NfcManager;
 import android.os.UserHandle;
@@ -57,6 +58,8 @@
     private UserManager mUserManager;
     @Mock
     private PreferenceScreen mScreen;
+    @Mock
+    private PackageManager mPackageManager;
 
     private RestrictedPreference mAndroidBeamPreference;
     private AndroidBeamPreferenceController mAndroidBeamController;
@@ -78,6 +81,8 @@
         mAndroidBeamPreference = new RestrictedPreference(RuntimeEnvironment.application);
         when(mScreen.findPreference(mAndroidBeamController.getPreferenceKey())).thenReturn(
                 mAndroidBeamPreference);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)).thenReturn(true);
 
         Settings.Global.putString(mContext.getContentResolver(),
                 Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
@@ -95,6 +100,13 @@
     }
 
     @Test
+    public void isAvailable_noNfcFeature_shouldReturnFalse() {
+        when(mNfcAdapter.isEnabled()).thenReturn(true);
+        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)).thenReturn(false);
+        assertThat(mAndroidBeamController.isAvailable()).isFalse();
+    }
+
+    @Test
     public void isAvailable_noNfcAdapter_shouldReturnFalse() {
         ReflectionHelpers.setField(mAndroidBeamController, "mNfcAdapter", null);
         assertThat(mAndroidBeamController.isAvailable()).isFalse();
diff --git a/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
index 61033e9..8e64f5f 100644
--- a/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
+++ b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
@@ -38,6 +38,7 @@
         Intent intent = new Intent(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_SCANNER);
         intent.putExtra(WifiDppUtils.EXTRA_WIFI_SECURITY, "WEP");
         intent.putExtra(WifiDppUtils.EXTRA_WIFI_SSID, "GoogleGuest");
+        intent.putExtra(WifiDppUtils.EXTRA_WIFI_PRE_SHARED_KEY, "password");
 
         mActivityRule.launchActivity(intent);
 
@@ -50,6 +51,7 @@
                 WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_GENERATOR);
         intent.putExtra(WifiDppUtils.EXTRA_WIFI_SECURITY, "WEP");
         intent.putExtra(WifiDppUtils.EXTRA_WIFI_SSID, "GoogleGuest");
+        intent.putExtra(WifiDppUtils.EXTRA_WIFI_PRE_SHARED_KEY, "password");
 
         mActivityRule.launchActivity(intent);
 
@@ -59,7 +61,10 @@
     @Test
     public void launchActivity_chooseSavedWifiNetwork_shouldNotAutoFinish() {
         Intent intent = new Intent(
-                WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_CHOOSE_SAVED_WIFI_NETWORK);
+                WifiDppConfiguratorActivity.ACTION_PROCESS_WIFI_DPP_QR_CODE);
+        String qrCode = "DPP:I:SN=4774LH2b4044;M:010203040506;K:MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD"
+               + "IgADURzxmttZoIRIPWGoQMV00XHWCAQIhXruVWOz0NjlkIA=;;";
+        intent.putExtra(WifiDppUtils.EXTRA_QR_CODE, qrCode);
 
         mActivityRule.launchActivity(intent);