diff options
Diffstat (limited to 'src/com/android/tv/dvr/ScheduledRecording.java')
-rw-r--r-- | src/com/android/tv/dvr/ScheduledRecording.java | 887 |
1 files changed, 0 insertions, 887 deletions
diff --git a/src/com/android/tv/dvr/ScheduledRecording.java b/src/com/android/tv/dvr/ScheduledRecording.java deleted file mode 100644 index 2bda10ea..00000000 --- a/src/com/android/tv/dvr/ScheduledRecording.java +++ /dev/null @@ -1,887 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.tv.dvr; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.os.Parcel; -import android.os.Parcelable; -import android.support.annotation.IntDef; -import android.support.annotation.VisibleForTesting; -import android.text.TextUtils; -import android.util.Range; - -import com.android.tv.R; -import com.android.tv.common.SoftPreconditions; -import com.android.tv.data.Channel; -import com.android.tv.data.Program; -import com.android.tv.dvr.provider.DvrContract.Schedules; -import com.android.tv.util.CompositeComparator; -import com.android.tv.util.Utils; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.Collection; -import java.util.Comparator; -import java.util.Objects; - -/** - * A data class for one recording contents. - */ -@VisibleForTesting -public final class ScheduledRecording implements Parcelable { - private static final String TAG = "ScheduledRecording"; - - /** - * Indicates that the ID is not assigned yet. - */ - public static final long ID_NOT_SET = 0; - - /** - * The default priority of the recording. - */ - public static final long DEFAULT_PRIORITY = Long.MAX_VALUE >> 1; - - /** - * Compares the start time in ascending order. - */ - public static final Comparator<ScheduledRecording> START_TIME_COMPARATOR - = new Comparator<ScheduledRecording>() { - @Override - public int compare(ScheduledRecording lhs, ScheduledRecording rhs) { - return Long.compare(lhs.mStartTimeMs, rhs.mStartTimeMs); - } - }; - - /** - * Compares the end time in ascending order. - */ - public static final Comparator<ScheduledRecording> END_TIME_COMPARATOR - = new Comparator<ScheduledRecording>() { - @Override - public int compare(ScheduledRecording lhs, ScheduledRecording rhs) { - return Long.compare(lhs.mEndTimeMs, rhs.mEndTimeMs); - } - }; - - /** - * Compares ID in ascending order. The schedule with the larger ID was created later. - */ - public static final Comparator<ScheduledRecording> ID_COMPARATOR - = new Comparator<ScheduledRecording>() { - @Override - public int compare(ScheduledRecording lhs, ScheduledRecording rhs) { - return Long.compare(lhs.mId, rhs.mId); - } - }; - - /** - * Compares the priority in ascending order. - */ - public static final Comparator<ScheduledRecording> PRIORITY_COMPARATOR - = new Comparator<ScheduledRecording>() { - @Override - public int compare(ScheduledRecording lhs, ScheduledRecording rhs) { - return Long.compare(lhs.mPriority, rhs.mPriority); - } - }; - - /** - * Compares start time in ascending order and then priority in descending order and then ID in - * descending order. - */ - public static final Comparator<ScheduledRecording> START_TIME_THEN_PRIORITY_THEN_ID_COMPARATOR - = new CompositeComparator<>(START_TIME_COMPARATOR, PRIORITY_COMPARATOR.reversed(), - ID_COMPARATOR.reversed()); - - /** - * Builds scheduled recordings from programs. - */ - public static Builder builder(String inputId, Program p) { - return new Builder() - .setInputId(inputId) - .setChannelId(p.getChannelId()) - .setStartTimeMs(p.getStartTimeUtcMillis()).setEndTimeMs(p.getEndTimeUtcMillis()) - .setProgramId(p.getId()) - .setProgramTitle(p.getTitle()) - .setSeasonNumber(p.getSeasonNumber()) - .setEpisodeNumber(p.getEpisodeNumber()) - .setEpisodeTitle(p.getEpisodeTitle()) - .setProgramDescription(p.getDescription()) - .setProgramLongDescription(p.getLongDescription()) - .setProgramPosterArtUri(p.getPosterArtUri()) - .setProgramThumbnailUri(p.getThumbnailUri()) - .setType(TYPE_PROGRAM); - } - - public static Builder builder(String inputId, long channelId, long startTime, long endTime) { - return new Builder() - .setInputId(inputId) - .setChannelId(channelId) - .setStartTimeMs(startTime) - .setEndTimeMs(endTime) - .setType(TYPE_TIMED); - } - - /** - * Creates a new Builder with the values set from the {@link RecordedProgram}. - */ - @VisibleForTesting - public static Builder builder(RecordedProgram p) { - boolean isProgramRecording = !TextUtils.isEmpty(p.getTitle()); - return new Builder() - .setInputId(p.getInputId()) - .setChannelId(p.getChannelId()) - .setType(isProgramRecording ? TYPE_PROGRAM : TYPE_TIMED) - .setStartTimeMs(p.getStartTimeUtcMillis()) - .setEndTimeMs(p.getEndTimeUtcMillis()) - .setProgramTitle(p.getTitle()) - .setSeasonNumber(p.getSeasonNumber()) - .setEpisodeNumber(p.getEpisodeNumber()) - .setEpisodeTitle(p.getEpisodeTitle()) - .setProgramDescription(p.getDescription()) - .setProgramLongDescription(p.getLongDescription()) - .setProgramPosterArtUri(p.getPosterArtUri()) - .setProgramThumbnailUri(p.getThumbnailUri()) - .setState(STATE_RECORDING_FINISHED); - } - - public static final class Builder { - private long mId = ID_NOT_SET; - private long mPriority = DvrScheduleManager.DEFAULT_PRIORITY; - private String mInputId; - private long mChannelId; - private long mProgramId = ID_NOT_SET; - private String mProgramTitle; - private @RecordingType int mType; - private long mStartTimeMs; - private long mEndTimeMs; - private String mSeasonNumber; - private String mEpisodeNumber; - private String mEpisodeTitle; - private String mProgramDescription; - private String mProgramLongDescription; - private String mProgramPosterArtUri; - private String mProgramThumbnailUri; - private @RecordingState int mState; - private long mSeriesRecordingId = ID_NOT_SET; - - private Builder() { } - - public Builder setId(long id) { - mId = id; - return this; - } - - public Builder setPriority(long priority) { - mPriority = priority; - return this; - } - - public Builder setInputId(String inputId) { - mInputId = inputId; - return this; - } - - public Builder setChannelId(long channelId) { - mChannelId = channelId; - return this; - } - - public Builder setProgramId(long programId) { - mProgramId = programId; - return this; - } - - public Builder setProgramTitle(String programTitle) { - mProgramTitle = programTitle; - return this; - } - - private Builder setType(@RecordingType int type) { - mType = type; - return this; - } - - public Builder setStartTimeMs(long startTimeMs) { - mStartTimeMs = startTimeMs; - return this; - } - - public Builder setEndTimeMs(long endTimeMs) { - mEndTimeMs = endTimeMs; - return this; - } - - public Builder setSeasonNumber(String seasonNumber) { - mSeasonNumber = seasonNumber; - return this; - } - - public Builder setEpisodeNumber(String episodeNumber) { - mEpisodeNumber = episodeNumber; - return this; - } - - public Builder setEpisodeTitle(String episodeTitle) { - mEpisodeTitle = episodeTitle; - return this; - } - - public Builder setProgramDescription(String description) { - mProgramDescription = description; - return this; - } - - public Builder setProgramLongDescription(String longDescription) { - mProgramLongDescription = longDescription; - return this; - } - - public Builder setProgramPosterArtUri(String programPosterArtUri) { - mProgramPosterArtUri = programPosterArtUri; - return this; - } - - public Builder setProgramThumbnailUri(String programThumbnailUri) { - mProgramThumbnailUri = programThumbnailUri; - return this; - } - - public Builder setState(@RecordingState int state) { - mState = state; - return this; - } - - public Builder setSeriesRecordingId(long seriesRecordingId) { - mSeriesRecordingId = seriesRecordingId; - return this; - } - - public ScheduledRecording build() { - return new ScheduledRecording(mId, mPriority, mInputId, mChannelId, mProgramId, - mProgramTitle, mType, mStartTimeMs, mEndTimeMs, mSeasonNumber, mEpisodeNumber, - mEpisodeTitle, mProgramDescription, mProgramLongDescription, - mProgramPosterArtUri, mProgramThumbnailUri, mState, mSeriesRecordingId); - } - } - - /** - * Creates {@link Builder} object from the given original {@code Recording}. - */ - public static Builder buildFrom(ScheduledRecording orig) { - return new Builder() - .setId(orig.mId) - .setInputId(orig.mInputId) - .setChannelId(orig.mChannelId) - .setEndTimeMs(orig.mEndTimeMs) - .setSeriesRecordingId(orig.mSeriesRecordingId) - .setPriority(orig.mPriority) - .setProgramId(orig.mProgramId) - .setProgramTitle(orig.mProgramTitle) - .setStartTimeMs(orig.mStartTimeMs) - .setSeasonNumber(orig.getSeasonNumber()) - .setEpisodeNumber(orig.getEpisodeNumber()) - .setEpisodeTitle(orig.getEpisodeTitle()) - .setProgramDescription(orig.getProgramDescription()) - .setProgramLongDescription(orig.getProgramLongDescription()) - .setProgramPosterArtUri(orig.getProgramPosterArtUri()) - .setProgramThumbnailUri(orig.getProgramThumbnailUri()) - .setState(orig.mState).setType(orig.mType); - } - - @Retention(RetentionPolicy.SOURCE) - @IntDef({STATE_RECORDING_NOT_STARTED, STATE_RECORDING_IN_PROGRESS, STATE_RECORDING_FINISHED, - STATE_RECORDING_FAILED, STATE_RECORDING_CLIPPED, STATE_RECORDING_DELETED, - STATE_RECORDING_CANCELED}) - public @interface RecordingState {} - public static final int STATE_RECORDING_NOT_STARTED = 0; - public static final int STATE_RECORDING_IN_PROGRESS = 1; - public static final int STATE_RECORDING_FINISHED = 2; - public static final int STATE_RECORDING_FAILED = 3; - public static final int STATE_RECORDING_CLIPPED = 4; - public static final int STATE_RECORDING_DELETED = 5; - public static final int STATE_RECORDING_CANCELED = 6; - - @Retention(RetentionPolicy.SOURCE) - @IntDef({TYPE_TIMED, TYPE_PROGRAM}) - public @interface RecordingType {} - /** - * Record with given time range. - */ - public static final int TYPE_TIMED = 1; - /** - * Record with a given program. - */ - public static final int TYPE_PROGRAM = 2; - - @RecordingType private final int mType; - - /** - * Use this projection if you want to create {@link ScheduledRecording} object using - * {@link #fromCursor}. - */ - public static final String[] PROJECTION = { - // 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_SERIES_RECORDING_ID}; - - /** - * Creates {@link ScheduledRecording} object from the given {@link Cursor}. - */ - public static ScheduledRecording fromCursor(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))) - .setSeriesRecordingId(c.getLong(++index)) - .build(); - } - - public static ContentValues toContentValues(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_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); - } - return values; - } - - public static ScheduledRecording fromParcel(Parcel in) { - return new Builder() - .setId(in.readLong()) - .setPriority(in.readLong()) - .setInputId(in.readString()) - .setChannelId(in.readLong()) - .setProgramId(in.readLong()) - .setProgramTitle(in.readString()) - .setType(in.readInt()) - .setStartTimeMs(in.readLong()) - .setEndTimeMs(in.readLong()) - .setSeasonNumber(in.readString()) - .setEpisodeNumber(in.readString()) - .setEpisodeTitle(in.readString()) - .setProgramDescription(in.readString()) - .setProgramLongDescription(in.readString()) - .setProgramPosterArtUri(in.readString()) - .setProgramThumbnailUri(in.readString()) - .setState(in.readInt()) - .setSeriesRecordingId(in.readLong()) - .build(); - } - - public static final Parcelable.Creator<ScheduledRecording> CREATOR = - new Parcelable.Creator<ScheduledRecording>() { - @Override - public ScheduledRecording createFromParcel(Parcel in) { - return ScheduledRecording.fromParcel(in); - } - - @Override - public ScheduledRecording[] newArray(int size) { - return new ScheduledRecording[size]; - } - }; - - /** - * The ID internal to Live TV - */ - private long mId; - - /** - * The priority of this recording. - * - * <p> The highest number is recorded first. If there is a tie in priority then the higher id - * wins. - */ - private final long mPriority; - - private final String mInputId; - private final long mChannelId; - /** - * Optional id of the associated program. - */ - private final long mProgramId; - private final String mProgramTitle; - - private final long mStartTimeMs; - private final long mEndTimeMs; - private final String mSeasonNumber; - private final String mEpisodeNumber; - private final String mEpisodeTitle; - private final String mProgramDescription; - private final String mProgramLongDescription; - private final String mProgramPosterArtUri; - private final String mProgramThumbnailUri; - @RecordingState private final int mState; - private final long mSeriesRecordingId; - - private ScheduledRecording(long id, long priority, String inputId, long channelId, long programId, - String programTitle, @RecordingType int type, long startTime, long endTime, - String seasonNumber, String episodeNumber, String episodeTitle, - String programDescription, String programLongDescription, String programPosterArtUri, - String programThumbnailUri, @RecordingState int state, long seriesRecordingId) { - mId = id; - mPriority = priority; - mInputId = inputId; - mChannelId = channelId; - mProgramId = programId; - mProgramTitle = programTitle; - mType = type; - mStartTimeMs = startTime; - mEndTimeMs = endTime; - mSeasonNumber = seasonNumber; - mEpisodeNumber = episodeNumber; - mEpisodeTitle = episodeTitle; - mProgramDescription = programDescription; - mProgramLongDescription = programLongDescription; - mProgramPosterArtUri = programPosterArtUri; - mProgramThumbnailUri = programThumbnailUri; - mState = state; - mSeriesRecordingId = seriesRecordingId; - } - - /** - * Returns recording schedule type. The possible types are {@link #TYPE_PROGRAM} and - * {@link #TYPE_TIMED}. - */ - @RecordingType - public int getType() { - return mType; - } - - /** - * Returns schedules' input id. - */ - public String getInputId() { - return mInputId; - } - - /** - * Returns recorded {@link Channel}. - */ - public long getChannelId() { - return mChannelId; - } - - /** - * Return the optional program id - */ - public long getProgramId() { - return mProgramId; - } - - /** - * Return the optional program Title - */ - public String getProgramTitle() { - return mProgramTitle; - } - - /** - * Returns started time. - */ - public long getStartTimeMs() { - return mStartTimeMs; - } - - /** - * Returns ended time. - */ - public long getEndTimeMs() { - return mEndTimeMs; - } - - /** - * Returns the season number. - */ - public String getSeasonNumber() { - return mSeasonNumber; - } - - /** - * Returns the episode number. - */ - public String getEpisodeNumber() { - return mEpisodeNumber; - } - - /** - * Returns the episode title. - */ - public String getEpisodeTitle() { - return mEpisodeTitle; - } - - /** - * Returns the description of program. - */ - public String getProgramDescription() { - return mProgramDescription; - } - - /** - * Returns the long description of program. - */ - public String getProgramLongDescription() { - return mProgramLongDescription; - } - - /** - * Returns the poster uri of program. - */ - public String getProgramPosterArtUri() { - return mProgramPosterArtUri; - } - - /** - * Returns the thumb nail uri of program. - */ - public String getProgramThumbnailUri() { - return mProgramThumbnailUri; - } - - /** - * Returns duration. - */ - public long getDuration() { - return mEndTimeMs - mStartTimeMs; - } - - /** - * Returns the state. The possible states are {@link #STATE_RECORDING_NOT_STARTED}, - * {@link #STATE_RECORDING_IN_PROGRESS}, {@link #STATE_RECORDING_FINISHED}, - * {@link #STATE_RECORDING_FAILED}, {@link #STATE_RECORDING_CLIPPED} and - * {@link #STATE_RECORDING_DELETED}. - */ - @RecordingState public int getState() { - return mState; - } - - /** - * Returns the ID of the {@link SeriesRecording} including this schedule. - */ - public long getSeriesRecordingId() { - return mSeriesRecordingId; - } - - public long getId() { - return mId; - } - - /** - * Sets the ID; - */ - public void setId(long id) { - mId = id; - } - - public long getPriority() { - return mPriority; - } - - /** - * Returns season number, episode number and episode title for display. - */ - public String getEpisodeDisplayTitle(Context context) { - if (!TextUtils.isEmpty(mEpisodeNumber)) { - String episodeTitle = mEpisodeTitle == null ? "" : mEpisodeTitle; - if (TextUtils.equals(mSeasonNumber, "0")) { - // Do not show "S0: ". - return String.format(context.getResources().getString( - R.string.display_episode_title_format_no_season_number), - mEpisodeNumber, episodeTitle); - } else { - return String.format(context.getResources().getString( - R.string.display_episode_title_format), - mSeasonNumber, mEpisodeNumber, episodeTitle); - } - } - return mEpisodeTitle; - } - - /** - * Returns the program's title withe its season and episode number. - */ - public String getProgramTitleWithEpisodeNumber(Context context) { - if (TextUtils.isEmpty(mProgramTitle)) { - return mProgramTitle; - } - if (TextUtils.isEmpty(mSeasonNumber) || mSeasonNumber.equals("0")) { - return TextUtils.isEmpty(mEpisodeNumber) ? mProgramTitle : context.getString( - R.string.program_title_with_episode_number_no_season, mProgramTitle, - mEpisodeNumber); - } else { - return context.getString(R.string.program_title_with_episode_number, mProgramTitle, - mSeasonNumber, mEpisodeNumber); - } - } - - - /** - * Converts a string to a @RecordingType int, defaulting to {@link #TYPE_TIMED}. - */ - private static @RecordingType int recordingType(String type) { - switch (type) { - case Schedules.TYPE_TIMED: - return TYPE_TIMED; - case Schedules.TYPE_PROGRAM: - return TYPE_PROGRAM; - default: - SoftPreconditions.checkArgument(false, TAG, "Unknown recording type " + type); - return TYPE_TIMED; - } - } - - /** - * Converts a @RecordingType int to a string, defaulting to {@link Schedules#TYPE_TIMED}. - */ - private static String recordingType(@RecordingType int type) { - switch (type) { - case TYPE_TIMED: - return Schedules.TYPE_TIMED; - case TYPE_PROGRAM: - return Schedules.TYPE_PROGRAM; - default: - SoftPreconditions.checkArgument(false, TAG, "Unknown recording type " + type); - return Schedules.TYPE_TIMED; - } - } - - /** - * Converts a string to a @RecordingState int, defaulting to - * {@link #STATE_RECORDING_NOT_STARTED}. - */ - private static @RecordingState int recordingState(String state) { - switch (state) { - case Schedules.STATE_RECORDING_NOT_STARTED: - return STATE_RECORDING_NOT_STARTED; - case Schedules.STATE_RECORDING_IN_PROGRESS: - return STATE_RECORDING_IN_PROGRESS; - case Schedules.STATE_RECORDING_FINISHED: - return STATE_RECORDING_FINISHED; - case Schedules.STATE_RECORDING_FAILED: - return STATE_RECORDING_FAILED; - case Schedules.STATE_RECORDING_CLIPPED: - return STATE_RECORDING_CLIPPED; - case Schedules.STATE_RECORDING_DELETED: - return STATE_RECORDING_DELETED; - case Schedules.STATE_RECORDING_CANCELED: - return STATE_RECORDING_CANCELED; - default: - SoftPreconditions.checkArgument(false, TAG, "Unknown recording state" + state); - return STATE_RECORDING_NOT_STARTED; - } - } - - /** - * Converts a @RecordingState int to string, defaulting to - * {@link Schedules#STATE_RECORDING_NOT_STARTED}. - */ - private static String recordingState(@RecordingState int state) { - switch (state) { - case STATE_RECORDING_NOT_STARTED: - return Schedules.STATE_RECORDING_NOT_STARTED; - case STATE_RECORDING_IN_PROGRESS: - return Schedules.STATE_RECORDING_IN_PROGRESS; - case STATE_RECORDING_FINISHED: - return Schedules.STATE_RECORDING_FINISHED; - case STATE_RECORDING_FAILED: - return Schedules.STATE_RECORDING_FAILED; - case STATE_RECORDING_CLIPPED: - return Schedules.STATE_RECORDING_CLIPPED; - case STATE_RECORDING_DELETED: - return Schedules.STATE_RECORDING_DELETED; - case STATE_RECORDING_CANCELED: - return Schedules.STATE_RECORDING_CANCELED; - default: - SoftPreconditions.checkArgument(false, TAG, "Unknown recording state" + state); - return Schedules.STATE_RECORDING_NOT_STARTED; - } - } - - /** - * Checks if the {@code period} overlaps with the recording time. - */ - public boolean isOverLapping(Range<Long> period) { - return mStartTimeMs < period.getUpper() && mEndTimeMs > period.getLower(); - } - - /** - * Checks if the {@code schedule} overlaps with this schedule. - */ - public boolean isOverLapping(ScheduledRecording schedule) { - return mStartTimeMs < schedule.getEndTimeMs() && mEndTimeMs > schedule.getStartTimeMs(); - } - - @Override - public String toString() { - return "ScheduledRecording[" + mId - + "]" - + "(inputId=" + mInputId - + ",channelId=" + mChannelId - + ",programId=" + mProgramId - + ",programTitle=" + mProgramTitle - + ",type=" + mType - + ",startTime=" + Utils.toIsoDateTimeString(mStartTimeMs) + "(" + mStartTimeMs + ")" - + ",endTime=" + Utils.toIsoDateTimeString(mEndTimeMs) + "(" + mEndTimeMs + ")" - + ",seasonNumber=" + mSeasonNumber - + ",episodeNumber=" + mEpisodeNumber - + ",episodeTitle=" + mEpisodeTitle - + ",programDescription=" + mProgramDescription - + ",programLongDescription=" + mProgramLongDescription - + ",programPosterArtUri=" + mProgramPosterArtUri - + ",programThumbnailUri=" + mProgramThumbnailUri - + ",state=" + mState - + ",priority=" + mPriority - + ",seriesRecordingId=" + mSeriesRecordingId - + ")"; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel out, int paramInt) { - out.writeLong(mId); - out.writeLong(mPriority); - out.writeString(mInputId); - out.writeLong(mChannelId); - out.writeLong(mProgramId); - out.writeString(mProgramTitle); - out.writeInt(mType); - out.writeLong(mStartTimeMs); - out.writeLong(mEndTimeMs); - out.writeString(mSeasonNumber); - out.writeString(mEpisodeNumber); - out.writeString(mEpisodeTitle); - out.writeString(mProgramDescription); - out.writeString(mProgramLongDescription); - out.writeString(mProgramPosterArtUri); - out.writeString(mProgramThumbnailUri); - out.writeInt(mState); - out.writeLong(mSeriesRecordingId); - } - - /** - * Returns {@code true} if the recording is not started yet, otherwise @{code false}. - */ - public boolean isNotStarted() { - return mState == STATE_RECORDING_NOT_STARTED; - } - - /** - * Returns {@code true} if the recording is in progress, otherwise @{code false}. - */ - public boolean isInProgress() { - return mState == STATE_RECORDING_IN_PROGRESS; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof ScheduledRecording)) { - return false; - } - ScheduledRecording r = (ScheduledRecording) obj; - return mId == r.mId - && mPriority == r.mPriority - && mChannelId == r.mChannelId - && mProgramId == r.mProgramId - && Objects.equals(mProgramTitle, r.mProgramTitle) - && mType == r.mType - && mStartTimeMs == r.mStartTimeMs - && mEndTimeMs == r.mEndTimeMs - && Objects.equals(mSeasonNumber, r.mSeasonNumber) - && Objects.equals(mEpisodeNumber, r.mEpisodeNumber) - && Objects.equals(mEpisodeTitle, r.mEpisodeTitle) - && Objects.equals(mProgramDescription, r.getProgramDescription()) - && Objects.equals(mProgramLongDescription, r.getProgramLongDescription()) - && Objects.equals(mProgramPosterArtUri, r.getProgramPosterArtUri()) - && Objects.equals(mProgramThumbnailUri, r.getProgramThumbnailUri()) - && mState == r.mState - && mSeriesRecordingId == r.mSeriesRecordingId; - } - - @Override - public int hashCode() { - return Objects.hash(mId, mPriority, mChannelId, mProgramId, mProgramTitle, mType, - mStartTimeMs, mEndTimeMs, mSeasonNumber, mEpisodeNumber, mEpisodeTitle, - mProgramDescription, mProgramLongDescription, mProgramPosterArtUri, - mProgramThumbnailUri, mState, mSeriesRecordingId); - } - - /** - * Returns an array containing all of the elements in the list. - */ - public static ScheduledRecording[] toArray(Collection<ScheduledRecording> schedules) { - return schedules.toArray(new ScheduledRecording[schedules.size()]); - } -} |