Merge "Use getters/setters for WebAddress fields"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 29d8703..0b2d53a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -355,6 +355,8 @@
     <string name="autofill_profile_editor_email_address">e-mail Address:</string>
     <!-- Button text to save the AutoFill profile [CHAR-LIMIT=20] -->
     <string name="autofill_profile_editor_save_profile">Save profile</string>
+    <!-- Toast message displayed when the profile has been successfully saved [CHAR-LIMIT=none] -->
+    <string name="autofill_profile_successful_save">Profile saved</string>
 
     <!-- Settings screen, section title -->
     <string name="pref_privacy_title">Privacy settings</string>
diff --git a/src/com/android/browser/AutoFillProfileDatabase.java b/src/com/android/browser/AutoFillProfileDatabase.java
index e3d6ea2..5557aaf 100644
--- a/src/com/android/browser/AutoFillProfileDatabase.java
+++ b/src/com/android/browser/AutoFillProfileDatabase.java
@@ -22,6 +22,7 @@
 import android.database.sqlite.SQLiteOpenHelper;
 import android.provider.BaseColumns;
 import android.util.Log;
+import android.webkit.WebSettings.AutoFillProfile;
 
 public class AutoFillProfileDatabase {
 
@@ -78,13 +79,13 @@
         return writable ? mOpenHelper.getWritableDatabase() : mOpenHelper.getReadableDatabase();
     }
 
-    public void addOrUpdateProfile(final int id, final String fullName, final String email) {
+    public void addOrUpdateProfile(final int id, AutoFillProfile profile) {
         final String SQL = "INSERT OR REPLACE INTO " + PROFILES_TABLE_NAME + " ("
                 + Profiles._ID + ","
                 + Profiles.FULL_NAME + ","
                 + Profiles.EMAIL_ADDRESS
                 + ") VALUES (?,?,?);";
-        final Object[] PARAMS = {id, fullName, email};
+        final Object[] PARAMS = { id, profile.getFullName(), profile.getEmailAddress() };
         getDatabase(true).execSQL(SQL, PARAMS);
     }
 
diff --git a/src/com/android/browser/AutoFillSettingsFragment.java b/src/com/android/browser/AutoFillSettingsFragment.java
index b650ede..e41ca56 100644
--- a/src/com/android/browser/AutoFillSettingsFragment.java
+++ b/src/com/android/browser/AutoFillSettingsFragment.java
@@ -17,26 +17,20 @@
 package com.android.browser;
 
 import android.app.Fragment;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.View.OnClickListener;
 import android.view.LayoutInflater;
+import android.webkit.WebSettings.AutoFillProfile;
 import android.widget.Button;
 import android.widget.EditText;
-import android.widget.Toast;
 
 public class AutoFillSettingsFragment extends Fragment {
 
     private static final String LOGTAG = "AutoFillSettingsFragment";
 
-    // TODO: This will become dynamic once we support more than one profile.
-    private int mProfileId = 1;
-
     public AutoFillSettingsFragment() {
 
     }
@@ -59,13 +53,21 @@
                         R.id.autofill_profile_editor_name_edit);
                 EditText email = (EditText)v.findViewById(
                         R.id.autofill_profile_editor_email_address_edit);
-                new SaveProfileToDbTask().execute(fullName.getText().toString(),
-                        email.getText().toString());
+                BrowserSettings.getInstance().setAutoFillProfile(getActivity(),
+                        new AutoFillProfile(
+                                fullName.getText().toString(),
+                                email.getText().toString()));
             }
         });
 
-        // Load the profile and populate the text views in the background
-        new LoadProfileFromDbTask().execute(mProfileId);
+        // Populate the text boxes with any pre existing AutoFill data.
+        EditText fullName = (EditText)v.findViewById(
+                R.id.autofill_profile_editor_name_edit);
+        EditText email = (EditText)v.findViewById(
+                R.id.autofill_profile_editor_email_address_edit);
+        AutoFillProfile activeProfile = BrowserSettings.getInstance().getAutoFillProfile();
+        fullName.setText(activeProfile.getFullName());
+        email.setText(activeProfile.getEmailAddress());
 
         return v;
     }
@@ -77,66 +79,4 @@
         db.close();
         super.onPause();
     }
