Loading services/core/java/com/android/server/location/GnssLocationProvider.java +68 −65 Original line number Diff line number Diff line Loading @@ -311,8 +311,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private final ExponentialBackOff mPsdsBackOff = new ExponentialBackOff(RETRY_INTERVAL, MAX_RETRY_INTERVAL); // true if we are enabled, protected by this private boolean mEnabled; // True if we are enabled @GuardedBy("mLock") private boolean mGpsEnabled; private boolean mShutdown; Loading Loading @@ -406,6 +407,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private final static String WAKELOCK_KEY = "GnssLocationProvider"; private final PowerManager.WakeLock mWakeLock; private static final String DOWNLOAD_EXTRA_WAKELOCK_KEY = "GnssLocationProviderPsdsDownload"; @GuardedBy("mLock") private final PowerManager.WakeLock mDownloadPsdsWakeLock; // Alarms Loading Loading @@ -517,7 +519,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements boolean isKeepLppProfile = false; if (!TextUtils.isEmpty(mccMnc)) { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); synchronized (mLock) { if (configManager != null) { PersistableBundle b = configManager.getConfig(); if (b != null) { Loading @@ -539,7 +540,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } reloadGpsProperties(); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); } } else { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is still not available"); } Loading Loading @@ -636,14 +636,14 @@ public class GnssLocationProvider extends AbstractLocationProvider implements @Override protected boolean isGpsEnabled() { return isEnabled(); return GnssLocationProvider.this.isGpsEnabled(); } }; mGnssMeasurementsProvider = new GnssMeasurementsProvider(mContext, mHandler) { @Override protected boolean isGpsEnabled() { return isEnabled(); return GnssLocationProvider.this.isGpsEnabled(); } }; Loading @@ -652,7 +652,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider = new GnssNavigationMessageProvider(mContext, mHandler) { @Override protected boolean isGpsEnabled() { return isEnabled(); return GnssLocationProvider.this.isGpsEnabled(); } }; Loading Loading @@ -829,8 +829,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } mDownloadPsdsDataPending = STATE_DOWNLOADING; synchronized (mLock) { // hold wake lock while task runs mDownloadPsdsWakeLock.acquire(DOWNLOAD_PSDS_DATA_TIMEOUT_MS); } Log.i(TAG, "WakeLock acquired by handleDownloadPsdsData()"); AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { GpsPsdsDownloader psdsDownloader = new GpsPsdsDownloader( Loading Loading @@ -913,14 +915,19 @@ public class GnssLocationProvider extends AbstractLocationProvider implements return GPS_POSITION_MODE_STANDALONE; } @GuardedBy("mLock") private void handleEnableLocked() { if (DEBUG) Log.d(TAG, "handleEnableLocked"); private void setGpsEnabled(boolean enabled) { synchronized (mLock) { mGpsEnabled = enabled; } } private void handleEnable() { if (DEBUG) Log.d(TAG, "handleEnable"); boolean inited = native_init(); if (inited) { mEnabled = true; setGpsEnabled(true); mSupportsPsds = native_supports_psds(); // TODO: remove the following native calls if we can make sure they are redundant. Loading @@ -937,26 +944,25 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider.onGpsEnabledChanged(); mGnssBatchingProvider.enable(); if (mGnssVisibilityControl != null) { mGnssVisibilityControl.onGpsEnabledChanged(mEnabled); mGnssVisibilityControl.onGpsEnabledChanged(/* isEnabled= */true); } } else { mEnabled = false; setGpsEnabled(false); Log.w(TAG, "Failed to enable location provider"); } } @GuardedBy("mLock") private void handleDisableLocked() { if (DEBUG) Log.d(TAG, "handleDisableLocked"); private void handleDisable() { if (DEBUG) Log.d(TAG, "handleDisable"); mEnabled = false; setGpsEnabled(false); updateClientUids(new WorkSource()); stopNavigating(); mAlarmManager.cancel(mWakeupIntent); mAlarmManager.cancel(mTimeoutIntent); if (mGnssVisibilityControl != null) { mGnssVisibilityControl.onGpsEnabledChanged(mEnabled); mGnssVisibilityControl.onGpsEnabledChanged(/* isEnabled= */ false); } mGnssBatchingProvider.disable(); // do this before releasing wakelock Loading @@ -967,7 +973,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } private void updateEnabled() { synchronized (mLock) { // Generally follow location setting boolean enabled = mContext.getSystemService(LocationManager.class).isLocationEnabled(); Loading @@ -981,21 +986,20 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // ... and, finally, disable anyway, if device is being shut down enabled &= !mShutdown; if (enabled == mEnabled) { if (enabled == isGpsEnabled()) { return; } if (enabled) { handleEnableLocked(); handleEnable(); } else { handleDisableLocked(); } handleDisable(); } } public boolean isEnabled() { private boolean isGpsEnabled() { synchronized (mLock) { return mEnabled; return mGpsEnabled; } } Loading Loading @@ -1036,7 +1040,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } if (DEBUG) Log.d(TAG, "setRequest " + mProviderRequest); if (mProviderRequest.reportLocation && isEnabled()) { if (mProviderRequest.reportLocation && isGpsEnabled()) { // update client uids updateClientUids(mWorkSource); Loading Loading @@ -1598,10 +1602,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements if (DEBUG) Log.d(TAG, "reportGnssServiceDied"); mHandler.post(() -> { setupNativeGnssService(/* reinitializeGnssServiceHandle = */ true); if (isEnabled()) { synchronized (mLock) { mEnabled = false; } if (isGpsEnabled()) { setGpsEnabled(false); updateEnabled(); // resend configuration into the restarted HAL service. Loading Loading @@ -1809,7 +1812,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements /* requestorIdEncoding= */ 0, /* textEncoding= */ 0, mSuplEsEnabled, isEnabled(), isGpsEnabled(), userResponse); return true; Loading Loading @@ -1875,7 +1878,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements notification.requestorIdEncoding, notification.textEncoding, mSuplEsEnabled, isEnabled(), isGpsEnabled(), /* userResponse= */ 0); } Loading Loading
services/core/java/com/android/server/location/GnssLocationProvider.java +68 −65 Original line number Diff line number Diff line Loading @@ -311,8 +311,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private final ExponentialBackOff mPsdsBackOff = new ExponentialBackOff(RETRY_INTERVAL, MAX_RETRY_INTERVAL); // true if we are enabled, protected by this private boolean mEnabled; // True if we are enabled @GuardedBy("mLock") private boolean mGpsEnabled; private boolean mShutdown; Loading Loading @@ -406,6 +407,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private final static String WAKELOCK_KEY = "GnssLocationProvider"; private final PowerManager.WakeLock mWakeLock; private static final String DOWNLOAD_EXTRA_WAKELOCK_KEY = "GnssLocationProviderPsdsDownload"; @GuardedBy("mLock") private final PowerManager.WakeLock mDownloadPsdsWakeLock; // Alarms Loading Loading @@ -517,7 +519,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements boolean isKeepLppProfile = false; if (!TextUtils.isEmpty(mccMnc)) { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); synchronized (mLock) { if (configManager != null) { PersistableBundle b = configManager.getConfig(); if (b != null) { Loading @@ -539,7 +540,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } reloadGpsProperties(); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); } } else { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is still not available"); } Loading Loading @@ -636,14 +636,14 @@ public class GnssLocationProvider extends AbstractLocationProvider implements @Override protected boolean isGpsEnabled() { return isEnabled(); return GnssLocationProvider.this.isGpsEnabled(); } }; mGnssMeasurementsProvider = new GnssMeasurementsProvider(mContext, mHandler) { @Override protected boolean isGpsEnabled() { return isEnabled(); return GnssLocationProvider.this.isGpsEnabled(); } }; Loading @@ -652,7 +652,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider = new GnssNavigationMessageProvider(mContext, mHandler) { @Override protected boolean isGpsEnabled() { return isEnabled(); return GnssLocationProvider.this.isGpsEnabled(); } }; Loading Loading @@ -829,8 +829,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } mDownloadPsdsDataPending = STATE_DOWNLOADING; synchronized (mLock) { // hold wake lock while task runs mDownloadPsdsWakeLock.acquire(DOWNLOAD_PSDS_DATA_TIMEOUT_MS); } Log.i(TAG, "WakeLock acquired by handleDownloadPsdsData()"); AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> { GpsPsdsDownloader psdsDownloader = new GpsPsdsDownloader( Loading Loading @@ -913,14 +915,19 @@ public class GnssLocationProvider extends AbstractLocationProvider implements return GPS_POSITION_MODE_STANDALONE; } @GuardedBy("mLock") private void handleEnableLocked() { if (DEBUG) Log.d(TAG, "handleEnableLocked"); private void setGpsEnabled(boolean enabled) { synchronized (mLock) { mGpsEnabled = enabled; } } private void handleEnable() { if (DEBUG) Log.d(TAG, "handleEnable"); boolean inited = native_init(); if (inited) { mEnabled = true; setGpsEnabled(true); mSupportsPsds = native_supports_psds(); // TODO: remove the following native calls if we can make sure they are redundant. Loading @@ -937,26 +944,25 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider.onGpsEnabledChanged(); mGnssBatchingProvider.enable(); if (mGnssVisibilityControl != null) { mGnssVisibilityControl.onGpsEnabledChanged(mEnabled); mGnssVisibilityControl.onGpsEnabledChanged(/* isEnabled= */true); } } else { mEnabled = false; setGpsEnabled(false); Log.w(TAG, "Failed to enable location provider"); } } @GuardedBy("mLock") private void handleDisableLocked() { if (DEBUG) Log.d(TAG, "handleDisableLocked"); private void handleDisable() { if (DEBUG) Log.d(TAG, "handleDisable"); mEnabled = false; setGpsEnabled(false); updateClientUids(new WorkSource()); stopNavigating(); mAlarmManager.cancel(mWakeupIntent); mAlarmManager.cancel(mTimeoutIntent); if (mGnssVisibilityControl != null) { mGnssVisibilityControl.onGpsEnabledChanged(mEnabled); mGnssVisibilityControl.onGpsEnabledChanged(/* isEnabled= */ false); } mGnssBatchingProvider.disable(); // do this before releasing wakelock Loading @@ -967,7 +973,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } private void updateEnabled() { synchronized (mLock) { // Generally follow location setting boolean enabled = mContext.getSystemService(LocationManager.class).isLocationEnabled(); Loading @@ -981,21 +986,20 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // ... and, finally, disable anyway, if device is being shut down enabled &= !mShutdown; if (enabled == mEnabled) { if (enabled == isGpsEnabled()) { return; } if (enabled) { handleEnableLocked(); handleEnable(); } else { handleDisableLocked(); } handleDisable(); } } public boolean isEnabled() { private boolean isGpsEnabled() { synchronized (mLock) { return mEnabled; return mGpsEnabled; } } Loading Loading @@ -1036,7 +1040,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } if (DEBUG) Log.d(TAG, "setRequest " + mProviderRequest); if (mProviderRequest.reportLocation && isEnabled()) { if (mProviderRequest.reportLocation && isGpsEnabled()) { // update client uids updateClientUids(mWorkSource); Loading Loading @@ -1598,10 +1602,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements if (DEBUG) Log.d(TAG, "reportGnssServiceDied"); mHandler.post(() -> { setupNativeGnssService(/* reinitializeGnssServiceHandle = */ true); if (isEnabled()) { synchronized (mLock) { mEnabled = false; } if (isGpsEnabled()) { setGpsEnabled(false); updateEnabled(); // resend configuration into the restarted HAL service. Loading Loading @@ -1809,7 +1812,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements /* requestorIdEncoding= */ 0, /* textEncoding= */ 0, mSuplEsEnabled, isEnabled(), isGpsEnabled(), userResponse); return true; Loading Loading @@ -1875,7 +1878,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements notification.requestorIdEncoding, notification.textEncoding, mSuplEsEnabled, isEnabled(), isGpsEnabled(), /* userResponse= */ 0); } Loading