aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshubang <shubang@google.com>2018-02-23 13:53:04 -0800
committerNick Chalko <nchalko@google.com>2018-02-26 15:41:50 -0800
commit931f61842005107fd487591708dd934b1316e2e3 (patch)
treeb2165dcb18a6f35c551bd8d789fce5446a93c60d
parent499eaeed282b2732c8dc02885e4ad161f65c89b1 (diff)
downloadTV-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.java62
-rw-r--r--src/com/android/tv/dvr/provider/DvrContract.java10
-rw-r--r--src/com/android/tv/dvr/provider/DvrDatabaseHelper.java19
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}. */