diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index de86789053e90..dbeee1c4b2cad 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -40,11 +40,8 @@ false false true - - gps + + gps,network true true true diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 5105ff46703d5..445312168ebaf 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -3232,7 +3232,7 @@ public class SettingsProvider extends ContentProvider { } private final class UpgradeController { - private static final int SETTINGS_VERSION = 172; + private static final int SETTINGS_VERSION = 173; private final int mUserId; @@ -4217,6 +4217,41 @@ public class SettingsProvider extends ContentProvider { currentVersion = 172; } + if (currentVersion == 172) { + // Version 172: Set the default value for Secure Settings: LOCATION_MODE + + final SettingsState secureSettings = getSecureSettingsLocked(userId); + + final Setting locationMode = secureSettings.getSettingLocked( + Secure.LOCATION_MODE); + + if (locationMode.isNull()) { + final Setting locationProvidersAllowed = secureSettings.getSettingLocked( + Secure.LOCATION_PROVIDERS_ALLOWED); + + String defLocationMode = Integer.toString( + !TextUtils.isEmpty(locationProvidersAllowed.getValue()) + ? Secure.LOCATION_MODE_HIGH_ACCURACY + : Secure.LOCATION_MODE_OFF); + secureSettings.insertSettingLocked( + Secure.LOCATION_MODE, defLocationMode, + null, true, SettingsState.SYSTEM_PACKAGE_NAME); + + // also reset LOCATION_PROVIDERS_ALLOWED back to the default value - this + // setting is now only for debug/test purposes, and will likely be removed + // in a later release. LocationManagerService is responsible for adjusting + // these settings to the proper state. + + String defLocationProvidersAllowed = getContext().getResources().getString( + R.string.def_location_providers_allowed); + secureSettings.insertSettingLocked( + Secure.LOCATION_PROVIDERS_ALLOWED, defLocationProvidersAllowed, + null, true, SettingsState.SYSTEM_PACKAGE_NAME); + } + + currentVersion = 173; + } + // vXXX: Add new settings above this point. if (currentVersion != newVersion) { diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java index add5e5feaa8a1..2543f5209dd92 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -830,6 +830,15 @@ public class LocationManagerService extends ILocationManager.Stub { mAllowed = !mIsManagedBySettings; mEnabled = false; mProperties = null; + + if (mIsManagedBySettings) { + // since we assume providers are disabled by default + Settings.Secure.putStringForUser( + mContext.getContentResolver(), + Settings.Secure.LOCATION_PROVIDERS_ALLOWED, + "-" + mName, + mCurrentUserId); + } } @GuardedBy("mLock") @@ -2865,33 +2874,11 @@ public class LocationManagerService extends ILocationManager.Stub { long identity = Binder.clearCallingIdentity(); try { - boolean enabled; - try { - enabled = Settings.Secure.getIntForUser( + return Settings.Secure.getIntForUser( mContext.getContentResolver(), Settings.Secure.LOCATION_MODE, + Settings.Secure.LOCATION_MODE_OFF, userId) != Settings.Secure.LOCATION_MODE_OFF; - } catch (Settings.SettingNotFoundException e) { - // OS upgrade case where mode isn't set yet - enabled = !TextUtils.isEmpty(Settings.Secure.getStringForUser( - mContext.getContentResolver(), - Settings.Secure.LOCATION_PROVIDERS_ALLOWED, - userId)); - - try { - Settings.Secure.putIntForUser( - mContext.getContentResolver(), - Settings.Secure.LOCATION_MODE, - enabled - ? Settings.Secure.LOCATION_MODE_HIGH_ACCURACY - : Settings.Secure.LOCATION_MODE_OFF, - userId); - } catch (RuntimeException ex) { - // any problem with writing should not be propagated - Slog.e(TAG, "error updating location mode", ex); - } - } - return enabled; } finally { Binder.restoreCallingIdentity(identity); }