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

Commit 2aab6707 authored by Roy Want's avatar Roy Want Committed by Android (Google) Code Review
Browse files

Merge "Adding setter and getters for setRttBurstSize() in RangingRequest (client)"

parents ed4536c5 0f5884ba
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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;
  }
@@ -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 {
+4 −0
Original line number Diff line number Diff line
@@ -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);
  }
+117 −6
Original line number Diff line number Diff line
@@ -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;

/**
@@ -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
@@ -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
@@ -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>() {
@@ -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());
        }
    };

@@ -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");
            }
        }
    }

    /**
@@ -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
@@ -241,7 +350,7 @@ public final class RangingRequest implements Parcelable {
         * builder.
         */
        public RangingRequest build() {
            return new RangingRequest(mRttPeers);
            return new RangingRequest(mRttPeers, mRttBurstSize);
        }
    }

@@ -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);
    }
}
+70 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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.
     */
@@ -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);
@@ -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());
    }

    /**