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();
}