summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt12
-rw-r--r--location/java/android/location/GnssCapabilities.java49
-rw-r--r--location/java/android/location/GnssSignalType.aidl19
-rw-r--r--location/java/android/location/GnssSignalType.java152
4 files changed, 224 insertions, 8 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index 218d7bd14ceb..94309b9e46db 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -19474,6 +19474,7 @@ package android.location {
public final class GnssCapabilities implements android.os.Parcelable {
method public int describeContents();
+ method @NonNull public java.util.List<android.location.GnssSignalType> getGnssSignalTypes();
method public boolean hasAntennaInfo();
method public boolean hasGeofencing();
method @Deprecated public boolean hasGnssAntennaInfo();
@@ -19507,6 +19508,7 @@ package android.location {
ctor public GnssCapabilities.Builder();
ctor public GnssCapabilities.Builder(@NonNull android.location.GnssCapabilities);
method @NonNull public android.location.GnssCapabilities build();
+ method @NonNull public android.location.GnssCapabilities.Builder setGnssSignalTypes(@NonNull java.util.List<android.location.GnssSignalType>);
method @NonNull public android.location.GnssCapabilities.Builder setHasAntennaInfo(boolean);
method @NonNull public android.location.GnssCapabilities.Builder setHasGeofencing(boolean);
method @NonNull public android.location.GnssCapabilities.Builder setHasLowPowerMode(boolean);
@@ -19719,6 +19721,16 @@ package android.location {
field @Deprecated public static final int STATUS_READY = 1; // 0x1
}
+ public final class GnssSignalType implements android.os.Parcelable {
+ method @NonNull public static android.location.GnssSignalType create(int, @FloatRange(from=0.0f, fromInclusive=false) double, @NonNull String);
+ method public int describeContents();
+ method @FloatRange(from=0.0f, fromInclusive=false) public double getCarrierFrequencyHz();
+ method @NonNull public String getCodeType();
+ method public int getConstellationType();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssSignalType> CREATOR;
+ }
+
public final class GnssStatus implements android.os.Parcelable {
method public int describeContents();
method @FloatRange(from=0, to=360) public float getAzimuthDegrees(@IntRange(from=0) int);
diff --git a/location/java/android/location/GnssCapabilities.java b/location/java/android/location/GnssCapabilities.java
index b38f9ea39136..98578b219413 100644
--- a/location/java/android/location/GnssCapabilities.java
+++ b/location/java/android/location/GnssCapabilities.java
@@ -24,6 +24,8 @@ import android.os.Parcelable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;
@@ -123,20 +125,23 @@ public final class GnssCapabilities implements Parcelable {
* @hide
*/
public static GnssCapabilities empty() {
- return new GnssCapabilities(0, 0, 0);
+ return new GnssCapabilities(0, 0, 0, new ArrayList<>());
}
private final @TopHalCapabilityFlags int mTopFlags;
private final @SubHalMeasurementCorrectionsCapabilityFlags int mMeasurementCorrectionsFlags;
private final @SubHalPowerCapabilityFlags int mPowerFlags;
+ private final @NonNull List<GnssSignalType> mGnssSignalTypes;
private GnssCapabilities(
@TopHalCapabilityFlags int topFlags,
@SubHalMeasurementCorrectionsCapabilityFlags int measurementCorrectionsFlags,
- @SubHalPowerCapabilityFlags int powerFlags) {
+ @SubHalPowerCapabilityFlags int powerFlags,
+ @NonNull List<GnssSignalType> gnssSignalTypes) {
mTopFlags = topFlags;
mMeasurementCorrectionsFlags = measurementCorrectionsFlags;
mPowerFlags = powerFlags;
+ mGnssSignalTypes = gnssSignalTypes;
}
/**
@@ -148,7 +153,8 @@ public final class GnssCapabilities implements Parcelable {
if (mTopFlags == flags) {
return this;
} else {
- return new GnssCapabilities(flags, mMeasurementCorrectionsFlags, mPowerFlags);
+ return new GnssCapabilities(flags, mMeasurementCorrectionsFlags, mPowerFlags,
+ new ArrayList<>(mGnssSignalTypes));
}
}
@@ -163,7 +169,8 @@ public final class GnssCapabilities implements Parcelable {
if (mMeasurementCorrectionsFlags == flags) {
return this;
} else {
- return new GnssCapabilities(mTopFlags, flags, mPowerFlags);
+ return new GnssCapabilities(mTopFlags, flags, mPowerFlags,
+ new ArrayList<>(mGnssSignalTypes));
}
}
@@ -177,7 +184,8 @@ public final class GnssCapabilities implements Parcelable {
if (mPowerFlags == flags) {
return this;
} else {
- return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, flags);
+ return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, flags,
+ new ArrayList<>(mGnssSignalTypes));
}
}
@@ -424,6 +432,14 @@ public final class GnssCapabilities implements Parcelable {
return (mPowerFlags & SUB_HAL_POWER_CAPABILITY_OTHER_MODES) != 0;
}
+ /**
+ * Returns the list of {@link GnssSignalType}s that the GNSS chipset supports.
+ */
+ @NonNull
+ public List<GnssSignalType> getGnssSignalTypes() {
+ return mGnssSignalTypes;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
@@ -441,14 +457,15 @@ public final class GnssCapabilities implements Parcelable {
@Override
public int hashCode() {
- return Objects.hash(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags);
+ return Objects.hash(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags, mGnssSignalTypes);
}
public static final @NonNull Creator<GnssCapabilities> CREATOR =
new Creator<GnssCapabilities>() {
@Override
public GnssCapabilities createFromParcel(Parcel in) {
- return new GnssCapabilities(in.readInt(), in.readInt(), in.readInt());
+ return new GnssCapabilities(in.readInt(), in.readInt(), in.readInt(),
+ in.createTypedArrayList(GnssSignalType.CREATOR));
}
@Override
@@ -467,6 +484,7 @@ public final class GnssCapabilities implements Parcelable {
parcel.writeInt(mTopFlags);
parcel.writeInt(mMeasurementCorrectionsFlags);
parcel.writeInt(mPowerFlags);
+ parcel.writeTypedList(mGnssSignalTypes);
}
@Override
@@ -545,6 +563,9 @@ public final class GnssCapabilities implements Parcelable {
if (hasPowerOtherModes()) {
builder.append("OTHER_MODES_POWER ");
}
+ if (!mGnssSignalTypes.isEmpty()) {
+ builder.append("signalTypes=").append(mGnssSignalTypes).append(" ");
+ }
if (builder.length() > 1) {
builder.setLength(builder.length() - 1);
} else {
@@ -562,17 +583,20 @@ public final class GnssCapabilities implements Parcelable {
private @TopHalCapabilityFlags int mTopFlags;
private @SubHalMeasurementCorrectionsCapabilityFlags int mMeasurementCorrectionsFlags;
private @SubHalPowerCapabilityFlags int mPowerFlags;
+ private @NonNull List<GnssSignalType> mGnssSignalTypes;
public Builder() {
mTopFlags = 0;
mMeasurementCorrectionsFlags = 0;
mPowerFlags = 0;
+ mGnssSignalTypes = new ArrayList<>();
}
public Builder(@NonNull GnssCapabilities capabilities) {
mTopFlags = capabilities.mTopFlags;
mMeasurementCorrectionsFlags = capabilities.mMeasurementCorrectionsFlags;
mPowerFlags = capabilities.mPowerFlags;
+ mGnssSignalTypes = capabilities.mGnssSignalTypes;
}
/**
@@ -779,10 +803,19 @@ public final class GnssCapabilities implements Parcelable {
}
/**
+ * Sets a list of {@link GnssSignalType}.
+ */
+ public @NonNull Builder setGnssSignalTypes(@NonNull List<GnssSignalType> gnssSignalTypes) {
+ mGnssSignalTypes = gnssSignalTypes;
+ return this;
+ }
+
+ /**
* Builds a new GnssCapabilities.
*/
public @NonNull GnssCapabilities build() {
- return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags);
+ return new GnssCapabilities(mTopFlags, mMeasurementCorrectionsFlags, mPowerFlags,
+ new ArrayList<>(mGnssSignalTypes));
}
private static int setFlag(int value, int flag, boolean set) {
diff --git a/location/java/android/location/GnssSignalType.aidl b/location/java/android/location/GnssSignalType.aidl
new file mode 100644
index 000000000000..1c43fe5f93c9
--- /dev/null
+++ b/location/java/android/location/GnssSignalType.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2022, 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;
+
+parcelable GnssSignalType;
diff --git a/location/java/android/location/GnssSignalType.java b/location/java/android/location/GnssSignalType.java
new file mode 100644
index 000000000000..f9c6e725cc46
--- /dev/null
+++ b/location/java/android/location/GnssSignalType.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2022 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.FloatRange;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.Preconditions;
+
+import java.util.Objects;
+
+/**
+ * This class represents a GNSS signal type.
+ */
+public final class GnssSignalType implements Parcelable {
+
+ /**
+ * Creates a {@link GnssSignalType} with a full list of parameters.
+ *
+ * @param constellationType the constellation type as defined in
+ * {@link GnssStatus.ConstellationType}
+ * @param carrierFrequencyHz the carrier frequency in Hz
+ * @param codeType the code type as defined in {@link GnssMeasurement#getCodeType()}
+ */
+ @NonNull
+ public static GnssSignalType create(@GnssStatus.ConstellationType int constellationType,
+ @FloatRange(from = 0.0f, fromInclusive = false) double carrierFrequencyHz,
+ @NonNull String codeType) {
+ Preconditions.checkArgument(carrierFrequencyHz > 0,
+ "carrierFrequencyHz must be greater than 0.");
+ Objects.requireNonNull(codeType);
+ return new GnssSignalType(constellationType, carrierFrequencyHz, codeType);
+ }
+
+ @GnssStatus.ConstellationType
+ private final int mConstellationType;
+ @FloatRange(from = 0.0f, fromInclusive = false)
+ private final double mCarrierFrequencyHz;
+ @NonNull
+ private final String mCodeType;
+
+ /**
+ * Creates a {@link GnssSignalType} with a full list of parameters.
+ */
+ private GnssSignalType(@GnssStatus.ConstellationType int constellationType,
+ double carrierFrequencyHz, @NonNull String codeType) {
+ this.mConstellationType = constellationType;
+ this.mCarrierFrequencyHz = carrierFrequencyHz;
+ this.mCodeType = codeType;
+ }
+
+ /** Returns the {@link GnssStatus.ConstellationType}. */
+ @GnssStatus.ConstellationType
+ public int getConstellationType() {
+ return mConstellationType;
+ }
+
+ /** Returns the carrier frequency in Hz. */
+ @FloatRange(from = 0.0f, fromInclusive = false)
+ public double getCarrierFrequencyHz() {
+ return mCarrierFrequencyHz;
+ }
+
+ /**
+ * Return the code type.
+ *
+ * @see GnssMeasurement#getCodeType()
+ */
+ @NonNull
+ public String getCodeType() {
+ return mCodeType;
+ }
+
+ @NonNull
+ public static final Parcelable.Creator<GnssSignalType> CREATOR =
+ new Parcelable.Creator<GnssSignalType>() {
+ @Override
+ @NonNull
+ public GnssSignalType createFromParcel(@NonNull Parcel parcel) {
+ return new GnssSignalType(parcel.readInt(), parcel.readDouble(),
+ parcel.readString());
+ }
+
+ @Override
+ public GnssSignalType[] newArray(int i) {
+ return new GnssSignalType[i];
+ }
+ };
+
+ @Override
+ public void writeToParcel(@NonNull Parcel parcel, int flags) {
+ parcel.writeInt(mConstellationType);
+ parcel.writeDouble(mCarrierFrequencyHz);
+ parcel.writeString(mCodeType);
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ StringBuilder s = new StringBuilder();
+ s.append("GnssSignalType[");
+ s.append(" Constellation=").append(mConstellationType);
+ s.append(", CarrierFrequencyHz=").append(mCarrierFrequencyHz);
+ s.append(", CodeType=").append(mCodeType);
+ s.append(']');
+ return s.toString();
+ }
+
+ @Override
+ public boolean equals(@Nullable Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (obj instanceof GnssSignalType) {
+ GnssSignalType other = (GnssSignalType) obj;
+ return mConstellationType == other.mConstellationType
+ && Double.compare(mCarrierFrequencyHz, other.mCarrierFrequencyHz) == 0
+ && mCodeType.equals(other.mCodeType);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mConstellationType, mCarrierFrequencyHz, mCodeType);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+}