summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-10-08 12:41:33 +0100
committerBen Murdoch <benm@google.com>2010-10-13 11:33:39 +0100
commit0cb8189efd19242f4b2962378bf32de122dafde0 (patch)
tree8cc24b37605104865bfbfcaa212add0e98902d67 /src/com/android/browser
parentfb951243cfc8b552939f69b6b8824564acad914b (diff)
downloadpackages_apps_Browser-0cb8189efd19242f4b2962378bf32de122dafde0.zip
packages_apps_Browser-0cb8189efd19242f4b2962378bf32de122dafde0.tar.gz
packages_apps_Browser-0cb8189efd19242f4b2962378bf32de122dafde0.tar.bz2
Sync Autofill profile data native side
When the user adds or edits the AutoFill profile, sync that data to the native WebKit code through the BrowserSettings object. Also sync the profile data on startup if it is available. Change-Id: I6146a842cb765f8ed91c109537038baad6b547fb
Diffstat (limited to 'src/com/android/browser')
-rw-r--r--src/com/android/browser/AutoFillProfileDatabase.java5
-rw-r--r--src/com/android/browser/AutoFillSettingsFragment.java86
-rw-r--r--src/com/android/browser/BrowserSettings.java67
3 files changed, 81 insertions, 77 deletions
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.SQLiteDatabase;
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 @@ public class AutoFillProfileDatabase {
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 @@ public class AutoFillSettingsFragment extends Fragment {
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 @@ public class AutoFillSettingsFragment extends Fragment {
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.pm.ActivityInfo;
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.WebView;
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 @@ public class BrowserSettings extends Observable {
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 @@ public class BrowserSettings extends Observable {
s.setDatabasePath(b.databasePath);
s.setGeolocationDatabasePath(b.geolocationDatabasePath);
+ // Active AutoFill profile data.
+ s.setAutoFillProfile(b.mAutoFillProfile);
+
b.updateTabControlSettings();
}
}
@@ -300,6 +313,23 @@ public class BrowserSettings extends Observable {
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 @@ public class BrowserSettings extends Observable {
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 @@ public class BrowserSettings extends Observable {
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();
+ }
+ }
+
}