diff options
Diffstat (limited to 'src/com/android/tv/recommendation/ChannelRecord.java')
-rw-r--r-- | src/com/android/tv/recommendation/ChannelRecord.java | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/com/android/tv/recommendation/ChannelRecord.java b/src/com/android/tv/recommendation/ChannelRecord.java new file mode 100644 index 00000000..10aaeef7 --- /dev/null +++ b/src/com/android/tv/recommendation/ChannelRecord.java @@ -0,0 +1,92 @@ +/* + * 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.recommendation; + +import android.content.Context; +import android.support.annotation.VisibleForTesting; + +import com.android.tv.data.Channel; +import com.android.tv.data.Program; +import com.android.tv.util.Utils; + +import java.util.ArrayDeque; +import java.util.Deque; + +public class ChannelRecord { + // TODO: decide the value for max history size. + @VisibleForTesting static final int MAX_HISTORY_SIZE = 100; + private final Context mContext; + private final Deque<WatchedProgram> mWatchHistory; + private Program mCurrentProgram; + private Channel mChannel; + private long mTotalWatchDurationMs; + private boolean mInputRemoved; + + public ChannelRecord(Context context, Channel channel, boolean inputRemoved) { + mContext = context; + mChannel = channel; + mWatchHistory = new ArrayDeque<>(); + mInputRemoved = inputRemoved; + } + + public Channel getChannel() { + return mChannel; + } + + public void setChannel(Channel channel, boolean inputRemoved) { + mChannel = channel; + mInputRemoved = inputRemoved; + } + + public boolean isInputRemoved() { + return mInputRemoved; + } + + public void setInputRemoved(boolean removed) { + mInputRemoved = removed; + } + + public long getLastWatchEndTimeMs() { + WatchedProgram p = mWatchHistory.peekLast(); + return (p == null) ? 0 : p.getWatchEndTimeMs(); + } + + public Program getCurrentProgram() { + long time = System.currentTimeMillis(); + if (mCurrentProgram == null || mCurrentProgram.getEndTimeUtcMillis() < time) { + mCurrentProgram = Utils.getCurrentProgram(mContext, mChannel.getId()); + } + return mCurrentProgram; + } + + public long getTotalWatchDurationMs() { + return mTotalWatchDurationMs; + } + + public final WatchedProgram[] getWatchHistory() { + return mWatchHistory.toArray(new WatchedProgram[mWatchHistory.size()]); + } + + public void logWatchHistory(WatchedProgram p) { + mWatchHistory.offer(p); + mTotalWatchDurationMs += p.getWatchedDurationMs(); + if (mWatchHistory.size() > MAX_HISTORY_SIZE) { + WatchedProgram program = mWatchHistory.poll(); + mTotalWatchDurationMs -= program.getWatchedDurationMs(); + } + } +} |