• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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