aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/data/ScheduledRecording.java
diff options
context:
space:
mode:
authorShraddha Basantwani <shraddha.basantwani@ittiam.com>2019-02-26 16:03:03 +0530
committerShraddha Basantwani <shraddha.basantwani@ittiam.com>2019-11-18 13:32:44 +0530
commitfc3f2d9eadeb434e4e77253ece65e152779e9589 (patch)
treea9b446823f68287accb253d3d0dd5ed0d48846e6 /src/com/android/tv/dvr/data/ScheduledRecording.java
parent345d5fdf28c7316d522daa242e452b06473e5dac (diff)
downloadTV-fc3f2d9eadeb434e4e77253ece65e152779e9589.tar.gz
Start early and end late feature.
Programs can be recorded for extra time Added 5 new tests to DvrDbSyncTest Test: make RunTvRoboTests ROBOTEST_FILTER=DvrDbSyncTest Bug: 71718009 Change-Id: I4e3c8fc0acc9b56982000d2dbde2364d523a30e3
Diffstat (limited to 'src/com/android/tv/dvr/data/ScheduledRecording.java')
-rw-r--r--src/com/android/tv/dvr/data/ScheduledRecording.java146
1 files changed, 141 insertions, 5 deletions
diff --git a/src/com/android/tv/dvr/data/ScheduledRecording.java b/src/com/android/tv/dvr/data/ScheduledRecording.java
index 1237fb3e..9e89ab62 100644
--- a/src/com/android/tv/dvr/data/ScheduledRecording.java
+++ b/src/com/android/tv/dvr/data/ScheduledRecording.java
@@ -56,6 +56,9 @@ public final class ScheduledRecording implements Parcelable {
/** The default priority of the recording. */
public static final long DEFAULT_PRIORITY = Long.MAX_VALUE >> 1;
+ /** The default offset time of the recording. */
+ public static final long DEFAULT_TIME_OFFSET = 0;
+
/** Compares the start time in ascending order. */
public static final Comparator<ScheduledRecording> START_TIME_COMPARATOR =
(ScheduledRecording lhs, ScheduledRecording rhs) ->
@@ -155,6 +158,8 @@ public final class ScheduledRecording implements Parcelable {
private long mSeriesRecordingId = ID_NOT_SET;
private Long mRecodedProgramId;
private Integer mFailedReason;
+ private long mStartOffsetMs = DEFAULT_TIME_OFFSET;
+ private long mEndOffsetMs = DEFAULT_TIME_OFFSET;
private Builder() {}
@@ -258,6 +263,16 @@ public final class ScheduledRecording implements Parcelable {
return this;
}
+ public Builder setStartOffsetMs(long startOffsetMs) {
+ mStartOffsetMs = Math.max(0, startOffsetMs);
+ return this;
+ }
+
+ public Builder setEndOffsetMs(long endOffsetMs) {
+ mEndOffsetMs = Math.max(0, endOffsetMs);
+ return this;
+ }
+
public ScheduledRecording build() {
return new ScheduledRecording(
mId,
@@ -279,7 +294,9 @@ public final class ScheduledRecording implements Parcelable {
mState,
mSeriesRecordingId,
mRecodedProgramId,
- mFailedReason);
+ mFailedReason,
+ mStartOffsetMs,
+ mEndOffsetMs);
}
}
@@ -304,7 +321,9 @@ public final class ScheduledRecording implements Parcelable {
.setProgramThumbnailUri(orig.getProgramThumbnailUri())
.setState(orig.mState)
.setFailedReason(orig.getFailedReason())
- .setType(orig.mType);
+ .setType(orig.mType)
+ .setStartOffsetMs(orig.getStartOffsetMs())
+ .setEndOffsetMs(orig.getEndOffsetMs());
}
@Retention(RetentionPolicy.SOURCE)
@@ -401,6 +420,35 @@ public final class ScheduledRecording implements Parcelable {
Schedules.COLUMN_SERIES_RECORDING_ID
};
+ /**
+ * Use this projection if you want to create {@link ScheduledRecording} object using {@link
+ * #fromCursorWithTimeOffset}.
+ */
+ public static final String[] PROJECTION_WITH_TIME_OFFSET = {
+ // Columns must match what is read in #fromCursor
+ Schedules._ID,
+ Schedules.COLUMN_PRIORITY,
+ Schedules.COLUMN_TYPE,
+ Schedules.COLUMN_INPUT_ID,
+ Schedules.COLUMN_CHANNEL_ID,
+ Schedules.COLUMN_PROGRAM_ID,
+ Schedules.COLUMN_PROGRAM_TITLE,
+ Schedules.COLUMN_START_TIME_UTC_MILLIS,
+ Schedules.COLUMN_END_TIME_UTC_MILLIS,
+ Schedules.COLUMN_SEASON_NUMBER,
+ Schedules.COLUMN_EPISODE_NUMBER,
+ Schedules.COLUMN_EPISODE_TITLE,
+ Schedules.COLUMN_PROGRAM_DESCRIPTION,
+ Schedules.COLUMN_PROGRAM_LONG_DESCRIPTION,
+ Schedules.COLUMN_PROGRAM_POST_ART_URI,
+ Schedules.COLUMN_PROGRAM_THUMBNAIL_URI,
+ Schedules.COLUMN_STATE,
+ Schedules.COLUMN_FAILED_REASON,
+ Schedules.COLUMN_SERIES_RECORDING_ID,
+ Schedules.COLUMN_START_OFFSET_MILLIS,
+ Schedules.COLUMN_END_OFFSET_MILLIS
+ };
+
/** Creates {@link ScheduledRecording} object from the given {@link Cursor}. */
public static ScheduledRecording fromCursor(Cursor c) {
int index = -1;
@@ -427,6 +475,34 @@ public final class ScheduledRecording implements Parcelable {
.build();
}
+ /** Creates {@link ScheduledRecording} object from the given {@link Cursor}. */
+ public static ScheduledRecording fromCursorWithTimeOffset(Cursor c) {
+ int index = -1;
+ return new Builder()
+ .setId(c.getLong(++index))
+ .setPriority(c.getLong(++index))
+ .setType(recordingType(c.getString(++index)))
+ .setInputId(c.getString(++index))
+ .setChannelId(c.getLong(++index))
+ .setProgramId(c.getLong(++index))
+ .setProgramTitle(c.getString(++index))
+ .setStartTimeMs(c.getLong(++index))
+ .setEndTimeMs(c.getLong(++index))
+ .setSeasonNumber(c.getString(++index))
+ .setEpisodeNumber(c.getString(++index))
+ .setEpisodeTitle(c.getString(++index))
+ .setProgramDescription(c.getString(++index))
+ .setProgramLongDescription(c.getString(++index))
+ .setProgramPosterArtUri(c.getString(++index))
+ .setProgramThumbnailUri(c.getString(++index))
+ .setState(recordingState(c.getString(++index)))
+ .setFailedReason(recordingFailedReason(c.getString(++index)))
+ .setSeriesRecordingId(c.getLong(++index))
+ .setStartOffsetMs(c.getLong(++index))
+ .setEndOffsetMs(c.getLong(++index))
+ .build();
+ }
+
public static ContentValues toContentValues(ScheduledRecording r) {
ContentValues values = new ContentValues();
if (r.getId() != ID_NOT_SET) {
@@ -457,6 +533,38 @@ public final class ScheduledRecording implements Parcelable {
return values;
}
+ public static ContentValues toContentValuesWithTimeOffset(ScheduledRecording r) {
+ ContentValues values = new ContentValues();
+ if (r.getId() != ID_NOT_SET) {
+ values.put(Schedules._ID, r.getId());
+ }
+ values.put(Schedules.COLUMN_INPUT_ID, r.getInputId());
+ values.put(Schedules.COLUMN_CHANNEL_ID, r.getChannelId());
+ values.put(Schedules.COLUMN_PROGRAM_ID, r.getProgramId());
+ values.put(Schedules.COLUMN_PROGRAM_TITLE, r.getProgramTitle());
+ values.put(Schedules.COLUMN_PRIORITY, r.getPriority());
+ values.put(Schedules.COLUMN_START_TIME_UTC_MILLIS, r.getStartTimeMs());
+ values.put(Schedules.COLUMN_END_TIME_UTC_MILLIS, r.getEndTimeMs());
+ values.put(Schedules.COLUMN_SEASON_NUMBER, r.getSeasonNumber());
+ values.put(Schedules.COLUMN_EPISODE_NUMBER, r.getEpisodeNumber());
+ values.put(Schedules.COLUMN_EPISODE_TITLE, r.getEpisodeTitle());
+ values.put(Schedules.COLUMN_PROGRAM_DESCRIPTION, r.getProgramDescription());
+ values.put(Schedules.COLUMN_PROGRAM_LONG_DESCRIPTION, r.getProgramLongDescription());
+ 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());
+ } else {
+ values.putNull(Schedules.COLUMN_SERIES_RECORDING_ID);
+ }
+ values.put(Schedules.COLUMN_START_OFFSET_MILLIS, r.getStartOffsetMs());
+ values.put(Schedules.COLUMN_END_OFFSET_MILLIS, r.getEndOffsetMs());
+ return values;
+ }
+
public static ScheduledRecording fromParcel(Parcel in) {
return new Builder()
.setId(in.readLong())
@@ -478,6 +586,8 @@ public final class ScheduledRecording implements Parcelable {
.setState(in.readInt())
.setFailedReason(recordingFailedReason(in.readString()))
.setSeriesRecordingId(in.readLong())
+ .setStartOffsetMs(in.readLong())
+ .setEndOffsetMs(in.readLong())
.build();
}
@@ -525,6 +635,8 @@ public final class ScheduledRecording implements Parcelable {
private final long mSeriesRecordingId;
private final Long mRecordedProgramId;
private final Integer mFailedReason;
+ private final long mStartOffsetMs;
+ private final long mEndOffsetMs;
private ScheduledRecording(
long id,
@@ -546,7 +658,9 @@ public final class ScheduledRecording implements Parcelable {
@RecordingState int state,
long seriesRecordingId,
Long recordedProgramId,
- Integer failedReason) {
+ Integer failedReason,
+ long startOffsetMs,
+ long endOffsetMs) {
mId = id;
mPriority = priority;
mInputId = inputId;
@@ -567,6 +681,8 @@ public final class ScheduledRecording implements Parcelable {
mSeriesRecordingId = seriesRecordingId;
mRecordedProgramId = recordedProgramId;
mFailedReason = failedReason;
+ mStartOffsetMs = startOffsetMs;
+ mEndOffsetMs = endOffsetMs;
}
/**
@@ -677,6 +793,16 @@ public final class ScheduledRecording implements Parcelable {
return mFailedReason;
}
+ /** Returns the start time offset. */
+ public long getStartOffsetMs() {
+ return mStartOffsetMs;
+ }
+
+ /** Returns the end time offset. */
+ public long getEndOffsetMs() {
+ return mEndOffsetMs;
+ }
+
public long getId() {
return mId;
}
@@ -929,6 +1055,10 @@ public final class ScheduledRecording implements Parcelable {
+ mPriority
+ ",seriesRecordingId="
+ mSeriesRecordingId
+ + ",startOffsetMs="
+ + mStartOffsetMs
+ + ",endOffsetMs="
+ + mEndOffsetMs
+ ")";
}
@@ -958,6 +1088,8 @@ public final class ScheduledRecording implements Parcelable {
out.writeInt(mState);
out.writeString(recordingFailedReason(mFailedReason));
out.writeLong(mSeriesRecordingId);
+ out.writeLong(mStartOffsetMs);
+ out.writeLong(mEndOffsetMs);
}
/** Returns {@code true} if the recording is not started yet, otherwise @{code false}. */
@@ -1003,7 +1135,9 @@ public final class ScheduledRecording implements Parcelable {
&& Objects.equals(mProgramThumbnailUri, r.getProgramThumbnailUri())
&& mState == r.mState
&& Objects.equals(mFailedReason, r.mFailedReason)
- && mSeriesRecordingId == r.mSeriesRecordingId;
+ && mSeriesRecordingId == r.mSeriesRecordingId
+ && mStartOffsetMs == r.mStartOffsetMs
+ && mEndOffsetMs == r.mEndOffsetMs;
}
@Override
@@ -1026,7 +1160,9 @@ public final class ScheduledRecording implements Parcelable {
mProgramThumbnailUri,
mState,
mFailedReason,
- mSeriesRecordingId);
+ mSeriesRecordingId,
+ mStartOffsetMs,
+ mEndOffsetMs);
}
/** Returns an array containing all of the elements in the list. */