summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDongwon Kang <dwkang@google.com>2014-10-28 08:37:25 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-10-28 08:37:25 +0000
commit6331ea953c11bbea7d7e027c8fa45fb4281cb1b0 (patch)
tree545d062396a1e5b54d3571cb21739ad6cfc0409a
parenteb0c19804d0f1e0b69ecc32b56e5ebc7ab633c1f (diff)
parentc2327ef98c214dae072719ab89bb7fd037ceb054 (diff)
downloadTvProvider-6331ea953c11bbea7d7e027c8fa45fb4281cb1b0.tar.gz
Merge "Remove the UNIQUE constraint on channels table to reflect the real broadcast data" into lmp-mr1-dev
-rw-r--r--src/com/android/providers/tv/TvProvider.java128
1 files changed, 10 insertions, 118 deletions
diff --git a/src/com/android/providers/tv/TvProvider.java b/src/com/android/providers/tv/TvProvider.java
index c27639a..ea8dca7 100644
--- a/src/com/android/providers/tv/TvProvider.java
+++ b/src/com/android/providers/tv/TvProvider.java
@@ -82,14 +82,12 @@ public class TvProvider extends ContentProvider {
private static final String OP_UPDATE = "update";
private static final String OP_DELETE = "delete";
- private static final int DATABASE_VERSION = 22;
+ private static final int DATABASE_VERSION = 23;
private static final String DATABASE_NAME = "tv.db";
private static final String CHANNELS_TABLE = "channels";
private static final String PROGRAMS_TABLE = "programs";
private static final String WATCHED_PROGRAMS_TABLE = "watched_programs";
- // This table stores deleted channels, so that when the same channel is added back,
- // TvProvider can restore the locked & browsable state.
- private static final String DELETED_CHANNELS_TABLE = "deleted_channels";
+ private static final String DELETED_CHANNELS_TABLE = "deleted_channels"; // Deprecated
private static final String PROGRAMS_TABLE_PACKAGE_NAME_INDEX = "programs_package_name_index";
private static final String PROGRAMS_TABLE_CHANNEL_ID_INDEX = "programs_channel_id_index";
private static final String PROGRAMS_TABLE_START_TIME_INDEX = "programs_start_time_index";
@@ -279,11 +277,8 @@ public class TvProvider extends ContentProvider {
+ Channels.COLUMN_INTERNAL_PROVIDER_DATA + " BLOB,"
+ CHANNELS_COLUMN_LOGO + " BLOB,"
+ Channels.COLUMN_VERSION_NUMBER + " INTEGER,"
- + "UNIQUE(" + Channels._ID + "," + Channels.COLUMN_PACKAGE_NAME + "),"
- + "UNIQUE(" + Channels.COLUMN_INPUT_ID + ","
- + Channels.COLUMN_ORIGINAL_NETWORK_ID + ","
- + Channels.COLUMN_TRANSPORT_STREAM_ID + ","
- + Channels.COLUMN_SERVICE_ID + ")"
+ // Needed for foreign keys in other tables.
+ + "UNIQUE(" + Channels._ID + "," + Channels.COLUMN_PACKAGE_NAME + ")"
+ ");");
db.execSQL("CREATE TABLE " + PROGRAMS_TABLE + " ("
+ Programs._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
@@ -345,62 +340,18 @@ public class TvProvider extends ContentProvider {
+ ");");
db.execSQL("CREATE INDEX " + WATCHED_PROGRAMS_TABLE_CHANNEL_ID_INDEX + " ON "
+ WATCHED_PROGRAMS_TABLE + "(" + WatchedPrograms.COLUMN_CHANNEL_ID + ");");
- db.execSQL("CREATE TABLE " + DELETED_CHANNELS_TABLE + " ("
- + Channels.COLUMN_INPUT_ID + " TEXT NOT NULL,"
- + Channels.COLUMN_ORIGINAL_NETWORK_ID + " INTEGER NOT NULL,"
- + Channels.COLUMN_TRANSPORT_STREAM_ID + " INTEGER NOT NULL,"
- + Channels.COLUMN_SERVICE_ID + " INTEGER NOT NULL,"
- + Channels.COLUMN_LOCKED + " INTEGER NOT NULL,"
- + Channels.COLUMN_BROWSABLE + " INTEGER NOT NULL,"
- + "UNIQUE(" + Channels.COLUMN_INPUT_ID + ","
- + Channels.COLUMN_ORIGINAL_NETWORK_ID + ","
- + Channels.COLUMN_TRANSPORT_STREAM_ID + "," + Channels.COLUMN_SERVICE_ID + ")"
- + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- if (oldVersion < 21) {
- Log.i(TAG, "Upgrading from version " + oldVersion + " to " + newVersion
+ Log.i(TAG, "Upgrading from version " + oldVersion + " to " + newVersion
+ ", data will be lost!");
- db.execSQL("DROP TABLE IF EXISTS " + DELETED_CHANNELS_TABLE);
- db.execSQL("DROP TABLE IF EXISTS " + WATCHED_PROGRAMS_TABLE);
- db.execSQL("DROP TABLE IF EXISTS " + PROGRAMS_TABLE);
- db.execSQL("DROP TABLE IF EXISTS " + CHANNELS_TABLE);
-
- // Clear legacy logo directory
- File logoPath = new File(mContext.getFilesDir(), "logo");
- if (logoPath.exists()) {
- for (File file : logoPath.listFiles()) {
- file.delete();
- }
- logoPath.delete();
- }
+ db.execSQL("DROP TABLE IF EXISTS " + DELETED_CHANNELS_TABLE);
+ db.execSQL("DROP TABLE IF EXISTS " + WATCHED_PROGRAMS_TABLE);
+ db.execSQL("DROP TABLE IF EXISTS " + PROGRAMS_TABLE);
+ db.execSQL("DROP TABLE IF EXISTS " + CHANNELS_TABLE);
- onCreate(db);
- return;
- }
-
- Log.i(TAG, "Upgrading from version " + oldVersion + " to " + newVersion);
- if (oldVersion == 21) {
- db.execSQL("CREATE INDEX IF NOT EXISTS " + PROGRAMS_TABLE_PACKAGE_NAME_INDEX
- + " on " + PROGRAMS_TABLE + "(" + Programs.COLUMN_PACKAGE_NAME + ");");
- db.execSQL("CREATE INDEX IF NOT EXISTS " + PROGRAMS_TABLE_CHANNEL_ID_INDEX + " ON "
- + PROGRAMS_TABLE + "(" + Programs.COLUMN_CHANNEL_ID + ");");
- db.execSQL("CREATE INDEX IF NOT EXISTS " + PROGRAMS_TABLE_START_TIME_INDEX + " ON "
- + PROGRAMS_TABLE + "(" + Programs.COLUMN_START_TIME_UTC_MILLIS + ");");
- db.execSQL("CREATE INDEX IF NOT EXISTS " + PROGRAMS_TABLE_END_TIME_INDEX + " ON "
- + PROGRAMS_TABLE + "(" + Programs.COLUMN_END_TIME_UTC_MILLIS + ");");
- db.execSQL("CREATE INDEX IF NOT EXISTS " + WATCHED_PROGRAMS_TABLE_CHANNEL_ID_INDEX
- + " ON " + WATCHED_PROGRAMS_TABLE + "(" + WatchedPrograms.COLUMN_CHANNEL_ID
- + ");");
- oldVersion++;
- }
-
- if (oldVersion != newVersion) {
- throw new IllegalStateException("error in upgrading the database to version "
- + newVersion);
- }
+ onCreate(db);
}
}
@@ -542,46 +493,11 @@ public class TvProvider extends ContentProvider {
}
}
- private static void restoreChannelState(SQLiteDatabase db, ContentValues values) {
- String inputId = values.getAsString(Channels.COLUMN_INPUT_ID);
- Integer onid = values.getAsInteger(Channels.COLUMN_ORIGINAL_NETWORK_ID);
- Integer tsid = values.getAsInteger(Channels.COLUMN_TRANSPORT_STREAM_ID);
- Integer serviceId = values.getAsInteger(Channels.COLUMN_SERVICE_ID);
- if (onid == null) { onid = 0; }
- if (tsid == null) { tsid = 0; }
- if (serviceId == null) { serviceId = 0; }
-
- SqlParams params = new SqlParams(DELETED_CHANNELS_TABLE,
- "(" + Channels.COLUMN_INPUT_ID + "=?) AND ("
- + Channels.COLUMN_ORIGINAL_NETWORK_ID + "=?) AND ("
- + Channels.COLUMN_TRANSPORT_STREAM_ID + "=?) AND ("
- + Channels.COLUMN_SERVICE_ID + "=?)",
- inputId, Integer.toString(onid), Integer.toString(tsid),
- Integer.toString(serviceId));
-
- SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
- queryBuilder.setTables(params.getTables());
- final String[] projection = { Channels.COLUMN_LOCKED, Channels.COLUMN_BROWSABLE };
- try (Cursor cursor = queryBuilder.query(db, projection, params.getSelection(),
- params.getSelectionArgs(), null, null, null)) {
- if (cursor != null && cursor.moveToNext()) {
- if (!values.containsKey(Channels.COLUMN_LOCKED)) {
- values.put(Channels.COLUMN_LOCKED, cursor.getInt(0));
- }
- if (!values.containsKey(Channels.COLUMN_BROWSABLE)) {
- values.put(Channels.COLUMN_BROWSABLE, cursor.getInt(1));
- }
- db.delete(params.getTables(), params.getSelection(), params.getSelectionArgs());
- }
- }
- }
-
private Uri insertChannel(Uri uri, ContentValues values) {
// Mark the owner package of this channel.
values.put(Channels.COLUMN_PACKAGE_NAME, getCallingPackage_());
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- restoreChannelState(db, values);
long rowId = db.insert(CHANNELS_TABLE, null, values);
if (rowId > 0) {
Uri channelUri = TvContract.buildChannelUri(rowId);
@@ -641,27 +557,6 @@ public class TvProvider extends ContentProvider {
+ " COLUMN_WATCH_END_TIME_UTC_MILLIS should be specified");
}
- private static void storeChannelStates(SqlParams params, SQLiteDatabase db) {
- SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
- queryBuilder.setTables(params.getTables());
- try (Cursor cursor = queryBuilder.query(db,
- new String[] { Channels.COLUMN_INPUT_ID, Channels.COLUMN_ORIGINAL_NETWORK_ID,
- Channels.COLUMN_TRANSPORT_STREAM_ID, Channels.COLUMN_SERVICE_ID,
- Channels.COLUMN_LOCKED, Channels.COLUMN_BROWSABLE },
- params.getSelection(), params.getSelectionArgs(), null, null, null)) {
- ContentValues values = new ContentValues();
- while (cursor != null && cursor.moveToNext()) {
- values.put(Channels.COLUMN_INPUT_ID, cursor.getString(0));
- values.put(Channels.COLUMN_ORIGINAL_NETWORK_ID, cursor.getInt(1));
- values.put(Channels.COLUMN_TRANSPORT_STREAM_ID, cursor.getInt(2));
- values.put(Channels.COLUMN_SERVICE_ID, cursor.getInt(3));
- values.put(Channels.COLUMN_LOCKED, cursor.getInt(4));
- values.put(Channels.COLUMN_BROWSABLE, cursor.getInt(5));
- db.insert(DELETED_CHANNELS_TABLE, null, values);
- }
- }
- }
-
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SqlParams params = createSqlParams(OP_DELETE, uri, selection, selectionArgs);
@@ -681,9 +576,6 @@ public class TvProvider extends ContentProvider {
case MATCH_PASSTHROUGH_ID:
case MATCH_PROGRAM_ID:
case MATCH_WATCHED_PROGRAM_ID:
- if (params.getTables().equals(CHANNELS_TABLE)) {
- storeChannelStates(params, db);
- }
count = db.delete(params.getTables(), params.getSelection(),
params.getSelectionArgs());
break;