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

Commit 3c99301a authored by Brian Stack's avatar Brian Stack
Browse files

Implement parcelable for UWB types

Make the UWB objects parcelable so that they may be re-used in AIDL
interfaces.

Bug: 170323306
Test: Builds

Change-Id: I8d3b81a581e66f2c777bedfd42a877548a51e875
parent 9ae9b395
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.uwb;

import android.annotation.FloatRange;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Angle measurement
@@ -26,7 +28,7 @@ import android.annotation.FloatRange;
 *
 * @hide
 */
public final class AngleMeasurement {
public final class AngleMeasurement implements Parcelable {
    private final double mRadians;
    private final double mErrorRadians;
    private final double mConfidenceLevel;
@@ -73,6 +75,35 @@ public final class AngleMeasurement {
        return mConfidenceLevel;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeDouble(mRadians);
        dest.writeDouble(mErrorRadians);
        dest.writeDouble(mConfidenceLevel);
    }

    public static final @android.annotation.NonNull Creator<AngleMeasurement> CREATOR =
            new Creator<AngleMeasurement>() {
                @Override
                public AngleMeasurement createFromParcel(Parcel in) {
                    Builder builder = new Builder();
                    builder.setRadians(in.readDouble());
                    builder.setErrorRadians(in.readDouble());
                    builder.setConfidenceLevel(in.readDouble());
                    return builder.build();
                }

                @Override
                public AngleMeasurement[] newArray(int size) {
                    return new AngleMeasurement[size];
                }
    };

    /**
     * Builder class for {@link AngleMeasurement}.
     */
+35 −1
Original line number Diff line number Diff line
@@ -18,13 +18,15 @@ package android.uwb;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Represents an angle of arrival measurement between two devices using Ultra Wideband
 *
 * @hide
 */
public final class AngleOfArrivalMeasurement {
public final class AngleOfArrivalMeasurement implements Parcelable {
    private final AngleMeasurement mAzimuthAngleMeasurement;
    private final AngleMeasurement mAltitudeAngleMeasurement;

@@ -70,6 +72,38 @@ public final class AngleOfArrivalMeasurement {
        return mAltitudeAngleMeasurement;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(mAzimuthAngleMeasurement, flags);
        dest.writeParcelable(mAltitudeAngleMeasurement, flags);
    }

    public static final @android.annotation.NonNull Creator<AngleOfArrivalMeasurement> CREATOR =
            new Creator<AngleOfArrivalMeasurement>() {
                @Override
                public AngleOfArrivalMeasurement createFromParcel(Parcel in) {
                    Builder builder = new Builder();

                    builder.setAzimuthAngleMeasurement(
                            in.readParcelable(AngleMeasurement.class.getClassLoader()));

                    builder.setAltitudeAngleMeasurement(
                            in.readParcelable(AngleMeasurement.class.getClassLoader()));

                    return builder.build();
                }

                @Override
                public AngleOfArrivalMeasurement[] newArray(int size) {
                    return new AngleOfArrivalMeasurement[size];
                }
            };

    /**
     * Builder class for {@link AngleOfArrivalMeasurement}.
     */
+32 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.uwb;

import android.annotation.FloatRange;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * A data point for the distance measurement
@@ -26,7 +28,7 @@ import android.annotation.FloatRange;
 *
 * @hide
 */
public final class DistanceMeasurement {
public final class DistanceMeasurement implements Parcelable {
    private final double mMeters;
    private final double mErrorMeters;
    private final double mConfidenceLevel;
@@ -69,6 +71,35 @@ public final class DistanceMeasurement {
        return mConfidenceLevel;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeDouble(mMeters);
        dest.writeDouble(mErrorMeters);
        dest.writeDouble(mConfidenceLevel);
    }

    public static final @android.annotation.NonNull Creator<DistanceMeasurement> CREATOR =
            new Creator<DistanceMeasurement>() {
                @Override
                public DistanceMeasurement createFromParcel(Parcel in) {
                    Builder builder = new Builder();
                    builder.setMeters(in.readDouble());
                    builder.setErrorMeters(in.readDouble());
                    builder.setConfidenceLevel(in.readDouble());
                    return builder.build();
                }

                @Override
                public DistanceMeasurement[] newArray(int size) {
                    return new DistanceMeasurement[size];
                }
    };

