1 /* 2 * Copyright (C) 2024 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.FlaggedApi; 20 import android.annotation.NonNull; 21 import android.annotation.Nullable; 22 import android.annotation.SystemApi; 23 import android.location.GnssAssistance.GnssSatelliteCorrections; 24 import android.location.flags.Flags; 25 import android.os.Parcel; 26 import android.os.Parcelable; 27 28 import java.util.ArrayList; 29 import java.util.Collections; 30 import java.util.List; 31 32 /** 33 * A class contains Beidou assistance. 34 * 35 * @hide 36 */ 37 @FlaggedApi(Flags.FLAG_GNSS_ASSISTANCE_INTERFACE) 38 @SystemApi 39 public final class BeidouAssistance implements Parcelable { 40 41 /** The Beidou almanac. */ 42 @Nullable private final GnssAlmanac mAlmanac; 43 44 /** The Klobuchar ionospheric model. */ 45 @Nullable private final KlobucharIonosphericModel mIonosphericModel; 46 47 /** The UTC model. */ 48 @Nullable private final UtcModel mUtcModel; 49 50 /** The leap seconds model. */ 51 @Nullable private final LeapSecondsModel mLeapSecondsModel; 52 53 /** The list of auxiliary informations. */ 54 @NonNull private final List<AuxiliaryInformation> mAuxiliaryInformation; 55 56 /** The list of time models. */ 57 @NonNull private final List<TimeModel> mTimeModels; 58 59 /** The list of Beidou ephemeris. */ 60 @NonNull private final List<BeidouSatelliteEphemeris> mSatelliteEphemeris; 61 62 /** The list of real time integrity models. */ 63 @NonNull private final List<RealTimeIntegrityModel> mRealTimeIntegrityModels; 64 65 /** The list of Beidou satellite corrections. */ 66 @NonNull private final List<GnssSatelliteCorrections> mSatelliteCorrections; 67 BeidouAssistance(Builder builder)68 private BeidouAssistance(Builder builder) { 69 mAlmanac = builder.mAlmanac; 70 mIonosphericModel = builder.mIonosphericModel; 71 mUtcModel = builder.mUtcModel; 72 mLeapSecondsModel = builder.mLeapSecondsModel; 73 if (builder.mAuxiliaryInformation != null) { 74 mAuxiliaryInformation = 75 Collections.unmodifiableList(new ArrayList<>(builder.mAuxiliaryInformation)); 76 } else { 77 mAuxiliaryInformation = new ArrayList<>(); 78 } 79 if (builder.mTimeModels != null) { 80 mTimeModels = Collections.unmodifiableList(new ArrayList<>(builder.mTimeModels)); 81 } else { 82 mTimeModels = new ArrayList<>(); 83 } 84 if (builder.mSatelliteEphemeris != null) { 85 mSatelliteEphemeris = 86 Collections.unmodifiableList(new ArrayList<>(builder.mSatelliteEphemeris)); 87 } else { 88 mSatelliteEphemeris = new ArrayList<>(); 89 } 90 if (builder.mRealTimeIntegrityModels != null) { 91 mRealTimeIntegrityModels = 92 Collections.unmodifiableList(new ArrayList<>(builder.mRealTimeIntegrityModels)); 93 } else { 94 mRealTimeIntegrityModels = new ArrayList<>(); 95 } 96 if (builder.mSatelliteCorrections != null) { 97 mSatelliteCorrections = 98 Collections.unmodifiableList(new ArrayList<>(builder.mSatelliteCorrections)); 99 } else { 100 mSatelliteCorrections = new ArrayList<>(); 101 } 102 } 103 104 /** Returns the Beidou almanac. */ 105 @Nullable getAlmanac()106 public GnssAlmanac getAlmanac() { 107 return mAlmanac; 108 } 109 110 /** Returns the Klobuchar ionospheric model. */ 111 @Nullable getIonosphericModel()112 public KlobucharIonosphericModel getIonosphericModel() { 113 return mIonosphericModel; 114 } 115 116 /** Returns the UTC model. */ 117 @Nullable getUtcModel()118 public UtcModel getUtcModel() { 119 return mUtcModel; 120 } 121 122 /** Returns the leap seconds model. */ 123 @Nullable getLeapSecondsModel()124 public LeapSecondsModel getLeapSecondsModel() { 125 return mLeapSecondsModel; 126 } 127 128 /** Returns the list of auxiliary informations. */ 129 @NonNull getAuxiliaryInformation()130 public List<AuxiliaryInformation> getAuxiliaryInformation() { 131 return mAuxiliaryInformation; 132 } 133 134 /** Returns the list of time models. */ 135 @NonNull getTimeModels()136 public List<TimeModel> getTimeModels() { 137 return mTimeModels; 138 } 139 140 /** Returns the list ofBeidou ephemeris. */ 141 @NonNull getSatelliteEphemeris()142 public List<BeidouSatelliteEphemeris> getSatelliteEphemeris() { 143 return mSatelliteEphemeris; 144 } 145 146 /** Returns the list of real time integrity models. */ 147 @NonNull getRealTimeIntegrityModels()148 public List<RealTimeIntegrityModel> getRealTimeIntegrityModels() { 149 return mRealTimeIntegrityModels; 150 } 151 152 /** Returns the list of Beidou satellite corrections. */ 153 @NonNull getSatelliteCorrections()154 public List<GnssSatelliteCorrections> getSatelliteCorrections() { 155 return mSatelliteCorrections; 156 } 157 158 @Override describeContents()159 public int describeContents() { 160 return 0; 161 } 162 163 @Override 164 @NonNull toString()165 public String toString() { 166 StringBuilder builder = new StringBuilder("BeidouAssistance["); 167 builder.append("almanac = ").append(mAlmanac); 168 builder.append(", ionosphericModel = ").append(mIonosphericModel); 169 builder.append(", utcModel = ").append(mUtcModel); 170 builder.append(", leapSecondsModel = ").append(mLeapSecondsModel); 171 builder.append(", auxiliaryInformation = ").append(mAuxiliaryInformation); 172 builder.append(", timeModels = ").append(mTimeModels); 173 builder.append(", satelliteEphemeris = ").append(mSatelliteEphemeris); 174 builder.append(", realTimeIntegrityModels = ").append(mRealTimeIntegrityModels); 175 builder.append(", satelliteCorrections = ").append(mSatelliteCorrections); 176 builder.append("]"); 177 return builder.toString(); 178 } 179 180 @Override writeToParcel(@onNull Parcel dest, int flags)181 public void writeToParcel(@NonNull Parcel dest, int flags) { 182 dest.writeTypedObject(mAlmanac, flags); 183 dest.writeTypedObject(mIonosphericModel, flags); 184 dest.writeTypedObject(mUtcModel, flags); 185 dest.writeTypedObject(mLeapSecondsModel, flags); 186 dest.writeTypedList(mAuxiliaryInformation); 187 dest.writeTypedList(mTimeModels); 188 dest.writeTypedList(mSatelliteEphemeris); 189 dest.writeTypedList(mRealTimeIntegrityModels); 190 dest.writeTypedList(mSatelliteCorrections); 191 } 192 193 public static final @android.annotation.NonNull Creator<BeidouAssistance> CREATOR = 194 new Creator<BeidouAssistance>() { 195 @Override 196 public BeidouAssistance createFromParcel(Parcel in) { 197 return new BeidouAssistance.Builder() 198 .setAlmanac(in.readTypedObject(GnssAlmanac.CREATOR)) 199 .setIonosphericModel( 200 in.readTypedObject(KlobucharIonosphericModel.CREATOR)) 201 .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) 202 .setLeapSecondsModel(in.readTypedObject(LeapSecondsModel.CREATOR)) 203 .setAuxiliaryInformation( 204 in.createTypedArrayList(AuxiliaryInformation.CREATOR)) 205 .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) 206 .setSatelliteEphemeris( 207 in.createTypedArrayList(BeidouSatelliteEphemeris.CREATOR)) 208 .setRealTimeIntegrityModels( 209 in.createTypedArrayList(RealTimeIntegrityModel.CREATOR)) 210 .setSatelliteCorrections( 211 in.createTypedArrayList(GnssSatelliteCorrections.CREATOR)) 212 .build(); 213 } 214 215 @Override 216 public BeidouAssistance[] newArray(int size) { 217 return new BeidouAssistance[size]; 218 } 219 }; 220 221 /** Builder for {@link BeidouAssistance}. */ 222 public static final class Builder { 223 private GnssAlmanac mAlmanac; 224 private KlobucharIonosphericModel mIonosphericModel; 225 private UtcModel mUtcModel; 226 private LeapSecondsModel mLeapSecondsModel; 227 private List<AuxiliaryInformation> mAuxiliaryInformation; 228 private List<TimeModel> mTimeModels; 229 private List<BeidouSatelliteEphemeris> mSatelliteEphemeris; 230 private List<RealTimeIntegrityModel> mRealTimeIntegrityModels; 231 private List<GnssSatelliteCorrections> mSatelliteCorrections; 232 233 /** Sets the Beidou almanac. */ 234 @NonNull setAlmanac(@ullable GnssAlmanac almanac)235 public Builder setAlmanac(@Nullable GnssAlmanac almanac) { 236 mAlmanac = almanac; 237 return this; 238 } 239 240 /** Sets the Klobuchar ionospheric model. */ 241 @NonNull setIonosphericModel(@ullable KlobucharIonosphericModel ionosphericModel)242 public Builder setIonosphericModel(@Nullable KlobucharIonosphericModel ionosphericModel) { 243 mIonosphericModel = ionosphericModel; 244 return this; 245 } 246 247 /** Sets the UTC model. */ 248 @NonNull setUtcModel(@ullable UtcModel utcModel)249 public Builder setUtcModel(@Nullable UtcModel utcModel) { 250 mUtcModel = utcModel; 251 return this; 252 } 253 254 /** Sets the leap seconds model. */ 255 @NonNull setLeapSecondsModel(@ullable LeapSecondsModel leapSecondsModel)256 public Builder setLeapSecondsModel(@Nullable LeapSecondsModel leapSecondsModel) { 257 mLeapSecondsModel = leapSecondsModel; 258 return this; 259 } 260 261 /** Sets the list of auxiliary informations. */ 262 @NonNull setAuxiliaryInformation( @onNull List<AuxiliaryInformation> auxiliaryInformation)263 public Builder setAuxiliaryInformation( 264 @NonNull List<AuxiliaryInformation> auxiliaryInformation) { 265 mAuxiliaryInformation = auxiliaryInformation; 266 return this; 267 } 268 269 /** Sets the list of time models. */ 270 @NonNull setTimeModels(@onNull List<TimeModel> timeModels)271 public Builder setTimeModels(@NonNull List<TimeModel> timeModels) { 272 mTimeModels = timeModels; 273 return this; 274 } 275 276 /** Sets the list of Beidou ephemeris. */ 277 @NonNull setSatelliteEphemeris( @onNull List<BeidouSatelliteEphemeris> satelliteEphemeris)278 public Builder setSatelliteEphemeris( 279 @NonNull List<BeidouSatelliteEphemeris> satelliteEphemeris) { 280 mSatelliteEphemeris = satelliteEphemeris; 281 return this; 282 } 283 284 /** Sets the list of real time integrity models. */ 285 @NonNull setRealTimeIntegrityModels( @onNull List<RealTimeIntegrityModel> realTimeIntegrityModels)286 public Builder setRealTimeIntegrityModels( 287 @NonNull List<RealTimeIntegrityModel> realTimeIntegrityModels) { 288 mRealTimeIntegrityModels = realTimeIntegrityModels; 289 return this; 290 } 291 292 /** Sets the list of Beidou satellite corrections. */ 293 @NonNull setSatelliteCorrections( @onNull List<GnssSatelliteCorrections> satelliteCorrections)294 public Builder setSatelliteCorrections( 295 @NonNull List<GnssSatelliteCorrections> satelliteCorrections) { 296 mSatelliteCorrections = satelliteCorrections; 297 return this; 298 } 299 300 /** Builds the {@link BeidouAssistance}. */ 301 @NonNull build()302 public BeidouAssistance build() { 303 return new BeidouAssistance(this); 304 } 305 } 306 } 307