Indicate failed scans with EXTRA_RESULTS_UPDATED

This flag indicates if scan was successful and results were
updated. It will be set to false if a scan is not performed
(intentionally) or if it failed to produce any results.

Bug: 20642015

Change-Id: I06a1fdd684932db68891ee28d5a049980f483f0f
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 74d284a..b660f22 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -423,6 +423,9 @@
         enforceChangePermission();
         synchronized (this) {
             if (mInIdleMode) {
+                // Need to send an immediate scan result broadcast in case the
+                // caller is waiting for a result ..
+                mWifiStateMachine.sendScanResultsAvailableBroadcast(/* scanSucceeded = */ false);
                 mScanPending = true;
                 return;
             }
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 3c14f00..5ce48f9 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -4457,9 +4457,10 @@
         return address;
     }
 
-    private void sendScanResultsAvailableBroadcast() {
+    void sendScanResultsAvailableBroadcast(boolean scanSucceeded) {
         Intent intent = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
         intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+        intent.putExtra(WifiManager.EXTRA_RESULTS_UPDATED, scanSucceeded);
         mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
     }
 
@@ -5582,7 +5583,8 @@
                     setScanResults();
                     if (mIsFullScanOngoing || mSendScanResultsBroadcast) {
                         /* Just updated results from full scan, let apps know about this */
-                        sendScanResultsAvailableBroadcast();
+                        boolean scanSucceeded = message.what == WifiMonitor.SCAN_RESULTS_EVENT;
+                        sendScanResultsAvailableBroadcast(scanSucceeded);
                     }
                     mSendScanResultsBroadcast = false;
                     mIsScanOngoing = false;