    /**
     * Builder to get a {@link DistanceMeasurement} object.
     */
+39 −1
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;

import java.lang.annotation.Retention;
@@ -30,7 +32,7 @@ import java.lang.annotation.RetentionPolicy;
 *
 * @hide
 */
public final class RangingMeasurement {
public final class RangingMeasurement implements Parcelable {
    private final UwbAddress mRemoteDeviceAddress;
    private final @Status int mStatus;
    private final long mElapsedRealtimeNanos;
@@ -127,6 +129,42 @@ public final class RangingMeasurement {
        return mAngleOfArrivalMeasurement;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(mRemoteDeviceAddress, flags);
        dest.writeInt(mStatus);
        dest.writeLong(mElapsedRealtimeNanos);
        dest.writeParcelable(mDistanceMeasurement, flags);
        dest.writeParcelable(mAngleOfArrivalMeasurement, flags);
    }

    public static final @android.annotation.NonNull Creator<RangingMeasurement> CREATOR =
            new Creator<RangingMeasurement>() {
                @Override
                public RangingMeasurement createFromParcel(Parcel in) {
                    Builder builder = new Builder();
                    builder.setRemoteDeviceAddress(
                            in.readParcelable(UwbAddress.class.getClassLoader()));
                    builder.setStatus(in.readInt());
                    builder.setElapsedRealtimeNanos(in.readLong());
                    builder.setDistanceMeasurement(
                            in.readParcelable(DistanceMeasurement.class.getClassLoader()));
                    builder.setAngleOfArrivalMeasurement(
                            in.readParcelable(AngleOfArrivalMeasurement.class.getClassLoader()));
                    return builder.build();
                }

                @Override
                public RangingMeasurement[] newArray(int size) {
                    return new RangingMeasurement[size];
                }
    };

    /**
     * Builder for a {@link RangingMeasurement} object.
     */
+60 −2
Original line number Diff line number Diff line
@@ -19,11 +19,13 @@ package android.uwb;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
import android.util.Duration;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -36,7 +38,7 @@ import java.util.Set;
 *
 *  @hide
 */
public final class RangingParams {
public final class RangingParams implements Parcelable {
    private final boolean mIsInitiator;
    private final boolean mIsController;
    private final Duration mSamplePeriod;
@@ -199,6 +201,62 @@ public final class RangingParams {
        return new PersistableBundle(mSpecificationParameters);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeBoolean(mIsInitiator);
        dest.writeBoolean(mIsController);
        dest.writeLong(mSamplePeriod.getSeconds());
        dest.writeInt(mSamplePeriod.getNano());
        dest.writeParcelable(mLocalDeviceAddress, flags);

        UwbAddress[] remoteAddresses = new UwbAddress[mRemoteDeviceAddresses.size()];
        mRemoteDeviceAddresses.toArray(remoteAddresses);
        dest.writeParcelableArray(remoteAddresses, flags);

        dest.writeInt(mChannelNumber);
        dest.writeInt(mTransmitPreambleCodeIndex);
        dest.writeInt(mReceivePreambleCodeIndex);
        dest.writeInt(mStsPhyPacketType);
        dest.writePersistableBundle(mSpecificationParameters);
    }

    public static final @android.annotation.NonNull Creator<RangingParams> CREATOR =
            new Creator<RangingParams>() {
                @Override
                public RangingParams createFromParcel(Parcel in) {
                    Builder builder = new Builder();
                    builder.setIsInitiator(in.readBoolean());
                    builder.setIsController(in.readBoolean());
                    builder.setSamplePeriod(Duration.ofSeconds(in.readLong(), in.readInt()));
                    builder.setLocalDeviceAddress(
                            in.readParcelable(UwbAddress.class.getClassLoader()));

                    UwbAddress[] remoteAddresses =
                            in.readParcelableArray(null, UwbAddress.class);
                    for (UwbAddress remoteAddress : remoteAddresses) {
                        builder.addRemoteDeviceAddress(remoteAddress);
                    }

                    builder.setChannelNumber(in.readInt());
                    builder.setTransmitPreambleCodeIndex(in.readInt());
                    builder.setReceivePreambleCodeIndex(in.readInt());
                    builder.setStsPhPacketType(in.readInt());
                    builder.setSpecificationParameters(in.readPersistableBundle());

                    return builder.build();
                }

                @Override
                public RangingParams[] newArray(int size) {
                    return new RangingParams[size];
                }
    };

    /**
     * Builder class for {@link RangingParams}.
     */
Loading