-
-    private class SaveProfileToDbTask extends AsyncTask<String, Void, Void> {
-        protected Void doInBackground(String... values) {
-            AutoFillProfileDatabase db =
-                    AutoFillProfileDatabase.getInstance(getActivity());
-            db.addOrUpdateProfile(mProfileId, values[0], values[1]);
-            return null;
-        }
-
-        protected void onPostExecute(Void result) {
-            Toast.makeText(getActivity(), "Saved profile", Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    private static class LoadedProfileData {
-        private String mFullName;
-        private String mEmailAddress;
-
-        public LoadedProfileData(String fullName, String emailAddress) {
-            mFullName = fullName;
-            mEmailAddress = emailAddress;
-        }
-
-        public String getFullName() { return mFullName; }
-        public String getEmailAddress() { return mEmailAddress; }
-    }
-
-    private class LoadProfileFromDbTask extends AsyncTask<Integer, Void, LoadedProfileData> {
-        protected LoadedProfileData doInBackground(Integer... id) {
-            AutoFillProfileDatabase db = AutoFillProfileDatabase.getInstance(getActivity());
-            Cursor c = db.getProfile(id[0]);
-            c.moveToFirst();
-
-            LoadedProfileData profileData = null;
-
-            if (c.getCount() > 0) {
-                String fullName = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.FULL_NAME));
-                String email = c.getString(c.getColumnIndex(
-                        AutoFillProfileDatabase.Profiles.EMAIL_ADDRESS));
-                profileData =  new LoadedProfileData(fullName, email);
-            }
-           c.close();
-           return profileData;
-        }
-
-        protected void onPostExecute(LoadedProfileData data) {
-            if (data == null) {
-                return;
-            }
-
-            View v = getView();
-            if (v != null) {
-                EditText fullName = (EditText)v.findViewById(
-                        R.id.autofill_profile_editor_name_edit);
-                EditText email = (EditText)v.findViewById(
-                        R.id.autofill_profile_editor_email_address_edit);
-                fullName.setText(data.getFullName());
-                email.setText(data.getEmailAddress());
-            }
-        }
-    }
 }
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 4c798a0..d3c1c00 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -28,10 +28,14 @@
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.database.ContentObserver;
+import android.database.Cursor;
 import android.net.Uri;
+import android.os.AsyncTask;
 import android.os.Handler;
 import android.preference.PreferenceActivity;
+import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
+import android.provider.Browser;
 import android.provider.Settings;
 import android.util.Log;
 import android.webkit.CookieManager;
@@ -41,9 +45,9 @@
 import android.webkit.WebViewDatabase;
 import android.webkit.WebIconDatabase;
 import android.webkit.WebSettings;
+import android.webkit.WebSettings.AutoFillProfile;
 import android.webkit.WebStorage;
-import android.preference.PreferenceManager;
-import android.provider.Browser;
+import android.widget.Toast;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -127,6 +131,12 @@
         WebSettings.ZoomDensity.MEDIUM;
     private static int pageCacheCapacity;
 
+
+    private AutoFillProfile mAutoFillProfile;
+    // TODO: For now we only support one autofill profile. Add support for
+    // multiple profiles later.
+    private int mActiveAutoFillProfileId = 1;
+
     // Preference keys that are used outside this class
     public final static String PREF_CLEAR_CACHE = "privacy_clear_cache";
     public final static String PREF_CLEAR_COOKIES = "privacy_clear_cookies";
@@ -255,6 +265,9 @@
             s.setDatabasePath(b.databasePath);
             s.setGeolocationDatabasePath(b.geolocationDatabasePath);
 
+            // Active AutoFill profile data.
+            s.setAutoFillProfile(b.mAutoFillProfile);
+
             b.updateTabControlSettings();
         }
     }
@@ -300,6 +313,23 @@
             pageCacheCapacity = 1;
         }
 
+        // Load the autofill profile data from the database. We use a database separate
+        // to the browser preference DB to make it easier to support multiple profiles
+        // and switching between them.
+        mAutoFillProfile = new AutoFillProfile();
+        AutoFillProfileDatabase autoFillDb = AutoFillProfileDatabase.getInstance(ctx);
+        Cursor c = autoFillDb.getProfile(mActiveAutoFillProfileId);
+
+        if (c.getCount() > 0) {
+            c.moveToFirst();
+            mAutoFillProfile.setFullName(c.getString(c.getColumnIndex(
+                    AutoFillProfileDatabase.Profiles.FULL_NAME)));
+            mAutoFillProfile.setEmailAddress(c.getString(c.getColumnIndex(
+                    AutoFillProfileDatabase.Profiles.EMAIL_ADDRESS)));
+        }
+        c.close();
+        autoFillDb.close();
+
         // PreferenceManager.setDefaultValues is TOO SLOW, need to manually keep
         // the defaults in sync
         syncSharedPreferences(ctx, p);
@@ -477,6 +507,17 @@
         update();
     }
 
+    public void setAutoFillProfile(Context ctx, AutoFillProfile profile) {
+        mAutoFillProfile = profile;
+        // Update the AutoFill DB
+        new SaveProfileToDbTask(ctx).execute(mAutoFillProfile);
+
+    }
+
+    public AutoFillProfile getAutoFillProfile() {
+        return mAutoFillProfile;
+    }
+
     /**
      * Add a WebSettings object to the list of observers that will be updated
      * when update() is called.
@@ -641,4 +682,26 @@
         geolocationEnabled = true;
         workersEnabled = true;  // only affects V8. JSC does not have a similar setting
     }
+
+    private class SaveProfileToDbTask extends AsyncTask<AutoFillProfile, Void, Void> {
+
+        Context mContext;
+
+        public SaveProfileToDbTask(Context ctx) {
+            mContext = ctx;
+        }
+
+        protected Void doInBackground(AutoFillProfile... values) {
+            AutoFillProfileDatabase db =
+                    AutoFillProfileDatabase.getInstance(mContext);
+            db.addOrUpdateProfile(mActiveAutoFillProfileId, values[0]);
+            return null;
+        }
+
+        protected void onPostExecute(Void result) {
+            String message = mContext.getString(R.string.autofill_profile_successful_save);
+            Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
+        }
+    }
+
 }