aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/data/RecordedProgram.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/data/RecordedProgram.java')
-rw-r--r--src/com/android/tv/dvr/data/RecordedProgram.java473
1 files changed, 282 insertions, 191 deletions
diff --git a/src/com/android/tv/dvr/data/RecordedProgram.java b/src/com/android/tv/dvr/data/RecordedProgram.java
index 2e953a52..e1fbca8c 100644
--- a/src/com/android/tv/dvr/data/RecordedProgram.java
+++ b/src/com/android/tv/dvr/data/RecordedProgram.java
@@ -28,99 +28,97 @@ import android.net.Uri;
import android.os.Build;
import android.support.annotation.Nullable;
import android.text.TextUtils;
-
import com.android.tv.common.R;
import com.android.tv.common.TvContentRatingCache;
+import com.android.tv.common.util.CommonUtils;
import com.android.tv.data.BaseProgram;
import com.android.tv.data.GenreItems;
import com.android.tv.data.InternalDataUtils;
-import com.android.tv.util.Utils;
-
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
-/**
- * Immutable instance of {@link android.media.tv.TvContract.RecordedPrograms}.
- */
+/** Immutable instance of {@link android.media.tv.TvContract.RecordedPrograms}. */
@TargetApi(Build.VERSION_CODES.N)
public class RecordedProgram extends BaseProgram {
public static final int ID_NOT_SET = -1;
- public final static String[] PROJECTION = {
- // These are in exactly the order listed in RecordedPrograms
- RecordedPrograms._ID,
- RecordedPrograms.COLUMN_PACKAGE_NAME,
- RecordedPrograms.COLUMN_INPUT_ID,
- RecordedPrograms.COLUMN_CHANNEL_ID,
- RecordedPrograms.COLUMN_TITLE,
- RecordedPrograms.COLUMN_SEASON_DISPLAY_NUMBER,
- RecordedPrograms.COLUMN_SEASON_TITLE,
- RecordedPrograms.COLUMN_EPISODE_DISPLAY_NUMBER,
- RecordedPrograms.COLUMN_EPISODE_TITLE,
- RecordedPrograms.COLUMN_START_TIME_UTC_MILLIS,
- RecordedPrograms.COLUMN_END_TIME_UTC_MILLIS,
- RecordedPrograms.COLUMN_BROADCAST_GENRE,
- RecordedPrograms.COLUMN_CANONICAL_GENRE,
- RecordedPrograms.COLUMN_SHORT_DESCRIPTION,
- RecordedPrograms.COLUMN_LONG_DESCRIPTION,
- RecordedPrograms.COLUMN_VIDEO_WIDTH,
- RecordedPrograms.COLUMN_VIDEO_HEIGHT,
- RecordedPrograms.COLUMN_AUDIO_LANGUAGE,
- RecordedPrograms.COLUMN_CONTENT_RATING,
- RecordedPrograms.COLUMN_POSTER_ART_URI,
- RecordedPrograms.COLUMN_THUMBNAIL_URI,
- RecordedPrograms.COLUMN_SEARCHABLE,
- RecordedPrograms.COLUMN_RECORDING_DATA_URI,
- RecordedPrograms.COLUMN_RECORDING_DATA_BYTES,
- RecordedPrograms.COLUMN_RECORDING_DURATION_MILLIS,
- RecordedPrograms.COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS,
- RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG1,
- RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG2,
- RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG3,
- RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG4,
- RecordedPrograms.COLUMN_VERSION_NUMBER,
- RecordedPrograms.COLUMN_INTERNAL_PROVIDER_DATA,
+ public static final String[] PROJECTION = {
+ // These are in exactly the order listed in RecordedPrograms
+ RecordedPrograms._ID,
+ RecordedPrograms.COLUMN_PACKAGE_NAME,
+ RecordedPrograms.COLUMN_INPUT_ID,
+ RecordedPrograms.COLUMN_CHANNEL_ID,
+ RecordedPrograms.COLUMN_TITLE,
+ RecordedPrograms.COLUMN_SEASON_DISPLAY_NUMBER,
+ RecordedPrograms.COLUMN_SEASON_TITLE,
+ RecordedPrograms.COLUMN_EPISODE_DISPLAY_NUMBER,
+ RecordedPrograms.COLUMN_EPISODE_TITLE,
+ RecordedPrograms.COLUMN_START_TIME_UTC_MILLIS,
+ RecordedPrograms.COLUMN_END_TIME_UTC_MILLIS,
+ RecordedPrograms.COLUMN_BROADCAST_GENRE,
+ RecordedPrograms.COLUMN_CANONICAL_GENRE,
+ RecordedPrograms.COLUMN_SHORT_DESCRIPTION,
+ RecordedPrograms.COLUMN_LONG_DESCRIPTION,
+ RecordedPrograms.COLUMN_VIDEO_WIDTH,
+ RecordedPrograms.COLUMN_VIDEO_HEIGHT,
+ RecordedPrograms.COLUMN_AUDIO_LANGUAGE,
+ RecordedPrograms.COLUMN_CONTENT_RATING,
+ RecordedPrograms.COLUMN_POSTER_ART_URI,
+ RecordedPrograms.COLUMN_THUMBNAIL_URI,
+ RecordedPrograms.COLUMN_SEARCHABLE,
+ RecordedPrograms.COLUMN_RECORDING_DATA_URI,
+ RecordedPrograms.COLUMN_RECORDING_DATA_BYTES,
+ RecordedPrograms.COLUMN_RECORDING_DURATION_MILLIS,
+ RecordedPrograms.COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS,
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG1,
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG2,
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG3,
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG4,
+ RecordedPrograms.COLUMN_VERSION_NUMBER,
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_DATA,
};
public static RecordedProgram fromCursor(Cursor cursor) {
int index = 0;
- Builder builder = builder()
- .setId(cursor.getLong(index++))
- .setPackageName(cursor.getString(index++))
- .setInputId(cursor.getString(index++))
- .setChannelId(cursor.getLong(index++))
- .setTitle(cursor.getString(index++))
- .setSeasonNumber(cursor.getString(index++))
- .setSeasonTitle(cursor.getString(index++))
- .setEpisodeNumber(cursor.getString(index++))
- .setEpisodeTitle(cursor.getString(index++))
- .setStartTimeUtcMillis(cursor.getLong(index++))
- .setEndTimeUtcMillis(cursor.getLong(index++))
- .setBroadcastGenres(cursor.getString(index++))
- .setCanonicalGenres(cursor.getString(index++))
- .setShortDescription(cursor.getString(index++))
- .setLongDescription(cursor.getString(index++))
- .setVideoWidth(cursor.getInt(index++))
- .setVideoHeight(cursor.getInt(index++))
- .setAudioLanguage(cursor.getString(index++))
- .setContentRatings(
- TvContentRatingCache.getInstance().getRatings(cursor.getString(index++)))
- .setPosterArtUri(cursor.getString(index++))
- .setThumbnailUri(cursor.getString(index++))
- .setSearchable(cursor.getInt(index++) == 1)
- .setDataUri(cursor.getString(index++))
- .setDataBytes(cursor.getLong(index++))
- .setDurationMillis(cursor.getLong(index++))
- .setExpireTimeUtcMillis(cursor.getLong(index++))
- .setInternalProviderFlag1(cursor.getInt(index++))
- .setInternalProviderFlag2(cursor.getInt(index++))
- .setInternalProviderFlag3(cursor.getInt(index++))
- .setInternalProviderFlag4(cursor.getInt(index++))
- .setVersionNumber(cursor.getInt(index++));
- if (Utils.isInBundledPackageSet(builder.mPackageName)) {
+ Builder builder =
+ builder()
+ .setId(cursor.getLong(index++))
+ .setPackageName(cursor.getString(index++))
+ .setInputId(cursor.getString(index++))
+ .setChannelId(cursor.getLong(index++))
+ .setTitle(cursor.getString(index++))
+ .setSeasonNumber(cursor.getString(index++))
+ .setSeasonTitle(cursor.getString(index++))
+ .setEpisodeNumber(cursor.getString(index++))
+ .setEpisodeTitle(cursor.getString(index++))
+ .setStartTimeUtcMillis(cursor.getLong(index++))
+ .setEndTimeUtcMillis(cursor.getLong(index++))
+ .setBroadcastGenres(cursor.getString(index++))
+ .setCanonicalGenres(cursor.getString(index++))
+ .setShortDescription(cursor.getString(index++))
+ .setLongDescription(cursor.getString(index++))
+ .setVideoWidth(cursor.getInt(index++))
+ .setVideoHeight(cursor.getInt(index++))
+ .setAudioLanguage(cursor.getString(index++))
+ .setContentRatings(
+ TvContentRatingCache.getInstance()
+ .getRatings(cursor.getString(index++)))
+ .setPosterArtUri(cursor.getString(index++))
+ .setThumbnailUri(cursor.getString(index++))
+ .setSearchable(cursor.getInt(index++) == 1)
+ .setDataUri(cursor.getString(index++))
+ .setDataBytes(cursor.getLong(index++))
+ .setDurationMillis(cursor.getLong(index++))
+ .setExpireTimeUtcMillis(cursor.getLong(index++))
+ .setInternalProviderFlag1(cursor.getInt(index++))
+ .setInternalProviderFlag2(cursor.getInt(index++))
+ .setInternalProviderFlag3(cursor.getInt(index++))
+ .setInternalProviderFlag4(cursor.getInt(index++))
+ .setVersionNumber(cursor.getInt(index++));
+ if (CommonUtils.isInBundledPackageSet(builder.mPackageName)) {
InternalDataUtils.deserializeInternalProviderData(cursor.getBlob(index), builder);
}
return builder.build();
@@ -138,12 +136,14 @@ public class RecordedProgram extends BaseProgram {
values.put(RecordedPrograms.COLUMN_SEASON_TITLE, recordedProgram.mSeasonTitle);
values.put(RecordedPrograms.COLUMN_EPISODE_DISPLAY_NUMBER, recordedProgram.mEpisodeNumber);
values.put(RecordedPrograms.COLUMN_EPISODE_TITLE, recordedProgram.mTitle);
- values.put(RecordedPrograms.COLUMN_START_TIME_UTC_MILLIS,
- recordedProgram.mStartTimeUtcMillis);
+ values.put(
+ RecordedPrograms.COLUMN_START_TIME_UTC_MILLIS, recordedProgram.mStartTimeUtcMillis);
values.put(RecordedPrograms.COLUMN_END_TIME_UTC_MILLIS, recordedProgram.mEndTimeUtcMillis);
- values.put(RecordedPrograms.COLUMN_BROADCAST_GENRE,
+ values.put(
+ RecordedPrograms.COLUMN_BROADCAST_GENRE,
safeEncode(recordedProgram.mBroadcastGenres));
- values.put(RecordedPrograms.COLUMN_CANONICAL_GENRE,
+ values.put(
+ RecordedPrograms.COLUMN_CANONICAL_GENRE,
safeEncode(recordedProgram.mCanonicalGenres));
values.put(RecordedPrograms.COLUMN_SHORT_DESCRIPTION, recordedProgram.mShortDescription);
values.put(RecordedPrograms.COLUMN_LONG_DESCRIPTION, recordedProgram.mLongDescription);
@@ -158,33 +158,40 @@ public class RecordedProgram extends BaseProgram {
values.put(RecordedPrograms.COLUMN_VIDEO_HEIGHT, recordedProgram.mVideoHeight);
}
values.put(RecordedPrograms.COLUMN_AUDIO_LANGUAGE, recordedProgram.mAudioLanguage);
- values.put(RecordedPrograms.COLUMN_CONTENT_RATING,
+ values.put(
+ RecordedPrograms.COLUMN_CONTENT_RATING,
TvContentRatingCache.contentRatingsToString(recordedProgram.mContentRatings));
values.put(RecordedPrograms.COLUMN_POSTER_ART_URI, recordedProgram.mPosterArtUri);
values.put(RecordedPrograms.COLUMN_THUMBNAIL_URI, recordedProgram.mThumbnailUri);
values.put(RecordedPrograms.COLUMN_SEARCHABLE, recordedProgram.mSearchable ? 1 : 0);
- values.put(RecordedPrograms.COLUMN_RECORDING_DATA_URI,
- safeToString(recordedProgram.mDataUri));
+ values.put(
+ RecordedPrograms.COLUMN_RECORDING_DATA_URI, safeToString(recordedProgram.mDataUri));
values.put(RecordedPrograms.COLUMN_RECORDING_DATA_BYTES, recordedProgram.mDataBytes);
- values.put(RecordedPrograms.COLUMN_RECORDING_DURATION_MILLIS,
- recordedProgram.mDurationMillis);
- values.put(RecordedPrograms.COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS,
+ values.put(
+ RecordedPrograms.COLUMN_RECORDING_DURATION_MILLIS, recordedProgram.mDurationMillis);
+ values.put(
+ RecordedPrograms.COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS,
recordedProgram.mExpireTimeUtcMillis);
- values.put(RecordedPrograms.COLUMN_INTERNAL_PROVIDER_DATA,
+ values.put(
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_DATA,
InternalDataUtils.serializeInternalProviderData(recordedProgram));
- values.put(RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG1,
+ values.put(
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG1,
recordedProgram.mInternalProviderFlag1);
- values.put(RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG2,
+ values.put(
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG2,
recordedProgram.mInternalProviderFlag2);
- values.put(RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG3,
+ values.put(
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG3,
recordedProgram.mInternalProviderFlag3);
- values.put(RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG4,
+ values.put(
+ RecordedPrograms.COLUMN_INTERNAL_PROVIDER_FLAG4,
recordedProgram.mInternalProviderFlag4);
values.put(RecordedPrograms.COLUMN_VERSION_NUMBER, recordedProgram.mVersionNumber);
return values;
}
- public static class Builder{
+ public static class Builder {
private long mId = ID_NOT_SET;
private String mPackageName;
private String mInputId;
@@ -414,18 +421,45 @@ public class RecordedProgram extends BaseProgram {
// If series ID is not set, generate it for the episodic program of other TV input.
setSeriesId(BaseProgram.generateSeriesId(mPackageName, mTitle));
}
- return new RecordedProgram(mId, mPackageName, mInputId, mChannelId, mTitle, mSeriesId,
- mSeasonNumber, mSeasonTitle, mEpisodeNumber, mEpisodeTitle, mStartTimeUtcMillis,
- mEndTimeUtcMillis, mBroadcastGenres, mCanonicalGenres, mShortDescription,
- mLongDescription, mVideoWidth, mVideoHeight, mAudioLanguage, mContentRatings,
- mPosterArtUri, mThumbnailUri, mSearchable, mDataUri, mDataBytes,
- mDurationMillis, mExpireTimeUtcMillis, mInternalProviderFlag1,
- mInternalProviderFlag2, mInternalProviderFlag3, mInternalProviderFlag4,
+ return new RecordedProgram(
+ mId,
+ mPackageName,
+ mInputId,
+ mChannelId,
+ mTitle,
+ mSeriesId,
+ mSeasonNumber,
+ mSeasonTitle,
+ mEpisodeNumber,
+ mEpisodeTitle,
+ mStartTimeUtcMillis,
+ mEndTimeUtcMillis,
+ mBroadcastGenres,
+ mCanonicalGenres,
+ mShortDescription,
+ mLongDescription,
+ mVideoWidth,
+ mVideoHeight,
+ mAudioLanguage,
+ mContentRatings,
+ mPosterArtUri,
+ mThumbnailUri,
+ mSearchable,
+ mDataUri,
+ mDataBytes,
+ mDurationMillis,
+ mExpireTimeUtcMillis,
+ mInternalProviderFlag1,
+ mInternalProviderFlag2,
+ mInternalProviderFlag3,
+ mInternalProviderFlag4,
mVersionNumber);
}
}
- public static Builder builder() { return new Builder(); }
+ public static Builder builder() {
+ return new Builder();
+ }
public static Builder buildFrom(RecordedProgram orig) {
return builder()
@@ -470,7 +504,7 @@ public class RecordedProgram extends BaseProgram {
}
return Long.compare(lhs.mId, rhs.mId);
}
- };
+ };
private static final long CLIPPED_THRESHOLD_MS = TimeUnit.MINUTES.toMillis(5);
@@ -507,15 +541,38 @@ public class RecordedProgram extends BaseProgram {
private final int mInternalProviderFlag4;
private final int mVersionNumber;
- private RecordedProgram(long id, String packageName, String inputId, long channelId,
- String title, String seriesId, String seasonNumber, String seasonTitle,
- String episodeNumber, String episodeTitle, long startTimeUtcMillis,
- long endTimeUtcMillis, String[] broadcastGenres, String[] canonicalGenres,
- String shortDescription, String longDescription, int videoWidth, int videoHeight,
- String audioLanguage, TvContentRating[] contentRatings, String posterArtUri,
- String thumbnailUri, boolean searchable, Uri dataUri, long dataBytes,
- long durationMillis, long expireTimeUtcMillis, int internalProviderFlag1,
- int internalProviderFlag2, int internalProviderFlag3, int internalProviderFlag4,
+ private RecordedProgram(
+ long id,
+ String packageName,
+ String inputId,
+ long channelId,
+ String title,
+ String seriesId,
+ String seasonNumber,
+ String seasonTitle,
+ String episodeNumber,
+ String episodeTitle,
+ long startTimeUtcMillis,
+ long endTimeUtcMillis,
+ String[] broadcastGenres,
+ String[] canonicalGenres,
+ String shortDescription,
+ String longDescription,
+ int videoWidth,
+ int videoHeight,
+ String audioLanguage,
+ TvContentRating[] contentRatings,
+ String posterArtUri,
+ String thumbnailUri,
+ boolean searchable,
+ Uri dataUri,
+ long dataBytes,
+ long durationMillis,
+ long expireTimeUtcMillis,
+ int internalProviderFlag1,
+ int internalProviderFlag2,
+ int internalProviderFlag3,
+ int internalProviderFlag4,
int versionNumber) {
mId = id;
mPackageName = packageName;
@@ -564,9 +621,7 @@ public class RecordedProgram extends BaseProgram {
return mCanonicalGenres;
}
- /**
- * Returns array of canonical genre ID's for this recorded program.
- */
+ /** Returns array of canonical genre ID's for this recorded program. */
@Override
public int[] getCanonicalGenreIds() {
if (mCanonicalGenres == null) {
@@ -623,11 +678,15 @@ public class RecordedProgram extends BaseProgram {
if (!TextUtils.isEmpty(mEpisodeNumber)) {
if (TextUtils.equals(mSeasonNumber, "0")) {
// Do not show "S0: ".
- return String.format(context.getResources().getString(
- R.string.display_episode_number_format_no_season_number), mEpisodeNumber);
+ return String.format(
+ context.getResources()
+ .getString(R.string.display_episode_number_format_no_season_number),
+ mEpisodeNumber);
} else {
- return String.format(context.getResources().getString(
- R.string.display_episode_number_format), mSeasonNumber, mEpisodeNumber);
+ return String.format(
+ context.getResources().getString(R.string.display_episode_number_format),
+ mSeasonNumber,
+ mEpisodeNumber);
}
}
return null;
@@ -734,9 +793,7 @@ public class RecordedProgram extends BaseProgram {
return mVideoWidth;
}
- /**
- * Checks whether the recording has been clipped or not.
- */
+ /** Checks whether the recording has been clipped or not. */
public boolean isClipped() {
return mEndTimeUtcMillis - mStartTimeUtcMillis - mDurationMillis > CLIPPED_THRESHOLD_MS;
}
@@ -746,40 +803,38 @@ public class RecordedProgram extends BaseProgram {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RecordedProgram that = (RecordedProgram) o;
- return Objects.equals(mId, that.mId) &&
- Objects.equals(mChannelId, that.mChannelId) &&
- Objects.equals(mSeriesId, that.mSeriesId) &&
- Objects.equals(mSeasonNumber, that.mSeasonNumber) &&
- Objects.equals(mSeasonTitle, that.mSeasonTitle) &&
- Objects.equals(mEpisodeNumber, that.mEpisodeNumber) &&
- Objects.equals(mStartTimeUtcMillis, that.mStartTimeUtcMillis) &&
- Objects.equals(mEndTimeUtcMillis, that.mEndTimeUtcMillis) &&
- Objects.equals(mVideoWidth, that.mVideoWidth) &&
- Objects.equals(mVideoHeight, that.mVideoHeight) &&
- Objects.equals(mSearchable, that.mSearchable) &&
- Objects.equals(mDataBytes, that.mDataBytes) &&
- Objects.equals(mDurationMillis, that.mDurationMillis) &&
- Objects.equals(mExpireTimeUtcMillis, that.mExpireTimeUtcMillis) &&
- Objects.equals(mInternalProviderFlag1, that.mInternalProviderFlag1) &&
- Objects.equals(mInternalProviderFlag2, that.mInternalProviderFlag2) &&
- Objects.equals(mInternalProviderFlag3, that.mInternalProviderFlag3) &&
- Objects.equals(mInternalProviderFlag4, that.mInternalProviderFlag4) &&
- Objects.equals(mVersionNumber, that.mVersionNumber) &&
- Objects.equals(mTitle, that.mTitle) &&
- Objects.equals(mEpisodeTitle, that.mEpisodeTitle) &&
- Arrays.equals(mBroadcastGenres, that.mBroadcastGenres) &&
- Arrays.equals(mCanonicalGenres, that.mCanonicalGenres) &&
- Objects.equals(mShortDescription, that.mShortDescription) &&
- Objects.equals(mLongDescription, that.mLongDescription) &&
- Objects.equals(mAudioLanguage, that.mAudioLanguage) &&
- Arrays.equals(mContentRatings, that.mContentRatings) &&
- Objects.equals(mPosterArtUri, that.mPosterArtUri) &&
- Objects.equals(mThumbnailUri, that.mThumbnailUri);
- }
-
- /**
- * Hashes based on the ID.
- */
+ return Objects.equals(mId, that.mId)
+ && Objects.equals(mChannelId, that.mChannelId)
+ && Objects.equals(mSeriesId, that.mSeriesId)
+ && Objects.equals(mSeasonNumber, that.mSeasonNumber)
+ && Objects.equals(mSeasonTitle, that.mSeasonTitle)
+ && Objects.equals(mEpisodeNumber, that.mEpisodeNumber)
+ && Objects.equals(mStartTimeUtcMillis, that.mStartTimeUtcMillis)
+ && Objects.equals(mEndTimeUtcMillis, that.mEndTimeUtcMillis)
+ && Objects.equals(mVideoWidth, that.mVideoWidth)
+ && Objects.equals(mVideoHeight, that.mVideoHeight)
+ && Objects.equals(mSearchable, that.mSearchable)
+ && Objects.equals(mDataBytes, that.mDataBytes)
+ && Objects.equals(mDurationMillis, that.mDurationMillis)
+ && Objects.equals(mExpireTimeUtcMillis, that.mExpireTimeUtcMillis)
+ && Objects.equals(mInternalProviderFlag1, that.mInternalProviderFlag1)
+ && Objects.equals(mInternalProviderFlag2, that.mInternalProviderFlag2)
+ && Objects.equals(mInternalProviderFlag3, that.mInternalProviderFlag3)
+ && Objects.equals(mInternalProviderFlag4, that.mInternalProviderFlag4)
+ && Objects.equals(mVersionNumber, that.mVersionNumber)
+ && Objects.equals(mTitle, that.mTitle)
+ && Objects.equals(mEpisodeTitle, that.mEpisodeTitle)
+ && Arrays.equals(mBroadcastGenres, that.mBroadcastGenres)
+ && Arrays.equals(mCanonicalGenres, that.mCanonicalGenres)
+ && Objects.equals(mShortDescription, that.mShortDescription)
+ && Objects.equals(mLongDescription, that.mLongDescription)
+ && Objects.equals(mAudioLanguage, that.mAudioLanguage)
+ && Arrays.equals(mContentRatings, that.mContentRatings)
+ && Objects.equals(mPosterArtUri, that.mPosterArtUri)
+ && Objects.equals(mThumbnailUri, that.mThumbnailUri);
+ }
+
+ /** Hashes based on the ID. */
@Override
public int hashCode() {
return Objects.hash(mId);
@@ -788,42 +843,80 @@ public class RecordedProgram extends BaseProgram {
@Override
public String toString() {
return "RecordedProgram"
- + "[" + mId +
- "]{ mPackageName=" + mPackageName +
- ", mInputId='" + mInputId + '\'' +
- ", mChannelId='" + mChannelId + '\'' +
- ", mTitle='" + mTitle + '\'' +
- ", mSeriesId='" + mSeriesId + '\'' +
- ", mEpisodeNumber=" + mEpisodeNumber +
- ", mEpisodeTitle='" + mEpisodeTitle + '\'' +
- ", mStartTimeUtcMillis=" + mStartTimeUtcMillis +
- ", mEndTimeUtcMillis=" + mEndTimeUtcMillis +
- ", mBroadcastGenres=" +
- (mBroadcastGenres != null ? Arrays.toString(mBroadcastGenres) : "null") +
- ", mCanonicalGenres=" +
- (mCanonicalGenres != null ? Arrays.toString(mCanonicalGenres) : "null") +
- ", mShortDescription='" + mShortDescription + '\'' +
- ", mLongDescription='" + mLongDescription + '\'' +
- ", mVideoHeight=" + mVideoHeight +
- ", mVideoWidth=" + mVideoWidth +
- ", mAudioLanguage='" + mAudioLanguage + '\'' +
- ", mContentRatings='" +
- TvContentRatingCache.contentRatingsToString(mContentRatings) + '\'' +
- ", mPosterArtUri=" + mPosterArtUri +
- ", mThumbnailUri=" + mThumbnailUri +
- ", mSearchable=" + mSearchable +
- ", mDataUri=" + mDataUri +
- ", mDataBytes=" + mDataBytes +
- ", mDurationMillis=" + mDurationMillis +
- ", mExpireTimeUtcMillis=" + mExpireTimeUtcMillis +
- ", mInternalProviderFlag1=" + mInternalProviderFlag1 +
- ", mInternalProviderFlag2=" + mInternalProviderFlag2 +
- ", mInternalProviderFlag3=" + mInternalProviderFlag3 +
- ", mInternalProviderFlag4=" + mInternalProviderFlag4 +
- ", mSeasonNumber=" + mSeasonNumber +
- ", mSeasonTitle=" + mSeasonTitle +
- ", mVersionNumber=" + mVersionNumber +
- '}';
+ + "["
+ + mId
+ + "]{ mPackageName="
+ + mPackageName
+ + ", mInputId='"
+ + mInputId
+ + '\''
+ + ", mChannelId='"
+ + mChannelId
+ + '\''
+ + ", mTitle='"
+ + mTitle
+ + '\''
+ + ", mSeriesId='"
+ + mSeriesId
+ + '\''
+ + ", mEpisodeNumber="
+ + mEpisodeNumber
+ + ", mEpisodeTitle='"
+ + mEpisodeTitle
+ + '\''
+ + ", mStartTimeUtcMillis="
+ + mStartTimeUtcMillis
+ + ", mEndTimeUtcMillis="
+ + mEndTimeUtcMillis
+ + ", mBroadcastGenres="
+ + (mBroadcastGenres != null ? Arrays.toString(mBroadcastGenres) : "null")
+ + ", mCanonicalGenres="
+ + (mCanonicalGenres != null ? Arrays.toString(mCanonicalGenres) : "null")
+ + ", mShortDescription='"
+ + mShortDescription
+ + '\''
+ + ", mLongDescription='"
+ + mLongDescription
+ + '\''
+ + ", mVideoHeight="
+ + mVideoHeight
+ + ", mVideoWidth="
+ + mVideoWidth
+ + ", mAudioLanguage='"
+ + mAudioLanguage
+ + '\''
+ + ", mContentRatings='"
+ + TvContentRatingCache.contentRatingsToString(mContentRatings)
+ + '\''
+ + ", mPosterArtUri="
+ + mPosterArtUri
+ + ", mThumbnailUri="
+ + mThumbnailUri
+ + ", mSearchable="
+ + mSearchable
+ + ", mDataUri="
+ + mDataUri
+ + ", mDataBytes="
+ + mDataBytes
+ + ", mDurationMillis="
+ + mDurationMillis
+ + ", mExpireTimeUtcMillis="
+ + mExpireTimeUtcMillis
+ + ", mInternalProviderFlag1="
+ + mInternalProviderFlag1
+ + ", mInternalProviderFlag2="
+ + mInternalProviderFlag2
+ + ", mInternalProviderFlag3="
+ + mInternalProviderFlag3
+ + ", mInternalProviderFlag4="
+ + mInternalProviderFlag4
+ + ", mSeasonNumber="
+ + mSeasonNumber
+ + ", mSeasonTitle="
+ + mSeasonTitle
+ + ", mVersionNumber="
+ + mVersionNumber
+ + '}';
}
@Nullable
@@ -836,9 +929,7 @@ public class RecordedProgram extends BaseProgram {
return genres == null ? null : TvContract.Programs.Genres.encode(genres);
}
- /**
- * Returns an array containing all of the elements in the list.
- */
+ /** Returns an array containing all of the elements in the list. */
public static RecordedProgram[] toArray(Collection<RecordedProgram> recordedPrograms) {
return recordedPrograms.toArray(new RecordedProgram[recordedPrograms.size()]);
}