Ensure complete GnssStatus construction

Using volatile reference & final member pattern.

Bug: 37517406
Test: basic GNSS & GPS Status output works
Change-Id: I5650149e0a3f63a52734c8f044d38f3956819921
This commit is contained in:
Wyatt Riley
2017-06-27 19:59:19 -07:00
parent 17652d85ec
commit 7f2cfed525
2 changed files with 10 additions and 10 deletions

View File

@@ -74,7 +74,8 @@ public class LocationManager {
new HashMap<>();
private final HashMap<OnNmeaMessageListener, GnssStatusListenerTransport> mGnssNmeaListeners =
new HashMap<>();
private GnssStatus mGnssStatus;
// volatile + GnssStatus final-fields pattern to avoid a partially published object
private volatile GnssStatus mGnssStatus;
private int mTimeToFirstFix;
/**
@@ -1563,7 +1564,7 @@ public class LocationManager {
float[] cn0s, float[] elevations, float[] azimuths, float[] carrierFreqs) {
if (mGnssCallback != null) {
mGnssStatus = new GnssStatus(svCount, prnWithFlags, cn0s, elevations, azimuths,
carrierFreqs);
carrierFreqs);
Message msg = Message.obtain();
msg.what = GpsStatus.GPS_EVENT_SATELLITE_STATUS;
@@ -1949,7 +1950,7 @@ public class LocationManager {
status = new GpsStatus();
}
// When mGnssStatus is null, that means that this method is called outside
// onGpsStatusChanged(). Return an empty status to maintain backwards compatibility.
// onGpsStatusChanged(). Return an empty status to maintain backwards compatibility.
if (mGnssStatus != null) {
status.setStatus(mGnssStatus, mTimeToFirstFix);
}