diff options
| -rw-r--r-- | api/current.txt | 51 | ||||
| -rw-r--r-- | api/system-current.txt | 46 | ||||
| -rw-r--r-- | core/java/android/content/Context.java | 1 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 2 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/rtt/RangingRequest.java | 8 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/rtt/RangingResult.java | 9 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/rtt/RangingResultCallback.java | 5 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/rtt/ResponderConfig.java | 10 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/rtt/WifiRttManager.java | 37 | ||||
| -rw-r--r-- | wifi/java/android/net/wifi/rtt/package.html | 2 |
10 files changed, 142 insertions, 29 deletions
diff --git a/api/current.txt b/api/current.txt index 009c56ddf128..581cb1a1a7b5 100644 --- a/api/current.txt +++ b/api/current.txt @@ -9340,6 +9340,7 @@ package android.content { field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper"; field public static final java.lang.String WIFI_AWARE_SERVICE = "wifiaware"; field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p"; + field public static final java.lang.String WIFI_RTT_RANGING_SERVICE = "wifirtt"; field public static final java.lang.String WIFI_SERVICE = "wifi"; field public static final java.lang.String WINDOW_SERVICE = "window"; } @@ -11122,6 +11123,7 @@ package android.content.pm { field public static final java.lang.String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware"; field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct"; field public static final java.lang.String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint"; + field public static final java.lang.String FEATURE_WIFI_RTT = "android.hardware.wifi.rtt"; field public static final int GET_ACTIVITIES = 1; // 0x1 field public static final int GET_CONFIGURATIONS = 16384; // 0x4000 field public static final deprecated int GET_DISABLED_COMPONENTS = 512; // 0x200 @@ -27788,6 +27790,55 @@ package android.net.wifi.p2p.nsd { } +package android.net.wifi.rtt { + + public final class RangingRequest implements android.os.Parcelable { + method public int describeContents(); + method public static int getMaxPeers(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingRequest> CREATOR; + } + + public static final class RangingRequest.Builder { + ctor public RangingRequest.Builder(); + method public android.net.wifi.rtt.RangingRequest.Builder addAccessPoint(android.net.wifi.ScanResult); + method public android.net.wifi.rtt.RangingRequest.Builder addAccessPoints(java.util.List<android.net.wifi.ScanResult>); + method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(android.net.MacAddress); + method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(android.net.wifi.aware.PeerHandle); + method public android.net.wifi.rtt.RangingRequest build(); + } + + public final class RangingResult implements android.os.Parcelable { + method public int describeContents(); + method public int getDistanceMm(); + method public int getDistanceStdDevMm(); + method public android.net.MacAddress getMacAddress(); + method public android.net.wifi.aware.PeerHandle getPeerHandle(); + method public long getRangingTimestampUs(); + method public int getRssi(); + method public int getStatus(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingResult> CREATOR; + field public static final int STATUS_FAIL = 1; // 0x1 + field public static final int STATUS_SUCCESS = 0; // 0x0 + } + + public abstract class RangingResultCallback { + ctor public RangingResultCallback(); + method public abstract void onRangingFailure(int); + method public abstract void onRangingResults(java.util.List<android.net.wifi.rtt.RangingResult>); + field public static final int STATUS_CODE_FAIL = 1; // 0x1 + field public static final int STATUS_CODE_FAIL_RTT_NOT_AVAILABLE = 2; // 0x2 + } + + public class WifiRttManager { + method public boolean isAvailable(); + method public void startRanging(android.net.wifi.rtt.RangingRequest, android.net.wifi.rtt.RangingResultCallback, android.os.Handler); + field public static final java.lang.String ACTION_WIFI_RTT_STATE_CHANGED = "android.net.wifi.rtt.action.WIFI_RTT_STATE_CHANGED"; + } + +} + package android.nfc { public class FormatException extends java.lang.Exception { diff --git a/api/system-current.txt b/api/system-current.txt index 7c047abf25cd..d9db73de936f 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3257,6 +3257,52 @@ package android.net.wifi.aware { } +package android.net.wifi.rtt { + + public static final class RangingRequest.Builder { + method public android.net.wifi.rtt.RangingRequest.Builder addResponder(android.net.wifi.rtt.ResponderConfig); + } + + public final class ResponderConfig implements android.os.Parcelable { + ctor public ResponderConfig(android.net.MacAddress, int, boolean, int, int, int, int, int); + ctor public ResponderConfig(android.net.wifi.aware.PeerHandle, int, boolean, int, int, int, int, int); + method public int describeContents(); + method public static android.net.wifi.rtt.ResponderConfig fromScanResult(android.net.wifi.ScanResult); + method public static android.net.wifi.rtt.ResponderConfig fromWifiAwarePeerHandleWithDefaults(android.net.wifi.aware.PeerHandle); + method public static android.net.wifi.rtt.ResponderConfig fromWifiAwarePeerMacAddressWithDefaults(android.net.MacAddress); + method public void writeToParcel(android.os.Parcel, int); + field public static final int CHANNEL_WIDTH_160MHZ = 3; // 0x3 + field public static final int CHANNEL_WIDTH_20MHZ = 0; // 0x0 + field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1 + field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2 + field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4 + field public static final android.os.Parcelable.Creator<android.net.wifi.rtt.ResponderConfig> CREATOR; + field public static final int PREAMBLE_HT = 1; // 0x1 + field public static final int PREAMBLE_LEGACY = 0; // 0x0 + field public static final int PREAMBLE_VHT = 2; // 0x2 + field public static final int RESPONDER_AP = 0; // 0x0 + field public static final int RESPONDER_AWARE = 4; // 0x4 + field public static final int RESPONDER_P2P_CLIENT = 3; // 0x3 + field public static final int RESPONDER_P2P_GO = 2; // 0x2 + field public static final int RESPONDER_STA = 1; // 0x1 + field public final int centerFreq0; + field public final int centerFreq1; + field public final int channelWidth; + field public final int frequency; + field public final android.net.MacAddress macAddress; + field public final android.net.wifi.aware.PeerHandle peerHandle; + field public final int preamble; + field public final int responderType; + field public final boolean supports80211mc; + } + + public class WifiRttManager { + method public void cancelRanging(android.os.WorkSource); + method public void startRanging(android.os.WorkSource, android.net.wifi.rtt.RangingRequest, android.net.wifi.rtt.RangingResultCallback, android.os.Handler); + } + +} + package android.nfc { public final class NfcAdapter { diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index c5c6aa2ecf53..ee8bfd169b5e 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -3530,7 +3530,6 @@ public abstract class Context { * * @see #getSystemService * @see android.net.wifi.rtt.WifiRttManager - * @hide */ public static final String WIFI_RTT_RANGING_SERVICE = "wifirtt"; diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 5f82c2a76a18..6cd4285f51e3 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2327,8 +2327,6 @@ public abstract class PackageManager { /** * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device supports Wi-Fi RTT (IEEE 802.11mc). - * - * @hide RTT_API */ @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_WIFI_RTT = "android.hardware.wifi.rtt"; diff --git a/wifi/java/android/net/wifi/rtt/RangingRequest.java b/wifi/java/android/net/wifi/rtt/RangingRequest.java index b4e3097a56a7..32f21b9cbc79 100644 --- a/wifi/java/android/net/wifi/rtt/RangingRequest.java +++ b/wifi/java/android/net/wifi/rtt/RangingRequest.java @@ -17,6 +17,7 @@ package android.net.wifi.rtt; import android.annotation.NonNull; +import android.annotation.SystemApi; import android.net.MacAddress; import android.net.wifi.ScanResult; import android.net.wifi.aware.AttachCallback; @@ -41,8 +42,6 @@ import java.util.StringJoiner; * The ranging request is a batch request - specifying a set of devices (specified using * {@link RangingRequest.Builder#addAccessPoint(ScanResult)} and * {@link RangingRequest.Builder#addAccessPoints(List)}). - * - * @hide RTT_API */ public final class RangingRequest implements Parcelable { private static final int MAX_PEERS = 10; @@ -198,7 +197,7 @@ public final class RangingRequest implements Parcelable { return addResponder(ResponderConfig.fromWifiAwarePeerHandleWithDefaults(peerHandle)); } - /* + /** * Add the Responder device specified by the {@link ResponderConfig} to the list of devices * with which to measure range. The total number of peers added to the request cannot exceed * the limit specified by {@link #getMaxPeers()}. @@ -206,8 +205,9 @@ public final class RangingRequest implements Parcelable { * @param responder Information on the RTT Responder. * @return The builder, to facilitate chaining {@code builder.setXXX(..).setXXX(..)}. * - * @hide (SystemApi) + * @hide */ + @SystemApi public Builder addResponder(@NonNull ResponderConfig responder) { if (responder == null) { throw new IllegalArgumentException("Null Responder!"); diff --git a/wifi/java/android/net/wifi/rtt/RangingResult.java b/wifi/java/android/net/wifi/rtt/RangingResult.java index a380fae7141a..d5ca8f7f9fb0 100644 --- a/wifi/java/android/net/wifi/rtt/RangingResult.java +++ b/wifi/java/android/net/wifi/rtt/RangingResult.java @@ -18,6 +18,7 @@ package android.net.wifi.rtt; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.Nullable; import android.net.MacAddress; import android.net.wifi.aware.PeerHandle; import android.os.Handler; @@ -36,8 +37,6 @@ import java.util.Objects; * <p> * A ranging result is the distance measurement result for a single device specified in the * {@link RangingRequest}. - * - * @hide RTT_API */ public final class RangingResult implements Parcelable { private static final String TAG = "RangingResult"; @@ -108,6 +107,7 @@ public final class RangingResult implements Parcelable { * Will return a {@code null} for results corresponding to requests issued using a {@code * PeerHandle}, i.e. using the {@link RangingRequest.Builder#addWifiAwarePeer(PeerHandle)} API. */ + @Nullable public MacAddress getMacAddress() { return mMac; } @@ -119,7 +119,7 @@ public final class RangingResult implements Parcelable { * <p> * Will return a {@code null} for results corresponding to requests issued using a MAC address. */ - public PeerHandle getPeerHandle() { + @Nullable public PeerHandle getPeerHandle() { return mPeerHandle; } @@ -182,13 +182,11 @@ public final class RangingResult implements Parcelable { return mTimestamp; } - /** @hide */ @Override public int describeContents() { return 0; } - /** @hide */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mStatus); @@ -210,7 +208,6 @@ public final class RangingResult implements Parcelable { dest.writeLong(mTimestamp); } - /** @hide */ public static final Creator<RangingResult> CREATOR = new Creator<RangingResult>() { @Override public RangingResult[] newArray(int size) { diff --git a/wifi/java/android/net/wifi/rtt/RangingResultCallback.java b/wifi/java/android/net/wifi/rtt/RangingResultCallback.java index c8aea3c4aa62..9639dc803a7d 100644 --- a/wifi/java/android/net/wifi/rtt/RangingResultCallback.java +++ b/wifi/java/android/net/wifi/rtt/RangingResultCallback.java @@ -17,6 +17,7 @@ package android.net.wifi.rtt; import android.annotation.IntDef; +import android.annotation.NonNull; import android.os.Handler; import java.lang.annotation.Retention; @@ -31,8 +32,6 @@ import java.util.List; * peers then the {@link #onRangingResults(List)} will be called with the set of results (@link * {@link RangingResult}, each of which has its own success/failure code * {@link RangingResult#getStatus()}. - * - * @hide RTT_API */ public abstract class RangingResultCallback { /** @hide */ @@ -68,5 +67,5 @@ public abstract class RangingResultCallback { * * @param results List of range measurements, one per requested device. */ - public abstract void onRangingResults(List<RangingResult> results); + public abstract void onRangingResults(@NonNull List<RangingResult> results); } diff --git a/wifi/java/android/net/wifi/rtt/ResponderConfig.java b/wifi/java/android/net/wifi/rtt/ResponderConfig.java index c3e10074c56c..fb723c594e15 100644 --- a/wifi/java/android/net/wifi/rtt/ResponderConfig.java +++ b/wifi/java/android/net/wifi/rtt/ResponderConfig.java @@ -18,6 +18,7 @@ package android.net.wifi.rtt; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.SystemApi; import android.net.MacAddress; import android.net.wifi.ScanResult; import android.net.wifi.aware.PeerHandle; @@ -35,8 +36,9 @@ import java.util.Objects; * A Responder configuration may be constructed from a {@link ScanResult} or manually (with the * data obtained out-of-band from a peer). * - * @hide (@SystemApi) + * @hide */ +@SystemApi public final class ResponderConfig implements Parcelable { private static final int AWARE_BAND_2_DISCOVERY_CHANNEL = 2437; @@ -290,7 +292,7 @@ public final class ResponderConfig implements Parcelable { MacAddress macAddress = MacAddress.fromString(scanResult.BSSID); int responderType = RESPONDER_AP; boolean supports80211mc = scanResult.is80211mcResponder(); - int channelWidth = translcateScanResultChannelWidth(scanResult.channelWidth); + int channelWidth = translateScanResultChannelWidth(scanResult.channelWidth); int frequency = scanResult.frequency; int centerFreq0 = scanResult.centerFreq0; int centerFreq1 = scanResult.centerFreq1; @@ -454,7 +456,7 @@ public final class ResponderConfig implements Parcelable { } /** @hide */ - static int translcateScanResultChannelWidth(int scanResultChannelWidth) { + static int translateScanResultChannelWidth(int scanResultChannelWidth) { switch (scanResultChannelWidth) { case ScanResult.CHANNEL_WIDTH_20MHZ: return CHANNEL_WIDTH_20MHZ; @@ -468,7 +470,7 @@ public final class ResponderConfig implements Parcelable { return CHANNEL_WIDTH_80MHZ_PLUS_MHZ; default: throw new IllegalArgumentException( - "translcateScanResultChannelWidth: bad " + scanResultChannelWidth); + "translateScanResultChannelWidth: bad " + scanResultChannelWidth); } } } diff --git a/wifi/java/android/net/wifi/rtt/WifiRttManager.java b/wifi/java/android/net/wifi/rtt/WifiRttManager.java index 240b3c1e3b51..ec6c46ec4a7d 100644 --- a/wifi/java/android/net/wifi/rtt/WifiRttManager.java +++ b/wifi/java/android/net/wifi/rtt/WifiRttManager.java @@ -1,3 +1,19 @@ +/* + * Copyright (C) 2018 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.rtt; import static android.Manifest.permission.ACCESS_COARSE_LOCATION; @@ -5,6 +21,7 @@ import static android.Manifest.permission.ACCESS_WIFI_STATE; import static android.Manifest.permission.CHANGE_WIFI_STATE; import static android.Manifest.permission.LOCATION_HARDWARE; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; @@ -38,8 +55,6 @@ import java.util.List; * changes in RTT usability register for the {@link #ACTION_WIFI_RTT_STATE_CHANGED} * broadcast. Note that this broadcast is not sticky - you should register for it and then * check the above API to avoid a race condition. - * - * @hide RTT_API */ @SystemService(Context.WIFI_RTT_RANGING_SERVICE) public class WifiRttManager { @@ -71,6 +86,8 @@ public class WifiRttManager { * Returns the current status of RTT API: whether or not RTT is available. To track * changes in the state of RTT API register for the * {@link #ACTION_WIFI_RTT_STATE_CHANGED} broadcast. + * <p>Note: availability of RTT does not mean that the app can use the API. The app's + * permissions and platform Location Mode are validated at run-time. * * @return A boolean indicating whether the app can use the RTT API at this time (true) or * not (false). @@ -95,8 +112,8 @@ public class WifiRttManager { * will be used. */ @RequiresPermission(allOf = {ACCESS_COARSE_LOCATION, CHANGE_WIFI_STATE, ACCESS_WIFI_STATE}) - public void startRanging(RangingRequest request, RangingResultCallback callback, - @Nullable Handler handler) { + public void startRanging(@NonNull RangingRequest request, + @NonNull RangingResultCallback callback, @Nullable Handler handler) { startRanging(null, request, callback, handler); } @@ -112,12 +129,13 @@ public class WifiRttManager { * callback} object. If a null is provided then the application's main thread * will be used. * - * @hide (@SystemApi) + * @hide */ + @SystemApi @RequiresPermission(allOf = {LOCATION_HARDWARE, ACCESS_COARSE_LOCATION, CHANGE_WIFI_STATE, ACCESS_WIFI_STATE}) - public void startRanging(@Nullable WorkSource workSource, RangingRequest request, - RangingResultCallback callback, @Nullable Handler handler) { + public void startRanging(@Nullable WorkSource workSource, @NonNull RangingRequest request, + @NonNull RangingResultCallback callback, @Nullable Handler handler) { if (VDBG) { Log.v(TAG, "startRanging: workSource=" + workSource + ", request=" + request + ", callback=" + callback + ", handler=" + handler); @@ -143,10 +161,11 @@ public class WifiRttManager { * * @param workSource The work-sources of the requesters. * - * @hide (@SystemApi) + * @hide */ + @SystemApi @RequiresPermission(allOf = {LOCATION_HARDWARE}) - public void cancelRanging(WorkSource workSource) { + public void cancelRanging(@Nullable WorkSource workSource) { if (VDBG) { Log.v(TAG, "cancelRanging: workSource=" + workSource); } diff --git a/wifi/java/android/net/wifi/rtt/package.html b/wifi/java/android/net/wifi/rtt/package.html index a0d407a927a2..11ac05800a7c 100644 --- a/wifi/java/android/net/wifi/rtt/package.html +++ b/wifi/java/android/net/wifi/rtt/package.html @@ -13,6 +13,8 @@ <li>{@link android.Manifest.permission#CHANGE_WIFI_STATE}</li> <li>{@link android.Manifest.permission#ACCESS_COARSE_LOCATION}</li> </ul> +<p>Usage of the API is also gated by the device's Location Mode: whether it permits Wi-Fi based +location to be queried.</p> <p class="note"><strong>Note:</strong> Not all Android-powered devices support Wi-Fi RTT functionality. |