summaryrefslogtreecommitdiff
path: root/location/java
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-01-05 17:40:24 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-01-05 17:40:24 +0000
commit855774347e0b832c527e1583e8a6d630734e39ca (patch)
tree86c398d28fb179e8f958981bb9bdde199aad72c7 /location/java
parenta5ca46545354409a6fabce387ecee1da38995207 (diff)
parent3ce77a50da851bb58824c2a4e2b4753b8ff77ac1 (diff)
Merge "Fix parcel creation bug in GnssSingleSatCorrection"
Diffstat (limited to 'location/java')
-rw-r--r--location/java/android/location/GnssSingleSatCorrection.java249
1 files changed, 185 insertions, 64 deletions
diff --git a/location/java/android/location/GnssSingleSatCorrection.java b/location/java/android/location/GnssSingleSatCorrection.java
index aeca562fced2..262630b79cb0 100644
--- a/location/java/android/location/GnssSingleSatCorrection.java
+++ b/location/java/android/location/GnssSingleSatCorrection.java
@@ -26,6 +26,8 @@ import android.os.Parcelable;
import com.android.internal.util.Preconditions;
+import java.util.Objects;
+
/**
* A container with measurement corrections for a single visible satellite
*
@@ -119,15 +121,17 @@ public final class GnssSingleSatCorrection implements Parcelable {
@Nullable
private final GnssReflectingPlane mReflectingPlane;
- private GnssSingleSatCorrection(Builder builder) {
- mSingleSatCorrectionFlags = builder.mSingleSatCorrectionFlags;
- mSatId = builder.mSatId;
- mConstellationType = builder.mConstellationType;
- mCarrierFrequencyHz = builder.mCarrierFrequencyHz;
- mProbSatIsLos = builder.mProbSatIsLos;
- mExcessPathLengthMeters = builder.mExcessPathLengthMeters;
- mExcessPathLengthUncertaintyMeters = builder.mExcessPathLengthUncertaintyMeters;
- mReflectingPlane = builder.mReflectingPlane;
+ private GnssSingleSatCorrection(int singleSatCorrectionFlags, int constellationType, int satId,
+ float carrierFrequencyHz, float probSatIsLos, float excessPathLengthMeters,
+ float excessPathLengthUncertaintyMeters, GnssReflectingPlane reflectingPlane) {
+ mSingleSatCorrectionFlags = singleSatCorrectionFlags;
+ mConstellationType = constellationType;
+ mSatId = satId;
+ mCarrierFrequencyHz = carrierFrequencyHz;
+ mProbSatIsLos = probSatIsLos;
+ mExcessPathLengthMeters = excessPathLengthMeters;
+ mExcessPathLengthUncertaintyMeters = excessPathLengthUncertaintyMeters;
+ mReflectingPlane = reflectingPlane;
}
/**
@@ -239,27 +243,49 @@ public final class GnssSingleSatCorrection implements Parcelable {
return 0;
}
+ @Override
+ public void writeToParcel(@NonNull Parcel parcel, int flags) {
+ parcel.writeInt(mSingleSatCorrectionFlags);
+ parcel.writeInt(mConstellationType);
+ parcel.writeInt(mSatId);
+ parcel.writeFloat(mCarrierFrequencyHz);
+ if (hasValidSatelliteLineOfSight()) {
+ parcel.writeFloat(mProbSatIsLos);
+ }
+ if (hasExcessPathLength()) {
+ parcel.writeFloat(mExcessPathLengthMeters);
+ }
+ if (hasExcessPathLengthUncertainty()) {
+ parcel.writeFloat(mExcessPathLengthUncertaintyMeters);
+ }
+ if (hasReflectingPlane()) {
+ mReflectingPlane.writeToParcel(parcel, flags);
+ }
+ }
+
public static final Creator<GnssSingleSatCorrection> CREATOR =
new Creator<GnssSingleSatCorrection>() {
@Override
@NonNull
public GnssSingleSatCorrection createFromParcel(@NonNull Parcel parcel) {
- int mSingleSatCorrectionFlags = parcel.readInt();
- boolean hasReflectingPlane =
- (mSingleSatCorrectionFlags & HAS_REFLECTING_PLANE_MASK) != 0;
- final GnssSingleSatCorrection.Builder singleSatCorrectionBuilder =
- new Builder()
- .setConstellationType(parcel.readInt())
- .setSatelliteId(parcel.readInt())
- .setCarrierFrequencyHz(parcel.readFloat())
- .setProbabilityLineOfSight(parcel.readFloat())
- .setExcessPathLengthMeters(parcel.readFloat())
- .setExcessPathLengthUncertaintyMeters(parcel.readFloat());
- if (hasReflectingPlane) {
- singleSatCorrectionBuilder.setReflectingPlane(
- GnssReflectingPlane.CREATOR.createFromParcel(parcel));
- }
- return singleSatCorrectionBuilder.build();
+ int singleSatCorrectionFlags = parcel.readInt();
+ int constellationType = parcel.readInt();
+ int satId = parcel.readInt();
+ float carrierFrequencyHz = parcel.readFloat();
+ float probSatIsLos = (singleSatCorrectionFlags & HAS_PROB_SAT_IS_LOS_MASK) != 0
+ ? parcel.readFloat() : 0;
+ float excessPathLengthMeters =
+ (singleSatCorrectionFlags & HAS_EXCESS_PATH_LENGTH_MASK) != 0
+ ? parcel.readFloat() : 0;
+ float excessPathLengthUncertaintyMeters =
+ (singleSatCorrectionFlags & HAS_EXCESS_PATH_LENGTH_UNC_MASK) != 0
+ ? parcel.readFloat() : 0;
+ GnssReflectingPlane reflectingPlane =
+ (singleSatCorrectionFlags & HAS_REFLECTING_PLANE_MASK) != 0
+ ? GnssReflectingPlane.CREATOR.createFromParcel(parcel) : null;
+ return new GnssSingleSatCorrection(singleSatCorrectionFlags, constellationType,
+ satId, carrierFrequencyHz, probSatIsLos, excessPathLengthMeters,
+ excessPathLengthUncertaintyMeters, reflectingPlane);
}
@Override
@@ -268,41 +294,94 @@ public final class GnssSingleSatCorrection implements Parcelable {
}
};
- @NonNull
@Override
- public String toString() {
- final String format = " %-29s = %s\n";
- StringBuilder builder = new StringBuilder("GnssSingleSatCorrection:\n");
- builder.append(
- String.format(format, "SingleSatCorrectionFlags = ", mSingleSatCorrectionFlags));
- builder.append(String.format(format, "ConstellationType = ", mConstellationType));
- builder.append(String.format(format, "SatId = ", mSatId));
- builder.append(String.format(format, "CarrierFrequencyHz = ", mCarrierFrequencyHz));
- builder.append(String.format(format, "ProbSatIsLos = ", mProbSatIsLos));
- builder.append(String.format(format, "ExcessPathLengthMeters = ", mExcessPathLengthMeters));
- builder.append(
- String.format(
- format,
- "ExcessPathLengthUncertaintyMeters = ",
- mExcessPathLengthUncertaintyMeters));
- if (hasReflectingPlane()) {
- builder.append(String.format(format, "ReflectingPlane = ", mReflectingPlane));
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
}
- return builder.toString();
+ if (!(obj instanceof GnssSingleSatCorrection)) {
+ return false;
+ }
+
+ GnssSingleSatCorrection other = (GnssSingleSatCorrection) obj;
+ if (mConstellationType != other.mConstellationType) {
+ return false;
+ }
+ if (mSatId != other.mSatId) {
+ return false;
+ }
+ if (Float.compare(mCarrierFrequencyHz, other.mCarrierFrequencyHz) != 0) {
+ return false;
+ }
+
+ if (hasValidSatelliteLineOfSight() != other.hasValidSatelliteLineOfSight()) {
+ return false;
+ }
+ if (hasValidSatelliteLineOfSight()
+ && Float.compare(mProbSatIsLos, other.mProbSatIsLos) != 0) {
+ return false;
+ }
+
+ if (hasExcessPathLength() != other.hasExcessPathLength()) {
+ return false;
+ }
+ if (hasExcessPathLength()
+ && Float.compare(mExcessPathLengthMeters, other.mExcessPathLengthMeters) != 0) {
+ return false;
+ }
+
+ if (hasExcessPathLengthUncertainty() != other.hasExcessPathLengthUncertainty()) {
+ return false;
+ }
+ if (hasExcessPathLengthUncertainty() && Float.compare(mExcessPathLengthUncertaintyMeters,
+ other.mExcessPathLengthUncertaintyMeters) != 0) {
+ return false;
+ }
+
+ if (hasReflectingPlane() != other.hasReflectingPlane()) {
+ return false;
+ }
+ if (hasReflectingPlane()
+ && !mReflectingPlane.equals(other.mReflectingPlane)) {
+ return false;
+ }
+ return true;
}
@Override
- public void writeToParcel(@NonNull Parcel parcel, int flags) {
- parcel.writeInt(mSingleSatCorrectionFlags);
- parcel.writeInt(mConstellationType);
- parcel.writeInt(mSatId);
- parcel.writeFloat(mCarrierFrequencyHz);
- parcel.writeFloat(mProbSatIsLos);
- parcel.writeFloat(mExcessPathLengthMeters);
- parcel.writeFloat(mExcessPathLengthUncertaintyMeters);
+ public int hashCode() {
+ return Objects.hash(mSingleSatCorrectionFlags,
+ mConstellationType,
+ mSatId,
+ mCarrierFrequencyHz,
+ mProbSatIsLos,
+ mExcessPathLengthMeters,
+ mExcessPathLengthUncertaintyMeters,
+ mReflectingPlane);
+ }
+
+ @NonNull
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder("GnssSingleSatCorrection:[");
+ builder.append(" ConstellationType=").append(mConstellationType);
+ builder.append(" SatId=").append(mSatId);
+ builder.append(" CarrierFrequencyHz=").append(mCarrierFrequencyHz);
+ if (hasValidSatelliteLineOfSight()) {
+ builder.append(" ProbSatIsLos=").append(mProbSatIsLos);
+ }
+ if (hasExcessPathLength()) {
+ builder.append(" ExcessPathLengthMeters=").append(mExcessPathLengthMeters);
+ }
+ if (hasExcessPathLengthUncertainty()) {
+ builder.append(" ExcessPathLengthUncertaintyMeters=").append(
+ mExcessPathLengthUncertaintyMeters);
+ }
if (hasReflectingPlane()) {
- mReflectingPlane.writeToParcel(parcel, flags);
+ builder.append(" ReflectingPlane=").append(mReflectingPlane);
}
+ builder.append(']');
+ return builder.toString();
}
/** Builder for {@link GnssSingleSatCorrection} */
@@ -332,6 +411,7 @@ public final class GnssSingleSatCorrection implements Parcelable {
/** Sets the Satellite ID defined in the ICD of the given constellation. */
@NonNull public Builder setSatelliteId(@IntRange(from = 0) int satId) {
+ Preconditions.checkArgumentNonnegative(satId, "satId should be non-negative.");
mSatId = satId;
return this;
}
@@ -339,6 +419,8 @@ public final class GnssSingleSatCorrection implements Parcelable {
/** Sets the Carrier frequency in Hz. */
@NonNull public Builder setCarrierFrequencyHz(
@FloatRange(from = 0.0f, fromInclusive = false) float carrierFrequencyHz) {
+ Preconditions.checkArgument(
+ carrierFrequencyHz >= 0, "carrierFrequencyHz should be non-negative.");
mCarrierFrequencyHz = carrierFrequencyHz;
return this;
}
@@ -352,8 +434,18 @@ public final class GnssSingleSatCorrection implements Parcelable {
Preconditions.checkArgumentInRange(
probSatIsLos, 0, 1, "probSatIsLos should be between 0 and 1.");
mProbSatIsLos = probSatIsLos;
- mSingleSatCorrectionFlags =
- (byte) (mSingleSatCorrectionFlags | HAS_PROB_SAT_IS_LOS_MASK);
+ mSingleSatCorrectionFlags |= HAS_PROB_SAT_IS_LOS_MASK;
+ return this;
+ }
+
+ /**
+ * Clears the line-of-sight probability of the satellite at the given location.
+ *
+ * <p>This is to negate {@link #setProbabilityLineOfSight} call.
+ */
+ @NonNull public Builder clearProbabilityLineOfSight() {
+ mProbSatIsLos = 0;
+ mSingleSatCorrectionFlags &= ~HAS_PROB_SAT_IS_LOS_MASK;
return this;
}
@@ -363,18 +455,42 @@ public final class GnssSingleSatCorrection implements Parcelable {
*/
@NonNull public Builder setExcessPathLengthMeters(
@FloatRange(from = 0.0f) float excessPathLengthMeters) {
+ Preconditions.checkArgument(excessPathLengthMeters >= 0,
+ "excessPathLengthMeters should be non-negative.");
mExcessPathLengthMeters = excessPathLengthMeters;
- mSingleSatCorrectionFlags =
- (byte) (mSingleSatCorrectionFlags | HAS_EXCESS_PATH_LENGTH_MASK);
+ mSingleSatCorrectionFlags |= HAS_EXCESS_PATH_LENGTH_MASK;
+ return this;
+ }
+
+ /**
+ * Clears the Excess path length.
+ *
+ * <p>This is to negate {@link #setExcessPathLengthMeters} call.
+ */
+ @NonNull public Builder clearExcessPathLengthMeters() {
+ mExcessPathLengthMeters = 0;
+ mSingleSatCorrectionFlags &= ~HAS_EXCESS_PATH_LENGTH_MASK;
return this;
}
/** Sets the error estimate (1-sigma) for the Excess path length estimate */
@NonNull public Builder setExcessPathLengthUncertaintyMeters(
@FloatRange(from = 0.0f) float excessPathLengthUncertaintyMeters) {
+ Preconditions.checkArgument(excessPathLengthUncertaintyMeters >= 0,
+ "excessPathLengthUncertaintyMeters should be non-negative.");
mExcessPathLengthUncertaintyMeters = excessPathLengthUncertaintyMeters;
- mSingleSatCorrectionFlags =
- (byte) (mSingleSatCorrectionFlags | HAS_EXCESS_PATH_LENGTH_UNC_MASK);
+ mSingleSatCorrectionFlags |= HAS_EXCESS_PATH_LENGTH_UNC_MASK;
+ return this;
+ }
+
+ /**
+ * Clears the error estimate (1-sigma) for the Excess path length estimate
+ *
+ * <p>This is to negate {@link #setExcessPathLengthUncertaintyMeters} call.
+ */
+ @NonNull public Builder clearExcessPathLengthUncertaintyMeters() {
+ mExcessPathLengthUncertaintyMeters = 0;
+ mSingleSatCorrectionFlags &= ~HAS_EXCESS_PATH_LENGTH_UNC_MASK;
return this;
}
@@ -382,18 +498,23 @@ public final class GnssSingleSatCorrection implements Parcelable {
@NonNull public Builder setReflectingPlane(@Nullable GnssReflectingPlane reflectingPlane) {
mReflectingPlane = reflectingPlane;
if (reflectingPlane != null) {
- mSingleSatCorrectionFlags =
- (byte) (mSingleSatCorrectionFlags | HAS_REFLECTING_PLANE_MASK);
+ mSingleSatCorrectionFlags |= HAS_REFLECTING_PLANE_MASK;
} else {
- mSingleSatCorrectionFlags =
- (byte) (mSingleSatCorrectionFlags & ~HAS_REFLECTING_PLANE_MASK);
+ mSingleSatCorrectionFlags &= ~HAS_REFLECTING_PLANE_MASK;
}
return this;
}
/** Builds a {@link GnssSingleSatCorrection} instance as specified by this builder. */
@NonNull public GnssSingleSatCorrection build() {
- return new GnssSingleSatCorrection(this);
+ return new GnssSingleSatCorrection(mSingleSatCorrectionFlags,
+ mConstellationType,
+ mSatId,
+ mCarrierFrequencyHz,
+ mProbSatIsLos,
+ mExcessPathLengthMeters,
+ mExcessPathLengthUncertaintyMeters,
+ mReflectingPlane);
}
}
}