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

Commit 55027bb7 authored by Vinit Deshpande's avatar Vinit Deshpande
Browse files

Accomoditing API Review feedback for WifiScanner

cherry-picked from klp-wireless-dev
SHA1 8217e22356a8828a725ba7654cf25b05a49108fb

Main changes include

- hiding the API for LMP preview
- moved information elements to ScanResult object
- removed objects from events
- changed API names to be more consistent

Bug: 15191968
Change-Id: Ibe3907366aee85f7d56021a536ae0f9f9fb28b38
parent ae9e1a5d
Loading
Loading
Loading
Loading
+0 −80
Original line number Diff line number Diff line
@@ -17289,86 +17289,6 @@ package android.net.wifi {
    method public abstract void onStartSuccess(java.lang.String);
  }
  public class WifiScanner {
    method public void configureWifiChange(int, int, int, int, int, android.net.wifi.WifiScanner.HotspotInfo[]);
    method public void resetHotlist(android.net.wifi.WifiScanner.HotlistListener);
    method public void retrieveScanResults(boolean, android.net.wifi.WifiScanner.ScanListener);
    method public void setHotlist(android.net.wifi.WifiScanner.HotspotInfo[], int, android.net.wifi.WifiScanner.HotlistListener);
    method public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener);
    method public void startTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener);
    method public void stopBackgroundScan(android.net.wifi.WifiScanner.ScanListener);
    method public void stopTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener);
    field public static final int MAX_SCAN_PERIOD_MS = 1024000; // 0xfa000
    field public static final int MIN_SCAN_PERIOD_MS = 2000; // 0x7d0
    field public static final int REASON_CONFLICTING_REQUEST = -4; // 0xfffffffc
    field public static final int REASON_INVALID_LISTENER = -2; // 0xfffffffe
    field public static final int REASON_INVALID_REQUEST = -3; // 0xfffffffd
    field public static final int REASON_SUCCEEDED = 0; // 0x0
    field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff
    field public static final int REPORT_EVENT_AFTER_BUFFER_FULL = 0; // 0x0
    field public static final int REPORT_EVENT_AFTER_EACH_SCAN = 1; // 0x1
    field public static final int REPORT_EVENT_FULL_SCAN_RESULT = 2; // 0x2
    field public static final int WIFI_BAND_24_GHZ = 1; // 0x1
    field public static final int WIFI_BAND_5_GHZ = 2; // 0x2
    field public static final int WIFI_BAND_5_GHZ_DFS_ONLY = 4; // 0x4
    field public static final int WIFI_BAND_5_GHZ_WITH_DFS = 6; // 0x6
    field public static final int WIFI_BAND_BOTH = 3; // 0x3
    field public static final int WIFI_BAND_BOTH_WITH_DFS = 7; // 0x7
    field public static final int WIFI_BAND_UNSPECIFIED = 0; // 0x0
  }
  public static class WifiScanner.ChannelSpec {
    ctor public WifiScanner.ChannelSpec(int);
    field public int frequency;
  }
  public static class WifiScanner.FullScanResult implements android.os.Parcelable {
    ctor public WifiScanner.FullScanResult();
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public android.net.wifi.WifiScanner.InformationElement[] informationElements;
    field public android.net.wifi.ScanResult result;
  }
  public static abstract interface WifiScanner.HotlistListener {
    method public abstract void onFound(android.net.wifi.ScanResult[]);
  }
  public static class WifiScanner.HotspotInfo {
    ctor public WifiScanner.HotspotInfo();
    field public java.lang.String bssid;
    field public int frequencyHint;
    field public int high;
    field public int low;
  }
  public static class WifiScanner.InformationElement {
    ctor public WifiScanner.InformationElement();
    field public byte[] bytes;
    field public int id;
  }
  public static abstract interface WifiScanner.ScanListener {
    method public abstract void onFullResult(android.net.wifi.WifiScanner.FullScanResult);
    method public abstract void onPeriodChanged(int);
    method public abstract void onResults(android.net.wifi.ScanResult[]);
  }
  public static class WifiScanner.ScanSettings implements android.os.Parcelable {
    ctor public WifiScanner.ScanSettings();
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public int band;
    field public android.net.wifi.WifiScanner.ChannelSpec[] channels;
    field public int periodInMs;
    field public int reportEvents;
  }
  public static abstract interface WifiScanner.WifiChangeListener {
    method public abstract void onChanging(android.net.wifi.ScanResult[]);
    method public abstract void onQuiescence(android.net.wifi.ScanResult[]);
  }
  public class WpsInfo implements android.os.Parcelable {
    ctor public WpsInfo();
    ctor public WpsInfo(android.net.wifi.WpsInfo);
+34 −1
Original line number Diff line number Diff line
@@ -90,6 +90,19 @@ public class ScanResult implements Parcelable {
     */
    public final static int UNSPECIFIED = -1;

    /** information element from beacon
     * @hide
     */
    public static class InformationElement {
        public int id;
        public byte[] bytes;
    }

    /** information elements found in the beacon
     * @hide
     */
    public InformationElement informationElements[];

    /** {@hide} */
    public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency,
            long tsf) {
@@ -199,6 +212,16 @@ public class ScanResult implements Parcelable {
        } else {
            dest.writeInt(0);
        }
        if (informationElements != null) {
            dest.writeInt(informationElements.length);
            for (int i = 0; i < informationElements.length; i++) {
                dest.writeInt(informationElements[i].id);
                dest.writeInt(informationElements[i].bytes.length);
                dest.writeByteArray(informationElements[i].bytes);
            }
        } else {
            dest.writeInt(0);
        }
    }

    /** Implement the Parcelable interface {@hide} */
@@ -223,6 +246,17 @@ public class ScanResult implements Parcelable {
                if (in.readInt() == 1) {
                    sr.passpoint = WifiPasspointInfo.CREATOR.createFromParcel(in);
                }
                int n = in.readInt();
                if (n != 0) {
                    sr.informationElements = new InformationElement[n];
                    for (int i = 0; i < n; i++) {
                        sr.informationElements[i] = new InformationElement();
                        sr.informationElements[i].id = in.readInt();
                        int len = in.readInt();
                        sr.informationElements[i].bytes = new byte[len];
                        in.readByteArray(sr.informationElements[i].bytes);
                    }
                }
                return sr;
            }

@@ -230,5 +264,4 @@ public class ScanResult implements Parcelable {
                return new ScanResult[size];
            }
        };

}
+18 −72
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import java.util.concurrent.CountDownLatch;
 * Get an instance of this class by calling
 * {@link android.content.Context#getSystemService(String) Context.getSystemService(Context
 * .WIFI_SCANNING_SERVICE)}.
 * @hide
 */
