diff options
author | shubang <shubang@google.com> | 2018-02-23 13:53:04 -0800 |
---|---|---|
committer | Nick Chalko <nchalko@google.com> | 2018-02-26 15:41:50 -0800 |
commit | 931f61842005107fd487591708dd934b1316e2e3 (patch) | |
tree | b2165dcb18a6f35c551bd8d789fce5446a93c60d | |
parent | 499eaeed282b2732c8dc02885e4ad161f65c89b1 (diff) | |
download | TV-931f61842005107fd487591708dd934b1316e2e3.tar.gz |
Add failed reason to ScheduledRecording table
To show error message / falied reason, this field should be stored in
DB.
PiperOrigin-RevId: 186818079
Change-Id: I9de775fbe9ca0cdcff0a20c68b39a4acf6208899
-rw-r--r-- | src/com/android/tv/dvr/data/ScheduledRecording.java | 62 | ||||
-rw-r--r-- | src/com/android/tv/dvr/provider/DvrContract.java | 10 | ||||
-rw-r--r-- | src/com/android/tv/dvr/provider/DvrDatabaseHelper.java | 19 |
3 files changed, 83 insertions, 8 deletions
diff --git a/src/com/android/tv/dvr/data/ScheduledRecording.java b/src/com/android/tv/dvr/data/ScheduledRecording.java index 01005fd9..851aabc3 100644 --- a/src/com/android/tv/dvr/data/ScheduledRecording.java +++ b/src/com/android/tv/dvr/data/ScheduledRecording.java @@ -169,6 +169,7 @@ public final class ScheduledRecording implements Parcelable { private @RecordingState int mState; private long mSeriesRecordingId = ID_NOT_SET; private Long mRecodedProgramId; + private Integer mFailedReason; private Builder() {} @@ -267,6 +268,11 @@ public final class ScheduledRecording implements Parcelable { return this; } + public Builder setFailedReason(Integer reason) { + mFailedReason = reason; + return this; + } + public ScheduledRecording build() { return new ScheduledRecording( mId, @@ -287,7 +293,8 @@ public final class ScheduledRecording implements Parcelable { mProgramThumbnailUri, mState, mSeriesRecordingId, - mRecodedProgramId); + mRecodedProgramId, + mFailedReason); } } @@ -311,6 +318,7 @@ public final class ScheduledRecording implements Parcelable { .setProgramPosterArtUri(orig.getProgramPosterArtUri()) .setProgramThumbnailUri(orig.getProgramThumbnailUri()) .setState(orig.mState) + .setFailedReason(orig.getFailedReason()) .setType(orig.mType); } @@ -334,6 +342,8 @@ public final class ScheduledRecording implements Parcelable { public static final int STATE_RECORDING_DELETED = 5; public static final int STATE_RECORDING_CANCELED = 6; + public static final int FAILED_REASON_OTHER = 0; + @Retention(RetentionPolicy.SOURCE) @IntDef({TYPE_TIMED, TYPE_PROGRAM}) public @interface RecordingType {} @@ -367,6 +377,7 @@ public final class ScheduledRecording implements Parcelable { Schedules.COLUMN_PROGRAM_POST_ART_URI, Schedules.COLUMN_PROGRAM_THUMBNAIL_URI, Schedules.COLUMN_STATE, + Schedules.COLUMN_FAILED_REASON, Schedules.COLUMN_SERIES_RECORDING_ID }; @@ -391,6 +402,7 @@ public final class ScheduledRecording implements Parcelable { .setProgramPosterArtUri(c.getString(++index)) .setProgramThumbnailUri(c.getString(++index)) .setState(recordingState(c.getString(++index))) + .setFailedReason(recordingFailedReason(c.getString(++index))) .setSeriesRecordingId(c.getLong(++index)) .build(); } @@ -415,6 +427,7 @@ public final class ScheduledRecording implements Parcelable { values.put(Schedules.COLUMN_PROGRAM_POST_ART_URI, r.getProgramPosterArtUri()); values.put(Schedules.COLUMN_PROGRAM_THUMBNAIL_URI, r.getProgramThumbnailUri()); values.put(Schedules.COLUMN_STATE, recordingState(r.getState())); + values.put(Schedules.COLUMN_FAILED_REASON, recordingFailedReason(r.getFailedReason())); values.put(Schedules.COLUMN_TYPE, recordingType(r.getType())); if (r.getSeriesRecordingId() != ID_NOT_SET) { values.put(Schedules.COLUMN_SERIES_RECORDING_ID, r.getSeriesRecordingId()); @@ -443,6 +456,7 @@ public final class ScheduledRecording implements Parcelable { .setProgramPosterArtUri(in.readString()) .setProgramThumbnailUri(in.readString()) .setState(in.readInt()) + .setFailedReason(recordingFailedReason(in.readString())) .setSeriesRecordingId(in.readLong()) .build(); } @@ -490,6 +504,7 @@ public final class ScheduledRecording implements Parcelable { @RecordingState private final int mState; private final long mSeriesRecordingId; private final Long mRecordedProgramId; + private final Integer mFailedReason; private ScheduledRecording( long id, @@ -510,7 +525,8 @@ public final class ScheduledRecording implements Parcelable { String programThumbnailUri, @RecordingState int state, long seriesRecordingId, - Long recordedProgramId) { + Long recordedProgramId, + Integer failedReason) { mId = id; mPriority = priority; mInputId = inputId; @@ -530,6 +546,7 @@ public final class ScheduledRecording implements Parcelable { mState = state; mSeriesRecordingId = seriesRecordingId; mRecordedProgramId = recordedProgramId; + mFailedReason = failedReason; } /** @@ -633,6 +650,12 @@ public final class ScheduledRecording implements Parcelable { return mRecordedProgramId; } + /** Returns the failed reason of the {@link ScheduledRecording}. */ + @Nullable + public Integer getFailedReason() { + return mFailedReason; + } + public long getId() { return mId; } @@ -761,6 +784,36 @@ public final class ScheduledRecording implements Parcelable { } } + /** + * Converts a string to a failed reason integer, defaulting to {@link + * #FAILED_REASON_OTHER}. + */ + private static Integer recordingFailedReason(String reason) { + if (TextUtils.isEmpty(reason)) { + return null; + } + switch (reason) { + case Schedules.FAILED_REASON_OTHER: + default: + return FAILED_REASON_OTHER; + } + } + + /** + * Converts a failed reason integer to string, defaulting to {@link + * Schedules#FAILED_REASON_OTHER}. + */ + private static String recordingFailedReason(Integer reason) { + if (reason == null) { + return null; + } + switch (reason) { + // TODO(b/72638385): add reasons + default: + return Schedules.FAILED_REASON_OTHER; + } + } + /** Checks if the {@code period} overlaps with the recording time. */ public boolean isOverLapping(Range<Long> period) { return mStartTimeMs < period.getUpper() && mEndTimeMs > period.getLower(); @@ -812,6 +865,8 @@ public final class ScheduledRecording implements Parcelable { + mProgramThumbnailUri + ",state=" + mState + + ",failedReason=" + + mFailedReason + ",priority=" + mPriority + ",seriesRecordingId=" @@ -843,6 +898,7 @@ public final class ScheduledRecording implements Parcelable { out.writeString(mProgramPosterArtUri); out.writeString(mProgramThumbnailUri); out.writeInt(mState); + out.writeString(recordingFailedReason(mFailedReason)); out.writeLong(mSeriesRecordingId); } @@ -883,6 +939,7 @@ public final class ScheduledRecording implements Parcelable { && Objects.equals(mProgramPosterArtUri, r.getProgramPosterArtUri()) && Objects.equals(mProgramThumbnailUri, r.getProgramThumbnailUri()) && mState == r.mState + && Objects.equals(mFailedReason, r.mFailedReason) && mSeriesRecordingId == r.mSeriesRecordingId; } @@ -905,6 +962,7 @@ public final class ScheduledRecording implements Parcelable { mProgramPosterArtUri, mProgramThumbnailUri, mState, + mFailedReason, mSeriesRecordingId); } diff --git a/src/com/android/tv/dvr/provider/DvrContract.java b/src/com/android/tv/dvr/provider/DvrContract.java index f956ef0b..e4f505ac 100644 --- a/src/com/android/tv/dvr/provider/DvrContract.java +++ b/src/com/android/tv/dvr/provider/DvrContract.java @@ -55,6 +55,9 @@ public final class DvrContract { /** The recording marked as canceled. */ public static final String STATE_RECORDING_CANCELED = "STATE_RECORDING_CANCELED"; + /** The recording failed reason for other reasons */ + public static final String FAILED_REASON_OTHER = "FAILED_REASON_OTHER"; + /** * The priority of this recording. * @@ -195,6 +198,13 @@ public final class DvrContract { public static final String COLUMN_STATE = "state"; /** + * The reason of failure of this recording if it's failed. + * + * <p>Type: TEXT + */ + public static final String COLUMN_FAILED_REASON = "failed_reason"; + + /** * The ID of the parent series recording. * * <p>Type: INTEGER (long) diff --git a/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java b/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java index 0fb96d1b..41e5a66a 100644 --- a/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java +++ b/src/com/android/tv/dvr/provider/DvrDatabaseHelper.java @@ -36,7 +36,7 @@ public class DvrDatabaseHelper extends SQLiteOpenHelper { private static final String TAG = "DvrDatabaseHelper"; private static final boolean DEBUG = false; - private static final int DATABASE_VERSION = 17; + private static final int DATABASE_VERSION = 18; private static final String DB_NAME = "dvr.db"; private static final String SQL_CREATE_SCHEDULES = @@ -162,6 +162,7 @@ public class DvrDatabaseHelper extends SQLiteOpenHelper { new ColumnInfo(Schedules.COLUMN_PROGRAM_POST_ART_URI, SQL_DATA_TYPE_STRING), new ColumnInfo(Schedules.COLUMN_PROGRAM_THUMBNAIL_URI, SQL_DATA_TYPE_STRING), new ColumnInfo(Schedules.COLUMN_STATE, SQL_DATA_TYPE_STRING), + new ColumnInfo(Schedules.COLUMN_FAILED_REASON, SQL_DATA_TYPE_STRING), new ColumnInfo(Schedules.COLUMN_SERIES_RECORDING_ID, SQL_DATA_TYPE_LONG) }; @@ -254,11 +255,17 @@ public class DvrDatabaseHelper extends SQLiteOpenHelper { @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - if (DEBUG) Log.d(TAG, "Executing SQL: " + SQL_DROP_SCHEDULES); - db.execSQL(SQL_DROP_SCHEDULES); - if (DEBUG) Log.d(TAG, "Executing SQL: " + SQL_DROP_SERIES_RECORDINGS); - db.execSQL(SQL_DROP_SERIES_RECORDINGS); - onCreate(db); + if (oldVersion < 17) { + if (DEBUG) Log.d(TAG, "Executing SQL: " + SQL_DROP_SCHEDULES); + db.execSQL(SQL_DROP_SCHEDULES); + if (DEBUG) Log.d(TAG, "Executing SQL: " + SQL_DROP_SERIES_RECORDINGS); + db.execSQL(SQL_DROP_SERIES_RECORDINGS); + onCreate(db); + } + if (oldVersion < 18) { + db.execSQL("ALTER TABLE " + Schedules.TABLE_NAME + " ADD COLUMN " + + Schedules.COLUMN_FAILED_REASON + " TEXT DEFAULT null;"); + } } /** Handles the query request and returns a {@link Cursor}. */ |