From 835a0a07a7a3712d3aed5ccb66bc1a76289c7782 Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Wed, 30 Jan 2019 14:55:03 -0800 Subject: [PATCH] Fix location ignore settings bugs Whitelist not properly initialized and LocationRequest settings not properly serialized. Test: manually Change-Id: I3e8a8883dcf8859e6684e092818121b3360d3f17 --- .../android/location/LocationRequest.java | 5 +++ .../server/LocationManagerService.java | 31 +++++++++---------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/location/java/android/location/LocationRequest.java b/location/java/android/location/LocationRequest.java index 3d0afb098697a..0480eab580ac3 100644 --- a/location/java/android/location/LocationRequest.java +++ b/location/java/android/location/LocationRequest.java @@ -683,6 +683,7 @@ public final class LocationRequest implements Parcelable { request.setSmallestDisplacement(in.readFloat()); request.setHideFromAppOps(in.readInt() != 0); request.setLowPowerMode(in.readInt() != 0); + request.setLocationSettingsIgnored(in.readInt() != 0); String provider = in.readString(); if (provider != null) request.setProvider(provider); WorkSource workSource = in.readParcelable(null); @@ -711,6 +712,7 @@ public final class LocationRequest implements Parcelable { parcel.writeFloat(mSmallestDisplacement); parcel.writeInt(mHideFromAppOps ? 1 : 0); parcel.writeInt(mLowPowerMode ? 1 : 0); + parcel.writeInt(mLocationSettingsIgnored ? 1 : 0); parcel.writeString(mProvider); parcel.writeParcelable(mWorkSource, 0); } @@ -755,6 +757,9 @@ public final class LocationRequest implements Parcelable { s.append(" num=").append(mNumUpdates); } s.append(" lowPowerMode=").append(mLowPowerMode); + if (mLocationSettingsIgnored) { + s.append(" ignoreSettings"); + } s.append(']'); return s.toString(); } diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index d2c6354e91b8d..6bac93cf07fae 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -405,6 +405,7 @@ public class LocationManagerService extends ILocationManager.Stub { // initialize in-memory settings values onBackgroundThrottleWhitelistChangedLocked(); + onIgnoreSettingsWhitelistChangedLocked(); } @GuardedBy("mLock") @@ -547,17 +548,16 @@ public class LocationManagerService extends ILocationManager.Stub { @GuardedBy("mLock") private void onBackgroundThrottleWhitelistChangedLocked() { - String setting = Settings.Global.getString( - mContext.getContentResolver(), - Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST); - if (setting == null) { - setting = ""; - } - mBackgroundThrottlePackageWhitelist.clear(); mBackgroundThrottlePackageWhitelist.addAll( SystemConfig.getInstance().getAllowUnthrottledLocation()); - mBackgroundThrottlePackageWhitelist.addAll(Arrays.asList(setting.split(","))); + + String setting = Settings.Global.getString( + mContext.getContentResolver(), + Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST); + if (!TextUtils.isEmpty(setting)) { + mBackgroundThrottlePackageWhitelist.addAll(Arrays.asList(setting.split(","))); + } for (LocationProvider p : mProviders) { applyRequirementsLocked(p); @@ -566,17 +566,16 @@ public class LocationManagerService extends ILocationManager.Stub { @GuardedBy("lock") private void onIgnoreSettingsWhitelistChangedLocked() { - String setting = Settings.Global.getString( - mContext.getContentResolver(), - Settings.Global.LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST); - if (setting == null) { - setting = ""; - } - mIgnoreSettingsPackageWhitelist.clear(); mIgnoreSettingsPackageWhitelist.addAll( SystemConfig.getInstance().getAllowIgnoreLocationSettings()); - mIgnoreSettingsPackageWhitelist.addAll(Arrays.asList(setting.split(","))); + + String setting = Settings.Global.getString( + mContext.getContentResolver(), + Settings.Global.LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST); + if (!TextUtils.isEmpty(setting)) { + mIgnoreSettingsPackageWhitelist.addAll(Arrays.asList(setting.split(","))); + } for (LocationProvider p : mProviders) { applyRequirementsLocked(p);