diff options
-rw-r--r-- | src/com/android/providers/im/ImProvider.java | 182 |
1 files changed, 125 insertions, 57 deletions
diff --git a/src/com/android/providers/im/ImProvider.java b/src/com/android/providers/im/ImProvider.java index 7e32c4e..46ff4b2 100644 --- a/src/com/android/providers/im/ImProvider.java +++ b/src/com/android/providers/im/ImProvider.java @@ -68,13 +68,17 @@ public class ImProvider extends ContentProvider { private static final String TABLE_SESSION_COOKIES = "sessionCookies"; private static final String TABLE_MESSAGES = "messages"; private static final String TABLE_IN_MEMORY_MESSAGES = "inMemoryMessages"; - private static final String TABLE_OUTGOING_RMQ_MESSAGES = "outgoingRmqMessages"; - private static final String TABLE_LAST_RMQ_ID = "lastrmqid"; private static final String TABLE_ACCOUNT_STATUS = "accountStatus"; private static final String TABLE_BRANDING_RESOURCE_MAP_CACHE = "brandingResMapCache"; + // tables for mcs and rmq + private static final String TABLE_OUTGOING_RMQ_MESSAGES = "outgoingRmqMessages"; + private static final String TABLE_LAST_RMQ_ID = "lastrmqid"; + private static final String TABLE_S2D_RMQ_IDS = "s2dRmqIds"; + + private static final String DATABASE_NAME = "im.db"; - private static final int DATABASE_VERSION = 50; + private static final int DATABASE_VERSION = 51; protected static final int MATCH_PROVIDERS = 1; protected static final int MATCH_PROVIDERS_BY_ID = 2; @@ -135,13 +139,16 @@ public class ImProvider extends ContentProvider { protected static final int MATCH_PROVIDER_SETTINGS_BY_ID_AND_NAME = 92; protected static final int MATCH_INVITATIONS = 100; protected static final int MATCH_INVITATION = 101; - protected static final int MATCH_OUTGOING_RMQ_MESSAGES = 110; - protected static final int MATCH_OUTGOING_RMQ_MESSAGE = 111; - protected static final int MATCH_OUTGOING_HIGHEST_RMQ_ID = 112; - protected static final int MATCH_LAST_RMQ_ID = 113; - protected static final int MATCH_ACCOUNTS_STATUS = 114; - protected static final int MATCH_ACCOUNT_STATUS = 115; - protected static final int MATCH_BRANDING_RESOURCE_MAP_CACHE = 120; + protected static final int MATCH_ACCOUNTS_STATUS = 104; + protected static final int MATCH_ACCOUNT_STATUS = 105; + protected static final int MATCH_BRANDING_RESOURCE_MAP_CACHE = 106; + + // mcs url matcher + protected static final int MATCH_OUTGOING_RMQ_MESSAGES = 200; + protected static final int MATCH_OUTGOING_RMQ_MESSAGE = 201; + protected static final int MATCH_OUTGOING_HIGHEST_RMQ_ID = 202; + protected static final int MATCH_LAST_RMQ_ID = 203; + protected static final int MATCH_S2D_RMQ_IDS = 204; protected final UriMatcher mUrlMatcher = new UriMatcher(UriMatcher.NO_MATCH); @@ -289,19 +296,6 @@ public class ImProvider extends ContentProvider { "UNIQUE (provider, name)" + ");"); - db.execSQL("create TABLE " + TABLE_OUTGOING_RMQ_MESSAGES + " (" + - "_id INTEGER PRIMARY KEY," + - "rmq_id INTEGER," + - "type INTEGER," + - "ts INTEGER," + - "data TEXT" + - ");"); - - db.execSQL("create TABLE " + TABLE_LAST_RMQ_ID + " (" + - "_id INTEGER PRIMARY KEY," + - "rmq_id INTEGER" + - ");"); - db.execSQL("create TABLE " + TABLE_BRANDING_RESOURCE_MAP_CACHE + " (" + "_id INTEGER PRIMARY KEY," + "provider_id INTEGER," + @@ -323,6 +317,25 @@ public class ImProvider extends ContentProvider { " BEGIN " + "DELETE FROM " + TABLE_PROVIDER_SETTINGS + " WHERE provider= OLD._id;" + "END"); + + // the following are tables for mcs + db.execSQL("create TABLE " + TABLE_OUTGOING_RMQ_MESSAGES + " (" + + "_id INTEGER PRIMARY KEY," + + "rmq_id INTEGER," + + "type INTEGER," + + "ts INTEGER," + + "data TEXT" + + ");"); + + db.execSQL("create TABLE " + TABLE_LAST_RMQ_ID + " (" + + "_id INTEGER PRIMARY KEY," + + "rmq_id INTEGER" + + ");"); + + db.execSQL("create TABLE " + TABLE_S2D_RMQ_IDS + " (" + + "_id INTEGER PRIMARY KEY," + + "rmq_id INTEGER" + + ");"); } @Override @@ -414,7 +427,30 @@ public class ImProvider extends ContentProvider { } } + case 48: + case 49: + case 50: + if (newVersion <= 50) { + return; + } + + db.beginTransaction(); + try { + // add rmq2 s2d ids table + db.execSQL("create TABLE " + TABLE_S2D_RMQ_IDS + " (" + + "_id INTEGER PRIMARY KEY," + + "rmq_id INTEGER" + + ");"); + db.setTransactionSuccessful(); + } catch (Throwable ex) { + Log.e(LOG_TAG, ex.getMessage(), ex); + break; // force to destroy all old data; + } finally { + db.endTransaction(); + } + return; + } Log.w(LOG_TAG, "Couldn't upgrade db to " + newVersion + ". Destroying old data."); @@ -430,9 +466,12 @@ public class ImProvider extends ContentProvider { db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS_ETAG); db.execSQL("DROP TABLE IF EXISTS " + TABLE_AVATARS); db.execSQL("DROP TABLE IF EXISTS " + TABLE_PROVIDER_SETTINGS); + db.execSQL("DROP TABLE IF EXISTS " + TABLE_BRANDING_RESOURCE_MAP_CACHE); + + // mcs/rmq stuff db.execSQL("DROP TABLE IF EXISTS " + TABLE_OUTGOING_RMQ_MESSAGES); db.execSQL("DROP TABLE IF EXISTS " + TABLE_LAST_RMQ_ID); - db.execSQL("DROP TABLE IF EXISTS " + TABLE_BRANDING_RESOURCE_MAP_CACHE); + db.execSQL("DROP TABLE IF EXISTS " + TABLE_S2D_RMQ_IDS); } private void createContactsTables(SQLiteDatabase db) { @@ -813,15 +852,19 @@ public class ImProvider extends ContentProvider { } public ImProvider() { - this(AUTHORITY, DATABASE_NAME, DATABASE_VERSION); + this(DATABASE_NAME, DATABASE_VERSION); + + setupImUrlMatchers(AUTHORITY); + setupMcsUrlMatchers(AUTHORITY); } - protected ImProvider(String authority, String dbName, int dbVersion) { + protected ImProvider(String dbName, int dbVersion) { mDatabaseName = dbName; mDatabaseVersion = dbVersion; - mTransientDbName = "transient_" + dbName.replace(".", "_"); + } + private void setupImUrlMatchers(String authority) { mUrlMatcher.addURI(authority, "providers", MATCH_PROVIDERS); mUrlMatcher.addURI(authority, "providers/#", MATCH_PROVIDERS_BY_ID); mUrlMatcher.addURI(authority, "providers/account", MATCH_PROVIDERS_WITH_ACCOUNT); @@ -892,17 +935,20 @@ public class ImProvider extends ContentProvider { mUrlMatcher.addURI(authority, "invitations", MATCH_INVITATIONS); mUrlMatcher.addURI(authority, "invitations/#", MATCH_INVITATION); - mUrlMatcher.addURI(authority, "outgoingRmqMessages", MATCH_OUTGOING_RMQ_MESSAGES); - mUrlMatcher.addURI(authority, "outgoingRmqMessages/#", MATCH_OUTGOING_RMQ_MESSAGE); - mUrlMatcher.addURI(authority, "outgoingHighestRmqId", MATCH_OUTGOING_HIGHEST_RMQ_ID); - mUrlMatcher.addURI(authority, "lastRmqId", MATCH_LAST_RMQ_ID); - mUrlMatcher.addURI(authority, "accountStatus", MATCH_ACCOUNTS_STATUS); mUrlMatcher.addURI(authority, "accountStatus/#", MATCH_ACCOUNT_STATUS); mUrlMatcher.addURI(authority, "brandingResMapCache", MATCH_BRANDING_RESOURCE_MAP_CACHE); } + private void setupMcsUrlMatchers(String authority) { + mUrlMatcher.addURI(authority, "outgoingRmqMessages", MATCH_OUTGOING_RMQ_MESSAGES); + mUrlMatcher.addURI(authority, "outgoingRmqMessages/#", MATCH_OUTGOING_RMQ_MESSAGE); + mUrlMatcher.addURI(authority, "outgoingHighestRmqId", MATCH_OUTGOING_HIGHEST_RMQ_ID); + mUrlMatcher.addURI(authority, "lastRmqId", MATCH_LAST_RMQ_ID); + mUrlMatcher.addURI(authority, "s2dids", MATCH_S2D_RMQ_IDS); + } + @Override public boolean onCreate() { mOpenHelper = new DatabaseHelper(getContext()); @@ -1245,6 +1291,21 @@ public class ImProvider extends ContentProvider { qb.setTables(TABLE_PROVIDER_SETTINGS); break; + case MATCH_ACCOUNTS_STATUS: + qb.setTables(TABLE_ACCOUNT_STATUS); + break; + + case MATCH_ACCOUNT_STATUS: + qb.setTables(TABLE_ACCOUNT_STATUS); + appendWhere(whereClause, Im.AccountStatus.ACCOUNT, "=", + url.getPathSegments().get(1)); + break; + + case MATCH_BRANDING_RESOURCE_MAP_CACHE: + qb.setTables(TABLE_BRANDING_RESOURCE_MAP_CACHE); + break; + + // mcs and rmq queries case MATCH_OUTGOING_RMQ_MESSAGES: qb.setTables(TABLE_OUTGOING_RMQ_MESSAGES); break; @@ -1260,18 +1321,8 @@ public class ImProvider extends ContentProvider { limit = "1"; break; - case MATCH_ACCOUNTS_STATUS: - qb.setTables(TABLE_ACCOUNT_STATUS); - break; - - case MATCH_ACCOUNT_STATUS: - qb.setTables(TABLE_ACCOUNT_STATUS); - appendWhere(whereClause, Im.AccountStatus.ACCOUNT, "=", - url.getPathSegments().get(1)); - break; - - case MATCH_BRANDING_RESOURCE_MAP_CACHE: - qb.setTables(TABLE_BRANDING_RESOURCE_MAP_CACHE); + case MATCH_S2D_RMQ_IDS: + qb.setTables(TABLE_S2D_RMQ_IDS); break; default: @@ -2156,6 +2207,22 @@ public class ImProvider extends ContentProvider { } break; + case MATCH_ACCOUNTS_STATUS: + rowID = db.replace(TABLE_ACCOUNT_STATUS, null, initialValues); + if (rowID > 0) { + resultUri = Uri.parse(Im.AccountStatus.CONTENT_URI + "/" + rowID); + } + notifyProviderAccountContentUri = true; + break; + + case MATCH_BRANDING_RESOURCE_MAP_CACHE: + rowID = db.insert(TABLE_BRANDING_RESOURCE_MAP_CACHE, null, initialValues); + if (rowID > 0) { + resultUri = Uri.parse(Im.BrandingResourceMapCache.CONTENT_URI + "/" + rowID); + } + break; + + // mcs/rmq stuff case MATCH_OUTGOING_RMQ_MESSAGES: rowID = db.insert(TABLE_OUTGOING_RMQ_MESSAGES, null, initialValues); if (rowID > 0) { @@ -2170,18 +2237,10 @@ public class ImProvider extends ContentProvider { } break; - case MATCH_ACCOUNTS_STATUS: - rowID = db.replace(TABLE_ACCOUNT_STATUS, null, initialValues); - if (rowID > 0) { - resultUri = Uri.parse(Im.AccountStatus.CONTENT_URI + "/" + rowID); - } - notifyProviderAccountContentUri = true; - break; - - case MATCH_BRANDING_RESOURCE_MAP_CACHE: - rowID = db.insert(TABLE_BRANDING_RESOURCE_MAP_CACHE, null, initialValues); + case MATCH_S2D_RMQ_IDS: + rowID = db.insert(TABLE_S2D_RMQ_IDS, null, initialValues); if (rowID > 0) { - resultUri = Uri.parse(Im.BrandingResourceMapCache.CONTENT_URI + "/" + rowID); + resultUri = Uri.parse(Im.ServerToDeviceRmqIds.CONTENT_URI + "/" + rowID); } break; @@ -2770,6 +2829,11 @@ public class ImProvider extends ContentProvider { appendWhere(whereClause, Im.ProviderSettings.NAME, "=", name); break; + case MATCH_BRANDING_RESOURCE_MAP_CACHE: + tableToChange = TABLE_BRANDING_RESOURCE_MAP_CACHE; + break; + + // mcs/rmq stuff case MATCH_OUTGOING_RMQ_MESSAGES: tableToChange = TABLE_OUTGOING_RMQ_MESSAGES; break; @@ -2778,8 +2842,8 @@ public class ImProvider extends ContentProvider { tableToChange = TABLE_LAST_RMQ_ID; break; - case MATCH_BRANDING_RESOURCE_MAP_CACHE: - tableToChange = TABLE_BRANDING_RESOURCE_MAP_CACHE; + case MATCH_S2D_RMQ_IDS: + tableToChange = TABLE_S2D_RMQ_IDS; break; default: @@ -3104,6 +3168,10 @@ public class ImProvider extends ContentProvider { tableToChange = TABLE_LAST_RMQ_ID; break; + case MATCH_S2D_RMQ_IDS: + tableToChange = TABLE_S2D_RMQ_IDS; + break; + default: throw new UnsupportedOperationException("Cannot update URL: " + url); } |