diff options
author | 2024-12-18 12:31:10 -0800 | |
---|---|---|
committer | 2024-12-18 12:31:10 -0800 | |
commit | 98b4a9ce5c2c13b7ada74b16dbe7cd9bc114b368 (patch) | |
tree | 67d1803b42fae42c3d34e68773bac964a3525e88 /location | |
parent | ab3e9c5e68fa776f7dcfa80d9122ed9c83d663cb (diff) |
Add AuxiliaryInformation to GnssAssistance
- Add AuxiliaryInformation to GnssAssistance
- Remove NullableCollection lint suppression in all Assistance.Builder classes set methods
Bug: 358381377
Bug: 384869212
Test: atest CtsLocationNoneTestCases
Flag: android.location.flags.gnss_assistance_interface
Change-Id: Ibdf2aa20ecc63ae623e02beeaa541d07ac8c487b
Diffstat (limited to 'location')
-rw-r--r-- | location/api/system-current.txt | 79 | ||||
-rw-r--r-- | location/java/android/location/AuxiliaryInformation.java | 274 | ||||
-rw-r--r-- | location/java/android/location/BeidouAssistance.java | 36 | ||||
-rw-r--r-- | location/java/android/location/GalileoAssistance.java | 36 | ||||
-rw-r--r-- | location/java/android/location/GlonassAssistance.java | 39 | ||||
-rw-r--r-- | location/java/android/location/GpsAssistance.java | 45 | ||||
-rw-r--r-- | location/java/android/location/QzssAssistance.java | 62 | ||||
-rw-r--r-- | location/java/android/location/RealTimeIntegrityModel.java | 77 |
8 files changed, 532 insertions, 116 deletions
diff --git a/location/api/system-current.txt b/location/api/system-current.txt index 023bad26e4f5..eb19ba84ee62 100644 --- a/location/api/system-current.txt +++ b/location/api/system-current.txt @@ -1,6 +1,29 @@ // Signature format: 2.0 package android.location { + @FlaggedApi("android.location.flags.gnss_assistance_interface") public final class AuxiliaryInformation implements android.os.Parcelable { + method public int describeContents(); + method @NonNull public java.util.List<android.location.GnssSignalType> getAvailableSignalTypes(); + method @IntRange(from=0xfffffff9, to=6) public int getFrequencyChannelNumber(); + method public int getSatType(); + method @IntRange(from=1) public int getSvid(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field public static final int BDS_B1C_ORBIT_TYPE_GEO = 1; // 0x1 + field public static final int BDS_B1C_ORBIT_TYPE_IGSO = 2; // 0x2 + field public static final int BDS_B1C_ORBIT_TYPE_MEO = 3; // 0x3 + field public static final int BDS_B1C_ORBIT_TYPE_UNDEFINED = 0; // 0x0 + field @NonNull public static final android.os.Parcelable.Creator<android.location.AuxiliaryInformation> CREATOR; + } + + public static final class AuxiliaryInformation.Builder { + ctor public AuxiliaryInformation.Builder(); + method @NonNull public android.location.AuxiliaryInformation build(); + method @NonNull public android.location.AuxiliaryInformation.Builder setAvailableSignalTypes(@NonNull java.util.List<android.location.GnssSignalType>); + method @NonNull public android.location.AuxiliaryInformation.Builder setFrequencyChannelNumber(@IntRange(from=0xfffffff9, to=6) int); + method @NonNull public android.location.AuxiliaryInformation.Builder setSatType(int); + method @NonNull public android.location.AuxiliaryInformation.Builder setSvid(@IntRange(from=1) int); + } + public abstract class BatchedLocationCallback { ctor public BatchedLocationCallback(); method public void onLocationBatch(java.util.List<android.location.Location>); @@ -9,6 +32,7 @@ package android.location { @FlaggedApi("android.location.flags.gnss_assistance_interface") public final class BeidouAssistance implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.location.GnssAlmanac getAlmanac(); + method @Nullable public android.location.AuxiliaryInformation getAuxiliaryInformation(); method @Nullable public android.location.KlobucharIonosphericModel getIonosphericModel(); method @Nullable public android.location.LeapSecondsModel getLeapSecondsModel(); method @NonNull public java.util.List<android.location.RealTimeIntegrityModel> getRealTimeIntegrityModels(); @@ -24,12 +48,13 @@ package android.location { ctor public BeidouAssistance.Builder(); method @NonNull public android.location.BeidouAssistance build(); method @NonNull public android.location.BeidouAssistance.Builder setAlmanac(@Nullable android.location.GnssAlmanac); + method @NonNull public android.location.BeidouAssistance.Builder setAuxiliaryInformation(@Nullable android.location.AuxiliaryInformation); method @NonNull public android.location.BeidouAssistance.Builder setIonosphericModel(@Nullable android.location.KlobucharIonosphericModel); method @NonNull public android.location.BeidouAssistance.Builder setLeapSecondsModel(@Nullable android.location.LeapSecondsModel); - method @NonNull public android.location.BeidouAssistance.Builder setRealTimeIntegrityModels(@Nullable java.util.List<android.location.RealTimeIntegrityModel>); - method @NonNull public android.location.BeidouAssistance.Builder setSatelliteCorrections(@Nullable java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); - method @NonNull public android.location.BeidouAssistance.Builder setSatelliteEphemeris(@Nullable java.util.List<android.location.BeidouSatelliteEphemeris>); - method @NonNull public android.location.BeidouAssistance.Builder setTimeModels(@Nullable java.util.List<android.location.TimeModel>); + method @NonNull public android.location.BeidouAssistance.Builder setRealTimeIntegrityModels(@NonNull java.util.List<android.location.RealTimeIntegrityModel>); + method @NonNull public android.location.BeidouAssistance.Builder setSatelliteCorrections(@NonNull java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); + method @NonNull public android.location.BeidouAssistance.Builder setSatelliteEphemeris(@NonNull java.util.List<android.location.BeidouSatelliteEphemeris>); + method @NonNull public android.location.BeidouAssistance.Builder setTimeModels(@NonNull java.util.List<android.location.TimeModel>); method @NonNull public android.location.BeidouAssistance.Builder setUtcModel(@Nullable android.location.UtcModel); } @@ -151,6 +176,7 @@ package android.location { @FlaggedApi("android.location.flags.gnss_assistance_interface") public final class GalileoAssistance implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.location.GnssAlmanac getAlmanac(); + method @Nullable public android.location.AuxiliaryInformation getAuxiliaryInformation(); method @Nullable public android.location.KlobucharIonosphericModel getIonosphericModel(); method @Nullable public android.location.LeapSecondsModel getLeapSecondsModel(); method @NonNull public java.util.List<android.location.RealTimeIntegrityModel> getRealTimeIntegrityModels(); @@ -166,12 +192,13 @@ package android.location { ctor public GalileoAssistance.Builder(); method @NonNull public android.location.GalileoAssistance build(); method @NonNull public android.location.GalileoAssistance.Builder setAlmanac(@Nullable android.location.GnssAlmanac); + method @NonNull public android.location.GalileoAssistance.Builder setAuxiliaryInformation(@Nullable android.location.AuxiliaryInformation); method @NonNull public android.location.GalileoAssistance.Builder setIonosphericModel(@Nullable android.location.KlobucharIonosphericModel); method @NonNull public android.location.GalileoAssistance.Builder setLeapSecondsModel(@Nullable android.location.LeapSecondsModel); - method @NonNull public android.location.GalileoAssistance.Builder setRealTimeIntegrityModels(@Nullable java.util.List<android.location.RealTimeIntegrityModel>); - method @NonNull public android.location.GalileoAssistance.Builder setSatelliteCorrections(@Nullable java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); - method @NonNull public android.location.GalileoAssistance.Builder setSatelliteEphemeris(@Nullable java.util.List<android.location.GalileoSatelliteEphemeris>); - method @NonNull public android.location.GalileoAssistance.Builder setTimeModels(@Nullable java.util.List<android.location.TimeModel>); + method @NonNull public android.location.GalileoAssistance.Builder setRealTimeIntegrityModels(@NonNull java.util.List<android.location.RealTimeIntegrityModel>); + method @NonNull public android.location.GalileoAssistance.Builder setSatelliteCorrections(@NonNull java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); + method @NonNull public android.location.GalileoAssistance.Builder setSatelliteEphemeris(@NonNull java.util.List<android.location.GalileoSatelliteEphemeris>); + method @NonNull public android.location.GalileoAssistance.Builder setTimeModels(@NonNull java.util.List<android.location.TimeModel>); method @NonNull public android.location.GalileoAssistance.Builder setUtcModel(@Nullable android.location.UtcModel); } @@ -319,6 +346,7 @@ package android.location { @FlaggedApi("android.location.flags.gnss_assistance_interface") public final class GlonassAssistance implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.location.GlonassAlmanac getAlmanac(); + method @Nullable public android.location.AuxiliaryInformation getAuxiliaryInformation(); method @NonNull public java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections> getSatelliteCorrections(); method @NonNull public java.util.List<android.location.GlonassSatelliteEphemeris> getSatelliteEphemeris(); method @NonNull public java.util.List<android.location.TimeModel> getTimeModels(); @@ -331,9 +359,10 @@ package android.location { ctor public GlonassAssistance.Builder(); method @NonNull public android.location.GlonassAssistance build(); method @NonNull public android.location.GlonassAssistance.Builder setAlmanac(@Nullable android.location.GlonassAlmanac); - method @NonNull public android.location.GlonassAssistance.Builder setSatelliteCorrections(@Nullable java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); - method @NonNull public android.location.GlonassAssistance.Builder setSatelliteEphemeris(@Nullable java.util.List<android.location.GlonassSatelliteEphemeris>); - method @NonNull public android.location.GlonassAssistance.Builder setTimeModels(@Nullable java.util.List<android.location.TimeModel>); + method @NonNull public android.location.GlonassAssistance.Builder setAuxiliaryInformation(@Nullable android.location.AuxiliaryInformation); + method @NonNull public android.location.GlonassAssistance.Builder setSatelliteCorrections(@NonNull java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); + method @NonNull public android.location.GlonassAssistance.Builder setSatelliteEphemeris(@NonNull java.util.List<android.location.GlonassSatelliteEphemeris>); + method @NonNull public android.location.GlonassAssistance.Builder setTimeModels(@NonNull java.util.List<android.location.TimeModel>); method @NonNull public android.location.GlonassAssistance.Builder setUtcModel(@Nullable android.location.UtcModel); } @@ -688,6 +717,7 @@ package android.location { @FlaggedApi("android.location.flags.gnss_assistance_interface") public final class GpsAssistance implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.location.GnssAlmanac getAlmanac(); + method @Nullable public android.location.AuxiliaryInformation getAuxiliaryInformation(); method @Nullable public android.location.KlobucharIonosphericModel getIonosphericModel(); method @Nullable public android.location.LeapSecondsModel getLeapSecondsModel(); method @NonNull public java.util.List<android.location.RealTimeIntegrityModel> getRealTimeIntegrityModels(); @@ -703,12 +733,13 @@ package android.location { ctor public GpsAssistance.Builder(); method @NonNull public android.location.GpsAssistance build(); method @NonNull public android.location.GpsAssistance.Builder setAlmanac(@Nullable android.location.GnssAlmanac); + method @NonNull public android.location.GpsAssistance.Builder setAuxiliaryInformation(@Nullable android.location.AuxiliaryInformation); method @NonNull public android.location.GpsAssistance.Builder setIonosphericModel(@Nullable android.location.KlobucharIonosphericModel); method @NonNull public android.location.GpsAssistance.Builder setLeapSecondsModel(@Nullable android.location.LeapSecondsModel); - method @NonNull public android.location.GpsAssistance.Builder setRealTimeIntegrityModels(@Nullable java.util.List<android.location.RealTimeIntegrityModel>); - method @NonNull public android.location.GpsAssistance.Builder setSatelliteCorrections(@Nullable java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); - method @NonNull public android.location.GpsAssistance.Builder setSatelliteEphemeris(@Nullable java.util.List<android.location.GpsSatelliteEphemeris>); - method @NonNull public android.location.GpsAssistance.Builder setTimeModels(@Nullable java.util.List<android.location.TimeModel>); + method @NonNull public android.location.GpsAssistance.Builder setRealTimeIntegrityModels(@NonNull java.util.List<android.location.RealTimeIntegrityModel>); + method @NonNull public android.location.GpsAssistance.Builder setSatelliteCorrections(@NonNull java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); + method @NonNull public android.location.GpsAssistance.Builder setSatelliteEphemeris(@NonNull java.util.List<android.location.GpsSatelliteEphemeris>); + method @NonNull public android.location.GpsAssistance.Builder setTimeModels(@NonNull java.util.List<android.location.TimeModel>); method @NonNull public android.location.GpsAssistance.Builder setUtcModel(@Nullable android.location.UtcModel); } @@ -1222,6 +1253,7 @@ package android.location { @FlaggedApi("android.location.flags.gnss_assistance_interface") public final class QzssAssistance implements android.os.Parcelable { method public int describeContents(); method @Nullable public android.location.GnssAlmanac getAlmanac(); + method @Nullable public android.location.AuxiliaryInformation getAuxiliaryInformation(); method @Nullable public android.location.KlobucharIonosphericModel getIonosphericModel(); method @Nullable public android.location.LeapSecondsModel getLeapSecondsModel(); method @NonNull public java.util.List<android.location.RealTimeIntegrityModel> getRealTimeIntegrityModels(); @@ -1237,12 +1269,13 @@ package android.location { ctor public QzssAssistance.Builder(); method @NonNull public android.location.QzssAssistance build(); method @NonNull public android.location.QzssAssistance.Builder setAlmanac(@Nullable android.location.GnssAlmanac); + method @NonNull public android.location.QzssAssistance.Builder setAuxiliaryInformation(@Nullable android.location.AuxiliaryInformation); method @NonNull public android.location.QzssAssistance.Builder setIonosphericModel(@Nullable android.location.KlobucharIonosphericModel); method @NonNull public android.location.QzssAssistance.Builder setLeapSecondsModel(@Nullable android.location.LeapSecondsModel); - method @NonNull public android.location.QzssAssistance.Builder setRealTimeIntegrityModels(@Nullable java.util.List<android.location.RealTimeIntegrityModel>); - method @NonNull public android.location.QzssAssistance.Builder setSatelliteCorrections(@Nullable java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); - method @NonNull public android.location.QzssAssistance.Builder setSatelliteEphemeris(@Nullable java.util.List<android.location.QzssSatelliteEphemeris>); - method @NonNull public android.location.QzssAssistance.Builder setTimeModels(@Nullable java.util.List<android.location.TimeModel>); + method @NonNull public android.location.QzssAssistance.Builder setRealTimeIntegrityModels(@NonNull java.util.List<android.location.RealTimeIntegrityModel>); + method @NonNull public android.location.QzssAssistance.Builder setSatelliteCorrections(@NonNull java.util.List<android.location.GnssAssistance.GnssSatelliteCorrections>); + method @NonNull public android.location.QzssAssistance.Builder setSatelliteEphemeris(@NonNull java.util.List<android.location.QzssSatelliteEphemeris>); + method @NonNull public android.location.QzssAssistance.Builder setTimeModels(@NonNull java.util.List<android.location.TimeModel>); method @NonNull public android.location.QzssAssistance.Builder setUtcModel(@Nullable android.location.UtcModel); } @@ -1273,11 +1306,11 @@ package android.location { method public int describeContents(); method @NonNull public String getAdvisoryNumber(); method @NonNull public String getAdvisoryType(); + method @NonNull public java.util.List<android.location.GnssSignalType> getBadSignalTypes(); + method @IntRange(from=1, to=206) public int getBadSvid(); method @IntRange(from=0) public long getEndDateSeconds(); method @IntRange(from=0) public long getPublishDateSeconds(); method @IntRange(from=0) public long getStartDateSeconds(); - method @IntRange(from=1, to=206) public int getSvid(); - method public boolean isUsable(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.location.RealTimeIntegrityModel> CREATOR; } @@ -1287,11 +1320,11 @@ package android.location { method @NonNull public android.location.RealTimeIntegrityModel build(); method @NonNull public android.location.RealTimeIntegrityModel.Builder setAdvisoryNumber(@NonNull String); method @NonNull public android.location.RealTimeIntegrityModel.Builder setAdvisoryType(@NonNull String); + method @NonNull public android.location.RealTimeIntegrityModel.Builder setBadSignalTypes(@NonNull java.util.List<android.location.GnssSignalType>); + method @NonNull public android.location.RealTimeIntegrityModel.Builder setBadSvid(@IntRange(from=1, to=206) int); method @NonNull public android.location.RealTimeIntegrityModel.Builder setEndDateSeconds(@IntRange(from=0) long); method @NonNull public android.location.RealTimeIntegrityModel.Builder setPublishDateSeconds(@IntRange(from=0) long); method @NonNull public android.location.RealTimeIntegrityModel.Builder setStartDateSeconds(@IntRange(from=0) long); - method @NonNull public android.location.RealTimeIntegrityModel.Builder setSvid(@IntRange(from=1, to=206) int); - method @NonNull public android.location.RealTimeIntegrityModel.Builder setUsable(boolean); } @FlaggedApi("android.location.flags.gnss_assistance_interface") public final class SatelliteEphemerisTime implements android.os.Parcelable { diff --git a/location/java/android/location/AuxiliaryInformation.java b/location/java/android/location/AuxiliaryInformation.java new file mode 100644 index 000000000000..601c87e69b70 --- /dev/null +++ b/location/java/android/location/AuxiliaryInformation.java @@ -0,0 +1,274 @@ +/* + * Copyright (C) 2024 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.FlaggedApi; +import android.annotation.IntDef; +import android.annotation.IntRange; +import android.annotation.NonNull; +import android.annotation.SystemApi; +import android.location.flags.Flags; +import android.os.Parcel; +import android.os.Parcelable; + +import com.android.internal.util.Preconditions; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * A class contains parameters to provide additional assistance information dependent on the GNSS + * constellation. + * + * @hide + */ +@FlaggedApi(Flags.FLAG_GNSS_ASSISTANCE_INTERFACE) +@SystemApi +public final class AuxiliaryInformation implements Parcelable { + + /** + * BDS B1C Satellite orbit type. + * + * <p>This is defined in BDS-SIS-ICD-B1I-3.0, section 3.1. + * + * @hide + */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + BDS_B1C_ORBIT_TYPE_UNDEFINED, + BDS_B1C_ORBIT_TYPE_GEO, + BDS_B1C_ORBIT_TYPE_IGSO, + BDS_B1C_ORBIT_TYPE_MEO + }) + public @interface BeidouB1CSatelliteOrbitType {} + + /** + * The following enumerations must be in sync with the values declared in + * AuxiliaryInformation.aidl. + */ + + /** The orbit type is undefined. */ + public static final int BDS_B1C_ORBIT_TYPE_UNDEFINED = 0; + + /** The orbit type is GEO. */ + public static final int BDS_B1C_ORBIT_TYPE_GEO = 1; + + /** The orbit type is IGSO. */ + public static final int BDS_B1C_ORBIT_TYPE_IGSO = 2; + + /** The orbit type is MEO. */ + public static final int BDS_B1C_ORBIT_TYPE_MEO = 3; + + /** + * Pseudo-random or satellite ID number for the satellite, a.k.a. Space Vehicle (SV), or OSN + * number for Glonass. + * + * <p>The distinction is made by looking at the constellation field. Values must be in the range + * of: + * + * <p>- GPS: 1-32 + * + * <p>- GLONASS: 1-25 + * + * <p>- QZSS: 183-206 + * + * <p>- Galileo: 1-36 + * + * <p>- Beidou: 1-63 + */ + private final int mSvid; + + /** The list of available signal types for the satellite. */ + @NonNull private final List<GnssSignalType> mAvailableSignalTypes; + + /** + * Glonass carrier frequency number of the satellite. This is required for Glonass. + * + * <p>This is defined in Glonass ICD v5.1 section 3.3.1.1. + */ + private final int mFrequencyChannelNumber; + + /** BDS B1C satellite orbit type. This is required for Beidou. */ + private final @BeidouB1CSatelliteOrbitType int mSatType; + + private AuxiliaryInformation(Builder builder) { + // Allow Svid beyond the range to support potential future extensibility. + Preconditions.checkArgument(builder.mSvid >= 1); + Preconditions.checkNotNull( + builder.mAvailableSignalTypes, "AvailableSignalTypes cannot be null"); + Preconditions.checkArgument(builder.mAvailableSignalTypes.size() > 0); + Preconditions.checkArgumentInRange( + builder.mFrequencyChannelNumber, -7, 6, "FrequencyChannelNumber"); + Preconditions.checkArgumentInRange( + builder.mSatType, BDS_B1C_ORBIT_TYPE_UNDEFINED, BDS_B1C_ORBIT_TYPE_MEO, "SatType"); + mSvid = builder.mSvid; + mAvailableSignalTypes = + Collections.unmodifiableList(new ArrayList<>(builder.mAvailableSignalTypes)); + mFrequencyChannelNumber = builder.mFrequencyChannelNumber; + mSatType = builder.mSatType; + } + + /** + * Returns the Pseudo-random or satellite ID number for the satellite, a.k.a. Space Vehicle + * (SV), or OSN number for Glonass. + * + * <p>The distinction is made by looking at the constellation field. Values must be in the range + * of: + * + * <p>- GPS: 1-32 + * + * <p>- GLONASS: 1-25 + * + * <p>- QZSS: 183-206 + * + * <p>- Galileo: 1-36 + * + * <p>- Beidou: 1-63 + */ + @IntRange(from = 1) + public int getSvid() { + return mSvid; + } + + /** Returns the list of available signal types for the satellite. */ + @NonNull + public List<GnssSignalType> getAvailableSignalTypes() { + return mAvailableSignalTypes; + } + + /** Returns the Glonass carrier frequency number of the satellite. */ + @IntRange(from = -7, to = 6) + public int getFrequencyChannelNumber() { + return mFrequencyChannelNumber; + } + + /** Returns the BDS B1C satellite orbit type. */ + @BeidouB1CSatelliteOrbitType + public int getSatType() { + return mSatType; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + dest.writeInt(mSvid); + dest.writeTypedList(mAvailableSignalTypes); + dest.writeInt(mFrequencyChannelNumber); + dest.writeInt(mSatType); + } + + @Override + @NonNull + public String toString() { + StringBuilder builder = new StringBuilder("AuxiliaryInformation["); + builder.append("svid = ").append(mSvid); + builder.append(", availableSignalTypes = ").append(mAvailableSignalTypes); + builder.append(", frequencyChannelNumber = ").append(mFrequencyChannelNumber); + builder.append(", satType = ").append(mSatType); + builder.append("]"); + return builder.toString(); + } + + public static final @NonNull Parcelable.Creator<AuxiliaryInformation> CREATOR = + new Parcelable.Creator<AuxiliaryInformation>() { + @Override + public AuxiliaryInformation createFromParcel(@NonNull Parcel in) { + return new AuxiliaryInformation.Builder() + .setSvid(in.readInt()) + .setAvailableSignalTypes( + in.createTypedArrayList(GnssSignalType.CREATOR)) + .setFrequencyChannelNumber(in.readInt()) + .setSatType(in.readInt()) + .build(); + } + + @Override + public AuxiliaryInformation[] newArray(int size) { + return new AuxiliaryInformation[size]; + } + }; + + /** A builder class for {@link AuxiliaryInformation}. */ + public static final class Builder { + private int mSvid; + private List<GnssSignalType> mAvailableSignalTypes; + private int mFrequencyChannelNumber; + private @BeidouB1CSatelliteOrbitType int mSatType; + + /** + * Sets the Pseudo-random or satellite ID number for the satellite, a.k.a. Space Vehicle + * (SV), or OSN number for Glonass. + * + * <p>The distinction is made by looking at the constellation field. Values must be in the + * range of: + * + * <p>- GPS: 1-32 + * + * <p>- GLONASS: 1-25 + * + * <p>- QZSS: 183-206 + * + * <p>- Galileo: 1-36 + * + * <p>- Beidou: 1-63 + */ + @NonNull + public Builder setSvid(@IntRange(from = 1) int svid) { + mSvid = svid; + return this; + } + + /** + * Sets the list of available signal types for the satellite. + * + * <p>The list must be set and cannot be an empty list. + */ + @NonNull + public Builder setAvailableSignalTypes(@NonNull List<GnssSignalType> availableSignalTypes) { + mAvailableSignalTypes = availableSignalTypes; + return this; + } + + /** Sets the Glonass carrier frequency number of the satellite. */ + @NonNull + public Builder setFrequencyChannelNumber( + @IntRange(from = -7, to = 6) int frequencyChannelNumber) { + mFrequencyChannelNumber = frequencyChannelNumber; + return this; + } + + /** Sets the BDS B1C satellite orbit type. */ + @NonNull + public Builder setSatType(@BeidouB1CSatelliteOrbitType int satType) { + mSatType = satType; + return this; + } + + /** Builds a {@link AuxiliaryInformation} instance as specified by this builder. */ + @NonNull + public AuxiliaryInformation build() { + return new AuxiliaryInformation(this); + } + } +} diff --git a/location/java/android/location/BeidouAssistance.java b/location/java/android/location/BeidouAssistance.java index f55249e605a0..e35493ed1007 100644 --- a/location/java/android/location/BeidouAssistance.java +++ b/location/java/android/location/BeidouAssistance.java @@ -19,7 +19,6 @@ package android.location; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; -import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.location.GnssAssistance.GnssSatelliteCorrections; import android.location.flags.Flags; @@ -51,6 +50,9 @@ public final class BeidouAssistance implements Parcelable { /** The leap seconds model. */ @Nullable private final LeapSecondsModel mLeapSecondsModel; + /** The auxiliary information. */ + @Nullable private final AuxiliaryInformation mAuxiliaryInformation; + /** The list of time models. */ @NonNull private final List<TimeModel> mTimeModels; @@ -68,6 +70,7 @@ public final class BeidouAssistance implements Parcelable { mIonosphericModel = builder.mIonosphericModel; mUtcModel = builder.mUtcModel; mLeapSecondsModel = builder.mLeapSecondsModel; + mAuxiliaryInformation = builder.mAuxiliaryInformation; if (builder.mTimeModels != null) { mTimeModels = Collections.unmodifiableList(new ArrayList<>(builder.mTimeModels)); } else { @@ -117,6 +120,12 @@ public final class BeidouAssistance implements Parcelable { return mLeapSecondsModel; } + /** Returns the auxiliary information. */ + @Nullable + public AuxiliaryInformation getAuxiliaryInformation() { + return mAuxiliaryInformation; + } + /** Returns the list of time models. */ @NonNull public List<TimeModel> getTimeModels() { @@ -154,6 +163,7 @@ public final class BeidouAssistance implements Parcelable { builder.append(", ionosphericModel = ").append(mIonosphericModel); builder.append(", utcModel = ").append(mUtcModel); builder.append(", leapSecondsModel = ").append(mLeapSecondsModel); + builder.append(", auxiliaryInformation = ").append(mAuxiliaryInformation); builder.append(", timeModels = ").append(mTimeModels); builder.append(", satelliteEphemeris = ").append(mSatelliteEphemeris); builder.append(", realTimeIntegrityModels = ").append(mRealTimeIntegrityModels); @@ -168,6 +178,7 @@ public final class BeidouAssistance implements Parcelable { dest.writeTypedObject(mIonosphericModel, flags); dest.writeTypedObject(mUtcModel, flags); dest.writeTypedObject(mLeapSecondsModel, flags); + dest.writeTypedObject(mAuxiliaryInformation, flags); dest.writeTypedList(mTimeModels); dest.writeTypedList(mSatelliteEphemeris); dest.writeTypedList(mRealTimeIntegrityModels); @@ -184,6 +195,8 @@ public final class BeidouAssistance implements Parcelable { in.readTypedObject(KlobucharIonosphericModel.CREATOR)) .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) .setLeapSecondsModel(in.readTypedObject(LeapSecondsModel.CREATOR)) + .setAuxiliaryInformation( + in.readTypedObject(AuxiliaryInformation.CREATOR)) .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) .setSatelliteEphemeris( in.createTypedArrayList(BeidouSatelliteEphemeris.CREATOR)) @@ -206,6 +219,7 @@ public final class BeidouAssistance implements Parcelable { private KlobucharIonosphericModel mIonosphericModel; private UtcModel mUtcModel; private LeapSecondsModel mLeapSecondsModel; + private AuxiliaryInformation mAuxiliaryInformation; private List<TimeModel> mTimeModels; private List<BeidouSatelliteEphemeris> mSatelliteEphemeris; private List<RealTimeIntegrityModel> mRealTimeIntegrityModels; @@ -239,10 +253,17 @@ public final class BeidouAssistance implements Parcelable { return this; } + /** Sets the auxiliary information. */ + @NonNull + public Builder setAuxiliaryInformation( + @Nullable AuxiliaryInformation auxiliaryInformation) { + mAuxiliaryInformation = auxiliaryInformation; + return this; + } + /** Sets the list of time models. */ @NonNull - public Builder setTimeModels( - @Nullable @SuppressLint("NullableCollection") List<TimeModel> timeModels) { + public Builder setTimeModels(@NonNull List<TimeModel> timeModels) { mTimeModels = timeModels; return this; } @@ -250,8 +271,7 @@ public final class BeidouAssistance implements Parcelable { /** Sets the list of Beidou ephemeris. */ @NonNull public Builder setSatelliteEphemeris( - @Nullable @SuppressLint("NullableCollection") - List<BeidouSatelliteEphemeris> satelliteEphemeris) { + @NonNull List<BeidouSatelliteEphemeris> satelliteEphemeris) { mSatelliteEphemeris = satelliteEphemeris; return this; } @@ -259,8 +279,7 @@ public final class BeidouAssistance implements Parcelable { /** Sets the list of real time integrity models. */ @NonNull public Builder setRealTimeIntegrityModels( - @Nullable @SuppressLint("NullableCollection") - List<RealTimeIntegrityModel> realTimeIntegrityModels) { + @NonNull List<RealTimeIntegrityModel> realTimeIntegrityModels) { mRealTimeIntegrityModels = realTimeIntegrityModels; return this; } @@ -268,8 +287,7 @@ public final class BeidouAssistance implements Parcelable { /** Sets the list of Beidou satellite corrections. */ @NonNull public Builder setSatelliteCorrections( - @Nullable @SuppressLint("NullableCollection") - List<GnssSatelliteCorrections> satelliteCorrections) { + @NonNull List<GnssSatelliteCorrections> satelliteCorrections) { mSatelliteCorrections = satelliteCorrections; return this; } diff --git a/location/java/android/location/GalileoAssistance.java b/location/java/android/location/GalileoAssistance.java index 07c5bab856db..8a09e6634d09 100644 --- a/location/java/android/location/GalileoAssistance.java +++ b/location/java/android/location/GalileoAssistance.java @@ -19,7 +19,6 @@ package android.location; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; -import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.location.GnssAssistance.GnssSatelliteCorrections; import android.location.flags.Flags; @@ -51,6 +50,9 @@ public final class GalileoAssistance implements Parcelable { /** The leap seconds model. */ @Nullable private final LeapSecondsModel mLeapSecondsModel; + /** The auxiliary information. */ + @Nullable private final AuxiliaryInformation mAuxiliaryInformation; + /** The list of time models. */ @NonNull private final List<TimeModel> mTimeModels; @@ -68,6 +70,7 @@ public final class GalileoAssistance implements Parcelable { mIonosphericModel = builder.mIonosphericModel; mUtcModel = builder.mUtcModel; mLeapSecondsModel = builder.mLeapSecondsModel; + mAuxiliaryInformation = builder.mAuxiliaryInformation; if (builder.mTimeModels != null) { mTimeModels = Collections.unmodifiableList(new ArrayList<>(builder.mTimeModels)); } else { @@ -117,6 +120,12 @@ public final class GalileoAssistance implements Parcelable { return mLeapSecondsModel; } + /** Returns the auxiliary information. */ + @Nullable + public AuxiliaryInformation getAuxiliaryInformation() { + return mAuxiliaryInformation; + } + /** Returns the list of time models. */ @NonNull public List<TimeModel> getTimeModels() { @@ -152,6 +161,7 @@ public final class GalileoAssistance implements Parcelable { dest.writeTypedObject(mIonosphericModel, flags); dest.writeTypedObject(mUtcModel, flags); dest.writeTypedObject(mLeapSecondsModel, flags); + dest.writeTypedObject(mAuxiliaryInformation, flags); dest.writeTypedList(mTimeModels); dest.writeTypedList(mSatelliteEphemeris); dest.writeTypedList(mRealTimeIntegrityModels); @@ -166,6 +176,7 @@ public final class GalileoAssistance implements Parcelable { builder.append(", ionosphericModel = ").append(mIonosphericModel); builder.append(", utcModel = ").append(mUtcModel); builder.append(", leapSecondsModel = ").append(mLeapSecondsModel); + builder.append(", auxiliaryInformation = ").append(mAuxiliaryInformation); builder.append(", timeModels = ").append(mTimeModels); builder.append(", satelliteEphemeris = ").append(mSatelliteEphemeris); builder.append(", realTimeIntegrityModels = ").append(mRealTimeIntegrityModels); @@ -184,6 +195,8 @@ public final class GalileoAssistance implements Parcelable { in.readTypedObject(KlobucharIonosphericModel.CREATOR)) .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) .setLeapSecondsModel(in.readTypedObject(LeapSecondsModel.CREATOR)) + .setAuxiliaryInformation( + in.readTypedObject(AuxiliaryInformation.CREATOR)) .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) .setSatelliteEphemeris( in.createTypedArrayList(GalileoSatelliteEphemeris.CREATOR)) @@ -206,6 +219,7 @@ public final class GalileoAssistance implements Parcelable { private KlobucharIonosphericModel mIonosphericModel; private UtcModel mUtcModel; private LeapSecondsModel mLeapSecondsModel; + private AuxiliaryInformation mAuxiliaryInformation; private List<TimeModel> mTimeModels; private List<GalileoSatelliteEphemeris> mSatelliteEphemeris; private List<RealTimeIntegrityModel> mRealTimeIntegrityModels; @@ -239,10 +253,17 @@ public final class GalileoAssistance implements Parcelable { return this; } + /** Sets the auxiliary information. */ + @NonNull + public Builder setAuxiliaryInformation( + @Nullable AuxiliaryInformation auxiliaryInformation) { + mAuxiliaryInformation = auxiliaryInformation; + return this; + } + /** Sets the list of time models. */ @NonNull - public Builder setTimeModels( - @Nullable @SuppressLint("NullableCollection") List<TimeModel> timeModels) { + public Builder setTimeModels(@NonNull List<TimeModel> timeModels) { mTimeModels = timeModels; return this; } @@ -250,8 +271,7 @@ public final class GalileoAssistance implements Parcelable { /** Sets the list of Galileo ephemeris. */ @NonNull public Builder setSatelliteEphemeris( - @Nullable @SuppressLint("NullableCollection") - List<GalileoSatelliteEphemeris> satelliteEphemeris) { + @NonNull List<GalileoSatelliteEphemeris> satelliteEphemeris) { mSatelliteEphemeris = satelliteEphemeris; return this; } @@ -259,8 +279,7 @@ public final class GalileoAssistance implements Parcelable { /** Sets the list of real time integrity models. */ @NonNull public Builder setRealTimeIntegrityModels( - @Nullable @SuppressLint("NullableCollection") - List<RealTimeIntegrityModel> realTimeIntegrityModels) { + @NonNull List<RealTimeIntegrityModel> realTimeIntegrityModels) { mRealTimeIntegrityModels = realTimeIntegrityModels; return this; } @@ -268,8 +287,7 @@ public final class GalileoAssistance implements Parcelable { /** Sets the list of Galileo satellite corrections. */ @NonNull public Builder setSatelliteCorrections( - @Nullable @SuppressLint("NullableCollection") - List<GnssSatelliteCorrections> satelliteCorrections) { + @NonNull List<GnssSatelliteCorrections> satelliteCorrections) { mSatelliteCorrections = satelliteCorrections; return this; } diff --git a/location/java/android/location/GlonassAssistance.java b/location/java/android/location/GlonassAssistance.java index cc0820197d8d..c7ed1c52b403 100644 --- a/location/java/android/location/GlonassAssistance.java +++ b/location/java/android/location/GlonassAssistance.java @@ -19,7 +19,6 @@ package android.location; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; -import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.location.GnssAssistance.GnssSatelliteCorrections; import android.location.flags.Flags; @@ -45,6 +44,9 @@ public final class GlonassAssistance implements Parcelable { /** The UTC model. */ @Nullable private final UtcModel mUtcModel; + /** The auxiliary information. */ + @Nullable private final AuxiliaryInformation mAuxiliaryInformation; + /** The list of time models. */ @NonNull private final List<TimeModel> mTimeModels; @@ -57,6 +59,7 @@ public final class GlonassAssistance implements Parcelable { private GlonassAssistance(Builder builder) { mAlmanac = builder.mAlmanac; mUtcModel = builder.mUtcModel; + mAuxiliaryInformation = builder.mAuxiliaryInformation; if (builder.mTimeModels != null) { mTimeModels = Collections.unmodifiableList(new ArrayList<>(builder.mTimeModels)); } else { @@ -106,6 +109,12 @@ public final class GlonassAssistance implements Parcelable { return mSatelliteCorrections; } + /** Returns the auxiliary information. */ + @Nullable + public AuxiliaryInformation getAuxiliaryInformation() { + return mAuxiliaryInformation; + } + @Override public int describeContents() { return 0; @@ -115,6 +124,7 @@ public final class GlonassAssistance implements Parcelable { public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeTypedObject(mAlmanac, flags); dest.writeTypedObject(mUtcModel, flags); + dest.writeTypedObject(mAuxiliaryInformation, flags); dest.writeTypedList(mTimeModels); dest.writeTypedList(mSatelliteEphemeris); dest.writeTypedList(mSatelliteCorrections); @@ -126,6 +136,7 @@ public final class GlonassAssistance implements Parcelable { StringBuilder builder = new StringBuilder("GlonassAssistance["); builder.append("almanac = ").append(mAlmanac); builder.append(", utcModel = ").append(mUtcModel); + builder.append(", auxiliaryInformation = ").append(mAuxiliaryInformation); builder.append(", timeModels = ").append(mTimeModels); builder.append(", satelliteEphemeris = ").append(mSatelliteEphemeris); builder.append(", satelliteCorrections = ").append(mSatelliteCorrections); @@ -140,6 +151,8 @@ public final class GlonassAssistance implements Parcelable { return new GlonassAssistance.Builder() .setAlmanac(in.readTypedObject(GlonassAlmanac.CREATOR)) .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) + .setAuxiliaryInformation( + in.readTypedObject(AuxiliaryInformation.CREATOR)) .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) .setSatelliteEphemeris( in.createTypedArrayList(GlonassSatelliteEphemeris.CREATOR)) @@ -158,30 +171,36 @@ public final class GlonassAssistance implements Parcelable { public static final class Builder { private GlonassAlmanac mAlmanac; private UtcModel mUtcModel; + private AuxiliaryInformation mAuxiliaryInformation; private List<TimeModel> mTimeModels; private List<GlonassSatelliteEphemeris> mSatelliteEphemeris; private List<GnssSatelliteCorrections> mSatelliteCorrections; /** Sets the Glonass almanac. */ @NonNull - public Builder setAlmanac( - @Nullable @SuppressLint("NullableCollection") GlonassAlmanac almanac) { + public Builder setAlmanac(@Nullable GlonassAlmanac almanac) { mAlmanac = almanac; return this; } /** Sets the UTC model. */ @NonNull - public Builder setUtcModel( - @Nullable @SuppressLint("NullableCollection") UtcModel utcModel) { + public Builder setUtcModel(@Nullable UtcModel utcModel) { mUtcModel = utcModel; return this; } + /** Sets the auxiliary information. */ + @NonNull + public Builder setAuxiliaryInformation( + @Nullable AuxiliaryInformation auxiliaryInformation) { + mAuxiliaryInformation = auxiliaryInformation; + return this; + } + /** Sets the list of time models. */ @NonNull - public Builder setTimeModels( - @Nullable @SuppressLint("NullableCollection") List<TimeModel> timeModels) { + public Builder setTimeModels(@NonNull List<TimeModel> timeModels) { mTimeModels = timeModels; return this; } @@ -189,8 +208,7 @@ public final class GlonassAssistance implements Parcelable { /** Sets the list of Glonass satellite ephemeris. */ @NonNull public Builder setSatelliteEphemeris( - @Nullable @SuppressLint("NullableCollection") - List<GlonassSatelliteEphemeris> satelliteEphemeris) { + @NonNull List<GlonassSatelliteEphemeris> satelliteEphemeris) { mSatelliteEphemeris = satelliteEphemeris; return this; } @@ -198,8 +216,7 @@ public final class GlonassAssistance implements Parcelable { /** Sets the list of Glonass satellite corrections. */ @NonNull public Builder setSatelliteCorrections( - @Nullable @SuppressLint("NullableCollection") - List<GnssSatelliteCorrections> satelliteCorrections) { + @NonNull List<GnssSatelliteCorrections> satelliteCorrections) { mSatelliteCorrections = satelliteCorrections; return this; } diff --git a/location/java/android/location/GpsAssistance.java b/location/java/android/location/GpsAssistance.java index 5202fc4cd851..5a8802f057e2 100644 --- a/location/java/android/location/GpsAssistance.java +++ b/location/java/android/location/GpsAssistance.java @@ -51,6 +51,9 @@ public final class GpsAssistance implements Parcelable { /** The leap seconds model. */ @Nullable private final LeapSecondsModel mLeapSecondsModel; + /** The auxiliary information. */ + @Nullable private final AuxiliaryInformation mAuxiliaryInformation; + /** The list of time models. */ @NonNull private final List<TimeModel> mTimeModels; @@ -68,6 +71,7 @@ public final class GpsAssistance implements Parcelable { mIonosphericModel = builder.mIonosphericModel; mUtcModel = builder.mUtcModel; mLeapSecondsModel = builder.mLeapSecondsModel; + mAuxiliaryInformation = builder.mAuxiliaryInformation; if (builder.mTimeModels != null) { mTimeModels = Collections.unmodifiableList(new ArrayList<>(builder.mTimeModels)); } else { @@ -117,6 +121,12 @@ public final class GpsAssistance implements Parcelable { return mLeapSecondsModel; } + /** Returns the auxiliary information. */ + @Nullable + public AuxiliaryInformation getAuxiliaryInformation() { + return mAuxiliaryInformation; + } + /** Returns the list of time models. */ @NonNull public List<TimeModel> getTimeModels() { @@ -152,6 +162,8 @@ public final class GpsAssistance implements Parcelable { in.readTypedObject(KlobucharIonosphericModel.CREATOR)) .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) .setLeapSecondsModel(in.readTypedObject(LeapSecondsModel.CREATOR)) + .setAuxiliaryInformation( + in.readTypedObject(AuxiliaryInformation.CREATOR)) .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) .setSatelliteEphemeris( in.createTypedArrayList(GpsSatelliteEphemeris.CREATOR)) @@ -179,6 +191,7 @@ public final class GpsAssistance implements Parcelable { dest.writeTypedObject(mIonosphericModel, flags); dest.writeTypedObject(mUtcModel, flags); dest.writeTypedObject(mLeapSecondsModel, flags); + dest.writeTypedObject(mAuxiliaryInformation, flags); dest.writeTypedList(mTimeModels); dest.writeTypedList(mSatelliteEphemeris); dest.writeTypedList(mRealTimeIntegrityModels); @@ -193,6 +206,7 @@ public final class GpsAssistance implements Parcelable { builder.append(", ionosphericModel = ").append(mIonosphericModel); builder.append(", utcModel = ").append(mUtcModel); builder.append(", leapSecondsModel = ").append(mLeapSecondsModel); + builder.append(", auxiliaryInformation = ").append(mAuxiliaryInformation); builder.append(", timeModels = ").append(mTimeModels); builder.append(", satelliteEphemeris = ").append(mSatelliteEphemeris); builder.append(", realTimeIntegrityModels = ").append(mRealTimeIntegrityModels); @@ -207,6 +221,7 @@ public final class GpsAssistance implements Parcelable { private KlobucharIonosphericModel mIonosphericModel; private UtcModel mUtcModel; private LeapSecondsModel mLeapSecondsModel; + private AuxiliaryInformation mAuxiliaryInformation; private List<TimeModel> mTimeModels; private List<GpsSatelliteEphemeris> mSatelliteEphemeris; private List<RealTimeIntegrityModel> mRealTimeIntegrityModels; @@ -222,33 +237,36 @@ public final class GpsAssistance implements Parcelable { /** Sets the Klobuchar ionospheric model. */ @NonNull - public Builder setIonosphericModel( - @Nullable @SuppressLint("NullableCollection") - KlobucharIonosphericModel ionosphericModel) { + public Builder setIonosphericModel(@Nullable KlobucharIonosphericModel ionosphericModel) { mIonosphericModel = ionosphericModel; return this; } /** Sets the UTC model. */ @NonNull - public Builder setUtcModel( - @Nullable @SuppressLint("NullableCollection") UtcModel utcModel) { + public Builder setUtcModel(@Nullable UtcModel utcModel) { mUtcModel = utcModel; return this; } /** Sets the leap seconds model. */ @NonNull - public Builder setLeapSecondsModel( - @Nullable @SuppressLint("NullableCollection") LeapSecondsModel leapSecondsModel) { + public Builder setLeapSecondsModel(@Nullable LeapSecondsModel leapSecondsModel) { mLeapSecondsModel = leapSecondsModel; return this; } + /** Sets the auxiliary information. */ + @NonNull + public Builder setAuxiliaryInformation( + @Nullable AuxiliaryInformation auxiliaryInformation) { + mAuxiliaryInformation = auxiliaryInformation; + return this; + } + /** Sets the list of time models. */ @NonNull - public Builder setTimeModels( - @Nullable @SuppressLint("NullableCollection") List<TimeModel> timeModels) { + public Builder setTimeModels(@NonNull List<TimeModel> timeModels) { mTimeModels = timeModels; return this; } @@ -256,8 +274,7 @@ public final class GpsAssistance implements Parcelable { /** Sets the list of GPS ephemeris. */ @NonNull public Builder setSatelliteEphemeris( - @Nullable @SuppressLint("NullableCollection") - List<GpsSatelliteEphemeris> satelliteEphemeris) { + @NonNull List<GpsSatelliteEphemeris> satelliteEphemeris) { mSatelliteEphemeris = satelliteEphemeris; return this; } @@ -265,8 +282,7 @@ public final class GpsAssistance implements Parcelable { /** Sets the list of real time integrity models. */ @NonNull public Builder setRealTimeIntegrityModels( - @Nullable @SuppressLint("NullableCollection") - List<RealTimeIntegrityModel> realTimeIntegrityModels) { + @NonNull List<RealTimeIntegrityModel> realTimeIntegrityModels) { mRealTimeIntegrityModels = realTimeIntegrityModels; return this; } @@ -274,8 +290,7 @@ public final class GpsAssistance implements Parcelable { /** Sets the list of GPS satellite corrections. */ @NonNull public Builder setSatelliteCorrections( - @Nullable @SuppressLint("NullableCollection") - List<GnssSatelliteCorrections> satelliteCorrections) { + @NonNull List<GnssSatelliteCorrections> satelliteCorrections) { mSatelliteCorrections = satelliteCorrections; return this; } diff --git a/location/java/android/location/QzssAssistance.java b/location/java/android/location/QzssAssistance.java index 9383ce3c63b5..27c34370316e 100644 --- a/location/java/android/location/QzssAssistance.java +++ b/location/java/android/location/QzssAssistance.java @@ -19,7 +19,6 @@ package android.location; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; -import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.location.GnssAssistance.GnssSatelliteCorrections; import android.location.flags.Flags; @@ -51,6 +50,9 @@ public final class QzssAssistance implements Parcelable { /** The leap seconds model. */ @Nullable private final LeapSecondsModel mLeapSecondsModel; + /** The auxiliary information. */ + @Nullable private final AuxiliaryInformation mAuxiliaryInformation; + /** The list of time models. */ @NonNull private final List<TimeModel> mTimeModels; @@ -68,6 +70,7 @@ public final class QzssAssistance implements Parcelable { mIonosphericModel = builder.mIonosphericModel; mUtcModel = builder.mUtcModel; mLeapSecondsModel = builder.mLeapSecondsModel; + mAuxiliaryInformation = builder.mAuxiliaryInformation; if (builder.mTimeModels != null) { mTimeModels = Collections.unmodifiableList(new ArrayList<>(builder.mTimeModels)); } else { @@ -117,6 +120,12 @@ public final class QzssAssistance implements Parcelable { return mLeapSecondsModel; } + /** Returns the auxiliary information. */ + @Nullable + public AuxiliaryInformation getAuxiliaryInformation() { + return mAuxiliaryInformation; + } + /** Returns the list of time models. */ @NonNull public List<TimeModel> getTimeModels() { @@ -147,19 +156,23 @@ public final class QzssAssistance implements Parcelable { @NonNull public QzssAssistance createFromParcel(Parcel in) { return new QzssAssistance.Builder() - .setAlmanac(in.readTypedObject(GnssAlmanac.CREATOR)) - .setIonosphericModel(in.readTypedObject(KlobucharIonosphericModel.CREATOR)) - .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) - .setLeapSecondsModel(in.readTypedObject(LeapSecondsModel.CREATOR)) - .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) - .setSatelliteEphemeris( - in.createTypedArrayList(QzssSatelliteEphemeris.CREATOR)) - .setRealTimeIntegrityModels( - in.createTypedArrayList(RealTimeIntegrityModel.CREATOR)) - .setSatelliteCorrections( - in.createTypedArrayList(GnssSatelliteCorrections.CREATOR)) - .build(); + .setAlmanac(in.readTypedObject(GnssAlmanac.CREATOR)) + .setIonosphericModel( + in.readTypedObject(KlobucharIonosphericModel.CREATOR)) + .setUtcModel(in.readTypedObject(UtcModel.CREATOR)) + .setLeapSecondsModel(in.readTypedObject(LeapSecondsModel.CREATOR)) + .setAuxiliaryInformation( + in.readTypedObject(AuxiliaryInformation.CREATOR)) + .setTimeModels(in.createTypedArrayList(TimeModel.CREATOR)) + .setSatelliteEphemeris( + in.createTypedArrayList(QzssSatelliteEphemeris.CREATOR)) + .setRealTimeIntegrityModels( + in.createTypedArrayList(RealTimeIntegrityModel.CREATOR)) + .setSatelliteCorrections( + in.createTypedArrayList(GnssSatelliteCorrections.CREATOR)) + .build(); } + @Override public QzssAssistance[] newArray(int size) { return new QzssAssistance[size]; @@ -177,6 +190,7 @@ public final class QzssAssistance implements Parcelable { dest.writeTypedObject(mIonosphericModel, flags); dest.writeTypedObject(mUtcModel, flags); dest.writeTypedObject(mLeapSecondsModel, flags); + dest.writeTypedObject(mAuxiliaryInformation, flags); dest.writeTypedList(mTimeModels); dest.writeTypedList(mSatelliteEphemeris); dest.writeTypedList(mRealTimeIntegrityModels); @@ -191,6 +205,7 @@ public final class QzssAssistance implements Parcelable { builder.append(", ionosphericModel = ").append(mIonosphericModel); builder.append(", utcModel = ").append(mUtcModel); builder.append(", leapSecondsModel = ").append(mLeapSecondsModel); + builder.append(", auxiliaryInformation = ").append(mAuxiliaryInformation); builder.append(", timeModels = ").append(mTimeModels); builder.append(", satelliteEphemeris = ").append(mSatelliteEphemeris); builder.append(", realTimeIntegrityModels = ").append(mRealTimeIntegrityModels); @@ -205,6 +220,7 @@ public final class QzssAssistance implements Parcelable { private KlobucharIonosphericModel mIonosphericModel; private UtcModel mUtcModel; private LeapSecondsModel mLeapSecondsModel; + private AuxiliaryInformation mAuxiliaryInformation; private List<TimeModel> mTimeModels; private List<QzssSatelliteEphemeris> mSatelliteEphemeris; private List<RealTimeIntegrityModel> mRealTimeIntegrityModels; @@ -238,10 +254,17 @@ public final class QzssAssistance implements Parcelable { return this; } + /** Sets the auxiliary information. */ + @NonNull + public Builder setAuxiliaryInformation( + @Nullable AuxiliaryInformation auxiliaryInformation) { + mAuxiliaryInformation = auxiliaryInformation; + return this; + } + /** Sets the list of time models. */ @NonNull - public Builder setTimeModels( - @Nullable @SuppressLint("NullableCollection") List<TimeModel> timeModels) { + public Builder setTimeModels(@NonNull List<TimeModel> timeModels) { mTimeModels = timeModels; return this; } @@ -249,8 +272,7 @@ public final class QzssAssistance implements Parcelable { /** Sets the list of QZSS ephemeris. */ @NonNull public Builder setSatelliteEphemeris( - @Nullable @SuppressLint("NullableCollection") - List<QzssSatelliteEphemeris> satelliteEphemeris) { + @NonNull List<QzssSatelliteEphemeris> satelliteEphemeris) { mSatelliteEphemeris = satelliteEphemeris; return this; } @@ -258,8 +280,7 @@ public final class QzssAssistance implements Parcelable { /** Sets the list of real time integrity model. */ @NonNull public Builder setRealTimeIntegrityModels( - @Nullable @SuppressLint("NullableCollection") - List<RealTimeIntegrityModel> realTimeIntegrityModels) { + @NonNull List<RealTimeIntegrityModel> realTimeIntegrityModels) { mRealTimeIntegrityModels = realTimeIntegrityModels; return this; } @@ -267,8 +288,7 @@ public final class QzssAssistance implements Parcelable { /** Sets the list of QZSS satellite correction. */ @NonNull public Builder setSatelliteCorrections( - @Nullable @SuppressLint("NullableCollection") - List<GnssSatelliteCorrections> satelliteCorrections) { + @NonNull List<GnssSatelliteCorrections> satelliteCorrections) { mSatelliteCorrections = satelliteCorrections; return this; } diff --git a/location/java/android/location/RealTimeIntegrityModel.java b/location/java/android/location/RealTimeIntegrityModel.java index d268926e56e2..f065def35f7a 100644 --- a/location/java/android/location/RealTimeIntegrityModel.java +++ b/location/java/android/location/RealTimeIntegrityModel.java @@ -26,6 +26,10 @@ import android.os.Parcelable; import com.android.internal.util.Preconditions; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + /** * A class contains the real time integrity status of a GNSS satellite based on notice advisory. * @@ -35,8 +39,7 @@ import com.android.internal.util.Preconditions; @SystemApi public final class RealTimeIntegrityModel implements Parcelable { /** - * Pseudo-random or satellite ID number for the satellite, - * a.k.a. Space Vehicle (SV), or OSN number for Glonass. + * Bad satellite ID number or OSN number for Glonass. * * <p>The distinction is made by looking at the constellation field. Values * must be in the range of: @@ -47,10 +50,14 @@ public final class RealTimeIntegrityModel implements Parcelable { * <p> - Galileo: 1-36 * <p> - Beidou: 1-63 */ - private final int mSvid; + private final int mBadSvid; - /** Indicates whether the satellite is currently usable for navigation. */ - private final boolean mUsable; + /** + * The type of the bad signal or signals. + * + * <p>An empty list means that all signals on the specific SV are not healthy. + */ + @NonNull private final List<GnssSignalType> mBadSignalTypes; /** UTC timestamp (in seconds) when the advisory was published. */ private final long mPublishDateSeconds; @@ -81,14 +88,19 @@ public final class RealTimeIntegrityModel implements Parcelable { private RealTimeIntegrityModel(Builder builder) { // Allow SV ID beyond the range to support potential future extensibility. - Preconditions.checkArgument(builder.mSvid >= 1); + Preconditions.checkArgument(builder.mBadSvid >= 1); Preconditions.checkArgument(builder.mPublishDateSeconds > 0); Preconditions.checkArgument(builder.mStartDateSeconds > 0); Preconditions.checkArgument(builder.mEndDateSeconds > 0); Preconditions.checkNotNull(builder.mAdvisoryType, "AdvisoryType cannot be null"); Preconditions.checkNotNull(builder.mAdvisoryNumber, "AdvisoryNumber cannot be null"); - mSvid = builder.mSvid; - mUsable = builder.mUsable; + if (builder.mBadSignalTypes == null) { + mBadSignalTypes = new ArrayList<>(); + } else { + mBadSignalTypes = Collections.unmodifiableList( + new ArrayList<>(builder.mBadSignalTypes)); + } + mBadSvid = builder.mBadSvid; mPublishDateSeconds = builder.mPublishDateSeconds; mStartDateSeconds = builder.mStartDateSeconds; mEndDateSeconds = builder.mEndDateSeconds; @@ -110,13 +122,18 @@ public final class RealTimeIntegrityModel implements Parcelable { * <p> - Beidou: 1-63 */ @IntRange(from = 1, to = 206) - public int getSvid() { - return mSvid; + public int getBadSvid() { + return mBadSvid; } - /** Returns whether the satellite is usable or not. */ - public boolean isUsable() { - return mUsable; + /** + * Returns the type of the bad signal or signals. + * + * <p>An empty list means that all signals on the specific SV are not healthy. + */ + @NonNull + public List<GnssSignalType> getBadSignalTypes() { + return mBadSignalTypes; } /** Returns the UTC timestamp (in seconds) when the advisory was published */ @@ -156,8 +173,9 @@ public final class RealTimeIntegrityModel implements Parcelable { public RealTimeIntegrityModel createFromParcel(Parcel in) { RealTimeIntegrityModel realTimeIntegrityModel = new RealTimeIntegrityModel.Builder() - .setSvid(in.readInt()) - .setUsable(in.readBoolean()) + .setBadSvid(in.readInt()) + .setBadSignalTypes( + in.createTypedArrayList(GnssSignalType.CREATOR)) .setPublishDateSeconds(in.readLong()) .setStartDateSeconds(in.readLong()) .setEndDateSeconds(in.readLong()) @@ -180,8 +198,8 @@ public final class RealTimeIntegrityModel implements Parcelable { @Override public void writeToParcel(@NonNull Parcel parcel, int flags) { - parcel.writeInt(mSvid); - parcel.writeBoolean(mUsable); + parcel.writeInt(mBadSvid); + parcel.writeTypedList(mBadSignalTypes); parcel.writeLong(mPublishDateSeconds); parcel.writeLong(mStartDateSeconds); parcel.writeLong(mEndDateSeconds); @@ -193,8 +211,8 @@ public final class RealTimeIntegrityModel implements Parcelable { @NonNull public String toString() { StringBuilder builder = new StringBuilder("RealTimeIntegrityModel["); - builder.append("svid = ").append(mSvid); - builder.append(", usable = ").append(mUsable); + builder.append("badSvid = ").append(mBadSvid); + builder.append(", badSignalTypes = ").append(mBadSignalTypes); builder.append(", publishDateSeconds = ").append(mPublishDateSeconds); builder.append(", startDateSeconds = ").append(mStartDateSeconds); builder.append(", endDateSeconds = ").append(mEndDateSeconds); @@ -206,8 +224,8 @@ public final class RealTimeIntegrityModel implements Parcelable { /** Builder for {@link RealTimeIntegrityModel} */ public static final class Builder { - private int mSvid; - private boolean mUsable; + private int mBadSvid; + private List<GnssSignalType> mBadSignalTypes; private long mPublishDateSeconds; private long mStartDateSeconds; private long mEndDateSeconds; @@ -215,8 +233,7 @@ public final class RealTimeIntegrityModel implements Parcelable { private String mAdvisoryNumber; /** - * Sets the Pseudo-random or satellite ID number for the satellite, - * a.k.a. Space Vehicle (SV), or OSN number for Glonass. + * Sets the bad satellite ID number or OSN number for Glonass. * * <p>The distinction is made by looking at the constellation field. Values * must be in the range of: @@ -228,15 +245,19 @@ public final class RealTimeIntegrityModel implements Parcelable { * <p> - Beidou: 1-63 */ @NonNull - public Builder setSvid(@IntRange(from = 1, to = 206) int svid) { - mSvid = svid; + public Builder setBadSvid(@IntRange(from = 1, to = 206) int badSvid) { + mBadSvid = badSvid; return this; } - /** Sets whether the satellite is usable or not. */ + /** + * Sets the type of the bad signal or signals. + * + * <p>An empty list means that all signals on the specific SV are not healthy. + */ @NonNull - public Builder setUsable(boolean usable) { - mUsable = usable; + public Builder setBadSignalTypes(@NonNull List<GnssSignalType> badSignalTypes) { + mBadSignalTypes = badSignalTypes; return this; } |