diff options
author | Ben Murdoch <benm@google.com> | 2010-09-10 22:09:30 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2010-10-06 11:37:57 +0100 |
commit | af55452d7f37c20201663b80ca77b64457323361 (patch) | |
tree | e5eea2b93464fdd5a121fcaf07e636b8ffa497bc /src | |
parent | 3d4e011ab9f87ff7f1b467ed7d92c6d89157d192 (diff) | |
download | packages_apps_Browser-af55452d7f37c20201663b80ca77b64457323361.zip packages_apps_Browser-af55452d7f37c20201663b80ca77b64457323361.tar.gz packages_apps_Browser-af55452d7f37c20201663b80ca77b64457323361.tar.bz2 |
AutoFill Profile editor UI initial checkin
Make a start on a simple AutoFill profile editor so that
we can get rid of the default John Smith profile we've
been using for testing. This CL also moves the autofill
settings from the Privacy Preferences page to the Personal
Preferences page.
Note that this is just the profile editor in the Browser
and although the data entered is persisted to disk, it is
not yet synced with the native AutoFill code so for now we
continue to use the canned profile native side.
Change-Id: Ie609c5f25fffc914267605efdb10444379c29388
Diffstat (limited to 'src')
4 files changed, 252 insertions, 1 deletions
diff --git a/src/com/android/browser/AutoFillProfileDatabase.java b/src/com/android/browser/AutoFillProfileDatabase.java new file mode 100644 index 0000000..e3d6ea2 --- /dev/null +++ b/src/com/android/browser/AutoFillProfileDatabase.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.browser; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.provider.BaseColumns; +import android.util.Log; + +public class AutoFillProfileDatabase { + + static final String LOGTAG = "AutoFillProfileDatabase"; + + static final String DATABASE_NAME = "autofill.db"; + static final int DATABASE_VERSION = 1; + static final String PROFILES_TABLE_NAME = "profiles"; + private AutoFillProfileDatabaseHelper mOpenHelper; + private static AutoFillProfileDatabase sInstance; + + public static final class Profiles implements BaseColumns { + private Profiles() { } + + static final String FULL_NAME = "fullname"; + static final String EMAIL_ADDRESS = "email"; + } + + private static class AutoFillProfileDatabaseHelper extends SQLiteOpenHelper { + AutoFillProfileDatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("CREATE TABLE " + PROFILES_TABLE_NAME + " (" + + Profiles._ID + " INTEGER PRIMARY KEY," + + Profiles.FULL_NAME + " TEXT," + + Profiles.EMAIL_ADDRESS + " TEXT" + + " );"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.w(LOGTAG, "Upgrading database from version " + oldVersion + " to " + + newVersion + ", which will destroy all old data"); + db.execSQL("DROP TABLE IF EXISTS " + PROFILES_TABLE_NAME); + onCreate(db); + } + } + + private AutoFillProfileDatabase(Context context) { + mOpenHelper = new AutoFillProfileDatabaseHelper(context); + } + + public static AutoFillProfileDatabase getInstance(Context context) { + if (sInstance == null) { + sInstance = new AutoFillProfileDatabase(context); + } + return sInstance; + } + + private SQLiteDatabase getDatabase(boolean writable) { + return writable ? mOpenHelper.getWritableDatabase() : mOpenHelper.getReadableDatabase(); + } + + public void addOrUpdateProfile(final int id, final String fullName, final String email) { + 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}; + getDatabase(true).execSQL(SQL, PARAMS); + } + + public Cursor getProfile(int id) { + final String[] COLS = {Profiles.FULL_NAME, Profiles.EMAIL_ADDRESS }; + final String[] SEL_ARGS = { Integer.toString(id) }; + return getDatabase(false).query(PROFILES_TABLE_NAME, COLS, Profiles._ID + "=?", SEL_ARGS, + null, null, null, "1"); + } + + public void close() { + mOpenHelper.close(); + } +} diff --git a/src/com/android/browser/AutoFillSettingsFragment.java b/src/com/android/browser/AutoFillSettingsFragment.java new file mode 100644 index 0000000..b650ede --- /dev/null +++ b/src/com/android/browser/AutoFillSettingsFragment.java @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +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.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() { + + } + + @Override + public void onCreate(Bundle savedState) { + super.onCreate(savedState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.autofill_settings_fragment, container, false); + + Button saveButton = (Button)v.findViewById(R.id.autofill_profile_editor_save_button); + saveButton.setOnClickListener(new OnClickListener() { + public void onClick(View button) { + View v = getView(); + 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); + new SaveProfileToDbTask().execute(fullName.getText().toString(), + email.getText().toString()); + } + }); + + // Load the profile and populate the text views in the background + new LoadProfileFromDbTask().execute(mProfileId); + + return v; + } + + @Override + public void onPause() { + AutoFillProfileDatabase db = + AutoFillProfileDatabase.getInstance(getActivity()); + 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 dfec48f..4c798a0 100644 --- a/src/com/android/browser/BrowserSettings.java +++ b/src/com/android/browser/BrowserSettings.java @@ -147,6 +147,8 @@ public class BrowserSettings extends Observable { "default_text_encoding"; public final static String PREF_CLEAR_GEOLOCATION_ACCESS = "privacy_clear_geolocation_access"; + public final static String PREF_AUTOFILL_ENABLED = "autofill_enabled"; + public final static String PREF_AUTOFILL_PROFILE = "autofill_profile"; private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " + "U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.16 (KHTML, " + @@ -340,7 +342,7 @@ public class BrowserSettings extends Observable { rememberPasswords); saveFormData = p.getBoolean("save_formdata", saveFormData); - autoFillEnabled = p.getBoolean("autoFill_enabled", autoFillEnabled); + autoFillEnabled = p.getBoolean("autofill_enabled", autoFillEnabled); boolean accept_cookies = p.getBoolean("accept_cookies", CookieManager.getInstance().acceptCookie()); CookieManager.getInstance().setAcceptCookie(accept_cookies); diff --git a/src/com/android/browser/preferences/PersonalPreferencesFragment.java b/src/com/android/browser/preferences/PersonalPreferencesFragment.java index 12751c5..f8a7563 100644 --- a/src/com/android/browser/preferences/PersonalPreferencesFragment.java +++ b/src/com/android/browser/preferences/PersonalPreferencesFragment.java @@ -17,6 +17,7 @@ package com.android.browser.preferences; import com.android.browser.BrowserBookmarksPage; +import com.android.browser.BrowserSettings; import com.android.browser.R; import android.accounts.Account; @@ -39,6 +40,7 @@ import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; +import android.preference.PreferenceScreen; import android.provider.BrowserContract; import android.provider.BrowserContract.Bookmarks; import android.provider.BrowserContract.ChromeSyncColumns; @@ -101,6 +103,10 @@ public class PersonalPreferencesFragment extends PreferenceFragment } mChromeSync.setOnPreferenceClickListener(this); } + + PreferenceScreen autoFillSettings = + (PreferenceScreen)findPreference(BrowserSettings.PREF_AUTOFILL_PROFILE); + autoFillSettings.setDependency(BrowserSettings.PREF_AUTOFILL_ENABLED); } @Override |