Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4807c9a3 authored by Roshan Pius's avatar Roshan Pius
Browse files

WifiScanner: Add support to add more results to ScanData

Bug: 140111024
Test: atest android.net.wifi
Change-Id: I71a7568eb508db61cabdaf6e11b51df01c9eb49b
parent 718a0487
Loading
Loading
Loading
Loading
+30 −27
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.net.wifi;

import android.Manifest;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
@@ -375,19 +376,27 @@ public class WifiScanner {
         */
        private int mBandScanned;
        /** all scan results discovered in this scan, sorted by timestamp in ascending order */
        private ScanResult mResults[];
        private final List<ScanResult> mResults;

        ScanData() {}
        ScanData() {
            mResults = new ArrayList<>();
        }

        public ScanData(int id, int flags, ScanResult[] results) {
            mId = id;
            mFlags = flags;
            mResults = results;
            mResults = new ArrayList<>(Arrays.asList(results));
        }

        /** {@hide} */
        public ScanData(int id, int flags, int bucketsScanned, int bandScanned,
                        ScanResult[] results) {
            this(id, flags, bucketsScanned, bandScanned, new ArrayList<>(Arrays.asList(results)));
        }

        /** {@hide} */
        public ScanData(int id, int flags, int bucketsScanned, int bandScanned,
                        List<ScanResult> results) {
            mId = id;
            mFlags = flags;
            mBucketsScanned = bucketsScanned;
@@ -400,11 +409,9 @@ public class WifiScanner {
            mFlags = s.mFlags;
            mBucketsScanned = s.mBucketsScanned;
            mBandScanned = s.mBandScanned;
            mResults = new ScanResult[s.mResults.length];
            for (int i = 0; i < s.mResults.length; i++) {
                ScanResult result = s.mResults[i];
                ScanResult newResult = new ScanResult(result);
                mResults[i] = newResult;
            mResults = new ArrayList<>();
            for (ScanResult scanResult : s.mResults) {
                mResults.add(new ScanResult(scanResult));
            }
        }

@@ -427,7 +434,14 @@ public class WifiScanner {
        }

        public ScanResult[] getResults() {
            return mResults;
            return mResults.toArray(new ScanResult[0]);
        }

        /** {@hide} */
        public void addResults(@NonNull ScanResult[] newResults) {
            for (ScanResult result : newResults) {
                mResults.add(new ScanResult(result));
            }
        }

        /** Implement the Parcelable interface {@hide} */
@@ -437,19 +451,11 @@ public class WifiScanner {

        /** Implement the Parcelable interface {@hide} */
        public void writeToParcel(Parcel dest, int flags) {
            if (mResults != null) {
            dest.writeInt(mId);
            dest.writeInt(mFlags);
            dest.writeInt(mBucketsScanned);
            dest.writeInt(mBandScanned);
                dest.writeInt(mResults.length);
                for (int i = 0; i < mResults.length; i++) {
                    ScanResult result = mResults[i];
                    result.writeToParcel(dest, flags);
                }
            } else {
                dest.writeInt(0);
            }
            dest.writeParcelableList(mResults, 0);
        }

        /** Implement the Parcelable interface {@hide} */
@@ -460,11 +466,8 @@ public class WifiScanner {
                        int flags = in.readInt();
                        int bucketsScanned = in.readInt();
                        int bandScanned = in.readInt();
                        int n = in.readInt();
                        ScanResult results[] = new ScanResult[n];
                        for (int i = 0; i < n; i++) {
                            results[i] = ScanResult.CREATOR.createFromParcel(in);
                        }
                        List<ScanResult> results = new ArrayList<>();
                        in.readParcelableList(results, ScanResult.class.getClassLoader());
                        return new ScanData(id, flags, bucketsScanned, bandScanned, results);
                    }

+33 −1
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@@ -445,4 +444,37 @@ public class WifiScannerTest {

        assertEquals(WifiScanner.CMD_STOP_PNO_SCAN, message.what);
    }

    @Test
    public void testScanDataAddResults() throws Exception {
        ScanResult scanResult1 = new ScanResult();
        scanResult1.SSID = TEST_SSID_1;
        ScanData scanData = new ScanData(0, 0, new ScanResult[]{scanResult1});

        ScanResult scanResult2 = new ScanResult();
        scanResult2.SSID = TEST_SSID_2;
        scanData.addResults(new ScanResult[]{scanResult2});

        ScanResult[] consolidatedScanResults = scanData.getResults();
        assertEquals(2, consolidatedScanResults.length);
        assertEquals(TEST_SSID_1, consolidatedScanResults[0].SSID);
        assertEquals(TEST_SSID_2, consolidatedScanResults[1].SSID);
    }

    @Test
    public void testScanDataParcel() throws Exception {
        ScanResult scanResult1 = new ScanResult();
        scanResult1.SSID = TEST_SSID_1;
        ScanData scanData = new ScanData(5, 4, new ScanResult[]{scanResult1});

        Parcel parcel = Parcel.obtain();
        scanData.writeToParcel(parcel, 0);
        parcel.setDataPosition(0);    // Rewind data position back to the beginning for read.
        ScanData readScanData = ScanData.CREATOR.createFromParcel(parcel);

        assertEquals(scanData.getId(), readScanData.getId());
        assertEquals(scanData.getFlags(), readScanData.getFlags());
        assertEquals(scanData.getResults().length, readScanData.getResults().length);
        assertEquals(scanData.getResults()[0].SSID, readScanData.getResults()[0].SSID);
    }
}