1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.location; 18 19 import android.annotation.FloatRange; 20 import android.annotation.NonNull; 21 import android.annotation.SystemApi; 22 import android.os.Parcel; 23 import android.os.Parcelable; 24 25 /** 26 * Holds the characteristics of the reflecting plane that a satellite signal has bounced from. 27 * 28 * @hide 29 */ 30 @SystemApi 31 public final class GnssReflectingPlane implements Parcelable { 32 33 /** Represents latitude in degrees of the reflecting plane */ 34 @FloatRange(from = -90.0f, to = 90.0f) 35 private final double mLatitudeDegrees; 36 /** Represents longitude in degrees of the reflecting plane. */ 37 @FloatRange(from = -180.0f, to = 180.0f) 38 private final double mLongitudeDegrees; 39 /** 40 * Represents altitude in meters above the WGS 84 reference ellipsoid of the reflection point in 41 * the plane 42 */ 43 @FloatRange(from = -1000.0f, to = 10000.0f) 44 private final double mAltitudeMeters; 45 46 /** Represents azimuth clockwise from north of the reflecting plane in degrees. */ 47 @FloatRange(from = 0.0f, to = 360.0f) 48 private final double mAzimuthDegrees; 49 GnssReflectingPlane(Builder builder)50 private GnssReflectingPlane(Builder builder) { 51 mLatitudeDegrees = builder.mLatitudeDegrees; 52 mLongitudeDegrees = builder.mLongitudeDegrees; 53 mAltitudeMeters = builder.mAltitudeMeters; 54 mAzimuthDegrees = builder.mAzimuthDegrees; 55 } 56 57 /** Gets the latitude in degrees of the reflecting plane. */ 58 @FloatRange(from = -90.0f, to = 90.0f) getLatitudeDegrees()59 public double getLatitudeDegrees() { 60 return mLatitudeDegrees; 61 } 62 63 /** Gets the longitude in degrees of the reflecting plane. */ 64 @FloatRange(from = -180.0f, to = 180.0f) getLongitudeDegrees()65 public double getLongitudeDegrees() { 66 return mLongitudeDegrees; 67 } 68 69 /** 70 * Gets the altitude in meters above the WGS 84 reference ellipsoid of the reflecting point 71 * within the plane 72 */ 73 @FloatRange(from = -1000.0f, to = 10000.0f) getAltitudeMeters()74 public double getAltitudeMeters() { 75 return mAltitudeMeters; 76 } 77 78 /** Gets the azimuth clockwise from north of the reflecting plane in degrees. */ 79 @FloatRange(from = 0.0f, to = 360.0f) getAzimuthDegrees()80 public double getAzimuthDegrees() { 81 return mAzimuthDegrees; 82 } 83 84 @Override describeContents()85 public int describeContents() { 86 return 0; 87 } 88 89 public static final Creator<GnssReflectingPlane> CREATOR = 90 new Creator<GnssReflectingPlane>() { 91 @Override 92 @NonNull 93 public GnssReflectingPlane createFromParcel(@NonNull Parcel parcel) { 94 GnssReflectingPlane reflectingPlane = 95 new Builder() 96 .setLatitudeDegrees(parcel.readDouble()) 97 .setLongitudeDegrees(parcel.readDouble()) 98 .setAltitudeMeters(parcel.readDouble()) 99 .setAzimuthDegrees(parcel.readDouble()) 100 .build(); 101 return reflectingPlane; 102 } 103 104 @Override 105 public GnssReflectingPlane[] newArray(int i) { 106 return new GnssReflectingPlane[i]; 107 } 108 }; 109 110 @NonNull 111 @Override toString()112 public String toString() { 113 final String format = " %-29s = %s\n"; 114 StringBuilder builder = new StringBuilder("ReflectingPlane:\n"); 115 builder.append(String.format(format, "LatitudeDegrees = ", mLatitudeDegrees)); 116 builder.append(String.format(format, "LongitudeDegrees = ", mLongitudeDegrees)); 117 builder.append(String.format(format, "AltitudeMeters = ", mAltitudeMeters)); 118 builder.append(String.format(format, "AzimuthDegrees = ", mAzimuthDegrees)); 119 return builder.toString(); 120 } 121 122 @Override writeToParcel(@onNull Parcel parcel, int flags)123 public void writeToParcel(@NonNull Parcel parcel, int flags) { 124 parcel.writeDouble(mLatitudeDegrees); 125 parcel.writeDouble(mLongitudeDegrees); 126 parcel.writeDouble(mAltitudeMeters); 127 parcel.writeDouble(mAzimuthDegrees); 128 } 129 130 /** Builder for {@link GnssReflectingPlane} */ 131 public static final class Builder { 132 /** For documentation, see corresponding fields in {@link GnssReflectingPlane}. */ 133 private double mLatitudeDegrees; 134 private double mLongitudeDegrees; 135 private double mAltitudeMeters; 136 private double mAzimuthDegrees; 137 138 /** Sets the latitude in degrees of the reflecting plane. */ setLatitudeDegrees( @loatRangefrom = -90.0f, to = 90.0f) double latitudeDegrees)139 @NonNull public Builder setLatitudeDegrees( 140 @FloatRange(from = -90.0f, to = 90.0f) double latitudeDegrees) { 141 mLatitudeDegrees = latitudeDegrees; 142 return this; 143 } 144 145 /** Sets the longitude in degrees of the reflecting plane. */ setLongitudeDegrees( @loatRangefrom = -180.0f, to = 180.0f) double longitudeDegrees)146 @NonNull public Builder setLongitudeDegrees( 147 @FloatRange(from = -180.0f, to = 180.0f) double longitudeDegrees) { 148 mLongitudeDegrees = longitudeDegrees; 149 return this; 150 } 151 152 /** 153 * Sets the altitude in meters above the WGS 84 reference ellipsoid of the reflecting point 154 * within the plane 155 */ setAltitudeMeters( @loatRangefrom = -1000.0f, to = 10000.0f) double altitudeMeters)156 @NonNull public Builder setAltitudeMeters( 157 @FloatRange(from = -1000.0f, to = 10000.0f) double altitudeMeters) { 158 mAltitudeMeters = altitudeMeters; 159 return this; 160 } 161 162 /** Sets the azimuth clockwise from north of the reflecting plane in degrees. */ setAzimuthDegrees( @loatRangefrom = 0.0f, to = 360.0f) double azimuthDegrees)163 @NonNull public Builder setAzimuthDegrees( 164 @FloatRange(from = 0.0f, to = 360.0f) double azimuthDegrees) { 165 mAzimuthDegrees = azimuthDegrees; 166 return this; 167 } 168 169 /** Builds a {@link GnssReflectingPlane} object as specified by this builder. */ build()170 @NonNull public GnssReflectingPlane build() { 171 return new GnssReflectingPlane(this); 172 } 173 } 174 } 175