diff options
3 files changed, 49 insertions, 30 deletions
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index de86789053e9..dbeee1c4b2ca 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -40,11 +40,8 @@ <bool name="def_wifi_display_on">false</bool> <bool name="def_install_non_market_apps">false</bool> <bool name="def_package_verifier_enable">true</bool> - <!-- Comma-separated list of location providers. - Network location is off by default because it requires - user opt-in via Setup Wizard or Settings. - --> - <string name="def_location_providers_allowed" translatable="false">gps</string> + <!-- Comma-separated list of location providers --> + <string name="def_location_providers_allowed" translatable="false">gps,network</string> <bool name="assisted_gps_enabled">true</bool> <bool name="def_netstats_enabled">true</bool> <bool name="def_usb_mass_storage_enabled">true</bool> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 5105ff46703d..445312168eba 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 b3a0f643ba4b..8dcc1d57c572 100644 --- a/services/core/java/com/android/server/LocationManagerService.java +++ b/services/core/java/com/android/server/LocationManagerService.java @@ -849,6 +849,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") @@ -2900,33 +2909,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); } |