Playback actions improvements

Change-Id: I7c2f477d2a04cba7b0d2910909660e906f0f8211
This commit is contained in:
Craig Stout
2014-07-29 13:24:21 -07:00
parent a38b253ebb
commit 6c2688459d

View File

@@ -21,6 +21,11 @@ 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;
import android.support.v17.leanback.widget.PlaybackControlsRow; import android.support.v17.leanback.widget.PlaybackControlsRow;
import android.support.v17.leanback.widget.PlaybackControlsRow.PlayPauseAction;
import android.support.v17.leanback.widget.PlaybackControlsRow.RepeatAction;
import android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsUpAction;
import android.support.v17.leanback.widget.PlaybackControlsRow.ThumbsDownAction;
import android.support.v17.leanback.widget.PlaybackControlsRow.ShuffleAction;
import android.support.v17.leanback.widget.PlaybackControlsRowPresenter; import android.support.v17.leanback.widget.PlaybackControlsRowPresenter;
import android.support.v17.leanback.widget.HeaderItem; import android.support.v17.leanback.widget.HeaderItem;
import android.support.v17.leanback.widget.ListRow; import android.support.v17.leanback.widget.ListRow;
@@ -34,16 +39,20 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
private static final String TAG = "leanback.PlaybackControlsFragment"; private static final String TAG = "leanback.PlaybackControlsFragment";
private static final boolean SHOW_DETAIL = true; private static final boolean SHOW_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 PRIMARY_CONTROLS = 7;
private static final boolean SHOW_IMAGE = PRIMARY_CONTROLS <= 5;
private static final int TOTAL_TIME_MS = 15 * 1000;
private static final int NUM_ROWS = 3; private static final int NUM_ROWS = 3;
private ArrayObjectAdapter mRowsAdapter; private ArrayObjectAdapter mRowsAdapter;
private ArrayObjectAdapter mPrimaryActionsAdapter; private ArrayObjectAdapter mPrimaryActionsAdapter;
private ArrayObjectAdapter mSecondaryActionsAdapter; private ArrayObjectAdapter mSecondaryActionsAdapter;
private PlaybackControlsRow.PlayPauseAction mPlayPauseAction; private PlayPauseAction mPlayPauseAction;
private PlaybackControlsRow.RepeatAction mRepeatAction; private RepeatAction mRepeatAction;
private ThumbsUpAction mThumbsUpAction;
private ThumbsDownAction mThumbsDownAction;
private ShuffleAction mShuffleAction;
private PlaybackControlsRow mPlaybackControlsRow; private PlaybackControlsRow mPlaybackControlsRow;
private Handler mHandler; private Handler mHandler;
private Runnable mRunnable; private Runnable mRunnable;
@@ -58,8 +67,17 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
setupRows(); setupRows();
} }
private static void notifyChanged(ArrayObjectAdapter adapter, Action action) { private void notifyChanged(Action action) {
ArrayObjectAdapter adapter = mPrimaryActionsAdapter;
if (adapter.indexOf(action) >= 0) {
adapter.notifyArrayItemRangeChanged(adapter.indexOf(action), 1); adapter.notifyArrayItemRangeChanged(adapter.indexOf(action), 1);
return;
}
adapter = mSecondaryActionsAdapter;
if (adapter.indexOf(action) >= 0) {
adapter.notifyArrayItemRangeChanged(adapter.indexOf(action), 1);
return;
}
} }
private void setupRows() { private void setupRows() {
@@ -76,7 +94,7 @@ 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()) { if (mPlayPauseAction.getIndex() == PlayPauseAction.PLAY) {
int totalTime = mPlaybackControlsRow.getTotalTime(); int totalTime = mPlaybackControlsRow.getTotalTime();
if (totalTime > 0 && mPlaybackControlsRow.getCurrentTime() >= totalTime) { if (totalTime > 0 && mPlaybackControlsRow.getCurrentTime() >= totalTime) {
mPlaybackControlsRow.setCurrentTime(0); mPlaybackControlsRow.setCurrentTime(0);
@@ -85,11 +103,10 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
} else { } else {
stopProgressAutomation(); stopProgressAutomation();
} }
mPlayPauseAction.toggle(); }
notifyChanged(mPrimaryActionsAdapter, mPlayPauseAction); if (action instanceof PlaybackControlsRow.MultiAction) {
} else if (action.getId() == mRepeatAction.getId()) { ((PlaybackControlsRow.MultiAction) action).nextIndex();
mRepeatAction.next(); notifyChanged(action);
notifyChanged(mSecondaryActionsAdapter, mRepeatAction);
} }
} }
}); });
@@ -128,19 +145,35 @@ public class PlaybackOverlayFragment extends android.support.v17.leanback.app.Pl
mRowsAdapter.add(mPlaybackControlsRow); mRowsAdapter.add(mPlaybackControlsRow);
mPlayPauseAction = new PlaybackControlsRow.PlayPauseAction(context); mPlayPauseAction = new PlayPauseAction(context);
mRepeatAction = new PlaybackControlsRow.RepeatAction(context); mRepeatAction = new RepeatAction(context);
mThumbsUpAction = new ThumbsUpAction(context);
mThumbsDownAction = new ThumbsDownAction(context);
mShuffleAction = new ShuffleAction(context);
if (PRIMARY_CONTROLS > 5) {
mPrimaryActionsAdapter.add(mThumbsUpAction);
} else {
mSecondaryActionsAdapter.add(mThumbsUpAction);
}
if (PRIMARY_CONTROLS > 3) {
mPrimaryActionsAdapter.add(new PlaybackControlsRow.SkipPreviousAction(context)); mPrimaryActionsAdapter.add(new PlaybackControlsRow.SkipPreviousAction(context));
}
mPrimaryActionsAdapter.add(new PlaybackControlsRow.RewindAction(context)); mPrimaryActionsAdapter.add(new PlaybackControlsRow.RewindAction(context));
mPrimaryActionsAdapter.add(mPlayPauseAction); mPrimaryActionsAdapter.add(mPlayPauseAction);
mPrimaryActionsAdapter.add(new PlaybackControlsRow.FastForwardAction(context)); mPrimaryActionsAdapter.add(new PlaybackControlsRow.FastForwardAction(context));
if (PRIMARY_CONTROLS > 3) {
mPrimaryActionsAdapter.add(new PlaybackControlsRow.SkipNextAction(context)); mPrimaryActionsAdapter.add(new PlaybackControlsRow.SkipNextAction(context));
}
mSecondaryActionsAdapter.add(new PlaybackControlsRow.ThumbsUpAction(context));
mSecondaryActionsAdapter.add(mRepeatAction); mSecondaryActionsAdapter.add(mRepeatAction);
mSecondaryActionsAdapter.add(new PlaybackControlsRow.ShuffleAction(context)); mSecondaryActionsAdapter.add(mShuffleAction);
mSecondaryActionsAdapter.add(new PlaybackControlsRow.ThumbsDownAction(context)); if (PRIMARY_CONTROLS > 5) {
mPrimaryActionsAdapter.add(mThumbsDownAction);
} else {
mSecondaryActionsAdapter.add(mThumbsDownAction);
}
mSecondaryActionsAdapter.add(new PlaybackControlsRow.HighQualityAction(context));
mSecondaryActionsAdapter.add(new PlaybackControlsRow.ClosedCaptioningAction(context));
for (int i = 0; i < NUM_ROWS; ++i) { for (int i = 0; i < NUM_ROWS; ++i) {
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter()); ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter());