aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/datasets/AccountTable.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/datasets/AccountTable.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/datasets/AccountTable.java124
1 files changed, 124 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/AccountTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/AccountTable.java
new file mode 100644
index 000000000..c66776c36
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/datasets/AccountTable.java
@@ -0,0 +1,124 @@
+package org.wordpress.android.datasets;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+
+import org.wordpress.android.WordPress;
+import org.wordpress.android.models.Account;
+import org.wordpress.android.util.DateTimeUtils;
+import org.wordpress.android.util.SqlUtils;
+
+public class AccountTable {
+ // Warning: the "accounts" table in WordPressDB is actually where blogs are stored.
+ private static final String ACCOUNT_TABLE = "tbl_accounts";
+
+ private static SQLiteDatabase getReadableDb() {
+ return WordPress.wpDB.getDatabase();
+ }
+ private static SQLiteDatabase getWritableDb() {
+ return WordPress.wpDB.getDatabase();
+ }
+
+ public static void createTables(SQLiteDatabase db) {
+ db.execSQL("CREATE TABLE " + ACCOUNT_TABLE + " ("
+ + "local_id INTEGER PRIMARY KEY DEFAULT 0,"
+ + "user_name TEXT,"
+ + "user_id INTEGER DEFAULT 0,"
+ + "display_name TEXT,"
+ + "profile_url TEXT,"
+ + "avatar_url TEXT,"
+ + "primary_blog_id INTEGER DEFAULT 0,"
+ + "site_count INTEGER DEFAULT 0,"
+ + "visible_site_count INTEGER DEFAULT 0,"
+ + "access_token TEXT)");
+ }
+
+ public static void migrationAddEmailAddressField(SQLiteDatabase db) {
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD email TEXT DEFAULT '';");
+ }
+
+ public static void migrationAddFirstNameLastNameAboutMeFields(SQLiteDatabase db) {
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD first_name TEXT DEFAULT '';");
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD last_name TEXT DEFAULT '';");
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD about_me TEXT DEFAULT '';");
+ }
+
+ public static void migrationAddDateFields(SQLiteDatabase db) {
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD date TEXT DEFAULT '';");
+ }
+
+ public static void migrationAddAccountSettingsFields(SQLiteDatabase db) {
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD new_email TEXT DEFAULT '';");
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD pending_email_change BOOLEAN DEFAULT false;");
+ db.execSQL("ALTER TABLE " + ACCOUNT_TABLE + " ADD web_address TEXT DEFAULT '';");
+ }
+
+ private static void dropTables(SQLiteDatabase db) {
+ db.execSQL("DROP TABLE IF EXISTS " + ACCOUNT_TABLE);
+ }
+
+ public static void save(Account account) {
+ save(account, getWritableDb());
+ }
+
+ public static void save(Account account, SQLiteDatabase database) {
+ ContentValues values = new ContentValues();
+ // we only support one wpcom user at the moment: local_id is always 0
+ values.put("local_id", 0);
+ values.put("user_name", account.getUserName());
+ values.put("user_id", account.getUserId());
+ values.put("display_name", account.getDisplayName());
+ values.put("profile_url", account.getProfileUrl());
+ values.put("avatar_url", account.getAvatarUrl());
+ values.put("primary_blog_id", account.getPrimaryBlogId());
+ values.put("site_count", account.getSiteCount());
+ values.put("visible_site_count", account.getVisibleSiteCount());
+ values.put("access_token", account.getAccessToken());
+ values.put("email", account.getEmail());
+ values.put("first_name", account.getFirstName());
+ values.put("last_name", account.getLastName());
+ values.put("about_me", account.getAboutMe());
+ values.put("date", DateTimeUtils.iso8601FromDate(account.getDateCreated()));
+ values.put("new_email", account.getNewEmail());
+ values.put("pending_email_change", account.getPendingEmailChange());
+ values.put("web_address", account.getWebAddress());
+ database.insertWithOnConflict(ACCOUNT_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE);
+ }
+
+ public static Account getDefaultAccount() {
+ return getAccountByLocalId(0);
+ }
+
+ private static Account getAccountByLocalId(long localId) {
+ Account account = new Account();
+
+ String[] args = {Long.toString(localId)};
+ Cursor c = getReadableDb().rawQuery("SELECT * FROM " + ACCOUNT_TABLE + " WHERE local_id=?", args);
+
+ try {
+ if (c.moveToFirst()) {
+ account.setUserName(c.getString(c.getColumnIndex("user_name")));
+ account.setUserId(c.getLong(c.getColumnIndex("user_id")));
+ account.setDisplayName(c.getString(c.getColumnIndex("display_name")));
+ account.setProfileUrl(c.getString(c.getColumnIndex("profile_url")));
+ account.setAvatarUrl(c.getString(c.getColumnIndex("avatar_url")));
+ account.setPrimaryBlogId(c.getLong(c.getColumnIndex("primary_blog_id")));
+ account.setSiteCount(c.getInt(c.getColumnIndex("site_count")));
+ account.setVisibleSiteCount(c.getInt(c.getColumnIndex("visible_site_count")));
+ account.setAccessToken(c.getString(c.getColumnIndex("access_token")));
+ account.setEmail(c.getString(c.getColumnIndex("email")));
+ account.setFirstName(c.getString(c.getColumnIndex("first_name")));
+ account.setLastName(c.getString(c.getColumnIndex("last_name")));
+ account.setAboutMe(c.getString(c.getColumnIndex("about_me")));
+ account.setDateCreated(DateTimeUtils.dateFromIso8601(c.getString(c.getColumnIndex("date"))));
+ account.setNewEmail(c.getString(c.getColumnIndex("new_email")));
+ account.setPendingEmailChange(c.getInt(c.getColumnIndex("pending_email_change")) > 0);
+ account.setWebAddress(c.getString(c.getColumnIndex("web_address")));
+ }
+ return account;
+ } finally {
+ SqlUtils.closeCursor(c);
+ }
+ }
+}