Merge "Add playback progress." into lmp-dev
This commit is contained in:
@@ -16,6 +16,7 @@ package com.example.android.leanback;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
import android.support.v17.leanback.widget.Action;
|
import android.support.v17.leanback.widget.Action;
|
||||||
import android.support.v17.leanback.widget.ArrayObjectAdapter;
|
import android.support.v17.leanback.widget.ArrayObjectAdapter;
|
||||||
import android.support.v17.leanback.widget.ClassPresenterSelector;
|
import android.support.v17.leanback.widget.ClassPresenterSelector;
|
||||||
@@ -32,9 +33,11 @@ import android.widget.Toast;
|
|||||||
public class PlaybackOverlayFragment extends android.support.v17.leanback.app.PlaybackOverlayFragment {
|
public class PlaybackOverlayFragment extends android.support.v17.leanback.app.PlaybackOverlayFragment {
|
||||||
private static final String TAG = "leanback.PlaybackControlsFragment";
|
private static final String TAG = "leanback.PlaybackControlsFragment";
|
||||||
|
|
||||||
private static final int NUM_ROWS = 3;
|
private static final boolean SHOW_DETAIL = true;
|
||||||
private static final boolean SHOW_ITEM_DETAIL = true;
|
private static final boolean SHOW_IMAGE = true;
|
||||||
private static final boolean HIDE_MORE_ACTIONS = false;
|
private static final boolean HIDE_MORE_ACTIONS = false;
|
||||||
|
private static final int TOTAL_TIME_MS = 120 * 1000;
|
||||||
|
private static final int NUM_ROWS = 3;
|
||||||
|
|
||||||
private ArrayObjectAdapter mRowsAdapter;
|
private ArrayObjectAdapter mRowsAdapter;
|
||||||
private ArrayObjectAdapter mPrimaryActionsAdapter;
|
private ArrayObjectAdapter mPrimaryActionsAdapter;
|
||||||
@@ -42,12 +45,16 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
|
|||||||
private PlaybackControlsRow.PlayPauseAction mPlayPauseAction;
|
private PlaybackControlsRow.PlayPauseAction mPlayPauseAction;
|
||||||
private PlaybackControlsRow.RepeatAction mRepeatAction;
|
private PlaybackControlsRow.RepeatAction mRepeatAction;
|
||||||
private PlaybackControlsRow mPlaybackControlsRow;
|
private PlaybackControlsRow mPlaybackControlsRow;
|
||||||
|
private Handler mHandler;
|
||||||
|
private Runnable mRunnable;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
Log.i(TAG, "onCreate");
|
Log.i(TAG, "onCreate");
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
mHandler = new Handler();
|
||||||
|
|
||||||
setupRows();
|
setupRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +66,7 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
|
|||||||
ClassPresenterSelector ps = new ClassPresenterSelector();
|
ClassPresenterSelector ps = new ClassPresenterSelector();
|
||||||
|
|
||||||
PlaybackControlsRowPresenter playbackControlsRowPresenter;
|
PlaybackControlsRowPresenter playbackControlsRowPresenter;
|
||||||
if (SHOW_ITEM_DETAIL) {
|
if (SHOW_DETAIL) {
|
||||||
playbackControlsRowPresenter = new PlaybackControlsRowPresenter(
|
playbackControlsRowPresenter = new PlaybackControlsRowPresenter(
|
||||||
new DetailsDescriptionPresenter());
|
new DetailsDescriptionPresenter());
|
||||||
} else {
|
} else {
|
||||||
@@ -69,6 +76,15 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
|
|||||||
public void onActionClicked(Action action) {
|
public void onActionClicked(Action action) {
|
||||||
Toast.makeText(getActivity(), action.toString(), Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), action.toString(), Toast.LENGTH_SHORT).show();
|
||||||
if (action.getId() == mPlayPauseAction.getId()) {
|
if (action.getId() == mPlayPauseAction.getId()) {
|
||||||
|
if (mPlayPauseAction.isPlayIconShown()) {
|
||||||
|
int totalTime = mPlaybackControlsRow.getTotalTime();
|
||||||
|
if (totalTime > 0 && mPlaybackControlsRow.getCurrentTime() >= totalTime) {
|
||||||
|
mPlaybackControlsRow.setCurrentTime(0);
|
||||||
|
}
|
||||||
|
startProgressAutomation();
|
||||||
|
} else {
|
||||||
|
stopProgressAutomation();
|
||||||
|
}
|
||||||
mPlayPauseAction.toggle();
|
mPlayPauseAction.toggle();
|
||||||
notifyChanged(mPrimaryActionsAdapter, mPlayPauseAction);
|
notifyChanged(mPrimaryActionsAdapter, mPlayPauseAction);
|
||||||
} else if (action.getId() == mRepeatAction.getId()) {
|
} else if (action.getId() == mRepeatAction.getId()) {
|
||||||
@@ -95,15 +111,21 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
|
|||||||
mPrimaryActionsAdapter = new ArrayObjectAdapter(presenterSelector);
|
mPrimaryActionsAdapter = new ArrayObjectAdapter(presenterSelector);
|
||||||
mSecondaryActionsAdapter = new ArrayObjectAdapter(presenterSelector);
|
mSecondaryActionsAdapter = new ArrayObjectAdapter(presenterSelector);
|
||||||
|
|
||||||
if (SHOW_ITEM_DETAIL) {
|
if (SHOW_DETAIL) {
|
||||||
mPlaybackControlsRow = new PlaybackControlsRow("Playback Controls Title");
|
mPlaybackControlsRow = new PlaybackControlsRow("Playback Controls Title");
|
||||||
mPlaybackControlsRow.setImageDrawable(context.getResources().getDrawable(
|
|
||||||
R.drawable.details_img));
|
|
||||||
} else {
|
} else {
|
||||||
mPlaybackControlsRow = new PlaybackControlsRow();
|
mPlaybackControlsRow = new PlaybackControlsRow();
|
||||||
}
|
}
|
||||||
|
if (SHOW_IMAGE) {
|
||||||
|
mPlaybackControlsRow.setImageDrawable(context.getResources().getDrawable(
|
||||||
|
R.drawable.details_img));
|
||||||
|
}
|
||||||
mPlaybackControlsRow.setPrimaryActionsAdapter(mPrimaryActionsAdapter);
|
mPlaybackControlsRow.setPrimaryActionsAdapter(mPrimaryActionsAdapter);
|
||||||
mPlaybackControlsRow.setSecondaryActionsAdapter(mSecondaryActionsAdapter);
|
mPlaybackControlsRow.setSecondaryActionsAdapter(mSecondaryActionsAdapter);
|
||||||
|
mPlaybackControlsRow.setTotalTime(TOTAL_TIME_MS);
|
||||||
|
mPlaybackControlsRow.setCurrentTime(10 * 1000);
|
||||||
|
mPlaybackControlsRow.setBufferedProgress(75 * 1000);
|
||||||
|
|
||||||
mRowsAdapter.add(mPlaybackControlsRow);
|
mRowsAdapter.add(mPlaybackControlsRow);
|
||||||
|
|
||||||
mPlayPauseAction = new PlaybackControlsRow.PlayPauseAction(context);
|
mPlayPauseAction = new PlaybackControlsRow.PlayPauseAction(context);
|
||||||
@@ -128,4 +150,28 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
|
|||||||
mRowsAdapter.add(new ListRow(header, listRowAdapter));
|
mRowsAdapter.add(new ListRow(header, listRowAdapter));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startProgressAutomation() {
|
||||||
|
int width = getView().getWidth();
|
||||||
|
final int totalTime = mPlaybackControlsRow.getTotalTime();
|
||||||
|
final int updateFreq = totalTime <= 0 ? 1000 :
|
||||||
|
Math.max(16, totalTime / width);
|
||||||
|
mRunnable = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
int currentTime = mPlaybackControlsRow.getCurrentTime() + updateFreq;
|
||||||
|
mPlaybackControlsRow.setCurrentTime(currentTime);
|
||||||
|
if (totalTime <= 0 || totalTime > currentTime) {
|
||||||
|
mHandler.postDelayed(this, updateFreq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
mHandler.postDelayed(mRunnable, updateFreq);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopProgressAutomation() {
|
||||||
|
if (mHandler != null && mRunnable != null) {
|
||||||
|
mHandler.removeCallbacks(mRunnable);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user