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 Glonass assistance. 34 * 35 * @hide 36 */ 37 @FlaggedApi(Flags.FLAG_GNSS_ASSISTANCE_INTERFACE) 38 @SystemApi 39 public final class GlonassAssistance implements Parcelable { 40 41 /** The Glonass almanac. */ 42 @Nullable private final GlonassAlmanac mAlmanac; 43 44 /** The UTC model. */ 45 @Nullable private final UtcModel mUtcModel; 46 47 /** The list of auxiliary informations. */ 48 @NonNull private final List<AuxiliaryInformation> mAuxiliaryInformation; 49 50 /** The list of time models. */ 51 @NonNull private final List<TimeModel> mTimeModels; 52 53 /** The list of Glonass ephemeris. */ 54 @NonNull private final List<GlonassSatelliteEphemeris> mSatelliteEphemeris; 55 56 /** The list of Glonass satellite corrections. */ 57 @NonNull private final List<GnssSatelliteCorrections> mSatelliteCorrections; 58 59 /** The list of real time integrity models. */ 60 @NonNull private final List<RealTimeIntegrityModel> mRealTimeIntegrityModels; 61 GlonassAssistance(Builder builder)62 private GlonassAssistance(Builder builder) { 63 mAlmanac = builder.mAlmanac; 64 mUtcModel = builder.mUtcModel; 65 if (builder.mAuxiliaryInformation != null) { 66 mAuxiliaryInformation = 67 Collections.unmodifiableList(new ArrayList<>(builder.mAuxiliaryInformation)); 68 } else { 69 mAuxiliaryInformation = new ArrayList<>(); 70 } 71 if (builder.mTimeModels != null) { 72 mTimeModels = Collections.unmodifiableList(new ArrayList<>(builder.mTimeModels)); 73 } else { 74 mTimeModels = new ArrayList<>(); 75 } 76 if (builder.mSatelliteEphemeris != null) { 77 mSatelliteEphemeris = 78 Collections.unmodifiableList(new ArrayList<>(builder.mSatelliteEphemeris)); 79 } else { 80 mSatelliteEphemeris = new ArrayList<>(); 81 } 82 if (builder.mSatelliteCorrections != null) { 83 mSatelliteCorrections = 84 Collections.unmodifiableList(new ArrayList<>(builder.mSatelliteCorrections)); 85 } else { 86 mSatelliteCorrections = new ArrayList<>(); 87 } 88 if (builder.mRealTimeIntegrityModels != null) { 89 mRealTimeIntegrityModels = 90 Collections.unmodifiableList(new ArrayList<>(builder.mRealTimeIntegrityModels)); 91 } else { 92 mRealTimeIntegrityModels = new ArrayList<>(); 93 } 94 } 95 96 /** Returns the Glonass almanac. */ 97 @Nullable getAlmanac()98 public GlonassAlmanac getAlmanac() { 99 return mAlmanac; 100 } 101 102 /** Returns the UTC model. */ 103 @Nullable getUtcModel()104 public UtcModel getUtcModel() { 105 return mUtcModel; 106 } 107 108 /** Returns the list of time models. */ 109 @NonNull getTimeModels()110 public List<TimeModel> getTimeModels() { 111 return mTimeModels; 112 } 113 114 /** Returns the list of Glonass satellite ephemeris. */ 115 @NonNull getSatelliteEphemeris()116 public List<GlonassSatelliteEphemeris> getSatelliteEphemeris() { 117 return mSatelliteEphemeris; 118 } 119 120 /** Returns the list of Glonass satellite corrections. */ 121 @NonNull getSatelliteCorrections()122 public List<GnssSatelliteCorrections> getSatelliteCorrections() { 123 return mSatelliteCorrections; 124 } 125 126 /** Returns the list of real time integrity models. */ 127 @NonNull getRealTimeIntegrityModels()128 public List<RealTimeIntegrityModel> getRealTimeIntegrityModels() { 129 return mRealTimeIntegrityModels; 130 } 131 132 /** Returns the list of auxiliary informations. */ 133 @NonNull getAuxiliaryInformation()134 public List<AuxiliaryInformation> getAuxiliaryInformation() { 135 return mAuxiliaryInformation; 136 } 137 138 @Override describeContents()139 public int describeContents() { 140 return 0; 141 } 142 143 @Override writeToParcel(@onNull Parcel dest, int flags)144 public void writeToParcel(@NonNull Parcel dest, int flags) { 145 dest.writeTypedObject(mAlmanac, flags); 146 dest.writeTypedObject(mUtcModel, flags); 147 dest.writeTypedList(mAuxiliaryInformation); 148 dest.writeTypedList(mTimeModels); 149 dest.writeTypedList(mSatelliteEphemeris); 150 dest.writeTypedList(mSatelliteCorrections); 151 dest.writeTypedList(mRealTimeIntegrityModels); 152 } 153 154 @Override 155 @NonNull toString()156 public String toString() { 157 StringBuilder builder = new StringBuilder("GlonassAssistance["); 158 builder.append("almanac = ").append(mAlmanac); 159 builder.append(", utcModel = ").append(mUtcModel); 160 builder.append(", auxiliaryInformation = ").append(mAuxiliaryInformation); 161 builder.append(", timeModels = ").append(mTimeModels); 162 builder.append(", satelliteEphemeris = ").append(mSatelliteEphemeris); 163 builder.append(", satelliteCorrections = ").append(mSatelliteCorrections); 164 builder.append(", realTimeIntegrityModels = ").append(mRealTimeIntegrityModels); 165 builder.append("]"); 166 return builder.toString(); 167 } 168 169 public static final @NonNull Creator<GlonassAssistance> CREATOR = 170 new Creator<GlonassAssistance>() { 171 @Override 172 public GlonassAssistance createFromParcel(Parcel in) { 173 return new GlonassAssistance.Builder() 174 .setAlmanac(in.readTypedObject(GlonassAlmanac.CREATOR)) 175 .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) 176 .setAuxiliaryInformation( 177 in.createTypedArrayList(AuxiliaryInformation.CREATOR)) 178 .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) 179 .setSatelliteEphemeris( 180 in.createTypedArrayList(GlonassSatelliteEphemeris.CREATOR)) 181 .setSatelliteCorrections( 182 in.createTypedArrayList(GnssSatelliteCorrections.CREATOR)) 183 .setRealTimeIntegrityModels( 184 in.createTypedArrayList(RealTimeIntegrityModel.CREATOR)) 185 .build(); 186 } 187 188 @Override 189 public GlonassAssistance[] newArray(int size) { 190 return new GlonassAssistance[size]; 191 } 192 }; 193 194 /** Builder for {@link GlonassAssistance}. */ 195 public static final class Builder { 196 private GlonassAlmanac mAlmanac; 197 private UtcModel mUtcModel; 198 private List<AuxiliaryInformation> mAuxiliaryInformation; 199 private List<TimeModel> mTimeModels; 200 private List<GlonassSatelliteEphemeris> mSatelliteEphemeris; 201 private List<GnssSatelliteCorrections> mSatelliteCorrections; 202 private List<RealTimeIntegrityModel> mRealTimeIntegrityModels; 203 204 /** Sets the Glonass almanac. */ 205 @NonNull setAlmanac(@ullable GlonassAlmanac almanac)206 public Builder setAlmanac(@Nullable GlonassAlmanac almanac) { 207 mAlmanac = almanac; 208 return this; 209 } 210 211 /** Sets the UTC model. */ 212 @NonNull setUtcModel(@ullable UtcModel utcModel)213 public Builder setUtcModel(@Nullable UtcModel utcModel) { 214 mUtcModel = utcModel; 215 return this; 216 } 217 218 /** Sets the list of auxiliary informations. */ 219 @NonNull setAuxiliaryInformation( @onNull List<AuxiliaryInformation> auxiliaryInformation)220 public Builder setAuxiliaryInformation( 221 @NonNull List<AuxiliaryInformation> auxiliaryInformation) { 222 mAuxiliaryInformation = auxiliaryInformation; 223 return this; 224 } 225 226 /** Sets the list of time models. */ 227 @NonNull setTimeModels(@onNull List<TimeModel> timeModels)228 public Builder setTimeModels(@NonNull List<TimeModel> timeModels) { 229 mTimeModels = timeModels; 230 return this; 231 } 232 233 /** Sets the list of Glonass satellite ephemeris. */ 234 @NonNull setSatelliteEphemeris( @onNull List<GlonassSatelliteEphemeris> satelliteEphemeris)235 public Builder setSatelliteEphemeris( 236 @NonNull List<GlonassSatelliteEphemeris> satelliteEphemeris) { 237 mSatelliteEphemeris = satelliteEphemeris; 238 return this; 239 } 240 241 /** Sets the list of Glonass satellite corrections. */ 242 @NonNull setSatelliteCorrections( @onNull List<GnssSatelliteCorrections> satelliteCorrections)243 public Builder setSatelliteCorrections( 244 @NonNull List<GnssSatelliteCorrections> satelliteCorrections) { 245 mSatelliteCorrections = satelliteCorrections; 246 return this; 247 } 248 249 /** Sets the list of real time integrity models. */ 250 @NonNull setRealTimeIntegrityModels( @onNull List<RealTimeIntegrityModel> realTimeIntegrityModels)251 public Builder setRealTimeIntegrityModels( 252 @NonNull List<RealTimeIntegrityModel> realTimeIntegrityModels) { 253 mRealTimeIntegrityModels = realTimeIntegrityModels; 254 return this; 255 } 256 257 /** Builds the {@link GlonassAssistance}. */ 258 @NonNull build()259 public GlonassAssistance build() { 260 return new GlonassAssistance(this); 261 } 262 } 263 } 264