Loading wifi/api/current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -1157,7 +1157,11 @@ package android.net.wifi.rtt { public final class RangingRequest implements android.os.Parcelable { method public int describeContents(); method public static int getDefaultRttBurstSize(); method public static int getMaxPeers(); method public static int getMaxRttBurstSize(); method public static int getMinRttBurstSize(); method public int getRttBurstSize(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingRequest> CREATOR; } Loading @@ -1169,6 +1173,7 @@ package android.net.wifi.rtt { method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.MacAddress); method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.wifi.aware.PeerHandle); method public android.net.wifi.rtt.RangingRequest build(); method @NonNull public android.net.wifi.rtt.RangingRequest.Builder setRttBurstSize(int); } public final class RangingResult implements android.os.Parcelable { Loading wifi/api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -964,6 +964,10 @@ package android.net.wifi.p2p { package android.net.wifi.rtt { public final class RangingRequest implements android.os.Parcelable { method @NonNull public java.util.List<android.net.wifi.rtt.ResponderConfig> getRttPeers(); } public static final class RangingRequest.Builder { method public android.net.wifi.rtt.RangingRequest.Builder addResponder(@NonNull android.net.wifi.rtt.ResponderConfig); } Loading wifi/java/android/net/wifi/rtt/RangingRequest.java +117 −6 Original line number Diff line number Diff line Loading @@ -30,8 +30,11 @@ import android.os.Handler; import android.os.Parcel; import android.os.Parcelable; import com.android.modules.utils.build.SdkLevel; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.StringJoiner; /** Loading @@ -46,6 +49,9 @@ import java.util.StringJoiner; */ public final class RangingRequest implements Parcelable { private static final int MAX_PEERS = 10; private static final int DEFAULT_RTT_BURST_SIZE = 8; private static final int MIN_RTT_BURST_SIZE = 2; private static final int MAX_RTT_BURST_SIZE = 17; /** * Returns the maximum number of peers to range which can be specified in a single {@code Loading @@ -59,12 +65,80 @@ public final class RangingRequest implements Parcelable { return MAX_PEERS; } /** * Returns the default RTT burst size used to determine the average range. * * @return the RTT burst size used by default */ public static int getDefaultRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return DEFAULT_RTT_BURST_SIZE; } /** * Returns the minimum RTT burst size that can be used to determine a average range. * * @return the minimum RTT burst size that can be used */ public static int getMinRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return MIN_RTT_BURST_SIZE; } /** * Returns the minimum RTT burst size that can be used to determine a average range. * * @return the maximum RTT burst size that can be used */ public static int getMaxRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return MAX_RTT_BURST_SIZE; } /** @hide */ public final List<ResponderConfig> mRttPeers; /** @hide */ private RangingRequest(List<ResponderConfig> rttPeers) { public final int mRttBurstSize; /** @hide */ private RangingRequest(List<ResponderConfig> rttPeers, int rttBurstSize) { mRttPeers = rttPeers; mRttBurstSize = rttBurstSize; } /** * Returns the list of RTT capable peers. * * @return the list of RTT capable peers in a common system representation * * @hide */ @SystemApi @NonNull public List<ResponderConfig> getRttPeers() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return mRttPeers; } /** * Returns the RTT burst size used to determine the average range. * * @return the RTT burst size used */ public int getRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return mRttBurstSize; } @Override Loading @@ -75,6 +149,7 @@ public final class RangingRequest implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeList(mRttPeers); dest.writeInt(mRttBurstSize); } public static final @android.annotation.NonNull Creator<RangingRequest> CREATOR = new Creator<RangingRequest>() { Loading @@ -85,7 +160,7 @@ public final class RangingRequest implements Parcelable { @Override public RangingRequest createFromParcel(Parcel in) { return new RangingRequest(in.readArrayList(null)); return new RangingRequest(in.readArrayList(null), in.readInt()); } }; Loading @@ -105,12 +180,20 @@ public final class RangingRequest implements Parcelable { throw new IllegalArgumentException( "Ranging to too many peers requested. Use getMaxPeers() API to get limit."); } for (ResponderConfig peer: mRttPeers) { if (!peer.isValid(awareSupported)) { throw new IllegalArgumentException("Invalid Responder specification"); } } if (SdkLevel.isAtLeastS()) { if (mRttBurstSize < getMinRttBurstSize() || mRttBurstSize > getMaxRttBurstSize()) { throw new IllegalArgumentException("RTT burst size is out of range"); } } else { if (mRttBurstSize != DEFAULT_RTT_BURST_SIZE) { throw new IllegalArgumentException("RTT burst size is not the default value"); } } } /** Loading @@ -118,6 +201,32 @@ public final class RangingRequest implements Parcelable { */ public static final class Builder { private List<ResponderConfig> mRttPeers = new ArrayList<>(); private int mRttBurstSize = DEFAULT_RTT_BURST_SIZE; /** * Set the RTT Burst size for the ranging request. * <p> * If not set, the default RTT burst size given by * {@link #getDefaultRttBurstSize()} is used to determine the default value. * If set, the value must be in the range {@link #getMinRttBurstSize()} and * {@link #getMaxRttBurstSize()} inclusively, or a * {@link java.lang.IllegalArgumentException} will be thrown. * * @param rttBurstSize The number of FTM packets used to estimate a range. * @return The builder to facilitate chaining * {@code builder.setXXX(..).setXXX(..)}. */ @NonNull public Builder setRttBurstSize(int rttBurstSize) { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } if (rttBurstSize < MIN_RTT_BURST_SIZE || rttBurstSize > MAX_RTT_BURST_SIZE) { throw new IllegalArgumentException("RTT burst size out of range."); } mRttBurstSize = rttBurstSize; return this; } /** * Add the device specified by the {@link ScanResult} to the list of devices with Loading Loading @@ -241,7 +350,7 @@ public final class RangingRequest implements Parcelable { * builder. */ public RangingRequest build() { return new RangingRequest(mRttPeers); return new RangingRequest(mRttPeers, mRttBurstSize); } } Loading @@ -257,11 +366,13 @@ public final class RangingRequest implements Parcelable { RangingRequest lhs = (RangingRequest) o; return mRttPeers.size() == lhs.mRttPeers.size() && mRttPeers.containsAll(lhs.mRttPeers); return mRttPeers.size() == lhs.mRttPeers.size() && mRttPeers.containsAll(lhs.mRttPeers) && mRttBurstSize == lhs.mRttBurstSize; } @Override public int hashCode() { return mRttPeers.hashCode(); return Objects.hash(mRttPeers, mRttBurstSize); } } wifi/tests/src/android/net/wifi/rtt/WifiRttManagerTest.java +70 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.net.wifi.rtt; import static junit.framework.Assert.fail; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -143,6 +145,7 @@ public class WifiRttManagerTest { PeerHandle peerHandle1 = new PeerHandle(12); RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(4); builder.addAccessPoint(scanResult1); builder.addAccessPoints(scanResults2and3); builder.addWifiAwarePeer(mac1); Loading @@ -162,6 +165,60 @@ public class WifiRttManagerTest { assertEquals(request, rereadRequest); } /** * Validate the rtt burst size is set correctly when in range. */ @Test public void testRangingRequestSetBurstSize() { ScanResult scanResult = new ScanResult(); scanResult.BSSID = "AA:BB:CC:DD:EE:FF"; // create request RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(4); builder.addAccessPoint(scanResult); RangingRequest request = builder.build(); // confirm rtt burst size is set correctly to default value assertEquals(request.getRttBurstSize(), 4); } /** * Validate the rtt burst size cannot be smaller than the minimum. */ @Test public void testRangingRequestMinBurstSizeIsEnforced() { ScanResult scanResult = new ScanResult(); scanResult.BSSID = "AA:BB:CC:DD:EE:FF"; // create request try { RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(RangingRequest.getMinRttBurstSize() - 1); fail("RTT burst size was smaller than min value."); } catch (IllegalArgumentException e) { // expected } } /** * Validate the rtt burst size cannot exceed the maximum. */ @Test public void testRangingRequestMaxBurstSizeIsEnforced() { ScanResult scanResult = new ScanResult(); scanResult.BSSID = "AA:BB:CC:DD:EE:FF"; // create request try { RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(RangingRequest.getMaxRttBurstSize() + 1); fail("RTT Burst size exceeded max value."); } catch (IllegalArgumentException e) { // expected } } /** * Validate that can request as many range operation as the upper limit on number of requests. */ Loading @@ -175,7 +232,7 @@ public class WifiRttManagerTest { } MacAddress mac1 = MacAddress.fromString("00:01:02:03:04:05"); // create request // create request using max RTT Peers RangingRequest.Builder builder = new RangingRequest.Builder(); builder.addAccessPoint(scanResult); builder.addAccessPoints(scanResultList); Loading @@ -185,6 +242,18 @@ public class WifiRttManagerTest { // verify request request.enforceValidity(true); // confirm rtt burst size is set correctly to default value assertEquals(request.getRttBurstSize(), RangingRequest.getDefaultRttBurstSize()); // confirm the number of peers in the request is the max number of peers List<ResponderConfig> rttPeers = request.getRttPeers(); int numRttPeers = rttPeers.size(); assertEquals(RangingRequest.getMaxPeers(), numRttPeers); // confirm each peer has the correct mac address for (int i = 0; i < numRttPeers - 1; ++i) { assertEquals("AA:BB:CC:DD:EE:FF", rttPeers.get(i).macAddress.toString().toUpperCase()); } assertEquals("00:01:02:03:04:05", rttPeers.get(numRttPeers - 1).macAddress.toString().toUpperCase()); } /** Loading Loading
wifi/api/current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -1157,7 +1157,11 @@ package android.net.wifi.rtt { public final class RangingRequest implements android.os.Parcelable { method public int describeContents(); method public static int getDefaultRttBurstSize(); method public static int getMaxPeers(); method public static int getMaxRttBurstSize(); method public static int getMinRttBurstSize(); method public int getRttBurstSize(); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingRequest> CREATOR; } Loading @@ -1169,6 +1173,7 @@ package android.net.wifi.rtt { method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.MacAddress); method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.wifi.aware.PeerHandle); method public android.net.wifi.rtt.RangingRequest build(); method @NonNull public android.net.wifi.rtt.RangingRequest.Builder setRttBurstSize(int); } public final class RangingResult implements android.os.Parcelable { Loading
wifi/api/system-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -964,6 +964,10 @@ package android.net.wifi.p2p { package android.net.wifi.rtt { public final class RangingRequest implements android.os.Parcelable { method @NonNull public java.util.List<android.net.wifi.rtt.ResponderConfig> getRttPeers(); } public static final class RangingRequest.Builder { method public android.net.wifi.rtt.RangingRequest.Builder addResponder(@NonNull android.net.wifi.rtt.ResponderConfig); } Loading
wifi/java/android/net/wifi/rtt/RangingRequest.java +117 −6 Original line number Diff line number Diff line Loading @@ -30,8 +30,11 @@ import android.os.Handler; import android.os.Parcel; import android.os.Parcelable; import com.android.modules.utils.build.SdkLevel; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.StringJoiner; /** Loading @@ -46,6 +49,9 @@ import java.util.StringJoiner; */ public final class RangingRequest implements Parcelable { private static final int MAX_PEERS = 10; private static final int DEFAULT_RTT_BURST_SIZE = 8; private static final int MIN_RTT_BURST_SIZE = 2; private static final int MAX_RTT_BURST_SIZE = 17; /** * Returns the maximum number of peers to range which can be specified in a single {@code Loading @@ -59,12 +65,80 @@ public final class RangingRequest implements Parcelable { return MAX_PEERS; } /** * Returns the default RTT burst size used to determine the average range. * * @return the RTT burst size used by default */ public static int getDefaultRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return DEFAULT_RTT_BURST_SIZE; } /** * Returns the minimum RTT burst size that can be used to determine a average range. * * @return the minimum RTT burst size that can be used */ public static int getMinRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return MIN_RTT_BURST_SIZE; } /** * Returns the minimum RTT burst size that can be used to determine a average range. * * @return the maximum RTT burst size that can be used */ public static int getMaxRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return MAX_RTT_BURST_SIZE; } /** @hide */ public final List<ResponderConfig> mRttPeers; /** @hide */ private RangingRequest(List<ResponderConfig> rttPeers) { public final int mRttBurstSize; /** @hide */ private RangingRequest(List<ResponderConfig> rttPeers, int rttBurstSize) { mRttPeers = rttPeers; mRttBurstSize = rttBurstSize; } /** * Returns the list of RTT capable peers. * * @return the list of RTT capable peers in a common system representation * * @hide */ @SystemApi @NonNull public List<ResponderConfig> getRttPeers() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return mRttPeers; } /** * Returns the RTT burst size used to determine the average range. * * @return the RTT burst size used */ public int getRttBurstSize() { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } return mRttBurstSize; } @Override Loading @@ -75,6 +149,7 @@ public final class RangingRequest implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeList(mRttPeers); dest.writeInt(mRttBurstSize); } public static final @android.annotation.NonNull Creator<RangingRequest> CREATOR = new Creator<RangingRequest>() { Loading @@ -85,7 +160,7 @@ public final class RangingRequest implements Parcelable { @Override public RangingRequest createFromParcel(Parcel in) { return new RangingRequest(in.readArrayList(null)); return new RangingRequest(in.readArrayList(null), in.readInt()); } }; Loading @@ -105,12 +180,20 @@ public final class RangingRequest implements Parcelable { throw new IllegalArgumentException( "Ranging to too many peers requested. Use getMaxPeers() API to get limit."); } for (ResponderConfig peer: mRttPeers) { if (!peer.isValid(awareSupported)) { throw new IllegalArgumentException("Invalid Responder specification"); } } if (SdkLevel.isAtLeastS()) { if (mRttBurstSize < getMinRttBurstSize() || mRttBurstSize > getMaxRttBurstSize()) { throw new IllegalArgumentException("RTT burst size is out of range"); } } else { if (mRttBurstSize != DEFAULT_RTT_BURST_SIZE) { throw new IllegalArgumentException("RTT burst size is not the default value"); } } } /** Loading @@ -118,6 +201,32 @@ public final class RangingRequest implements Parcelable { */ public static final class Builder { private List<ResponderConfig> mRttPeers = new ArrayList<>(); private int mRttBurstSize = DEFAULT_RTT_BURST_SIZE; /** * Set the RTT Burst size for the ranging request. * <p> * If not set, the default RTT burst size given by * {@link #getDefaultRttBurstSize()} is used to determine the default value. * If set, the value must be in the range {@link #getMinRttBurstSize()} and * {@link #getMaxRttBurstSize()} inclusively, or a * {@link java.lang.IllegalArgumentException} will be thrown. * * @param rttBurstSize The number of FTM packets used to estimate a range. * @return The builder to facilitate chaining * {@code builder.setXXX(..).setXXX(..)}. */ @NonNull public Builder setRttBurstSize(int rttBurstSize) { if (!SdkLevel.isAtLeastS()) { throw new UnsupportedOperationException(); } if (rttBurstSize < MIN_RTT_BURST_SIZE || rttBurstSize > MAX_RTT_BURST_SIZE) { throw new IllegalArgumentException("RTT burst size out of range."); } mRttBurstSize = rttBurstSize; return this; } /** * Add the device specified by the {@link ScanResult} to the list of devices with Loading Loading @@ -241,7 +350,7 @@ public final class RangingRequest implements Parcelable { * builder. */ public RangingRequest build() { return new RangingRequest(mRttPeers); return new RangingRequest(mRttPeers, mRttBurstSize); } } Loading @@ -257,11 +366,13 @@ public final class RangingRequest implements Parcelable { RangingRequest lhs = (RangingRequest) o; return mRttPeers.size() == lhs.mRttPeers.size() && mRttPeers.containsAll(lhs.mRttPeers); return mRttPeers.size() == lhs.mRttPeers.size() && mRttPeers.containsAll(lhs.mRttPeers) && mRttBurstSize == lhs.mRttBurstSize; } @Override public int hashCode() { return mRttPeers.hashCode(); return Objects.hash(mRttPeers, mRttBurstSize); } }
wifi/tests/src/android/net/wifi/rtt/WifiRttManagerTest.java +70 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.net.wifi.rtt; import static junit.framework.Assert.fail; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; Loading Loading @@ -143,6 +145,7 @@ public class WifiRttManagerTest { PeerHandle peerHandle1 = new PeerHandle(12); RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(4); builder.addAccessPoint(scanResult1); builder.addAccessPoints(scanResults2and3); builder.addWifiAwarePeer(mac1); Loading @@ -162,6 +165,60 @@ public class WifiRttManagerTest { assertEquals(request, rereadRequest); } /** * Validate the rtt burst size is set correctly when in range. */ @Test public void testRangingRequestSetBurstSize() { ScanResult scanResult = new ScanResult(); scanResult.BSSID = "AA:BB:CC:DD:EE:FF"; // create request RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(4); builder.addAccessPoint(scanResult); RangingRequest request = builder.build(); // confirm rtt burst size is set correctly to default value assertEquals(request.getRttBurstSize(), 4); } /** * Validate the rtt burst size cannot be smaller than the minimum. */ @Test public void testRangingRequestMinBurstSizeIsEnforced() { ScanResult scanResult = new ScanResult(); scanResult.BSSID = "AA:BB:CC:DD:EE:FF"; // create request try { RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(RangingRequest.getMinRttBurstSize() - 1); fail("RTT burst size was smaller than min value."); } catch (IllegalArgumentException e) { // expected } } /** * Validate the rtt burst size cannot exceed the maximum. */ @Test public void testRangingRequestMaxBurstSizeIsEnforced() { ScanResult scanResult = new ScanResult(); scanResult.BSSID = "AA:BB:CC:DD:EE:FF"; // create request try { RangingRequest.Builder builder = new RangingRequest.Builder(); builder.setRttBurstSize(RangingRequest.getMaxRttBurstSize() + 1); fail("RTT Burst size exceeded max value."); } catch (IllegalArgumentException e) { // expected } } /** * Validate that can request as many range operation as the upper limit on number of requests. */ Loading @@ -175,7 +232,7 @@ public class WifiRttManagerTest { } MacAddress mac1 = MacAddress.fromString("00:01:02:03:04:05"); // create request // create request using max RTT Peers RangingRequest.Builder builder = new RangingRequest.Builder(); builder.addAccessPoint(scanResult); builder.addAccessPoints(scanResultList); Loading @@ -185,6 +242,18 @@ public class WifiRttManagerTest { // verify request request.enforceValidity(true); // confirm rtt burst size is set correctly to default value assertEquals(request.getRttBurstSize(), RangingRequest.getDefaultRttBurstSize()); // confirm the number of peers in the request is the max number of peers List<ResponderConfig> rttPeers = request.getRttPeers(); int numRttPeers = rttPeers.size(); assertEquals(RangingRequest.getMaxPeers(), numRttPeers); // confirm each peer has the correct mac address for (int i = 0; i < numRttPeers - 1; ++i) { assertEquals("AA:BB:CC:DD:EE:FF", rttPeers.get(i).macAddress.toString().toUpperCase()); } assertEquals("00:01:02:03:04:05", rttPeers.get(numRttPeers - 1).macAddress.toString().toUpperCase()); } /** Loading