AI 144395: am: CL 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/...
  Original author: android-build

Automated import of CL 144395
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b4df5e2..b93dba9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1102,6 +1102,14 @@
     <string name="location_street_level">When locating, accurate to street level (deselect to conserve battery)</string>
     <!-- Security & location settings screen, setting summary when Enable GPS satellites check box is clear -->
     <string name="location_gps_disabled">Locate to street-level (requires more battery plus view of sky)</string>
+    <!-- Title of warning dialog to user that location information will be logged -->
+    <string name="location_warning_title">Location consent</string>
+    <!-- Warning text to user that location information will be logged -->
+    <string name="location_warning_message">"Allow Google's location service to collect anonymous and aggregate location data.  Collection will occur regardless of whether any applications are active."</string>
+    <!-- Agree button-->
+    <string name="agree">Agree</string>
+    <!-- Disagree button-->
+    <string name="disagree">Disagree</string>
 
     <!-- About -->
     <!-- Main settings screen, setting title for the user to go into the About phone screen -->
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index b34388e..08e4a58 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -18,7 +18,9 @@
 
 
 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 @@
  * Gesture lock pattern settings.
  */
 public class SecuritySettings extends PreferenceActivity
-    implements SharedPreferences.OnSharedPreferenceChangeListener {
+    implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
 
     // Lock Settings
     
@@ -63,6 +65,9 @@
     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 @@
 
         mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK);
         mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS);
-        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
         updateToggles();
     }
 
@@ -184,11 +188,46 @@
         } 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 @@
         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();
     }