Show the Use location prompt only once if user agrees. Bug #1910370
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 96d7c60..e1a9bcd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1174,7 +1174,7 @@
     <!-- Title of dialog to user requesting use of location information to improve services -->
     <string name="use_location_summary">Allow Google to use location for improved search and other services</string>
     <!-- Message of dialog to user requesting use of location information -->
-    <string name="use_location_warning_message">Allow Google to use location for improved search results and other services</string>
+    <string name="use_location_warning_message">Do you want to allow Google to use location for improved search results and other services?</string>
     <!-- Agree -->
     <string name="agree">Agree</string>
     <!-- Disagree -->
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index c8933dc..677432c 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -25,6 +25,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.database.Cursor;
 import android.location.LocationManager;
@@ -68,6 +69,9 @@
     private static final String KEY_TACTILE_FEEDBACK_ENABLED = "tactilefeedback";
     private static final int CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE = 55;
 
+    private static final String PREFS_NAME = "location_prefs";
+    private static final String PREFS_USE_LOCATION = "use_location";
+
     private LockPatternUtils mLockPatternUtils;
     private CheckBoxPreference mLockEnabled;
     private CheckBoxPreference mVisiblePattern;
@@ -335,6 +339,8 @@
             mUseLocation.setChecked(true);
         }
 
+        if (hasAgreedToUseLocation()) return;
+
         CharSequence msg = getResources().getText(R.string.use_location_warning_message);
         mUseLocationDialog = new AlertDialog.Builder(this).setMessage(msg)
                 .setTitle(R.string.use_location_title)
@@ -427,6 +433,7 @@
         if (which == DialogInterface.BUTTON_POSITIVE) {
             //updateProviders();
             mOkClicked = true;
+            setAgreedToUseLocation(true);
         } else {
             // Reset the toggle
             mUseLocation.setChecked(false);
@@ -462,6 +469,23 @@
         }
     }
 
+    private boolean hasAgreedToUseLocation() {
+        SharedPreferences sp = getSharedPreferences(PREFS_NAME, 0);
+        if (sp == null) {
+            return false;
+        }
+        return sp.getBoolean(PREFS_USE_LOCATION, false);
+    }
+
+    private void setAgreedToUseLocation(boolean agreed) {
+        if (agreed) {
+            SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
+            SharedPreferences.Editor editor = settings.edit();
+            editor.putBoolean(PREFS_USE_LOCATION, true);
+            editor.commit();
+        }
+    }
+
     private class CstorHelper implements DialogInterface.OnClickListener,
             DialogInterface.OnDismissListener,
             DialogInterface.OnCancelListener {