ScanResult.java revision 154b2cf6bbb99ee258b289846183172139a87dba
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net.wifi;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
197fee7232ee2ae45fb3cd4fcce314e8f1101ae8dbRoger Changimport android.net.wifi.passpoint.WifiPasspointInfo;
207fee7232ee2ae45fb3cd4fcce314e8f1101ae8dbRoger Changimport android.net.wifi.passpoint.WifiPasspointManager;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Describes information about a detected access point. In addition
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the attributes described here, the supplicant keeps track of
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code quality}, {@code noise}, and {@code maxbitrate} attributes,
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but does not currently report them to external clients.
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ScanResult implements Parcelable {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The network name. */
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String SSID;
33b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff
34b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    /** Ascii encoded SSID. This will replace SSID when we deprecate it. @hide */
35b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    public WifiSsid wifiSsid;
36b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The address of the access point. */
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String BSSID;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Describes the authentication, key management, and encryption schemes
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * supported by the access point.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String capabilities;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
45137ff532ebb062ea513d6ea0dd894b91f373d1a3Brian Williammee     * The detected signal level in dBm.
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int level;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The frequency in MHz of the channel over which the client is communicating
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the access point.
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int frequency;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev     * Time Synchronization Function (tsf) timestamp in microseconds when
5606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev     * this result was last seen.
5706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev     */
580451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public long timestamp;
590451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
600451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /**
617c3606c103e95d3991267cca2592402a68779cafvandwalle     * Timestamp representing date when this result was last seen, in milliseconds from 1970
627c3606c103e95d3991267cca2592402a68779cafvandwalle     * {@hide}
637c3606c103e95d3991267cca2592402a68779cafvandwalle     */
647c3606c103e95d3991267cca2592402a68779cafvandwalle    public long seen;
657c3606c103e95d3991267cca2592402a68779cafvandwalle
66f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    /** @hide */
67f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    public static final int ENABLED                                          = 0;
68f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    /** @hide */
69f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    public static final int AUTO_ROAM_DISABLED                               = 16;
70f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    /** @hide */
71f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    public static final int AUTO_JOIN_DISABLED                               = 32;
72f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    /** @hide */
73154b2cf6bbb99ee258b289846183172139a87dbavandwalle    public static final int AUTHENTICATION_ERROR                              = 128;
74f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle
75f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    /**
76f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle     * Status: indicating join status
77f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle     * @hide
78f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle     */
79f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle    public int status;
807c3606c103e95d3991267cca2592402a68779cafvandwalle
817c3606c103e95d3991267cca2592402a68779cafvandwalle    /**
820451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * The approximate distance to the AP in centimeter, if available.  Else
830451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@link UNSPECIFIED}.
840451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@hide}
850451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     */
860451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public int distanceCm;
870451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
880451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /**
890451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * The standard deviation of the distance to the AP, if available.
900451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * Else {@link UNSPECIFIED}.
910451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@hide}
920451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     */
930451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public int distanceSdCm;
940451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
950451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /**
96a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng     * Passpoint ANQP information. This is not fetched automatically.
977fee7232ee2ae45fb3cd4fcce314e8f1101ae8dbRoger Chang     * Use {@link WifiPasspointManager#requestAnqpInfo} to request ANQP info.
98fdb2575a8029dfe90a55c4ecc594bb5628bdf361Vinit Deshapnde     * {@hide}
99a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng     */
1007fee7232ee2ae45fb3cd4fcce314e8f1101ae8dbRoger Chang    public WifiPasspointInfo passpoint;
101a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng
102a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng    /**
1030451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@hide}
1040451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     */
1050451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public final static int UNSPECIFIED = -1;
106111fa0274d1d6620f9634783585387f3b773949evandwalle    /**
107111fa0274d1d6620f9634783585387f3b773949evandwalle     * @hide
108111fa0274d1d6620f9634783585387f3b773949evandwalle     * TODO: makes real freq boundaries
109111fa0274d1d6620f9634783585387f3b773949evandwalle     */
110111fa0274d1d6620f9634783585387f3b773949evandwalle    public boolean is24GHz() {
111111fa0274d1d6620f9634783585387f3b773949evandwalle        return frequency > 2400 && frequency < 2500;
112111fa0274d1d6620f9634783585387f3b773949evandwalle    }
113111fa0274d1d6620f9634783585387f3b773949evandwalle
114111fa0274d1d6620f9634783585387f3b773949evandwalle    /**
115111fa0274d1d6620f9634783585387f3b773949evandwalle     * @hide
116111fa0274d1d6620f9634783585387f3b773949evandwalle     * TODO: makes real freq boundaries
117111fa0274d1d6620f9634783585387f3b773949evandwalle     */
118111fa0274d1d6620f9634783585387f3b773949evandwalle    public boolean is5GHz() {
119111fa0274d1d6620f9634783585387f3b773949evandwalle        return frequency > 4900 && frequency < 5900;
120111fa0274d1d6620f9634783585387f3b773949evandwalle    }
12106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev
12255027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande    /** information element from beacon
12355027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande     * @hide
12455027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande     */
12555027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande    public static class InformationElement {
12655027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande        public int id;
12755027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande        public byte[] bytes;
12855027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande    }
12955027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande
13055027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande    /** information elements found in the beacon
13155027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande     * @hide
13255027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande     */
13355027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande    public InformationElement informationElements[];
13455027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande
135b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    /** {@hide} */
136b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency,
137b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            long tsf) {
138b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        this.wifiSsid = wifiSsid;
139b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE;
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.BSSID = BSSID;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.capabilities = caps;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.level = level;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.frequency = frequency;
14406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        this.timestamp = tsf;
1450451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceCm = UNSPECIFIED;
1460451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceSdCm = UNSPECIFIED;
14706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev    }
14806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev
1490451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /** {@hide} */
1500451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency,
1510451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt            long tsf, int distCm, int distSdCm) {
1520451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.wifiSsid = wifiSsid;
1530451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE;
1540451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.BSSID = BSSID;
1550451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.capabilities = caps;
1560451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.level = level;
1570451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.frequency = frequency;
1580451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.timestamp = tsf;
1590451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceCm = distCm;
1600451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceSdCm = distSdCm;
1610451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    }
162b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff
16306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev    /** copy constructor {@hide} */
16406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev    public ScanResult(ScanResult source) {
16506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        if (source != null) {
166b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            wifiSsid = source.wifiSsid;
16706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            SSID = source.SSID;
16806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            BSSID = source.BSSID;
16906c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            capabilities = source.capabilities;
17006c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            level = source.level;
17106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            frequency = source.frequency;
17206c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            timestamp = source.timestamp;
1730451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt            distanceCm = source.distanceCm;
1740451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt            distanceSdCm = source.distanceSdCm;
1757c3606c103e95d3991267cca2592402a68779cafvandwalle            seen = source.seen;
1767f28e844c12403e77dc62b2d0ccf34a9639745e0Yuhao Zheng            passpoint = source.passpoint;
177f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle            status = source.status;
17806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        }
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
181011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde    /** empty scan result
182011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde     *
183011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde     * {@hide}
184011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde     * */
185011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde    public ScanResult() {
186011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde    }
187011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuffer sb = new StringBuffer();
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String none = "<none>";
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append("SSID: ").
194b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            append(wifiSsid == null ? WifiSsid.NONE : wifiSsid).
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", BSSID: ").
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(BSSID == null ? none : BSSID).
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", capabilities: ").
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(capabilities == null ? none : capabilities).
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", level: ").
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(level).
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", frequency: ").
20206c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            append(frequency).
20306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            append(", timestamp: ").
20406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            append(timestamp);
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2060451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        sb.append(", distance: ").append((distanceCm != UNSPECIFIED ? distanceCm : "?")).
2070451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                append("(cm)");
2080451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        sb.append(", distanceSd: ").append((distanceSdCm != UNSPECIFIED ? distanceSdCm : "?")).
2090451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                append("(cm)");
2100451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
2117f28e844c12403e77dc62b2d0ccf34a9639745e0Yuhao Zheng        sb.append(", passpoint: ").append(passpoint != null ? "yes" : "no");
212f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle        if (status != 0) {
213f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle            sb.append(", status: ").append(status);
214f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle        }
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sb.toString();
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags) {
225b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        if (wifiSsid != null) {
226b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            dest.writeInt(1);
227b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            wifiSsid.writeToParcel(dest, flags);
228b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        } else {
229b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            dest.writeInt(0);
230b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        }
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(BSSID);
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(capabilities);
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(level);
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(frequency);
23506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        dest.writeLong(timestamp);
2360451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        dest.writeInt(distanceCm);
2370451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        dest.writeInt(distanceSdCm);
2385fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle        dest.writeLong(seen);
239f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle        dest.writeInt(status);
240a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng        if (passpoint != null) {
241a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng            dest.writeInt(1);
242a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng            passpoint.writeToParcel(dest, flags);
243a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng        } else {
244a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng            dest.writeInt(0);
245a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng        }
24655027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande        if (informationElements != null) {
24755027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande            dest.writeInt(informationElements.length);
24855027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande            for (int i = 0; i < informationElements.length; i++) {
24955027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                dest.writeInt(informationElements[i].id);
25055027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                dest.writeInt(informationElements[i].bytes.length);
25155027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                dest.writeByteArray(informationElements[i].bytes);
25255027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande            }
25355027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande        } else {
25455027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande            dest.writeInt(0);
25555027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande        }
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Creator<ScanResult> CREATOR =
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Creator<ScanResult>() {
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ScanResult createFromParcel(Parcel in) {
262b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                WifiSsid wifiSsid = null;
263b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                if (in.readInt() == 1) {
264b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                    wifiSsid = WifiSsid.CREATOR.createFromParcel(in);
265b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                }
266a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng                ScanResult sr = new ScanResult(
267b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                    wifiSsid,
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    in.readString(),
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    in.readString(),
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    in.readInt(),
27106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev                    in.readInt(),
2720451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                    in.readLong(),
2730451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                    in.readInt(),
2740451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                    in.readInt()
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                );
2765fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle                sr.seen = in.readLong();
277f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle                sr.status = in.readInt();
278a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng                if (in.readInt() == 1) {
2797fee7232ee2ae45fb3cd4fcce314e8f1101ae8dbRoger Chang                    sr.passpoint = WifiPasspointInfo.CREATOR.createFromParcel(in);
280a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng                }
28155027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                int n = in.readInt();
28255027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                if (n != 0) {
28355027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                    sr.informationElements = new InformationElement[n];
28455027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                    for (int i = 0; i < n; i++) {
28555027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                        sr.informationElements[i] = new InformationElement();
28655027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                        sr.informationElements[i].id = in.readInt();
28755027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                        int len = in.readInt();
28855027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                        sr.informationElements[i].bytes = new byte[len];
28955027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                        in.readByteArray(sr.informationElements[i].bytes);
29055027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                    }
29155027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande                }
292a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng                return sr;
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ScanResult[] newArray(int size) {
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ScanResult[size];
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
300