public class WifiScanner {

@@ -72,16 +73,14 @@ public class WifiScanner {
    public static final int REASON_INVALID_LISTENER = -2;
    /** Invalid request */
    public static final int REASON_INVALID_REQUEST = -3;
    /** Request conflicts with other scans that may be going on */
    public static final int REASON_CONFLICTING_REQUEST = -4;

    /**
     * Generic action callback invocation interface
     *  @hide
     */
    public static interface ActionListener {
        public void onSuccess(Object result);
        public void onFailure(int reason, Object exception);
        public void onSuccess();
        public void onFailure(int reason, String description);
    }

    /**
@@ -193,58 +192,6 @@ public class WifiScanner {

    }

    /** information element from beacon */
    public static class InformationElement {
        public int id;
        public byte[] bytes;
    }

    /** scan result with information elements from beacons */
    public static class FullScanResult implements Parcelable {
        public ScanResult result;
        public InformationElement informationElements[];

        /** Implement the Parcelable interface {@hide} */
        public int describeContents() {
            return 0;
        }

        /** Implement the Parcelable interface {@hide} */
        public void writeToParcel(Parcel dest, int flags) {
            result.writeToParcel(dest, flags);
            dest.writeInt(informationElements.length);
            for (int i = 0; i < informationElements.length; i++) {
                dest.writeInt(informationElements[i].id);
                dest.writeInt(informationElements[i].bytes.length);
                dest.writeByteArray(informationElements[i].bytes);
            }
        }

        /** Implement the Parcelable interface {@hide} */
        public static final Creator<FullScanResult> CREATOR =
                new Creator<FullScanResult>() {
                    public FullScanResult createFromParcel(Parcel in) {
                        FullScanResult result = new FullScanResult();
                        result.result = ScanResult.CREATOR.createFromParcel(in);
                        int n = in.readInt();
                        result.informationElements = new InformationElement[n];
                        for (int i = 0; i < n; i++) {
                            result.informationElements[i] = new InformationElement();
                            result.informationElements[i].id = in.readInt();
                            int len = in.readInt();
                            result.informationElements[i].bytes = new byte[len];
                            in.readByteArray(result.informationElements[i].bytes);
                        }

                        return result;
                    }

                    public FullScanResult[] newArray(int size) {
                        return new FullScanResult[size];
                    }
                };
    }

    /** @hide */
    public static class ParcelableScanResults implements Parcelable {
        public ScanResult mResults[];
@@ -305,7 +252,7 @@ public class WifiScanner {
        /**
         * reports full scan result for each access point found in scan
         */
        public void onFullResult(FullScanResult fullScanResult);
        public void onFullResult(ScanResult fullScanResult);
    }

    /** @hide */
@@ -336,13 +283,12 @@ public class WifiScanner {
    }
    /**
     * retrieves currently available scan results
     * @param flush {@code true} means flush all results
     * @param listener specifies which scan to cancel; must be same object as passed in {@link
     *                 #startBackgroundScan}
     */
    public void retrieveScanResults(boolean flush, ScanListener listener) {
    public ScanResult[] getScanResults() {
        validateChannel();
        sAsyncChannel.sendMessage(CMD_GET_SCAN_RESULTS, 0, getListenerKey(listener));
        Message reply = sAsyncChannel.sendMessageSynchronously(CMD_GET_SCAN_RESULTS, 0);
        ScanResult[] results = (ScanResult[]) reply.obj;
        return results;
    }

    /** specifies information about an access point of interest */
@@ -490,7 +436,7 @@ public class WifiScanner {
    }

    /** interface to receive hotlist events on; use this on {@link #setHotlist} */
    public static interface HotlistListener extends ActionListener {
    public static interface HotspotListener extends ActionListener {
        /** indicates that access points were found by on going scans
         * @param results list of scan results, one for each access point visible currently
         */
@@ -550,10 +496,10 @@ public class WifiScanner {
     * @param hotspots access points of interest
     * @param apLostThreshold number of scans needed to indicate that AP is lost
     * @param listener object provided to report events on; this object must be unique and must
     *                 also be provided on {@link #resetHotlist}
     *                 also be provided on {@link #stopTrackingHotspots}
     */
    public void setHotlist(HotspotInfo[] hotspots,
            int apLostThreshold, HotlistListener listener) {
    public void startTrackingHotspots(HotspotInfo[] hotspots,
            int apLostThreshold, HotspotListener listener) {
        validateChannel();
        HotlistSettings settings = new HotlistSettings();
        settings.hotspotInfos = hotspots;
@@ -562,9 +508,9 @@ public class WifiScanner {

    /**
     * remove tracking of interesting access points
     * @param listener same object provided in {@link #setHotlist}
     * @param listener same object provided in {@link #startTrackingHotspots}
     */
    public void resetHotlist(HotlistListener listener) {
    public void stopTrackingHotspots(HotspotListener listener) {
        validateChannel();
        sAsyncChannel.sendMessage(CMD_RESET_HOTLIST, 0, removeListener(listener));
    }
@@ -769,10 +715,10 @@ public class WifiScanner {
            switch (msg.what) {
                    /* ActionListeners grouped together */
                case CMD_OP_SUCCEEDED :
                    ((ActionListener) listener).onSuccess(msg.obj);
                    ((ActionListener) listener).onSuccess();
                    break;
                case CMD_OP_FAILED :
                    ((ActionListener) listener).onFailure(msg.arg1, msg.obj);
                    ((ActionListener) listener).onFailure(msg.arg1, (String)msg.obj);
                    removeListener(msg.arg2);
                    break;
                case CMD_SCAN_RESULT :
@@ -780,14 +726,14 @@ public class WifiScanner {
                            ((ParcelableScanResults) msg.obj).getResults());
                    return;
                case CMD_FULL_SCAN_RESULT :
                    FullScanResult result = (FullScanResult) msg.obj;
                    ScanResult result = (ScanResult) msg.obj;
                    ((ScanListener) listener).onFullResult(result);
                    return;
                case CMD_PERIOD_CHANGED:
                    ((ScanListener) listener).onPeriodChanged(msg.arg1);
                    return;
                case CMD_AP_FOUND:
                    ((HotlistListener) listener).onFound(
                    ((HotspotListener) listener).onFound(
                            ((ParcelableScanResults) msg.obj).getResults());
                    return;
                case CMD_WIFI_CHANGE_DETECTED: