From 032aa81d852114410721500c67e29861da072c1a Mon Sep 17 00:00:00 2001 From: Anil Admal Date: Wed, 6 Mar 2019 19:23:25 -0800 Subject: [PATCH] Resume GNSS measurement reporting when location setting is back on. The mGnssMeasurementsProvider.onGpsEnabledChanged() and mGnssNavigationMessageProvider.onGpsEnabledChanged() methods called from handleEnable() and handleDisable() methods expect the mEnabled flag to be already updated before they are called. They check mEnabled to reregister listeners with the GNSS HAL when the master location setting is turned back on. Fixes: 126715741 Test: Tested with a Pixel device before and after this fix. Verified that measurements reporting resumes when the master location settings is turned back on. Change-Id: Ia1f5edaf3e65fffec9ddf108fd726dd03376047e --- .../server/location/GnssLocationProvider.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index 9ab99753ed005..7690262db9640 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -67,6 +67,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.StatsLog; +import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IBatteryStats; import com.android.internal.location.GpsNetInitiatedHandler; import com.android.internal.location.GpsNetInitiatedHandler.GpsNiNotification; @@ -890,12 +891,14 @@ public class GnssLocationProvider extends AbstractLocationProvider implements return GPS_POSITION_MODE_STANDALONE; } - private boolean handleEnable() { - if (DEBUG) Log.d(TAG, "handleEnable"); + @GuardedBy("mLock") + private void handleEnableLocked() { + if (DEBUG) Log.d(TAG, "handleEnableLocked"); boolean inited = native_init(); if (inited) { + mEnabled = true; mSupportsXtra = native_supports_xtra(); // TODO: remove the following native calls if we can make sure they are redundant. @@ -912,15 +915,16 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider.onGpsEnabledChanged(); mGnssBatchingProvider.enable(); } else { + mEnabled = false; Log.w(TAG, "Failed to enable location provider"); } - - return inited; } - private void handleDisable() { - if (DEBUG) Log.d(TAG, "handleDisable"); + @GuardedBy("mLock") + private void handleDisableLocked() { + if (DEBUG) Log.d(TAG, "handleDisableLocked"); + mEnabled = false; updateClientUids(new WorkSource()); stopNavigating(); mAlarmManager.cancel(mWakeupIntent); @@ -946,10 +950,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } if (enabled) { - mEnabled = handleEnable(); + handleEnableLocked(); } else { - mEnabled = false; - handleDisable(); + handleDisableLocked(); } } }