Merge "Encounter unknown error in test" into main
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fb6a3c1..d752338 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2291,6 +2291,10 @@
     <string name="wifi_dpp_failure_enrollee_rejected_configuration">Contact the device manufacturer</string>
     <!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE]  -->
     <string name="wifi_dpp_check_connection_try_again">Check connection and try again</string>
+    <!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE]  -->
+    <string name="wifi_dpp_check_connection_no_matched_ssid">This Wi\u2011Fi network isn\u2019t available right now</string>
+    <!-- Hint for Wi-Fi connection fail [CHAR LIMIT=NONE]  -->
+    <string name="wifi_dpp_check_connection_no_matched_security">There\u2019s a problem with this QR code. Try connecting another way.</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] -->
diff --git a/src/com/android/settings/datausage/AppDataUsagePreference.java b/src/com/android/settings/datausage/AppDataUsagePreference.java
index d8c7392..277c9b3 100644
--- a/src/com/android/settings/datausage/AppDataUsagePreference.java
+++ b/src/com/android/settings/datausage/AppDataUsagePreference.java
@@ -38,6 +38,7 @@
     public AppDataUsagePreference(Context context, AppItem item, int percent,
             UidDetailProvider provider) {
         super(context);
+        setLayoutResource(R.layout.preference_process_stats);
         setKey("app_data_usage_" + item.key);
         mItem = item;
         mPercent = percent;
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index 34948dc..97e41b4 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.wifi.dpp;
 
+import static android.content.res.Resources.ID_NULL;
 import static android.net.wifi.WifiInfo.sanitizeSsid;
 
 import android.app.Activity;
@@ -101,6 +102,8 @@
     // Interval between initiating WifiPickerTracker scans.
     private static final long SCAN_INTERVAL_MILLIS = 10_000;
 
+    private static final @StringRes int REACHABLE_WIFI_NETWORK = ID_NULL;
+
     private QrCamera mCamera;
     private TextureView mTextureView;
     private QrDecorateView mDecorateView;
@@ -201,8 +204,9 @@
                     wifiManager.enableNetwork(id, /* attemptConnect */ false);
                     // WifiTracker only contains a hidden SSID Wi-Fi network if it's saved.
                     // We can't check if a hidden SSID Wi-Fi network is reachable in advance.
-                    if (qrCodeWifiConfiguration.hiddenSSID
-                            || isReachableWifiNetwork(qrCodeWifiConfiguration)) {
+                    @StringRes int wifiReachabilityStringId =
+                            getWifiReachabilityStringId(qrCodeWifiConfiguration);
+                    if (wifiReachabilityStringId == REACHABLE_WIFI_NETWORK) {
                         hasHiddenOrReachableWifiNetwork = true;
                         mEnrolleeWifiConfiguration = qrCodeWifiConfiguration;
                         wifiManager.connect(id,
@@ -210,8 +214,7 @@
                     }
 
                     if (!hasHiddenOrReachableWifiNetwork) {
-                        showErrorMessageAndRestartCamera(
-                                R.string.wifi_dpp_check_connection_try_again);
+                        showErrorMessageAndRestartCamera(wifiReachabilityStringId);
                         return;
                     }
 
@@ -242,7 +245,10 @@
         WifiDppUtils.triggerVibrationForQrCodeRecognition(getContext());
     }
 
-    private boolean isReachableWifiNetwork(WifiConfiguration wifiConfiguration) {
+    private @StringRes int getWifiReachabilityStringId(WifiConfiguration wifiConfiguration) {
+        if (wifiConfiguration.hiddenSSID) {
+            return REACHABLE_WIFI_NETWORK;
+        }
         final List<WifiEntry> wifiEntries = mWifiPickerTracker.getWifiEntries();
         final WifiEntry connectedWifiEntry = mWifiPickerTracker.getConnectedWifiEntry();
         if (connectedWifiEntry != null) {
@@ -250,24 +256,29 @@
             wifiEntries.add(connectedWifiEntry);
         }
 
+        boolean canFindNetwork = false;
         for (WifiEntry wifiEntry : wifiEntries) {
             if (!TextUtils.equals(wifiEntry.getSsid(), sanitizeSsid(wifiConfiguration.SSID))) {
                 continue;
             }
+            canFindNetwork = true;
             final int security =
                     WifiDppUtils.getSecurityTypeFromWifiConfiguration(wifiConfiguration);
             if (security == wifiEntry.getSecurity()) {
-                return true;
+                return REACHABLE_WIFI_NETWORK;
             }
 
             // Default security type of PSK/SAE transition mode WifiEntry is SECURITY_PSK and
             // there is no way to know if a WifiEntry is of transition mode. Give it a chance.
             if (security == WifiEntry.SECURITY_SAE
                     && wifiEntry.getSecurity() == WifiEntry.SECURITY_PSK) {
-                return true;
+                return REACHABLE_WIFI_NETWORK;
             }
         }
-        return false;
+        if (canFindNetwork) {
+            return R.string.wifi_dpp_check_connection_no_matched_security;
+        }
+        return R.string.wifi_dpp_check_connection_no_matched_ssid;
     }
 
     @VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
index 7e6d314..f621cbf 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
@@ -91,7 +91,7 @@
         mPreference = new AppDataUsagePreference(RuntimeEnvironment.application, mAppItem,
                 50 /* percent */, mUidDetailProvider);
         final View view = LayoutInflater.from(RuntimeEnvironment.application).inflate(
-                com.android.settingslib.widget.preference.app.R.layout.preference_app, null);
+                com.android.settings.R.layout.preference_process_stats, null);
         final PreferenceViewHolder preferenceViewHolder =
                 PreferenceViewHolder.createInstanceForTests(view);
         final ProgressBar progressBar = (ProgressBar) preferenceViewHolder.findViewById(