Mechanism to clear data through "Reset to default" setting

- Added hooks in BrowserYesNoPreference to support a third
  button.
- Enabled the third button for "Reset to default" setting
- If user clicks on this new button, it'll also clear the
  private data (history, cache, etc)

Change-Id: I7b224805d2ab8ef440a13948821c871b0b4a791e
diff --git a/src/com/android/browser/BrowserYesNoPreference.java b/src/com/android/browser/BrowserYesNoPreference.java
index f47ff3d..289ddf3 100644
--- a/src/com/android/browser/BrowserYesNoPreference.java
+++ b/src/com/android/browser/BrowserYesNoPreference.java
@@ -16,14 +16,14 @@
 
 package com.android.browser;
 
-import android.app.Activity;
+import android.app.AlertDialog;
 import android.content.Context;
-import android.content.Intent;
+import android.content.DialogInterface;
 import android.content.SharedPreferences;
+import android.content.res.TypedArray;
 import android.preference.DialogPreference;
 import android.preference.PreferenceManager;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
@@ -31,12 +31,21 @@
 class BrowserYesNoPreference extends DialogPreference {
     private SharedPreferences mPrefs;
     private Context mContext;
+    private String mNeutralBtnTxt;
+    private String mPositiveBtnTxt;
+    private String mNegativeBtnTxt;
+    private boolean mNeutralBtnClicked = false;
 
     // This is the constructor called by the inflater
     public BrowserYesNoPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
         mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
         mContext = context;
+        final TypedArray a = mContext.obtainStyledAttributes(attrs,
+                R.styleable.BrowserYesNoPreference, 0, 0);
+        mNeutralBtnTxt = a.getString(R.styleable.BrowserYesNoPreference_neutralButtonText);
+        mPositiveBtnTxt = a.getString(R.styleable.BrowserYesNoPreference_positiveButtonText);
+        mNegativeBtnTxt = a.getString(R.styleable.BrowserYesNoPreference_negativeButtonText);
     }
 
     @Override
@@ -60,11 +69,33 @@
     }
 
     @Override
+    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+        super.onPrepareDialogBuilder(builder);
+        if (mNeutralBtnTxt != null) {
+            builder.setNeutralButton(mNeutralBtnTxt, this);
+        }
+
+        if (mPositiveBtnTxt != null) {
+            builder.setPositiveButton(mPositiveBtnTxt, this);
+        }
+
+        if (mNegativeBtnTxt != null) {
+            builder.setNegativeButton(mNegativeBtnTxt, this);
+        }
+    }
+
+    @Override
     protected void onClick() {
         super.onClick();
     }
 
     @Override
+    public void onClick(DialogInterface dialog, int which) {
+        super.onClick(dialog, which);
+        mNeutralBtnClicked = DialogInterface.BUTTON_NEUTRAL == which;
+    }
+
+    @Override
     protected View onCreateDialogView() {
         if (PreferenceKeys.PREF_CLEAR_SELECTED_DATA.equals(getKey())) {
             String dialogMessage = mContext.getString(R.string.pref_privacy_clear_selected_dlg);
@@ -115,11 +146,13 @@
     @Override
     protected void onDialogClosed(boolean positiveResult) {
         super.onDialogClosed(positiveResult);
+        Integer result = (positiveResult) ? 1 : 0;
 
-        if (!positiveResult)
-            return;
+        if (mNeutralBtnTxt != null && mNeutralBtnClicked) {
+            result = 2;
+        }
 
-        if (callChangeListener(positiveResult)) {
+        if (callChangeListener(result)) {
             setEnabled(false);
             BrowserSettings settings = BrowserSettings.getInstance();
             if (PreferenceKeys.PREF_CLEAR_SELECTED_DATA.equals(getKey())) {
@@ -147,6 +180,16 @@
                 setEnabled(true);
             } else if (PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES.equals(
                     getKey())) {
+                if (mNeutralBtnClicked) {
+                    settings.clearCache();
+                    settings.clearDatabases();
+                    settings.clearCookies();
+                    settings.clearHistory();
+                    settings.clearFormData();
+                    settings.clearPasswords();
+                    settings.clearLocationAccess();
+                }
+
                 settings.resetDefaultPreferences();
                 setEnabled(true);
             }
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 0a5fa64..00977f6 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -156,13 +156,14 @@
         }
 
         else if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) {
-            Boolean value = (Boolean) objValue;
-            if (value.booleanValue() == true) {
+            Integer value = (Integer) objValue;
+            if (value.intValue() != 0) {
                 PermissionsServiceFactory.resetDefaultPermissions();
                 mFragment.startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
                         mFragment.getActivity(), BrowserActivity.class));
                 return true;
             }
+
         } else if (pref.getKey().equals(PreferenceKeys.PREF_SEARCH_ENGINE)) {
             ListPreference lp = (ListPreference) pref;
             lp.setValue((String) objValue);
diff --git a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
index e586cb5..55f346c 100644
--- a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
@@ -42,6 +42,8 @@
 public class PrivacySecurityPreferencesFragment extends SWEPreferenceFragment
         implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
 
+    private Preference mClearPref;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -52,8 +54,8 @@
         websiteSettings.setFragment(WebsiteSettingsFragment.class.getName());
         websiteSettings.setOnPreferenceClickListener(this);
 
-        Preference e = findPreference(PreferenceKeys.PREF_CLEAR_SELECTED_DATA);
-        e.setOnPreferenceChangeListener(this);
+        mClearPref = findPreference(PreferenceKeys.PREF_CLEAR_SELECTED_DATA);
+        mClearPref.setOnPreferenceChangeListener(this);
 
         readAndShowPermission("enable_geolocation",
                 PermissionsServiceFactory.PermissionType.GEOLOCATION);
@@ -120,7 +122,17 @@
 
     @Override
     public boolean onPreferenceChange(Preference pref, Object objValue) {
-        boolean flag = (boolean) objValue;
+        boolean flag = true;
+        if (pref == mClearPref) {
+            Integer value = (Integer) objValue;
+            if (value == 0) {
+                return false;
+            }
+        } else {
+            Boolean bFlag = (Boolean) objValue;
+            flag = bFlag.booleanValue();
+        }
+
         if (pref.getKey().equals(PreferenceKeys.PREF_CLEAR_SELECTED_DATA)) {
             if (pref.getPreferenceManager().getDefaultSharedPreferences(
                     (Context) getActivity()).getBoolean(