WifiScanner: Expose ScanData.getBandsScanned publicly

i) Rename from getBandScanned to getBandsScanned.
ii) Created a getBandsScannedInternal for usage within wifi stack (which
should not be guarded with SDK level check like the public API)

Bug: 172412541
Test: atest com.android.server.wifi.scanner
Change-Id: I4e3f9457da2f7cac5585a7f5343d535ef4083f4b
diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt
index 9385587..4044a4d 100644
--- a/framework/api/system-current.txt
+++ b/framework/api/system-current.txt
@@ -777,6 +777,7 @@
   public static class WifiScanner.ScanData implements android.os.Parcelable {
     ctor public WifiScanner.ScanData(int, int, android.net.wifi.ScanResult[]);
     ctor public WifiScanner.ScanData(android.net.wifi.WifiScanner.ScanData);
+    method public int getBandsScanned();
     method public int getFlags();
     method public int getId();
     method public android.net.wifi.ScanResult[] getResults();
diff --git a/framework/java/android/net/wifi/WifiScanner.java b/framework/java/android/net/wifi/WifiScanner.java
index 7c051f0..559cc64 100644
--- a/framework/java/android/net/wifi/WifiScanner.java
+++ b/framework/java/android/net/wifi/WifiScanner.java
@@ -42,6 +42,7 @@
 
 import com.android.internal.util.AsyncChannel;
 import com.android.internal.util.Protocol;
+import com.android.modules.utils.build.SdkLevel;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -183,17 +184,17 @@
 
     /**
      * Test if scan is a full scan. i.e. scanning all available bands.
-     * For backward compatibility, since some apps don't include 6GHz in their requests yet,
-     * lacking 6GHz band does not cause the result to be false.
+     * For backward compatibility, since some apps don't include 6GHz or 60Ghz in their requests
+     * yet, lacking 6GHz or 60Ghz band does not cause the result to be false.
      *
-     * @param bandScanned bands that are fully scanned
+     * @param bandsScanned bands that are fully scanned
      * @param excludeDfs when true, DFS band is excluded from the check
      * @return true if all bands are scanned, false otherwise
      *
      * @hide
      */
-    public static boolean isFullBandScan(@WifiBand int bandScanned, boolean excludeDfs) {
-        return (bandScanned | WIFI_BAND_6_GHZ | WIFI_BAND_60_GHZ
+    public static boolean isFullBandScan(@WifiBand int bandsScanned, boolean excludeDfs) {
+        return (bandsScanned | WIFI_BAND_6_GHZ | WIFI_BAND_60_GHZ
                 | (excludeDfs ? WIFI_BAND_5_GHZ_DFS_ONLY : 0))
                 == WIFI_BAND_ALL;
     }
@@ -494,7 +495,7 @@
     }
 
     /**
-     * all the information garnered from a single scan
+     * All the information garnered from a single scan
      */
     public static class ScanData implements Parcelable {
         /** scan identifier */
@@ -516,7 +517,7 @@
          * any of the bands.
          * {@hide}
          */
-        private int mBandScanned;
+        private int mBandsScanned;
         /** all scan results discovered in this scan, sorted by timestamp in ascending order */
         private final List<ScanResult> mResults;
 
@@ -531,18 +532,18 @@
         }
 
         /** {@hide} */
-        public ScanData(int id, int flags, int bucketsScanned, int bandScanned,
+        public ScanData(int id, int flags, int bucketsScanned, int bandsScanned,
                         ScanResult[] results) {
-            this(id, flags, bucketsScanned, bandScanned, new ArrayList<>(Arrays.asList(results)));
+            this(id, flags, bucketsScanned, bandsScanned, new ArrayList<>(Arrays.asList(results)));
         }
 
         /** {@hide} */
-        public ScanData(int id, int flags, int bucketsScanned, int bandScanned,
+        public ScanData(int id, int flags, int bucketsScanned, int bandsScanned,
                         List<ScanResult> results) {
             mId = id;
             mFlags = flags;
             mBucketsScanned = bucketsScanned;
-            mBandScanned = bandScanned;
+            mBandsScanned = bandsScanned;
             mResults = results;
         }
 
@@ -550,7 +551,7 @@
             mId = s.mId;
             mFlags = s.mFlags;
             mBucketsScanned = s.mBucketsScanned;
-            mBandScanned = s.mBandScanned;
+            mBandsScanned = s.mBandsScanned;
             mResults = new ArrayList<>();
             for (ScanResult scanResult : s.mResults) {
                 mResults.add(new ScanResult(scanResult));
@@ -570,9 +571,28 @@
             return mBucketsScanned;
         }
 
-        /** {@hide} */
-        public int getBandScanned() {
-            return mBandScanned;
+        /**
+         * Retrieve the bands scanned for this ScanData instance.
+         *
+         * @return Bistmask of {@link #WIFI_BAND_24_GHZ}, {@link #WIFI_BAND_5_GHZ},
+         * {@link #WIFI_BAND_5_GHZ_DFS_ONLY}, {@link #WIFI_BAND_6_GHZ} & {@link #WIFI_BAND_60_GHZ}
+         * values. Will be {@link #WIFI_BAND_UNSPECIFIED} if the list of channels do not fully cover
+         * any of the bands.
+         */
+        public @WifiBand int getBandsScanned() {
+            if (!SdkLevel.isAtLeastS()) {
+                throw new UnsupportedOperationException();
+            }
+            return getBandsScannedInternal();
+        }
+
+        /**
+         * Same as {@link #getBandsScanned()}. For use in the wifi stack without version check.
+         *
+         * {@hide}
+         */
+        public @WifiBand int getBandsScannedInternal() {
+            return mBandsScanned;
         }
 
         public ScanResult[] getResults() {
@@ -588,15 +608,15 @@
 
         /** {@hide} */
         public void addResults(@NonNull ScanData s) {
-            mBandScanned |= s.mBandScanned;
+            mBandsScanned |= s.mBandsScanned;
             mFlags |= s.mFlags;
             addResults(s.getResults());
         }
 
         /** {@hide} */
         public boolean isFullBandScanResults() {
-            return (mBandScanned & WifiScanner.WIFI_BAND_24_GHZ) != 0
-                && (mBandScanned & WifiScanner.WIFI_BAND_5_GHZ) != 0;
+            return (mBandsScanned & WifiScanner.WIFI_BAND_24_GHZ) != 0
+                && (mBandsScanned & WifiScanner.WIFI_BAND_5_GHZ) != 0;
         }
 
         /** Implement the Parcelable interface {@hide} */
@@ -609,7 +629,7 @@
             dest.writeInt(mId);
             dest.writeInt(mFlags);
             dest.writeInt(mBucketsScanned);
-            dest.writeInt(mBandScanned);
+            dest.writeInt(mBandsScanned);
             dest.writeParcelableList(mResults, 0);
         }
 
@@ -620,10 +640,10 @@
                         int id = in.readInt();
                         int flags = in.readInt();
                         int bucketsScanned = in.readInt();
-                        int bandScanned = in.readInt();
+                        int bandsScanned = in.readInt();
                         List<ScanResult> results = new ArrayList<>();
                         in.readParcelableList(results, ScanResult.class.getClassLoader());
-                        return new ScanData(id, flags, bucketsScanned, bandScanned, results);
+                        return new ScanData(id, flags, bucketsScanned, bandsScanned, results);
                     }
 
                     public ScanData[] newArray(int size) {
diff --git a/framework/tests/src/android/net/wifi/WifiScannerTest.java b/framework/tests/src/android/net/wifi/WifiScannerTest.java
index b68616f..8bd6dd1 100644
--- a/framework/tests/src/android/net/wifi/WifiScannerTest.java
+++ b/framework/tests/src/android/net/wifi/WifiScannerTest.java
@@ -227,7 +227,8 @@
         assertEquals(writeScanData.getId(), readScanData.getId());
         assertEquals(writeScanData.getFlags(), readScanData.getFlags());
         assertEquals(writeScanData.getBucketsScanned(), readScanData.getBucketsScanned());
-        assertEquals(writeScanData.getBandScanned(), readScanData.getBandScanned());
+        assertEquals(writeScanData.getBandsScannedInternal(),
+                readScanData.getBandsScannedInternal());
         assertArrayEquals(writeScanData.getResults(), readScanData.getResults());
     }
 
diff --git a/service/java/com/android/server/wifi/ScanRequestProxy.java b/service/java/com/android/server/wifi/ScanRequestProxy.java
index 8a52bb3..09ee13d 100644
--- a/service/java/com/android/server/wifi/ScanRequestProxy.java
+++ b/service/java/com/android/server/wifi/ScanRequestProxy.java
@@ -144,7 +144,7 @@
                 Log.d(TAG, "Received " + scanResults.length + " scan results");
             }
             // Only process full band scan results.
-            if (WifiScanner.isFullBandScan(scanData.getBandScanned(), false)) {
+            if (WifiScanner.isFullBandScan(scanData.getBandsScannedInternal(), false)) {
                 // Store the last scan results & send out the scan completion broadcast.
                 mLastScanResultsMap.clear();
                 Arrays.stream(scanResults).forEach(s -> mLastScanResultsMap.put(s.BSSID, s));
diff --git a/service/java/com/android/server/wifi/WakeupController.java b/service/java/com/android/server/wifi/WakeupController.java
index 7e85e81..3dd0bfa 100644
--- a/service/java/com/android/server/wifi/WakeupController.java
+++ b/service/java/com/android/server/wifi/WakeupController.java
@@ -75,7 +75,7 @@
         public void onResults(WifiScanner.ScanData[] results) {
             // We treat any full band scans (with DFS or not) as "full".
             if (results.length == 1
-                    && WifiScanner.isFullBandScan(results[0].getBandScanned(), true)) {
+                    && WifiScanner.isFullBandScan(results[0].getBandsScannedInternal(), true)) {
                 handleScanResults(filterDfsScanResults(Arrays.asList(results[0].getResults())));
             }
         }
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java
index 18847c3..8a4ece3 100644
--- a/service/java/com/android/server/wifi/WifiConnectivityManager.java
+++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java
@@ -676,7 +676,7 @@
             boolean isFullBandScanResults = false;
             if (results != null && results.length > 0) {
                 isFullBandScanResults =
-                        WifiScanner.isFullBandScan(results[0].getBandScanned(), true);
+                        WifiScanner.isFullBandScan(results[0].getBandsScannedInternal(), true);
             }
             // Full band scan results only.
             if (mWaitForFullBandScanResults) {
diff --git a/service/java/com/android/server/wifi/WifiHealthMonitor.java b/service/java/com/android/server/wifi/WifiHealthMonitor.java
index 17ea61c..bdf6b26 100644
--- a/service/java/com/android/server/wifi/WifiHealthMonitor.java
+++ b/service/java/com/android/server/wifi/WifiHealthMonitor.java
@@ -1053,7 +1053,7 @@
                 return;
             }
 
-            if (WifiScanner.isFullBandScan(results[0].getBandScanned(), true)) {
+            if (WifiScanner.isFullBandScan(results[0].getBandsScannedInternal(), true)) {
                 handleScanResults(mScanDetails);
             }
             clearScanDetails();
diff --git a/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java b/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java
index ab127af..7045347 100644
--- a/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java
+++ b/service/java/com/android/server/wifi/scanner/ScanScheduleUtil.java
@@ -176,7 +176,7 @@
                     filteredScanDatas.add(new ScanData(scanData.getId(),
                                     scanData.getFlags(),
                                     0,
-                                    scanData.getBandScanned(),
+                                    scanData.getBandsScannedInternal(),
                                     filteredResults.toArray(
                                             new ScanResult[filteredResults.size()])));
                 }
diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
index 92a47d7..1564184 100644
--- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
+++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
@@ -1307,7 +1307,7 @@
             }
 
             // Cache full band (with DFS or not) scan results.
-            if (WifiScanner.isFullBandScan(results.getBandScanned(), true)) {
+            if (WifiScanner.isFullBandScan(results.getBandsScannedInternal(), true)) {
                 mCachedScanResults.clear();
                 mCachedScanResults.addAll(Arrays.asList(results.getResults()));
             }
diff --git a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java
index e9e83eb..ac59fd8 100644
--- a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java
+++ b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java
@@ -345,15 +345,15 @@
     /**
      * Return one of the WIFI_BAND_# values that was scanned for in this scan.
      */
-    private static int getBandScanned(ChannelCollection channelCollection) {
-        int bandScanned = WifiScanner.WIFI_BAND_UNSPECIFIED;
+    private static int getBandsScannedInternal(ChannelCollection channelCollection) {
+        int bandsScanned = WifiScanner.WIFI_BAND_UNSPECIFIED;
 
         for (@WifiBandIndex int i = 0; i < WifiScanner.WIFI_BAND_COUNT; i++) {
             if (channelCollection.containsBand(1 << i)) {
-                bandScanned |= 1 << i;
+                bandsScanned |= 1 << i;
             }
         }
-        return bandScanned;
+        return bandsScanned;
     }
 
     private void pollLatestScanData() {
@@ -392,7 +392,7 @@
                 }
                 Collections.sort(singleScanResults, SCAN_RESULT_SORT_COMPARATOR);
                 mLatestSingleScanResult = new WifiScanner.ScanData(0, 0, 0,
-                        getBandScanned(mLastScanSettings.singleScanFreqs),
+                        getBandsScannedInternal(mLastScanSettings.singleScanFreqs),
                         singleScanResults.toArray(new ScanResult[singleScanResults.size()]));
                 mLastScanSettings.singleScanEventHandler
                         .onScanStatus(WifiNative.WIFI_SCAN_RESULTS_AVAILABLE);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ScanTestUtil.java b/service/tests/wifitests/src/com/android/server/wifi/ScanTestUtil.java
index 6a85c97..30051ae 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ScanTestUtil.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ScanTestUtil.java
@@ -353,8 +353,8 @@
         assertNotNull(prefix + "actual ScanData was null", actual);
         assertEquals(prefix + "id", expected.getId(), actual.getId());
         assertEquals(prefix + "flags", expected.getFlags(), actual.getFlags());
-        assertEquals(prefix + "band", expected.getBandScanned(),
-                actual.getBandScanned());
+        assertEquals(prefix + "band", expected.getBandsScannedInternal(),
+                actual.getBandsScannedInternal());
         assertScanResultsEquals(prefix, expected.getResults(), actual.getResults());
     }
 
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
index 57f552b..64b74b8 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java
@@ -299,7 +299,7 @@
     ScanData mockScanData() {
         ScanData scanData = mock(ScanData.class);
 
-        when(scanData.getBandScanned()).thenReturn(WifiScanner.WIFI_BAND_ALL);
+        when(scanData.getBandsScannedInternal()).thenReturn(WifiScanner.WIFI_BAND_ALL);
 
         return scanData;
     }
@@ -2815,7 +2815,7 @@
         setWifiStateConnected();
 
         // Set up as partial scan results.
-        when(mScanData.getBandScanned()).thenReturn(WifiScanner.WIFI_BAND_5_GHZ);
+        when(mScanData.getBandsScannedInternal()).thenReturn(WifiScanner.WIFI_BAND_5_GHZ);
 
         // Force a connectivity scan which enables WifiConnectivityManager
         // to wait for full band scan results.
@@ -2826,7 +2826,7 @@
                 CANDIDATE_NETWORK_ID, Process.WIFI_UID, CANDIDATE_BSSID);
 
         // Set up as full band scan results.
-        when(mScanData.getBandScanned()).thenReturn(WifiScanner.WIFI_BAND_ALL);
+        when(mScanData.getBandsScannedInternal()).thenReturn(WifiScanner.WIFI_BAND_ALL);
 
         // Force a connectivity scan which enables WifiConnectivityManager
         // to wait for full band scan results.
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java
index 7a60a39..4585abc 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java
@@ -289,7 +289,7 @@
 
         ScanData[] scanDatas = new ScanData[1];
         scanDatas[0] = mock(ScanData.class);
-        when(scanDatas[0].getBandScanned()).thenReturn(wifiBand);
+        when(scanDatas[0].getBandsScannedInternal()).thenReturn(wifiBand);
         doAnswer(new AnswerWithArguments() {
             public void answer(ScanSettings settings, ScanListener listener) throws Exception {
                 if (mScanData != null && mScanData.getResults() != null) {
diff --git a/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java b/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
index 55307d9..493bcc2 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/scanner/WifiScanningServiceTest.java
@@ -676,7 +676,7 @@
         ScanResults expectedResults = resultsForImpl0;
         if (resultsForImpl1 != null) {
             expectedResults = ScanResults.merge(
-                    resultsForImpl0.getScanData().getBandScanned(),
+                    resultsForImpl0.getScanData().getBandsScannedInternal(),
                     resultsForImpl0, resultsForImpl1);
         }
         verifyScanResultsReceived(order, handler, requestId, expectedResults.getScanData());