diff options
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 |