Loading services/core/java/com/android/server/LocationManagerService.java +6 −2 Original line number Diff line number Diff line Loading @@ -2069,9 +2069,13 @@ public class LocationManagerService extends ILocationManager.Stub { record.mReceiver.mAllowedResolutionLevel)) { continue; } if (!provider.isUseableLocked() && !isSettingsExemptLocked(record)) { if (!provider.isUseableLocked()) { if (isSettingsExemptLocked(record)) { providerRequest.forceLocation = true; } else { continue; } } LocationRequest locationRequest = record.mRealRequest; long interval = locationRequest.getInterval(); Loading services/core/java/com/android/server/location/GnssLocationProvider.java +56 −35 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.hardware.location.GeofenceHardware; import android.hardware.location.GeofenceHardwareImpl; import android.location.Criteria; Loading Loading @@ -168,21 +169,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private static final int AGPS_SUPL_MODE_MSA = 0x02; private static final int AGPS_SUPL_MODE_MSB = 0x01; // Handler messages private static final int CHECK_LOCATION = 1; private static final int ENABLE = 2; private static final int SET_REQUEST = 3; private static final int UPDATE_NETWORK_STATE = 4; private static final int INJECT_NTP_TIME = 5; private static final int DOWNLOAD_XTRA_DATA = 6; private static final int UPDATE_LOCATION = 7; // Handle external location from network listener private static final int ADD_LISTENER = 8; private static final int REMOVE_LISTENER = 9; private static final int DOWNLOAD_XTRA_DATA_FINISHED = 11; private static final int SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED = 12; private static final int INITIALIZE_HANDLER = 13; private static final int REQUEST_SUPL_CONNECTION = 14; private static final int RELEASE_SUPL_CONNECTION = 15; private static final int REQUEST_LOCATION = 16; private static final int REPORT_LOCATION = 17; // HAL reports location private static final int REPORT_SV_STATUS = 18; // HAL reports SV status Loading Loading @@ -311,6 +304,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // true if we are enabled, protected by this private boolean mEnabled = true; private boolean mShutdown; // states for injecting ntp and downloading xtra data private static final int STATE_PENDING_NETWORK = 0; private static final int STATE_DOWNLOADING = 1; Loading Loading @@ -349,7 +344,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private GnssPositionMode mLastPositionMode; // Current request from underlying location clients. private ProviderRequest mProviderRequest = null; private ProviderRequest mProviderRequest; // The WorkSource associated with the most recent client request (i.e, most recent call to // setRequest). private WorkSource mWorkSource = null; Loading @@ -371,7 +366,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private final Looper mLooper; private final LocationExtras mLocationExtras = new LocationExtras(); private final GnssStatusListenerHelper mGnssStatusListenerHelper; private final GnssSatelliteBlacklistHelper mGnssSatelliteBlacklistHelper; private final GnssMeasurementsProvider mGnssMeasurementsProvider; private final GnssNavigationMessageProvider mGnssNavigationMessageProvider; private final LocationChangeListener mNetworkLocationListener = new NetworkLocationListener(); Loading Loading @@ -538,6 +532,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } if (disableGps != mDisableGps) { mDisableGps = disableGps; updateEnabled(); updateRequirements(); } } Loading Loading @@ -635,23 +630,32 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssMetrics = new GnssMetrics(mBatteryStats); mNtpTimeHelper = new NtpTimeHelper(mContext, looper, this); mGnssSatelliteBlacklistHelper = new GnssSatelliteBlacklistHelper(mContext, GnssSatelliteBlacklistHelper gnssSatelliteBlacklistHelper = new GnssSatelliteBlacklistHelper(mContext, looper, this); mHandler.post(mGnssSatelliteBlacklistHelper::updateSatelliteBlacklist); mHandler.post(gnssSatelliteBlacklistHelper::updateSatelliteBlacklist); mGnssBatchingProvider = new GnssBatchingProvider(); mGnssGeofenceProvider = new GnssGeofenceProvider(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_SHUTDOWN); mContext.registerReceiverAsUser(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (getSendingUserId() == UserHandle.USER_ALL) { mEnabled = false; handleDisable(); mShutdown = true; updateEnabled(); } } }, UserHandle.ALL, intentFilter, null, mHandler); }, UserHandle.ALL, new IntentFilter(Intent.ACTION_SHUTDOWN), null, mHandler); mContext.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.LOCATION_MODE), true, new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { updateEnabled(); } }, UserHandle.USER_ALL); setProperties(PROPERTIES); setEnabled(true); Loading Loading @@ -865,12 +869,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements return GPS_POSITION_MODE_STANDALONE; } private void handleEnable() { private boolean handleEnable() { if (DEBUG) Log.d(TAG, "handleEnable"); boolean enabled = native_init(); boolean inited = native_init(); if (enabled) { if (inited) { mSupportsXtra = native_supports_xtra(); // TODO: remove the following native calls if we can make sure they are redundant. Loading @@ -887,11 +891,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider.onGpsEnabledChanged(); mGnssBatchingProvider.enable(); } else { synchronized (mLock) { mEnabled = false; } Log.w(TAG, "Failed to enable location provider"); } return inited; } private void handleDisable() { Loading @@ -910,6 +913,26 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider.onGpsEnabledChanged(); } private void updateEnabled() { synchronized (mLock) { boolean enabled = ((mProviderRequest != null && mProviderRequest.reportLocation && mProviderRequest.forceLocation) || ( mContext.getSystemService(LocationManager.class).isLocationEnabled() && !mDisableGps)) && !mShutdown; if (enabled == mEnabled) { return; } if (enabled) { mEnabled = handleEnable(); } else { mEnabled = false; handleDisable(); } } } public boolean isEnabled() { synchronized (mLock) { return mEnabled; Loading Loading @@ -942,6 +965,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private void handleSetRequest(ProviderRequest request, WorkSource source) { mProviderRequest = request; mWorkSource = source; updateEnabled(); updateRequirements(); } Loading Loading @@ -1490,8 +1514,11 @@ public class GnssLocationProvider extends AbstractLocationProvider implements class_init_native(); native_init_once(); if (isEnabled()) { // re-calls native_init() and other setup. handleEnable(); synchronized (mLock) { mEnabled = false; } updateEnabled(); // resend configuration into the restarted HAL service. reloadGpsProperties(); } Loading Loading @@ -1690,7 +1717,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements /* requestorIdEncoding= */ 0, /* textEncoding= */ 0, mSuplEsEnabled, mEnabled, isEnabled(), userResponse); return true; Loading Loading @@ -1756,7 +1783,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements notification.requestorIdEncoding, notification.textEncoding, mSuplEsEnabled, mEnabled, isEnabled(), /* userResponse= */ 0); } Loading Loading @@ -1881,9 +1908,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements public void handleMessage(Message msg) { int message = msg.what; switch (message) { case ENABLE: handleEnable(); break; case SET_REQUEST: GpsRequest gpsRequest = (GpsRequest) msg.obj; handleSetRequest(gpsRequest.request, gpsRequest.source); Loading Loading @@ -1998,8 +2022,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements new NetworkLocationListener(), getLooper()); // enable gps provider, it will never be disabled (legacy behavior) sendEmptyMessage(ENABLE); updateEnabled(); } } Loading Loading @@ -2043,8 +2066,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements */ private String messageIdAsString(int message) { switch (message) { case ENABLE: return "ENABLE"; case SET_REQUEST: return "SET_REQUEST"; case INJECT_NTP_TIME: Loading Loading
services/core/java/com/android/server/LocationManagerService.java +6 −2 Original line number Diff line number Diff line Loading @@ -2069,9 +2069,13 @@ public class LocationManagerService extends ILocationManager.Stub { record.mReceiver.mAllowedResolutionLevel)) { continue; } if (!provider.isUseableLocked() && !isSettingsExemptLocked(record)) { if (!provider.isUseableLocked()) { if (isSettingsExemptLocked(record)) { providerRequest.forceLocation = true; } else { continue; } } LocationRequest locationRequest = record.mRealRequest; long interval = locationRequest.getInterval(); Loading
services/core/java/com/android/server/location/GnssLocationProvider.java +56 −35 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.hardware.location.GeofenceHardware; import android.hardware.location.GeofenceHardwareImpl; import android.location.Criteria; Loading Loading @@ -168,21 +169,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private static final int AGPS_SUPL_MODE_MSA = 0x02; private static final int AGPS_SUPL_MODE_MSB = 0x01; // Handler messages private static final int CHECK_LOCATION = 1; private static final int ENABLE = 2; private static final int SET_REQUEST = 3; private static final int UPDATE_NETWORK_STATE = 4; private static final int INJECT_NTP_TIME = 5; private static final int DOWNLOAD_XTRA_DATA = 6; private static final int UPDATE_LOCATION = 7; // Handle external location from network listener private static final int ADD_LISTENER = 8; private static final int REMOVE_LISTENER = 9; private static final int DOWNLOAD_XTRA_DATA_FINISHED = 11; private static final int SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED = 12; private static final int INITIALIZE_HANDLER = 13; private static final int REQUEST_SUPL_CONNECTION = 14; private static final int RELEASE_SUPL_CONNECTION = 15; private static final int REQUEST_LOCATION = 16; private static final int REPORT_LOCATION = 17; // HAL reports location private static final int REPORT_SV_STATUS = 18; // HAL reports SV status Loading Loading @@ -311,6 +304,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // true if we are enabled, protected by this private boolean mEnabled = true; private boolean mShutdown; // states for injecting ntp and downloading xtra data private static final int STATE_PENDING_NETWORK = 0; private static final int STATE_DOWNLOADING = 1; Loading Loading @@ -349,7 +344,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private GnssPositionMode mLastPositionMode; // Current request from underlying location clients. private ProviderRequest mProviderRequest = null; private ProviderRequest mProviderRequest; // The WorkSource associated with the most recent client request (i.e, most recent call to // setRequest). private WorkSource mWorkSource = null; Loading @@ -371,7 +366,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private final Looper mLooper; private final LocationExtras mLocationExtras = new LocationExtras(); private final GnssStatusListenerHelper mGnssStatusListenerHelper; private final GnssSatelliteBlacklistHelper mGnssSatelliteBlacklistHelper; private final GnssMeasurementsProvider mGnssMeasurementsProvider; private final GnssNavigationMessageProvider mGnssNavigationMessageProvider; private final LocationChangeListener mNetworkLocationListener = new NetworkLocationListener(); Loading Loading @@ -538,6 +532,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } if (disableGps != mDisableGps) { mDisableGps = disableGps; updateEnabled(); updateRequirements(); } } Loading Loading @@ -635,23 +630,32 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssMetrics = new GnssMetrics(mBatteryStats); mNtpTimeHelper = new NtpTimeHelper(mContext, looper, this); mGnssSatelliteBlacklistHelper = new GnssSatelliteBlacklistHelper(mContext, GnssSatelliteBlacklistHelper gnssSatelliteBlacklistHelper = new GnssSatelliteBlacklistHelper(mContext, looper, this); mHandler.post(mGnssSatelliteBlacklistHelper::updateSatelliteBlacklist); mHandler.post(gnssSatelliteBlacklistHelper::updateSatelliteBlacklist); mGnssBatchingProvider = new GnssBatchingProvider(); mGnssGeofenceProvider = new GnssGeofenceProvider(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_SHUTDOWN); mContext.registerReceiverAsUser(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (getSendingUserId() == UserHandle.USER_ALL) { mEnabled = false; handleDisable(); mShutdown = true; updateEnabled(); } } }, UserHandle.ALL, intentFilter, null, mHandler); }, UserHandle.ALL, new IntentFilter(Intent.ACTION_SHUTDOWN), null, mHandler); mContext.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.LOCATION_MODE), true, new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { updateEnabled(); } }, UserHandle.USER_ALL); setProperties(PROPERTIES); setEnabled(true); Loading Loading @@ -865,12 +869,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements return GPS_POSITION_MODE_STANDALONE; } private void handleEnable() { private boolean handleEnable() { if (DEBUG) Log.d(TAG, "handleEnable"); boolean enabled = native_init(); boolean inited = native_init(); if (enabled) { if (inited) { mSupportsXtra = native_supports_xtra(); // TODO: remove the following native calls if we can make sure they are redundant. Loading @@ -887,11 +891,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider.onGpsEnabledChanged(); mGnssBatchingProvider.enable(); } else { synchronized (mLock) { mEnabled = false; } Log.w(TAG, "Failed to enable location provider"); } return inited; } private void handleDisable() { Loading @@ -910,6 +913,26 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mGnssNavigationMessageProvider.onGpsEnabledChanged(); } private void updateEnabled() { synchronized (mLock) { boolean enabled = ((mProviderRequest != null && mProviderRequest.reportLocation && mProviderRequest.forceLocation) || ( mContext.getSystemService(LocationManager.class).isLocationEnabled() && !mDisableGps)) && !mShutdown; if (enabled == mEnabled) { return; } if (enabled) { mEnabled = handleEnable(); } else { mEnabled = false; handleDisable(); } } } public boolean isEnabled() { synchronized (mLock) { return mEnabled; Loading Loading @@ -942,6 +965,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private void handleSetRequest(ProviderRequest request, WorkSource source) { mProviderRequest = request; mWorkSource = source; updateEnabled(); updateRequirements(); } Loading Loading @@ -1490,8 +1514,11 @@ public class GnssLocationProvider extends AbstractLocationProvider implements class_init_native(); native_init_once(); if (isEnabled()) { // re-calls native_init() and other setup. handleEnable(); synchronized (mLock) { mEnabled = false; } updateEnabled(); // resend configuration into the restarted HAL service. reloadGpsProperties(); } Loading Loading @@ -1690,7 +1717,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements /* requestorIdEncoding= */ 0, /* textEncoding= */ 0, mSuplEsEnabled, mEnabled, isEnabled(), userResponse); return true; Loading Loading @@ -1756,7 +1783,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements notification.requestorIdEncoding, notification.textEncoding, mSuplEsEnabled, mEnabled, isEnabled(), /* userResponse= */ 0); } Loading Loading @@ -1881,9 +1908,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements public void handleMessage(Message msg) { int message = msg.what; switch (message) { case ENABLE: handleEnable(); break; case SET_REQUEST: GpsRequest gpsRequest = (GpsRequest) msg.obj; handleSetRequest(gpsRequest.request, gpsRequest.source); Loading Loading @@ -1998,8 +2022,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements new NetworkLocationListener(), getLooper()); // enable gps provider, it will never be disabled (legacy behavior) sendEmptyMessage(ENABLE); updateEnabled(); } } Loading Loading @@ -2043,8 +2066,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements */ private String messageIdAsString(int message) { switch (message) { case ENABLE: return "ENABLE"; case SET_REQUEST: return "SET_REQUEST"; case INJECT_NTP_TIME: Loading