/* * 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.location; import android.annotation.FloatRange; import android.annotation.NonNull; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; /** * Holds the characteristics of the reflecting plane that a satellite signal has bounced from. * * @hide */ @SystemApi public final class GnssReflectingPlane implements Parcelable { /** Represents latitude in degrees of the reflecting plane */ @FloatRange(from = -90.0f, to = 90.0f) private final double mLatitudeDegrees; /** Represents longitude in degrees of the reflecting plane. */ @FloatRange(from = -180.0f, to = 180.0f) private final double mLongitudeDegrees; /** * Represents altitude in meters above the WGS 84 reference ellipsoid of the reflection point in * the plane */ @FloatRange(from = -1000.0f, to = 10000.0f) private final double mAltitudeMeters; /** Represents azimuth clockwise from north of the reflecting plane in degrees. */ @FloatRange(from = 0.0f, to = 360.0f) private final double mAzimuthDegrees; private GnssReflectingPlane(Builder builder) { mLatitudeDegrees = builder.mLatitudeDegrees; mLongitudeDegrees = builder.mLongitudeDegrees; mAltitudeMeters = builder.mAltitudeMeters; mAzimuthDegrees = builder.mAzimuthDegrees; } /** Gets the latitude in degrees of the reflecting plane. */ @FloatRange(from = -90.0f, to = 90.0f) public double getLatitudeDegrees() { return mLatitudeDegrees; } /** Gets the longitude in degrees of the reflecting plane. */ @FloatRange(from = -180.0f, to = 180.0f) public double getLongitudeDegrees() { return mLongitudeDegrees; } /** * Gets the altitude in meters above the WGS 84 reference ellipsoid of the reflecting point * within the plane */ @FloatRange(from = -1000.0f, to = 10000.0f) public double getAltitudeMeters() { return mAltitudeMeters; } /** Gets the azimuth clockwise from north of the reflecting plane in degrees. */ @FloatRange(from = 0.0f, to = 360.0f) public double getAzimuthDegrees() { return mAzimuthDegrees; } @Override public int describeContents() { return 0; } public static final Creator CREATOR = new Creator() { @Override @NonNull public GnssReflectingPlane createFromParcel(@NonNull Parcel parcel) { GnssReflectingPlane reflectingPlane = new Builder() .setLatitudeDegrees(parcel.readDouble()) .setLongitudeDegrees(parcel.readDouble()) .setAltitudeMeters(parcel.readDouble()) .setAzimuthDegrees(parcel.readDouble()) .build(); return reflectingPlane; } @Override public GnssReflectingPlane[] newArray(int i) { return new GnssReflectingPlane[i]; } }; @NonNull @Override public String toString() { final String format = " %-29s = %s\n"; StringBuilder builder = new StringBuilder("ReflectingPlane:\n"); builder.append(String.format(format, "LatitudeDegrees = ", mLatitudeDegrees)); builder.append(String.format(format, "LongitudeDegrees = ", mLongitudeDegrees)); builder.append(String.format(format, "AltitudeMeters = ", mAltitudeMeters)); builder.append(String.format(format, "AzimuthDegrees = ", mAzimuthDegrees)); return builder.toString(); } @Override public void writeToParcel(@NonNull Parcel parcel, int flags) { parcel.writeDouble(mLatitudeDegrees); parcel.writeDouble(mLongitudeDegrees); parcel.writeDouble(mAltitudeMeters); parcel.writeDouble(mAzimuthDegrees); } /** Builder for {@link GnssReflectingPlane} */ public static final class Builder { /** For documentation, see corresponding fields in {@link GnssReflectingPlane}. */ private double mLatitudeDegrees; private double mLongitudeDegrees; private double mAltitudeMeters; private double mAzimuthDegrees; /** Sets the latitude in degrees of the reflecting plane. */ @NonNull public Builder setLatitudeDegrees( @FloatRange(from = -90.0f, to = 90.0f) double latitudeDegrees) { mLatitudeDegrees = latitudeDegrees; return this; } /** Sets the longitude in degrees of the reflecting plane. */ @NonNull public Builder setLongitudeDegrees( @FloatRange(from = -180.0f, to = 180.0f) double longitudeDegrees) { mLongitudeDegrees = longitudeDegrees; return this; } /** * Sets the altitude in meters above the WGS 84 reference ellipsoid of the reflecting point * within the plane */ @NonNull public Builder setAltitudeMeters( @FloatRange(from = -1000.0f, to = 10000.0f) double altitudeMeters) { mAltitudeMeters = altitudeMeters; return this; } /** Sets the azimuth clockwise from north of the reflecting plane in degrees. */ @NonNull public Builder setAzimuthDegrees( @FloatRange(from = 0.0f, to = 360.0f) double azimuthDegrees) { mAzimuthDegrees = azimuthDegrees; return this; } /** Builds a {@link GnssReflectingPlane} object as specified by this builder. */ @NonNull public GnssReflectingPlane build() { return new GnssReflectingPlane(this); } } }