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

Commit 0f5884ba authored by Roy Want's avatar Roy Want
Browse files

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

Bug: 163355222
Test: adding methods to class. Existing unit tests and 3 additional tests pass.
Change-Id: Ie003e63350faa257f8dbd68d6918961580745cce
parent de83d8ed
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1156,7 +1156,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;
  }
@@ -1168,6 +1172,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
@@ -957,6 +957,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());
    }

    /**