From 4bfdcd3e5fb344cad88feaf4172427f0be53ac2c Mon Sep 17 00:00:00 2001 From: Amith Yamasani <> Date: Thu, 2 Apr 2009 11:40:25 -0700 Subject: [PATCH] AI 144257: am: CL 144256 Need to show opt-in screen for location collection. Added a screen to the setup wizard, after login, to ask user to opt-in for location collection. Added a dialog to Settings when user turns on Network location. Fixed a security permission issue in LocationManagerService related to this change. Original author: yamasani Merged from: //branches/cupcake/... Automated import of CL 144257 --- res/values/strings.xml | 8 +++ .../android/settings/SecuritySettings.java | 51 +++++++++++++++---- 2 files changed, 50 insertions(+), 9 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index b4df5e2f944..b93dba90491 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1102,6 +1102,14 @@ When locating, accurate to street level (deselect to conserve battery) Locate to street-level (requires more battery plus view of sky) + + Location consent + + "Allow Google's location service to collect anonymous and aggregate location data. Collection will occur regardless of whether any applications are active." + + Agree + + Disagree diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index b34388ed2e5..08e4a583b48 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -18,7 +18,9 @@ package com.android.settings; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.location.LocationManager; @@ -38,7 +40,7 @@ import com.android.internal.widget.LockPatternUtils; * Gesture lock pattern settings. */ public class SecuritySettings extends PreferenceActivity - implements SharedPreferences.OnSharedPreferenceChangeListener { + implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener { // Lock Settings @@ -63,6 +65,9 @@ public class SecuritySettings extends PreferenceActivity private CheckBoxPreference mNetwork; private CheckBoxPreference mGps; private LocationManager mLocationManager; + + // To track whether Agree was clicked in the Network location warning dialog + private boolean mOkClicked; @Override protected void onCreate(Bundle savedInstanceState) { @@ -79,7 +84,6 @@ public class SecuritySettings extends PreferenceActivity mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK); mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS); - getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); updateToggles(); } @@ -184,11 +188,46 @@ public class SecuritySettings extends PreferenceActivity } else if (preference == mShowPassword) { Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, mShowPassword.isChecked() ? 1 : 0); + } else if (preference == mNetwork) { + //normally called on the toggle click + if (mNetwork.isChecked()) { + // Show a warning to the user that location data will be shared + mOkClicked = false; + new AlertDialog.Builder(this).setMessage( + getResources().getString(R.string.location_warning_message)) + .setTitle(R.string.location_warning_title) + .setIcon(android.R.drawable.ic_dialog_alert) + .setPositiveButton(R.string.agree, this) + .setNegativeButton(R.string.disagree, this) + .show() + .setOnDismissListener(this); + } else { + updateProviders(); + } + } else if (preference == mGps) { + updateProviders(); } - + return false; } + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + updateProviders(); + mOkClicked = true; + } else { + // Reset the toggle + mNetwork.setChecked(false); + } + } + + public void onDismiss(DialogInterface dialog) { + // Assuming that onClick gets called first + if (!mOkClicked) { + mNetwork.setChecked(false); + } + } + /* * Creates toggles for each available location provider */ @@ -233,12 +272,6 @@ public class SecuritySettings extends PreferenceActivity return allowedProviders; } - public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - if (LOCATION_NETWORK.equals(key) || LOCATION_GPS.equals(key)) { - updateProviders(); - } - } - private boolean isToggled(Preference pref) { return ((CheckBoxPreference) pref).isChecked(); }