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());