diff options
23 files changed, 760 insertions, 97 deletions
diff --git a/api/current.txt b/api/current.txt index 76b14ae..61163d9 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6950,6 +6950,7 @@ package android.bluetooth.le { field public static final int SCAN_MODE_BALANCED = 1; // 0x1 field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2 field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0 + field public static final int SCAN_MODE_OPPORTUNISTIC = -1; // 0xffffffff } public static final class ScanSettings.Builder { @@ -18576,7 +18577,10 @@ package android.net.wifi { field public int frequency; field public boolean is80211McRTTResponder; field public int level; + field public java.lang.String operatorFriendlyName; + field public boolean passpointNetwork; field public long timestamp; + field public java.lang.String venueName; } public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable { @@ -18603,6 +18607,7 @@ package android.net.wifi { public class WifiConfiguration implements android.os.Parcelable { ctor public WifiConfiguration(); method public int describeContents(); + method public boolean isPasspoint(); method public void writeToParcel(android.os.Parcel, int); field public java.lang.String BSSID; field public java.lang.String FQDN; diff --git a/api/system-current.txt b/api/system-current.txt index 66245ff..05a5252 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7145,6 +7145,7 @@ package android.bluetooth.le { field public static final int SCAN_MODE_BALANCED = 1; // 0x1 field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2 field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0 + field public static final int SCAN_MODE_OPPORTUNISTIC = -1; // 0xffffffff field public static final int SCAN_RESULT_TYPE_ABBREVIATED = 1; // 0x1 field public static final int SCAN_RESULT_TYPE_FULL = 0; // 0x0 } @@ -20068,7 +20069,8 @@ package android.net.wifi { } public class RttManager { - method public android.net.wifi.RttManager.Capabilities getCapabilities(); + method public deprecated android.net.wifi.RttManager.Capabilities getCapabilities(); + method public android.net.wifi.RttManager.RttCapabilities getRttCapabilities(); method public void startRanging(android.net.wifi.RttManager.RttParams[], android.net.wifi.RttManager.RttListener); method public void stopRanging(android.net.wifi.RttManager.RttListener); field public static final int BASE = 160256; // 0x27200 @@ -20078,10 +20080,19 @@ package android.net.wifi { field public static final int CMD_OP_STOP_RANGING = 160257; // 0x27201 field public static final int CMD_OP_SUCCEEDED = 160259; // 0x27203 field public static final java.lang.String DESCRIPTION_KEY = "android.net.wifi.RttManager.Description"; + field public static final int PREAMBLE_HT = 2; // 0x2 + field public static final int PREAMBLE_LEGACY = 1; // 0x1 + field public static final int PREAMBLE_VHT = 4; // 0x4 field public static final int REASON_INVALID_LISTENER = -3; // 0xfffffffd field public static final int REASON_INVALID_REQUEST = -4; // 0xfffffffc field public static final int REASON_NOT_AVAILABLE = -2; // 0xfffffffe field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff + field public static final int RTT_BW_10_SUPPORT = 2; // 0x2 + field public static final int RTT_BW_160_SUPPORT = 32; // 0x20 + field public static final int RTT_BW_20_SUPPORT = 4; // 0x4 + field public static final int RTT_BW_40_SUPPORT = 8; // 0x8 + field public static final int RTT_BW_5_SUPPORT = 1; // 0x1 + field public static final int RTT_BW_80_SUPPORT = 16; // 0x10 field public static final int RTT_CHANNEL_WIDTH_10 = 6; // 0x6 field public static final int RTT_CHANNEL_WIDTH_160 = 3; // 0x3 field public static final int RTT_CHANNEL_WIDTH_20 = 0; // 0x0 @@ -20089,26 +20100,31 @@ package android.net.wifi { field public static final int RTT_CHANNEL_WIDTH_5 = 5; // 0x5 field public static final int RTT_CHANNEL_WIDTH_80 = 2; // 0x2 field public static final int RTT_CHANNEL_WIDTH_80P80 = 4; // 0x4 - field public static final int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; // 0xffffffff + field public static final deprecated int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; // 0xffffffff field public static final int RTT_PEER_TYPE_AP = 1; // 0x1 field public static final int RTT_PEER_TYPE_STA = 2; // 0x2 field public static final int RTT_PEER_TYPE_UNSPECIFIED = 0; // 0x0 field public static final int RTT_STATUS_ABORTED = 8; // 0x8 field public static final int RTT_STATUS_FAILURE = 1; // 0x1 field public static final int RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6; // 0x6 + field public static final int RTT_STATUS_FAIL_BUSY_TRY_LATER = 12; // 0xc + field public static final int RTT_STATUS_FAIL_INVALID_TS = 9; // 0x9 field public static final int RTT_STATUS_FAIL_NOT_SCHEDULED_YET = 4; // 0x4 field public static final int RTT_STATUS_FAIL_NO_CAPABILITY = 7; // 0x7 field public static final int RTT_STATUS_FAIL_NO_RSP = 2; // 0x2 + field public static final int RTT_STATUS_FAIL_PROTOCOL = 10; // 0xa field public static final int RTT_STATUS_FAIL_REJECTED = 3; // 0x3 + field public static final int RTT_STATUS_FAIL_SCHEDULE = 11; // 0xb field public static final int RTT_STATUS_FAIL_TM_TIMEOUT = 5; // 0x5 field public static final int RTT_STATUS_SUCCESS = 0; // 0x0 - field public static final int RTT_TYPE_11_MC = 4; // 0x4 - field public static final int RTT_TYPE_11_V = 2; // 0x2 + field public static final deprecated int RTT_TYPE_11_MC = 4; // 0x4 + field public static final deprecated int RTT_TYPE_11_V = 2; // 0x2 field public static final int RTT_TYPE_ONE_SIDED = 1; // 0x1 - field public static final int RTT_TYPE_UNSPECIFIED = 0; // 0x0 + field public static final int RTT_TYPE_TWO_SIDED = 4; // 0x4 + field public static final deprecated int RTT_TYPE_UNSPECIFIED = 0; // 0x0 } - public class RttManager.Capabilities { + public deprecated class RttManager.Capabilities { ctor public RttManager.Capabilities(); field public int supportedPeerType; field public int supportedType; @@ -20127,6 +20143,20 @@ package android.net.wifi { field public android.net.wifi.RttManager.RttResult[] mResults; } + public static class RttManager.RttCapabilities implements android.os.Parcelable { + ctor public RttManager.RttCapabilities(); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public int bwSupported; + field public boolean lciSupported; + field public boolean lcrSupported; + field public boolean oneSidedRttSupported; + field public int preambleSupported; + field public deprecated boolean supportedPeerType; + field public deprecated boolean supportedType; + field public boolean twoSided11McRttSupported; + } + public static abstract interface RttManager.RttListener { method public abstract void onAborted(); method public abstract void onFailure(int, java.lang.String); @@ -20135,30 +20165,64 @@ package android.net.wifi { public static class RttManager.RttParams { ctor public RttManager.RttParams(); + field public boolean LCIRequest; + field public boolean LCRRequest; + field public int bandwidth; field public java.lang.String bssid; + field public int burstTimeout; + field public int centerFreq0; + field public int centerFreq1; field public int channelWidth; field public int deviceType; field public int frequency; - field public int num_retries; - field public int num_samples; + field public int interval; + field public int numRetriesPerFTMR; + field public int numRetriesPerMeasurementFrame; + field public int numSamplesPerBurst; + field public deprecated int num_retries; + field public deprecated int num_samples; + field public int numberBurst; + field public int preamble; field public int requestType; } public static class RttManager.RttResult { ctor public RttManager.RttResult(); field public java.lang.String bssid; - field public int distance_cm; - field public int distance_sd_cm; - field public int distance_spread_cm; - field public int requestType; + field public int burstDuration; + field public int burstNumber; + field public int distance; + field public int distanceSpread; + field public int distanceStandardDeviation; + field public deprecated int distance_cm; + field public deprecated int distance_sd_cm; + field public deprecated int distance_spread_cm; + field public int frameNumberPerBurstPeer; + field public int measurementFrameNumber; + field public int measurementType; + field public deprecated int requestType; + field public int retryAfterDuration; field public int rssi; - field public int rssi_spread; - field public long rtt_ns; - field public long rtt_sd_ns; - field public long rtt_spread_ns; + field public int rssiSpread; + field public deprecated int rssi_spread; + field public long rtt; + field public long rttSpread; + field public long rttStandardDeviation; + field public deprecated long rtt_ns; + field public deprecated long rtt_sd_ns; + field public deprecated long rtt_spread_ns; + field public int rxRate; field public int status; + field public int successMeasurementFrameNumber; field public long ts; - field public int tx_rate; + field public int txRate; + field public deprecated int tx_rate; + } + + public class RttManager.wifiInformationElement { + ctor public RttManager.wifiInformationElement(); + field public java.lang.String data; + field public int id; } public class ScanResult implements android.os.Parcelable { @@ -20178,7 +20242,10 @@ package android.net.wifi { field public int frequency; field public boolean is80211McRTTResponder; field public int level; + field public java.lang.String operatorFriendlyName; + field public boolean passpointNetwork; field public long timestamp; + field public java.lang.String venueName; } public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable { @@ -20205,6 +20272,7 @@ package android.net.wifi { public class WifiConfiguration implements android.os.Parcelable { ctor public WifiConfiguration(); method public int describeContents(); + method public boolean isPasspoint(); method public void writeToParcel(android.os.Parcel, int); field public java.lang.String BSSID; field public java.lang.String FQDN; diff --git a/core/java/android/bluetooth/le/ScanSettings.java b/core/java/android/bluetooth/le/ScanSettings.java index 7eae439..0106686 100644 --- a/core/java/android/bluetooth/le/ScanSettings.java +++ b/core/java/android/bluetooth/le/ScanSettings.java @@ -25,6 +25,13 @@ import android.os.Parcelable; * parameters for the scan. */ public final class ScanSettings implements Parcelable { + + /** + * A special Bluetooth LE scan mode. Applications using this scan mode will passively listen for + * other scan results without starting BLE scans themselves. + */ + public static final int SCAN_MODE_OPPORTUNISTIC = -1; + /** * Perform Bluetooth LE scan in low power mode. This is the default scan mode as it consumes the * least power. @@ -177,7 +184,7 @@ public final class ScanSettings implements Parcelable { * @throws IllegalArgumentException If the {@code scanMode} is invalid. */ public Builder setScanMode(int scanMode) { - if (scanMode < SCAN_MODE_LOW_POWER || scanMode > SCAN_MODE_LOW_LATENCY) { + if (scanMode < SCAN_MODE_OPPORTUNISTIC || scanMode > SCAN_MODE_LOW_LATENCY) { throw new IllegalArgumentException("invalid scan mode " + scanMode); } mScanMode = scanMode; diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 34a0727..a0e2bf8 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -2337,7 +2337,7 @@ public class ConnectivityManager { * successfully finding a network for the applications request. Retrieve it with * {@link android.content.Intent#getParcelableExtra(String)}. * <p> - * Note that if you intend to invoke (@link #setProcessDefaultNetwork(Network)) or + * Note that if you intend to invoke {@link #setProcessDefaultNetwork} or * {@link Network#openConnection(java.net.URL)} then you must get a * ConnectivityManager instance before doing so. */ diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index a7f9c5b..8c8bfab 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -148,9 +148,9 @@ public final class NetworkCapabilities implements Parcelable { */ public static final int NET_CAPABILITY_TRUSTED = 14; - /* + /** * Indicates that this network is not a VPN. This capability is set by default and should be - * explicitly cleared when creating VPN networks. + * explicitly cleared for VPN networks. */ public static final int NET_CAPABILITY_NOT_VPN = 15; diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 59ec058..ad34f02 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -723,6 +723,12 @@ public class TextureView extends View { mSurface.release(); } mSurface = surfaceTexture; + + // If the view is visible, update the listener in the new surface to use + // the existing listener in the view. + if (((mViewFlags & VISIBILITY_MASK) == VISIBLE)) { + mSurface.setOnFrameAvailableListener(mUpdateListener, mAttachInfo.mHandler); + } mUpdateSurface = true; invalidateParentIfNeeded(); } diff --git a/core/java/com/android/internal/util/Protocol.java b/core/java/com/android/internal/util/Protocol.java index d9ebc25..a106f48 100644 --- a/core/java/com/android/internal/util/Protocol.java +++ b/core/java/com/android/internal/util/Protocol.java @@ -52,6 +52,7 @@ public class Protocol { public static final int BASE_WIFI_RTT_SERVICE = 0x00027300; public static final int BASE_WIFI_PASSPOINT_MANAGER = 0x00028000; public static final int BASE_WIFI_PASSPOINT_SERVICE = 0x00028100; + public static final int BASE_WIFI_LOGGER = 0x00028300; public static final int BASE_DHCP = 0x00030000; public static final int BASE_DATA_CONNECTION = 0x00040000; public static final int BASE_DATA_CONNECTION_AC = 0x00041000; diff --git a/core/res/res/values-mcc310-mnc260/strings.xml b/core/res/res/values-mcc310-mnc260/strings.xml index 5cadc2a..75b1b53 100644 --- a/core/res/res/values-mcc310-mnc260/strings.xml +++ b/core/res/res/values-mcc310-mnc260/strings.xml @@ -29,4 +29,6 @@ <string-array name="wfcOperatorErrorMessages"> <item>Wi-Fi Calling isn\'t available. Contact your carrier to enable Wi-Fi Calling.</item> </string-array> + <!-- Template for showing cellular network operator name while WFC is active --> + <string name="wfcSpnFormat">%s Wi-Fi Calling</string> </resources> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 37c9598..1b2e952 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1112,6 +1112,18 @@ device does not support multiple advertisement--> <integer translatable="false" name="config_bluetooth_max_advertisers">0</integer> + <!-- Idle current for bluetooth controller. 0 by default--> + <integer translatable="false" name="config_bluetooth_idle_cur_ma">1</integer> + + <!-- Rx current for bluetooth controller. 0 by default--> + <integer translatable="false" name="config_bluetooth_rx_cur_ma">2</integer> + + <!-- Tx current for bluetooth controller. 0 by default--> + <integer translatable="false" name="config_bluetooth_tx_cur_ma">3</integer> + + <!-- Operating volatage for bluetooth controller. 0 by default--> + <integer translatable="false" name="config_bluetooth_operating_voltage_mv">4</integer> + <!-- The default data-use polling period. --> <integer name="config_datause_polling_period_sec">600</integer> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 7672e93..5576f2f 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -251,6 +251,8 @@ <string-array name="wfcOperatorErrorCodes" translatable="false" /> <!-- WFC Operator Error Messages --> <string-array name="wfcOperatorErrorMessages" /> + <!-- Template for showing cellular network operator name while WFC is active --> + <string name="wfcSpnFormat">%s</string> <!-- {0} is one of "bearerServiceCode*" diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index c4e9e8e..7a487e0 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -349,6 +349,10 @@ <java-symbol type="integer" name="config_burnInProtectionMinVerticalOffset" /> <java-symbol type="integer" name="config_burnInProtectionMaxVerticalOffset" /> <java-symbol type="integer" name="config_burnInProtectionMaxRadius" /> + <java-symbol type="integer" name="config_bluetooth_idle_cur_ma" /> + <java-symbol type="integer" name="config_bluetooth_rx_cur_ma" /> + <java-symbol type="integer" name="config_bluetooth_tx_cur_ma" /> + <java-symbol type="integer" name="config_bluetooth_operating_voltage_mv" /> <java-symbol type="integer" name="config_cursorWindowSize" /> <java-symbol type="integer" name="config_drawLockTimeoutMillis" /> <java-symbol type="integer" name="config_doublePressOnPowerBehavior" /> @@ -756,6 +760,7 @@ <java-symbol type="string" name="wfcRegErrorTitle" /> <java-symbol type="array" name="wfcOperatorErrorCodes" /> <java-symbol type="array" name="wfcOperatorErrorMessages" /> + <java-symbol type="string" name="wfcSpnFormat" /> <java-symbol type="string" name="policydesc_disableCamera" /> <java-symbol type="string" name="policydesc_encryptedStorage" /> <java-symbol type="string" name="policydesc_expirePassword" /> diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 22b7bb1..6fa653d 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -223,7 +223,7 @@ public final class Call { //********************************************************************************************** // Next CAPABILITY value: 0x00080000 - //********************************************************************************************** + //****************************************************************************************** private final Uri mHandle; private final int mHandlePresentation; @@ -323,7 +323,7 @@ public final class Call { builder.append(" CAPABILITY_SHOW_CALLBACK_NUMBER"); } if (can(capabilities, CAPABILITY_SPEED_UP_MT_AUDIO)) { - builder.append(" CAPABILITY_SPEED_UP_IMS_MT_AUDIO"); + builder.append(" CAPABILITY_SPEED_UP_MT_AUDIO"); } builder.append("]"); return builder.toString(); diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index a335e47..082474b 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -171,7 +171,7 @@ public abstract class Connection implements IConferenceable { * Connection is using WIFI. * @hide */ - public static final int CAPABILITY_WIFI = 0x000010000; + public static final int CAPABILITY_WIFI = 0x00010000; /** * Indicates that the current device callback number should be shown. @@ -292,7 +292,7 @@ public abstract class Connection implements IConferenceable { builder.append(" CAPABILITY_SHOW_CALLBACK_NUMBER"); } if (can(capabilities, CAPABILITY_SPEED_UP_MT_AUDIO)) { - builder.append(" CAPABILITY_SPEED_UP_IMS_MT_AUDIO"); + builder.append(" CAPABILITY_SPEED_UP_MT_AUDIO"); } builder.append("]"); return builder.toString(); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index b44fa6c..386b6aa 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -4057,6 +4057,34 @@ public class TelephonyManager { } /** + * Returns the Status of Volte + *@hide + */ + public boolean isVolteEnabled() { + try { + return getITelephony().isVolteEnabled(); + } catch (RemoteException ex) { + return false; + } catch (NullPointerException ex) { + return false; + } + } + + /** + * Returns the Status of Wi-Fi Calling + *@hide + */ + public boolean isWifiCallingEnabled() { + try { + return getITelephony().isWifiCallingEnabled(); + } catch (RemoteException ex) { + return false; + } catch (NullPointerException ex) { + return false; + } + } + + /** * Set TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC for the default phone. * * @hide diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index f9e15f3..c18e3b6 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -901,6 +901,18 @@ interface ITelephony { boolean isImsRegistered(); /** + * Returns the Status of Wi-Fi Calling + *@hide + */ + boolean isWifiCallingEnabled(); + + /** + * Returns the Status of Volte + *@hide + */ + boolean isVolteEnabled(); + + /** * Returns the unique device ID of phone, for example, the IMEI for * GSM and the MEID for CDMA phones. Return null if device ID is not available. * diff --git a/wifi/java/android/net/wifi/IRttManager.aidl b/wifi/java/android/net/wifi/IRttManager.aidl index d929f55..90f66c4 100644 --- a/wifi/java/android/net/wifi/IRttManager.aidl +++ b/wifi/java/android/net/wifi/IRttManager.aidl @@ -15,8 +15,8 @@ */ package android.net.wifi; - import android.os.Messenger; +import android.net.wifi.RttManager; /** * {@hide} @@ -24,4 +24,5 @@ import android.os.Messenger; interface IRttManager { Messenger getMessenger(); + RttManager.RttCapabilities getRttCapabilities(); } diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index bc95a36..5342494 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -155,6 +155,10 @@ interface IWifiManager void setAllowScansWithTraffic(int enabled); + boolean getAllowScansWhileAssociated(); + + void setAllowScansWhileAssociated(boolean enabled); + WifiConnectionStatistics getConnectionStatistics(); void disableEphemeralNetwork(String SSID); diff --git a/wifi/java/android/net/wifi/RttManager.aidl b/wifi/java/android/net/wifi/RttManager.aidl new file mode 100644 index 0000000..5c6d447 --- /dev/null +++ b/wifi/java/android/net/wifi/RttManager.aidl @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi; +parcelable RttManager.RttCapabilities;
\ No newline at end of file diff --git a/wifi/java/android/net/wifi/RttManager.java b/wifi/java/android/net/wifi/RttManager.java index 57343c5..65ecf5d 100644 --- a/wifi/java/android/net/wifi/RttManager.java +++ b/wifi/java/android/net/wifi/RttManager.java @@ -26,10 +26,19 @@ public class RttManager { private static final boolean DBG = true; private static final String TAG = "RttManager"; - public static final int RTT_TYPE_UNSPECIFIED = 0; - public static final int RTT_TYPE_ONE_SIDED = 1; - public static final int RTT_TYPE_11_V = 2; - public static final int RTT_TYPE_11_MC = 4; + /** @deprecated Type must be specified*/ + @Deprecated + public static final int RTT_TYPE_UNSPECIFIED = 0; + public static final int RTT_TYPE_ONE_SIDED = 1; + + /** @deprecated It is not supported*/ + @Deprecated + public static final int RTT_TYPE_11_V = 2; + public static final int RTT_TYPE_TWO_SIDED = 4; + + /** @deprecated It is not supported*/ + @Deprecated + public static final int RTT_TYPE_11_MC = 4; public static final int RTT_PEER_TYPE_UNSPECIFIED = 0; public static final int RTT_PEER_TYPE_AP = 1; @@ -42,6 +51,9 @@ public class RttManager { public static final int RTT_CHANNEL_WIDTH_80P80 = 4; public static final int RTT_CHANNEL_WIDTH_5 = 5; public static final int RTT_CHANNEL_WIDTH_10 = 6; + + /** @deprecated channel info must be specified*/ + @Deprecated public static final int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; public static final int RTT_STATUS_SUCCESS = 0; @@ -53,6 +65,12 @@ public class RttManager { public static final int RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6; public static final int RTT_STATUS_FAIL_NO_CAPABILITY = 7; public static final int RTT_STATUS_ABORTED = 8; + //if the T1-T4 or TOD/TOA Timestamp is illegal + public static final int RTT_STATUS_FAIL_INVALID_TS = 9; + //11mc protocol failed, eg, unrecognized FTMR/FTM + public static final int RTT_STATUS_FAIL_PROTOCOL = 10; + public static final int RTT_STATUS_FAIL_SCHEDULE = 11; + public static final int RTT_STATUS_FAIL_BUSY_TRY_LATER = 12; public static final int REASON_UNSPECIFIED = -1; public static final int REASON_NOT_AVAILABLE = -2; @@ -61,41 +79,269 @@ public class RttManager { public static final String DESCRIPTION_KEY = "android.net.wifi.RttManager.Description"; + /** + * RTT BW supported bit mask + */ + public static final int RTT_BW_5_SUPPORT = 0x1; + public static final int RTT_BW_10_SUPPORT = 0x2; + public static final int RTT_BW_20_SUPPORT = 0x4; + public static final int RTT_BW_40_SUPPORT = 0x8; + public static final int RTT_BW_80_SUPPORT = 0x10; + public static final int RTT_BW_160_SUPPORT = 0x20; + + /** + * RTT Preamble Support bit mask + */ + public static final int PREAMBLE_LEGACY = 0x1; + public static final int PREAMBLE_HT = 0x2; + public static final int PREAMBLE_VHT = 0x4; + + /** @deprecated It has been replaced by RttCapabilities*/ + @Deprecated public class Capabilities { public int supportedType; public int supportedPeerType; } + /** @deprecated It has been replaced by getRttCapabilities*/ + @Deprecated public Capabilities getCapabilities() { return new Capabilities(); } + /** + * This class describe the RTT capability of the Hardware + */ + public static class RttCapabilities implements Parcelable { + /** @deprecated It is not supported*/ + @Deprecated + public boolean supportedType; + /** @deprecated It is not supported*/ + @Deprecated + public boolean supportedPeerType; + //1-sided rtt measurement is supported + public boolean oneSidedRttSupported; + //11mc 2-sided rtt measurement is supported + public boolean twoSided11McRttSupported; + //location configuration information supported + public boolean lciSupported; + //location civic records supported + public boolean lcrSupported; + //preamble supported, see bit mask definition above + public int preambleSupported; + //RTT bandwidth supported + public int bwSupported; + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("oneSidedRtt "). + append(oneSidedRttSupported ? "is Supported. " : "is not supported. "). + append("twoSided11McRtt "). + append(twoSided11McRttSupported ? "is Supported. " : "is not supported. "). + append("lci "). + append(lciSupported ? "is Supported. " : "is not supported. "). + append("lcr "). + append(lcrSupported ? "is Supported. " : "is not supported. "); + + if ((preambleSupported & PREAMBLE_LEGACY) != 0) { + sb.append("Legacy "); + } + + if ((preambleSupported & PREAMBLE_HT) != 0) { + sb.append("HT "); + } + + if ((preambleSupported & PREAMBLE_VHT) != 0) { + sb.append("VHT "); + } + + sb.append("is supported. \n"); + + if ((bwSupported & RTT_BW_5_SUPPORT) != 0) { + sb.append("5 MHz "); + } + + if ((bwSupported & RTT_BW_10_SUPPORT) != 0) { + sb.append("10 MHz "); + } + + if ((bwSupported & RTT_BW_20_SUPPORT) != 0) { + sb.append("20 MHz "); + } + + if ((bwSupported & RTT_BW_40_SUPPORT) != 0) { + sb.append("40 MHz "); + } + + if ((bwSupported & RTT_BW_80_SUPPORT) != 0) { + sb.append("80 MHz "); + } + + if ((bwSupported & RTT_BW_160_SUPPORT) != 0) { + sb.append("160 MHz "); + } + + sb.append("is supported."); + + return sb.toString(); + } + /** Implement the Parcelable interface {@hide} */ + @Override + public int describeContents() { + return 0; + } + + /** Implement the Parcelable interface {@hide} */ + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(oneSidedRttSupported ? 1 : 0); + dest.writeInt(twoSided11McRttSupported ? 1 : 0); + dest.writeInt(lciSupported ? 1 : 0); + dest.writeInt(lcrSupported ? 1 : 0); + dest.writeInt(preambleSupported); + dest.writeInt(bwSupported); + + } + + /** Implement the Parcelable interface {@hide} */ + public static final Creator<RttCapabilities> CREATOR = + new Creator<RttCapabilities>() { + public RttCapabilities createFromParcel(Parcel in) { + RttCapabilities capabilities = new RttCapabilities(); + capabilities.oneSidedRttSupported = in.readInt() == 1 ? true : false; + capabilities.twoSided11McRttSupported = in.readInt() == 1 ? true : false; + capabilities.lciSupported = in.readInt() == 1 ? true : false; + capabilities.lcrSupported = in.readInt() == 1 ? true : false; + capabilities.preambleSupported = in.readInt(); + capabilities.bwSupported = in.readInt(); + return capabilities; + } + /** Implement the Parcelable interface {@hide} */ + @Override + public RttCapabilities[] newArray(int size) { + return new RttCapabilities[size]; + } + }; + } + + public RttCapabilities getRttCapabilities() { + synchronized (sCapabilitiesLock) { + if (mRttCapabilities == null) { + try { + mRttCapabilities = mService.getRttCapabilities(); + } catch (RemoteException e) { + Log.e(TAG, "Can not get RTT Capabilities"); + } + } + return mRttCapabilities; + } + } + /** specifies parameters for RTT request */ public static class RttParams { - - /** type of device being ranged; one of RTT_PEER_TYPE_AP or RTT_PEER_TYPE_STA */ + /** + * type of destination device being ranged; one of RTT_PEER_TYPE_AP or RTT_PEER_TYPE_STA + */ public int deviceType; - /** type of RTT being sought; one of RTT_TYPE_ONE_SIDED - * RTT_TYPE_11_V or RTT_TYPE_11_MC or RTT_TYPE_UNSPECIFIED */ + /** + * type of RTT measurement method; one of RTT_TYPE_ONE_SIDED or RTT_TYPE_TWO_SIDED. + */ public int requestType; /** mac address of the device being ranged */ public String bssid; - /** channel frequency that the device is on; optional */ + /** + * The primary 20 MHz frequency (in MHz) of the channel over which the client is + * communicating with the access point.Similar as ScanResult.frequency + */ public int frequency; - /** optional channel width. wider channels result in better accuracy, - * but they take longer time, and even get aborted may times; use - * RTT_CHANNEL_WIDTH_UNSPECIFIED if not specifying */ + /** + * channel width used for RTT measurement. User need verify the highest BW the destination + * support (from scan result etc) before set this value. Wider channels result usually give + * better accuracy. However, the frame loss can increase. Similar as ScanResult.channelWidth + */ public int channelWidth; - /** number of samples to be taken */ + /** + * Not used if the AP bandwidth is 20 MHz + * If the AP use 40, 80 or 160 MHz, this is the center frequency + * if the AP use 80 + 80 MHz, this is the center frequency of the first segment + * similar as ScanResult.centerFreq0 + */ + public int centerFreq0; + + /** + * Only used if the AP bandwidth is 80 + 80 MHz + * if the AP use 80 + 80 MHz, this is the center frequency of the second segment + * similar as ScanResult.centerFreq1 + */ + public int centerFreq1; + /** + * number of samples to be taken + * @deprecated It has been replaced by numSamplesPerBurst + */ + @Deprecated public int num_samples; - /** number of retries if a sample fails */ + /** + * number of retries if a sample fails + * @deprecated It has been replaced by numRetriesPerMeasurementFrame + */ + @Deprecated public int num_retries; + + /** Number of burst. fixed to 1 for single side RTT*/ + public int numberBurst; + + /** valid only if numberBurst > 1, interval between burst(ms). Not used by singe side RTT */ + public int interval; + + /** number of samples to be taken in one burst*/ + public int numSamplesPerBurst; + + /** number of retries for each measurement frame if a sample fails + * Only used by single side RTT + */ + public int numRetriesPerMeasurementFrame; + + /** number of retries for FTMR frame if fails Only used by 80211MC double side RTT */ + public int numRetriesPerFTMR; + + /** Request LCI information */ + public boolean LCIRequest; + + /** Request LCR information */ + public boolean LCRRequest; + + /** Timeout for each burst, unit of 250 us*/ + public int burstTimeout; + + /** preamble used for RTT measurement + * should be one of PREAMBLE_LEGACY, PREAMBLE_HT, PREAMBLE_VHT + */ + public int preamble; + + /** bandWidth used for RTT measurement.User need verify the highest BW the destination + * support (from scan result etc) before set this value. Wider channels result usually give + * better accuracy. However, the frame loss can increase too. + * should be one of RTT_CHANNEL_WIDTH_20 to RTT_CHANNEL_WIDTH_80 + */ + public int bandwidth; + + public RttParams() { + //provide initial value for RttParams + deviceType = RTT_PEER_TYPE_AP; + numberBurst = 1; + numSamplesPerBurst = 8; + numRetriesPerMeasurementFrame = 0; + burstTimeout = 40 + numSamplesPerBurst *4; + preamble = PREAMBLE_LEGACY; + bandwidth = RTT_CHANNEL_WIDTH_20; + } } /** pseudo-private class used to parcel arguments */ @@ -121,10 +367,20 @@ public class RttManager { dest.writeInt(params.deviceType); dest.writeInt(params.requestType); dest.writeString(params.bssid); - dest.writeInt(params.frequency); dest.writeInt(params.channelWidth); - dest.writeInt(params.num_samples); - dest.writeInt(params.num_retries); + dest.writeInt(params.frequency); + dest.writeInt(params.centerFreq0); + dest.writeInt(params.centerFreq1); + dest.writeInt(params.numberBurst); + dest.writeInt(params.interval); + dest.writeInt(params.numSamplesPerBurst); + dest.writeInt(params.numRetriesPerMeasurementFrame); + dest.writeInt(params.numRetriesPerFTMR); + dest.writeInt(params.LCIRequest ? 1 : 0); + dest.writeInt(params.LCRRequest ? 1 : 0); + dest.writeInt(params.burstTimeout); + dest.writeInt(params.preamble); + dest.writeInt(params.bandwidth); } } else { dest.writeInt(0); @@ -148,11 +404,20 @@ public class RttManager { params[i].deviceType = in.readInt(); params[i].requestType = in.readInt(); params[i].bssid = in.readString(); - params[i].frequency = in.readInt(); params[i].channelWidth = in.readInt(); - params[i].num_samples = in.readInt(); - params[i].num_retries = in.readInt(); - + params[i].frequency = in.readInt(); + params[i].centerFreq0 = in.readInt(); + params[i].centerFreq1 = in.readInt(); + params[i].numberBurst = in.readInt(); + params[i].interval = in.readInt(); + params[i].numSamplesPerBurst = in.readInt(); + params[i].numRetriesPerMeasurementFrame = in.readInt(); + params[i].numRetriesPerFTMR = in.readInt(); + params[i].LCIRequest = in.readInt() == 1 ? true : false; + params[i].LCRRequest = in.readInt() == 1 ? true : false; + params[i].burstTimeout = in.readInt(); + params[i].preamble = in.readInt(); + params[i].bandwidth = in.readInt(); } ParcelableRttParams parcelableParams = new ParcelableRttParams(params); @@ -165,46 +430,143 @@ public class RttManager { }; } + public class wifiInformationElement { + /** Information Element ID*/ + public int id; + public String data; + } /** specifies RTT results */ public static class RttResult { /** mac address of the device being ranged */ public String bssid; + /** # of burst for this measurement*/ + public int burstNumber; + + /** total number of measurement frames in this measurement*/ + public int measurementFrameNumber; + + /** total successful number of measurement frames in this measurement*/ + public int successMeasurementFrameNumber; + + /** Maximum number of frames per burst supported by peer */ + public int frameNumberPerBurstPeer; + /** status of the request */ public int status; - /** type of the request used */ + /** + * type of the request used + * @deprecated It has been replaced by measurementType + */ + @Deprecated public int requestType; + /** RTT measurement method type used, shoudl be one of RTT_TYPE_ONE_SIDED or + * RTT_TYPE_TWO_SIDED. + */ + public int measurementType; + + /** please retry RTT measurement after this S since peer indicate busy at ths moment*/ + public int retryAfterDuration; + /** timestamp of completion, in microsecond since boot */ public long ts; - /** average RSSI observed */ + /** average RSSI observed, unit of 0.5 dB */ public int rssi; - /** RSSI spread (i.e. max - min) */ + /** + * RSSI spread (i.e. max - min) + * @deprecated It has been replaced by rssi_spread + */ + @Deprecated public int rssi_spread; - /** average transmit rate */ + /**RSSI spread (i.e. max - min), unit of 0.5 dB */ + public int rssiSpread; + + /** + * average transmit rate + * @deprecated It has been replaced by txRate + */ + @Deprecated public int tx_rate; - /** average round trip time in nano second */ + /** average transmit rate */ + public int txRate; + + /** average receiving rate */ + public int rxRate; + + /** + * average round trip time in nano second + * @deprecated It has been replaced by rtt + */ + @Deprecated public long rtt_ns; - /** standard deviation observed in round trip time */ + /** average round trip time in 0.1 nano second */ + public long rtt; + + /** + * standard deviation observed in round trip time + * @deprecated It has been replaced by rttStandardDeviation + */ + @Deprecated public long rtt_sd_ns; - /** spread (i.e. max - min) round trip time */ + /** standard deviation of RTT in 0.1 ns */ + public long rttStandardDeviation; + + /** + * spread (i.e. max - min) round trip time + * @deprecated It has been replaced by rttSpread + */ + @Deprecated public long rtt_spread_ns; - /** average distance in centimeter, computed based on rtt_ns */ + /** spread (i.e. max - min) RTT in 0.1 ns */ + public long rttSpread; + + /** + * average distance in centimeter, computed based on rtt_ns + * @deprecated It has been replaced by distance + */ + @Deprecated public int distance_cm; - /** standard deviation observed in distance */ + /** average distance in cm, computed based on rtt */ + public int distance; + + /** + * standard deviation observed in distance + * @deprecated It has been replaced with distanceStandardDeviation + */ + @Deprecated public int distance_sd_cm; - /** spread (i.e. max - min) distance */ + /** standard deviation observed in distance in cm*/ + public int distanceStandardDeviation; + + /** + * spread (i.e. max - min) distance + * @deprecated It has been replaced by distanceSpread + */ + @Deprecated public int distance_spread_cm; + + /** spread (i.e. max - min) distance in cm */ + public int distanceSpread; + + /** the duration of this measurement burst*/ + public int burstDuration; + + /** LCI information Element*/ + wifiInformationElement LCI; + + /** LCR information Element*/ + wifiInformationElement LCR; } @@ -228,18 +590,28 @@ public class RttManager { dest.writeInt(mResults.length); for (RttResult result : mResults) { dest.writeString(result.bssid); + dest.writeInt(result.burstNumber); + dest.writeInt(result.measurementFrameNumber); + dest.writeInt(result.successMeasurementFrameNumber); + dest.writeInt(result.frameNumberPerBurstPeer); dest.writeInt(result.status); - dest.writeInt(result.requestType); + dest.writeInt(result.measurementType); + dest.writeInt(result.retryAfterDuration); dest.writeLong(result.ts); dest.writeInt(result.rssi); - dest.writeInt(result.rssi_spread); - dest.writeInt(result.tx_rate); - dest.writeLong(result.rtt_ns); - dest.writeLong(result.rtt_sd_ns); - dest.writeLong(result.rtt_spread_ns); - dest.writeInt(result.distance_cm); - dest.writeInt(result.distance_sd_cm); - dest.writeInt(result.distance_spread_cm); + dest.writeInt(result.rssiSpread); + dest.writeInt(result.txRate); + dest.writeLong(result.rtt); + dest.writeLong(result.rttStandardDeviation); + dest.writeLong(result.rttSpread); + dest.writeInt(result.distance); + dest.writeInt(result.distanceStandardDeviation); + dest.writeInt(result.distanceSpread); + dest.writeInt(result.burstDuration); + //dest.writeInt(result.LCI.id); + //dest.writeString(result.LCI.data); + //dest.writeInt(result.LCR.id); + //dest.writeString(result.LCR.data); } } else { dest.writeInt(0); @@ -261,18 +633,28 @@ public class RttManager { for (int i = 0; i < num; i++) { results[i] = new RttResult(); results[i].bssid = in.readString(); + results[i].burstNumber = in.readInt(); + results[i].measurementFrameNumber = in.readInt(); + results[i].successMeasurementFrameNumber = in.readInt(); + results[i].frameNumberPerBurstPeer = in.readInt(); results[i].status = in.readInt(); - results[i].requestType = in.readInt(); + results[i].measurementType = in.readInt(); + results[i].retryAfterDuration = in.readInt(); results[i].ts = in.readLong(); results[i].rssi = in.readInt(); - results[i].rssi_spread = in.readInt(); - results[i].tx_rate = in.readInt(); - results[i].rtt_ns = in.readLong(); - results[i].rtt_sd_ns = in.readLong(); - results[i].rtt_spread_ns = in.readLong(); - results[i].distance_cm = in.readInt(); - results[i].distance_sd_cm = in.readInt(); - results[i].distance_spread_cm = in.readInt(); + results[i].rssiSpread = in.readInt(); + results[i].txRate = in.readInt(); + results[i].rtt = in.readLong(); + results[i].rttStandardDeviation = in.readLong(); + results[i].rttSpread = in.readLong(); + results[i].distance = in.readInt(); + results[i].distanceStandardDeviation = in.readInt(); + results[i].distanceSpread = in.readInt(); + results[i].burstDuration = in.readInt(); + //results[i].LCI.id = in.readInt(); + //results[i].LCI.data = in.readString(); + //results[i].LCR.id = in.readInt(); + //results[i].LCR.data = in.readString(); } ParcelableRttResults parcelableResults = new ParcelableRttResults(results); @@ -292,7 +674,70 @@ public class RttManager { public void onAborted(); } + private boolean rttParamSanity(RttParams params, int index) { + if (mRttCapabilities == null) { + if(getRttCapabilities() == null) { + Log.e(TAG, "Can not get RTT capabilities"); + //throw new IllegalStateException("RTT chip is not working"); + } + } + + if (params.deviceType != RTT_PEER_TYPE_AP) { + return false; + } else if (params.requestType != RTT_TYPE_ONE_SIDED && params.requestType != + RTT_TYPE_TWO_SIDED) { + Log.e(TAG, "Request " + index + ": Illegal Request Type: " + params.requestType); + return false; + } else if (params.requestType == RTT_TYPE_ONE_SIDED && + !mRttCapabilities.oneSidedRttSupported) { + Log.e(TAG, "Request " + index + ": One side RTT is not supported"); + return false; + } else if (params.requestType == RTT_TYPE_TWO_SIDED && + !mRttCapabilities.twoSided11McRttSupported) { + Log.e(TAG, "Request " + index + ": two side RTT is not supported"); + return false; + } else if ( params.numberBurst <= 0 ) { + Log.e(TAG, "Request " + index + ": Illegal number of burst: " + params.numberBurst); + return false; + } else if (params.numberBurst > 1 && params.interval <= 0) { + Log.e(TAG, "Request " + index + ": Illegal interval value: " + params.interval); + return false; + } else if (params.numSamplesPerBurst <= 0) { + Log.e(TAG, "Request " + index + ": Illegal sample number per burst: " + + params.numSamplesPerBurst); + return false; + } else if (params.numRetriesPerMeasurementFrame < 0 || params.numRetriesPerFTMR < 0) { + Log.e(TAG, "Request " + index + ": Illegal retry number"); + return false; + } else if (params.LCIRequest && !mRttCapabilities.lciSupported) { + Log.e(TAG, "Request " + index + ": LCI is not supported"); + return false; + } else if (params.LCRRequest && !mRttCapabilities.lcrSupported) { + Log.e(TAG, "Request " + index + ": LCR is not supported"); + return false; + } else if (params.burstTimeout <= 0){ + Log.e(TAG, "Request " + index + ": Illegal burst timeout: " + params.burstTimeout); + return false; + } else if ((params.preamble & mRttCapabilities.preambleSupported) == 0) { + Log.e(TAG, "Request " + index + ": Do not support this preamble: " + params.preamble); + return false; + } else if ((params.bandwidth & mRttCapabilities.bwSupported) == 0) { + Log.e(TAG, "Request " + index + ": Do not support this bandwidth: " + params.bandwidth); + return false; + } + + return true; + } + public void startRanging(RttParams[] params, RttListener listener) { + int index = 0; + for(RttParams rttParam : params) { + if (!rttParamSanity(rttParam, index)) { + throw new IllegalArgumentException("RTT Request Parameter Illegal"); + } + index++; + } + validateChannel(); ParcelableRttParams parcelableParams = new ParcelableRttParams(params); sAsyncChannel.sendMessage(CMD_OP_START_RANGING, @@ -315,12 +760,14 @@ public class RttManager { private Context mContext; private IRttManager mService; + private RttCapabilities mRttCapabilities; private static final int INVALID_KEY = 0; private static int sListenerKey = 1; private static final SparseArray sListenerMap = new SparseArray(); private static final Object sListenerMapLock = new Object(); + private static final Object sCapabilitiesLock = new Object(); private static AsyncChannel sAsyncChannel; private static CountDownLatch sConnected; diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java index b4f4927..e8a51e3 100644 --- a/wifi/java/android/net/wifi/ScanResult.java +++ b/wifi/java/android/net/wifi/ScanResult.java @@ -16,8 +16,6 @@ package android.net.wifi; -import android.net.wifi.passpoint.WifiPasspointInfo; -import android.net.wifi.passpoint.WifiPasspointManager; import android.os.Parcel; import android.os.Parcelable; @@ -215,11 +213,19 @@ public class ScanResult implements Parcelable { public int distanceSdCm; /** - * Passpoint ANQP information. This is not fetched automatically. - * Use {@link WifiPasspointManager#requestAnqpInfo} to request ANQP info. - * {@hide} + * Indicates if the scan result represents a passpoint AP + */ + public boolean passpointNetwork; + + /** + * Indicates if venue name + */ + public String venueName; + + /** + * Indicates operator name */ - public WifiPasspointInfo passpoint; + public String operatorFriendlyName; /** * {@hide} @@ -292,6 +298,7 @@ public class ScanResult implements Parcelable { this.centerFreq0 = UNSPECIFIED; this.centerFreq1 = UNSPECIFIED; this.is80211McRTTResponder = false; + this.passpointNetwork = false; } /** {@hide} */ @@ -310,6 +317,7 @@ public class ScanResult implements Parcelable { this.centerFreq0 = UNSPECIFIED; this.centerFreq1 = UNSPECIFIED; this.is80211McRTTResponder = false; + this.passpointNetwork = false; } /** {@hide} */ @@ -329,6 +337,7 @@ public class ScanResult implements Parcelable { this.centerFreq0 = centerFreq0; this.centerFreq1 = centerFreq1; this.is80211McRTTResponder = is80211McRTTResponder; + this.passpointNetwork = false; } /** copy constructor {@hide} */ @@ -348,13 +357,15 @@ public class ScanResult implements Parcelable { distanceCm = source.distanceCm; distanceSdCm = source.distanceSdCm; seen = source.seen; - passpoint = source.passpoint; autoJoinStatus = source.autoJoinStatus; untrusted = source.untrusted; numConnection = source.numConnection; numUsage = source.numUsage; numIpConfigFailures = source.numIpConfigFailures; isAutoJoinCandidate = source.isAutoJoinCandidate; + passpointNetwork = source.passpointNetwork; + venueName = source.venueName; + operatorFriendlyName = source.operatorFriendlyName; } } @@ -388,7 +399,7 @@ public class ScanResult implements Parcelable { sb.append(", distanceSd: ").append((distanceSdCm != UNSPECIFIED ? distanceSdCm : "?")). append("(cm)"); - sb.append(", passpoint: ").append(passpoint != null ? "yes" : "no"); + sb.append(", passpoint: ").append(passpointNetwork ? "yes" : "no"); if (autoJoinStatus != 0) { sb.append(", status: ").append(autoJoinStatus); } @@ -431,12 +442,10 @@ public class ScanResult implements Parcelable { dest.writeInt(numUsage); dest.writeInt(numIpConfigFailures); dest.writeInt(isAutoJoinCandidate); - if (passpoint != null) { - dest.writeInt(1); - passpoint.writeToParcel(dest, flags); - } else { - dest.writeInt(0); - } + dest.writeInt(passpointNetwork ? 1 : 0); + dest.writeString(venueName); + dest.writeString(operatorFriendlyName); + if (informationElements != null) { dest.writeInt(informationElements.length); for (int i = 0; i < informationElements.length; i++) { @@ -478,9 +487,9 @@ public class ScanResult implements Parcelable { sr.numUsage = in.readInt(); sr.numIpConfigFailures = in.readInt(); sr.isAutoJoinCandidate = in.readInt(); - if (in.readInt() == 1) { - sr.passpoint = WifiPasspointInfo.CREATOR.createFromParcel(in); - } + sr.passpointNetwork = in.readInt() == 1; + sr.venueName = in.readString(); + sr.operatorFriendlyName = in.readString(); int n = in.readInt(); if (n != 0) { sr.informationElements = new InformationElement[n]; diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 7e04f2b..11bdebb 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -973,13 +973,18 @@ public class WifiConfiguration implements Parcelable { } } - if (FQDN != null) { - /* must have a providerFriendlyName */ - if (providerFriendlyName == null) { + if (TextUtils.isEmpty(FQDN) == false) { + /* this is passpoint configuration; it must not have an SSID */ + if (TextUtils.isEmpty(SSID) == false) { + return false; + } + /* this is passpoint configuration; it must have a providerFriendlyName */ + if (TextUtils.isEmpty(providerFriendlyName)) { return false; } /* this is passpoint configuration; it must have enterprise config */ - if (enterpriseConfig == null) { + if (enterpriseConfig == null + || enterpriseConfig.getEapMethod() == WifiEnterpriseConfig.Eap.NONE ) { return false; } } @@ -989,6 +994,16 @@ public class WifiConfiguration implements Parcelable { } /** + * Identify if this configuration represents a passpoint network + */ + public boolean isPasspoint() { + return !TextUtils.isEmpty(FQDN) + && !TextUtils.isEmpty(providerFriendlyName) + && enterpriseConfig != null + && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE; + } + + /** * Helper function, identify if a configuration is linked * @hide */ diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index b292c22..e1460ef 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -2598,6 +2598,27 @@ public class WifiManager { } } + /** + * Set setting for allowing Scans when infrastructure is associated + * @hide + */ + public void setAllowScansWhileAssociated(boolean enabled) { + try { + mService.setAllowScansWhileAssociated(enabled); + } catch (RemoteException e) { + } + } + /** + * Get setting for allowing Scans when infrastructure is associated + * @hide + */ + public boolean getAllowScansWhileAssociated() { + try { + return mService.getAllowScansWhileAssociated(); + } catch (RemoteException e) { + } + return false; + } } diff --git a/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java b/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java index b9b17eb..0245a3d 100644 --- a/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java +++ b/wifi/java/android/net/wifi/passpoint/WifiPasspointManager.java @@ -262,7 +262,7 @@ public class WifiPasspointManager { for (ScanResult sr : mAnqpRequest) if (sr.BSSID.equals(result.bssid)) { Log.d(TAG, "find hit " + result.bssid); - sr.passpoint = result; + /* sr.passpoint = result; */ mAnqpRequest.remove(sr); Log.d(TAG, "mAnqpRequest.len=" + mAnqpRequest.size()); break; |