/*
* 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.xbrowser;
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;
import android.webkit.WebSettings.AutoFillProfile;
public class AutoFillProfileDatabase {
static final String LOGTAG = "AutoFillProfileDatabase";
static final String DATABASE_NAME = "autofill.db";
static final int DATABASE_VERSION = 2;
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";
static final String COMPANY_NAME = "companyname";
static final String ADDRESS_LINE_1 = "addressline1";
static final String ADDRESS_LINE_2 = "addressline2";
static final String CITY = "city";
static final String STATE = "state";
static final String ZIP_CODE = "zipcode";
static final String COUNTRY = "country";
static final String PHONE_NUMBER = "phone";
}
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,"
+ Profiles.COMPANY_NAME + " TEXT,"
+ Profiles.ADDRESS_LINE_1 + " TEXT,"
+ Profiles.ADDRESS_LINE_2 + " TEXT,"
+ Profiles.CITY + " TEXT,"
+ Profiles.STATE + " TEXT,"
+ Profiles.ZIP_CODE + " TEXT,"
+ Profiles.COUNTRY + " TEXT,"
+ Profiles.PHONE_NUMBER + " 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, AutoFillProfile profile) {
final String sql = "INSERT OR REPLACE INTO " + PROFILES_TABLE_NAME + " ("
+ Profiles._ID + ","
+ Profiles.FULL_NAME + ","
+ Profiles.EMAIL_ADDRESS + ","
+ Profiles.COMPANY_NAME + ","
+ Profiles.ADDRESS_LINE_1 + ","
+ Profiles.ADDRESS_LINE_2 + ","
+ Profiles.CITY + ","
+ Profiles.STATE + ","
+ Profiles.ZIP_CODE + ","
+ Profiles.COUNTRY + ","
+ Profiles.PHONE_NUMBER
+ ") VALUES (?,?,?,?,?,?,?,?,?,?,?);";
final Object[] params = { id,
profile.getFullName(),
profile.getEmailAddress(),
profile.getCompanyName(),
profile.getAddressLine1(),
profile.getAddressLine2(),
profile.getCity(),
profile.getState(),
profile.getZipCode(),
profile.getCountry(),
profile.getPhoneNumber() };
getDatabase(true).execSQL(sql, params);
}
public Cursor getProfile(int id) {
final String[] cols = {
Profiles.FULL_NAME,
Profiles.EMAIL_ADDRESS,
Profiles.COMPANY_NAME,
Profiles.ADDRESS_LINE_1,
Profiles.ADDRESS_LINE_2,
Profiles.CITY,
Profiles.STATE,
Profiles.ZIP_CODE,
Profiles.COUNTRY,
Profiles.PHONE_NUMBER
};
final String[] selectArgs = { Integer.toString(id) };
return getDatabase(false).query(PROFILES_TABLE_NAME, cols, Profiles._ID + "=?", selectArgs,
null, null, null, "1");
}
public void dropProfile(int id) {
final String sql = "DELETE FROM " + PROFILES_TABLE_NAME +" WHERE " + Profiles._ID + " = ?;";
final Object[] params = { id };
getDatabase(true).execSQL(sql, params);
}
public void close() {
mOpenHelper.close();
}
}