aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/dvr/ui/playback/DvrPlaybackControlHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/dvr/ui/playback/DvrPlaybackControlHelper.java')
-rw-r--r--src/com/android/tv/dvr/ui/playback/DvrPlaybackControlHelper.java35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/com/android/tv/dvr/ui/playback/DvrPlaybackControlHelper.java b/src/com/android/tv/dvr/ui/playback/DvrPlaybackControlHelper.java
index 59c90d11..791d26bb 100644
--- a/src/com/android/tv/dvr/ui/playback/DvrPlaybackControlHelper.java
+++ b/src/com/android/tv/dvr/ui/playback/DvrPlaybackControlHelper.java
@@ -39,6 +39,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
+import android.view.ViewGroup;
import com.android.tv.R;
import com.android.tv.util.TimeShiftUtils;
import java.util.ArrayList;
@@ -53,10 +54,13 @@ class DvrPlaybackControlHelper extends PlaybackControlGlue {
private static final boolean DEBUG = false;
private static final int AUDIO_ACTION_ID = 1001;
+ private static final long INVALID_TIME = -1;
private int mPlaybackState = PlaybackState.STATE_NONE;
private int mPlaybackSpeedLevel;
private int mPlaybackSpeedId;
+ private long mProgramStartTimeMs = INVALID_TIME;
+ private boolean mEnableBuffering = false;
private boolean mReadyToControl;
private final DvrPlaybackOverlayFragment mFragment;
@@ -67,6 +71,8 @@ class DvrPlaybackControlHelper extends PlaybackControlGlue {
private final MultiAction mClosedCaptioningAction;
private final MultiAction mMultiAudioAction;
private ArrayObjectAdapter mSecondaryActionsAdapter;
+ private PlaybackControlsRow mPlaybackControlsRow;
+ @Nullable private View mPlayPauseButton;
DvrPlaybackControlHelper(Activity activity, DvrPlaybackOverlayFragment overlayFragment) {
super(activity, new int[TimeShiftUtils.MAX_SPEED_LEVEL + 1]);
@@ -79,13 +85,18 @@ class DvrPlaybackControlHelper extends PlaybackControlGlue {
.getDimensionPixelOffset(R.dimen.dvr_playback_controls_extra_padding_top);
mClosedCaptioningAction = new ClosedCaptioningAction(activity);
mMultiAudioAction = new MultiAudioAction(activity);
+ mProgramStartTimeMs = overlayFragment.getProgramStartTimeMs();
+ if (mProgramStartTimeMs != INVALID_TIME) {
+ mEnableBuffering = true;
+ }
createControlsRowPresenter();
}
void createControlsRow() {
- PlaybackControlsRow controlsRow = new PlaybackControlsRow(this);
- setControlsRow(controlsRow);
- mSecondaryActionsAdapter = (ArrayObjectAdapter) controlsRow.getSecondaryActionsAdapter();
+ mPlaybackControlsRow = new PlaybackControlsRow(this);
+ setControlsRow(mPlaybackControlsRow);
+ mSecondaryActionsAdapter =
+ (ArrayObjectAdapter) mPlaybackControlsRow.getSecondaryActionsAdapter();
}
private void createControlsRowPresenter() {
@@ -118,6 +129,8 @@ class DvrPlaybackControlHelper extends PlaybackControlGlue {
protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {
super.onBindRowViewHolder(vh, item);
vh.setOnKeyListener(DvrPlaybackControlHelper.this);
+ ViewGroup controlBar = (ViewGroup) vh.view.findViewById(R.id.control_bar);
+ mPlayPauseButton = controlBar.getChildAt(1);
}
@Override
@@ -265,6 +278,13 @@ class DvrPlaybackControlHelper extends PlaybackControlGlue {
getHost().notifyPlaybackRowChanged();
}
+ /** Update the focus to play pause button. */
+ public void onPlaybackResume() {
+ if (mPlayPauseButton != null) {
+ mPlayPauseButton.requestFocus();
+ }
+ }
+
@Nullable
Boolean hasSecondaryRow() {
if (mSecondaryActionsAdapter == null) {
@@ -292,6 +312,15 @@ class DvrPlaybackControlHelper extends PlaybackControlGlue {
mTransportControls.pause();
}
+ @Override
+ public void updateProgress() {
+ if (mEnableBuffering) {
+ super.updateProgress();
+ long bufferedTimeMs = System.currentTimeMillis() - mProgramStartTimeMs;
+ mPlaybackControlsRow.setBufferedPosition(bufferedTimeMs);
+ }
+ }
+
/** Notifies closed caption being enabled/disabled to update related UI. */
void onSubtitleTrackStateChanged(boolean enabled) {
mClosedCaptioningAction.setIndex(