Как реализовать множественный выбор всплывающих кнопок с Exo Player для android ТВ откат - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу внедрить всплывающую кнопку с множественным выбором в экзо-плеере android ТВ для многоканального или многоязычного аудио, как показано на изображении ниже

enter image description here

, но кнопка по умолчанию android у телевизора, кажется, нет этой опции, которую они видят, как показано ниже: изображение enter image description here

и код ниже определяют, как они отображаются в плеере

public class VideoPlayerGlue extends PlaybackTransportControlGlue<LeanbackPlayerAdapter> {

    private static final long TEN_SECONDS = TimeUnit.SECONDS.toMillis(10);

    /** Listens for when skip to next and previous actions have been dispatched. */
    public interface OnActionClickedListener {

        /** Skip to the previous item in the queue. */
        void onPrevious();

        /** Skip to the next item in the queue. */
        void onNext();

        void onCaption();
    }



    private OnActionClickedListener mActionListener;

    private PlaybackControlsRow.RepeatAction mRepeatAction;
    private PlaybackControlsRow.ThumbsUpAction mThumbsUpAction;
    private PlaybackControlsRow.ThumbsDownAction mThumbsDownAction;
    private PlaybackControlsRow.SkipPreviousAction mSkipPreviousAction;
    private PlaybackControlsRow.SkipNextAction mSkipNextAction;
    private PlaybackControlsRow.FastForwardAction mFastForwardAction;
    private PlaybackControlsRow.RewindAction mRewindAction;
    private PlaybackControlsRow.ClosedCaptioningAction subTitle;

    private PlaybackControlsRow.MoreActions moreActions;
    private PlaybackControlsRow.MultiAction multiAction;

    public VideoPlayerGlue(
            Context context,
            LeanbackPlayerAdapter playerAdapter,
            OnActionClickedListener actionListener) {

        super(context, playerAdapter);

        mActionListener = actionListener;

        mSkipPreviousAction = new PlaybackControlsRow.SkipPreviousAction(context);

        mSkipNextAction = new PlaybackControlsRow.SkipNextAction(context);
        mFastForwardAction = new PlaybackControlsRow.FastForwardAction(context);
        mRewindAction = new PlaybackControlsRow.RewindAction(context);

        mThumbsUpAction = new PlaybackControlsRow.ThumbsUpAction(context);
        mThumbsUpAction.setIndex(PlaybackControlsRow.ThumbsUpAction.INDEX_OUTLINE);
        mThumbsDownAction = new PlaybackControlsRow.ThumbsDownAction(context);
        mThumbsDownAction.setIndex(PlaybackControlsRow.ThumbsDownAction.INDEX_OUTLINE);
        mRepeatAction = new PlaybackControlsRow.RepeatAction(context);

        subTitle = new PlaybackControlsRow.ClosedCaptioningAction(context);


        moreActions = new PlaybackControlsRow.MoreActions(context);

        moreActions.setIcon(ContextCompat.getDrawable(context,R.drawable.ic_guidedstep_option_c));


    }

    @Override
    protected void onCreatePrimaryActions(ArrayObjectAdapter adapter) {
        // Order matters, super.onCreatePrimaryActions() will create the play / pause action.
        // Will display as follows:
        // play/pause, previous, rewind, fast forward, next
        //   > /||      |<        <<        >>         >|
        super.onCreatePrimaryActions(adapter);
        adapter.add(mSkipPreviousAction);
        adapter.add(mRewindAction);
        adapter.add(mFastForwardAction);
        adapter.add(mSkipNextAction);
    }

    @Override
    protected void onCreateSecondaryActions(ArrayObjectAdapter adapter) {
        super.onCreateSecondaryActions(adapter);
        adapter.add(mThumbsDownAction);
        adapter.add(mThumbsUpAction);
        adapter.add(mRepeatAction);
        adapter.add(subTitle);
        adapter.add(moreActions);
        adapter.add(multiAction);
    }

    @Override
    public void onActionClicked(Action action) {
//        if (shouldDispatchAction(action)) {
            dispatchAction(action);
//            return;
//        }
        // Super class handles play/pause and delegates to abstract methods next()/previous().
        super.onActionClicked(action);
    }

    // Should dispatch actions that the super class does not supply callbacks for.
    private boolean shouldDispatchAction(Action action) {
        return action == mRewindAction
                || action == mFastForwardAction
                || action == mThumbsDownAction
                || action == mThumbsUpAction
                || action == mRepeatAction
                || action == subTitle;
    }

    private void dispatchAction(Action action) {
        // Primary actions are handled manually.
        if (action == mRewindAction) {
            rewind();
        } else if (action == mFastForwardAction) {
            fastForward();
        }
//        else if (action instanceof PlaybackControlsRow.MultiAction) {
//            PlaybackControlsRow.MultiAction multiAction = (PlaybackControlsRow.MultiAction) action;
//            multiAction.nextIndex();
//            // Notify adapter of action changes to handle secondary actions, such as, thumbs up/down
//            // and repeat.
//            notifyActionChanged(
//                    multiAction,
//                    (ArrayObjectAdapter) getControlsRow().getSecondaryActionsAdapter());
//        }

        else if (action == subTitle) {
          //  fastForward();
//            subTitle.get(3);
            mActionListener.onCaption();

        }

        else if (action == moreActions) {
            //  fastForward();
//            subTitle.get(3);


        }


    }

Я исследовал android телевизионные ссылки и ссылки на exoplayer и следил за многими внутренними классами или учебными страницами в inte rnet, но не могу понять, как это реализовать

...