14fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri/*
24fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * Copyright (C) 2016 The Android Open Source Project
34fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri *
44fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
54fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * in compliance with the License. You may obtain a copy of the License at
64fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri *
74fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * http://www.apache.org/licenses/LICENSE-2.0
84fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri *
94fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * Unless required by applicable law or agreed to in writing, software distributed under the License
104fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
114fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * or implied. See the License for the specific language governing permissions and limitations under
124fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * the License.
134fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri */
144fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiripackage android.support.v17.leanback.widget;
154fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
164fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiriimport android.graphics.drawable.Drawable;
174fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
184fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri/**
194fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * An interface implemented by the user if they wish to provide actions for a media item row to
204fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * be displayed by an {@link AbstractMediaItemPresenter}.
214fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri *
224fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * A media row consists of media item details together with a number of custom actions,
234fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * following the media item details. Classes implementing {@link MultiActionsProvider} can define
244fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * their own media data model within their derived classes.
254fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * <p>
264fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri *     The actions are provided by overriding {@link MultiActionsProvider#getActions()}
274fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri *     Provided actions should be instances of {@link MultiAction}.
284fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri * </p>
294fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri */
304fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiripublic interface MultiActionsProvider {
314fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
324fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri    /**
334fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     * MultiAction represents an action that can have multiple states. {@link #getIndex()} returns
344fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     * the current index within the drawables. Both list of drawables and index can be updated
354fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     * dynamically in the program, and the UI could be updated by notifying the listeners
364fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     * provided in {@link AbstractMediaItemPresenter.ViewHolder}.
374fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     */
384fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri    public static class MultiAction {
394fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        private long mId;
404fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        private int mIndex;
414fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        private Drawable[] mDrawables;
424fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
434fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public MultiAction(long id) {
444fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            mId = id;
454fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            mIndex = 0;
464fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
474fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
484fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        /**
494fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * Sets the drawables used for displaying different states within this {@link MultiAction}.
504fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * The size of drawables determines the set of states this action represents.
514fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * @param drawables Array of drawables for different MultiAction states.
524fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         */
534fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public void setDrawables(Drawable[] drawables) {
544fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            mDrawables = drawables;
554fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            if (mIndex > drawables.length - 1) {
564fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri                mIndex = drawables.length - 1;
574fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            }
584fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
594fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
604fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        /**
614fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * Returns the drawables used for displaying different states within this
624fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * {@link MultiAction}.
634fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * @return The drawables used for displaying different states within this
644fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         *         {@link MultiAction}.
654fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         */
664fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public Drawable[] getDrawables() {
674fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            return mDrawables;
684fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
694fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
704fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        /**
714fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * Increments the index which this MultiAction currently represents. The index is wrapped
724fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * around to zero when the end is reached.
734fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         */
744fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public void incrementIndex() {
754fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            setIndex(mIndex < (mDrawables.length - 1) ? (mIndex + 1) : 0);
764fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
774fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
784fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        /**
794fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * Sets the index which this MultiAction currently represents.
804fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * @param index The current action index.
814fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         */
824fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public void setIndex(int index) {
834fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            mIndex = index;
844fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
854fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
864fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        /**
874fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * Returns the currently selected index in this MultiAction.
884fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * @return The currently selected index in this MultiAction.
894fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         */
904fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public int getIndex() {
914fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            return mIndex;
924fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
934fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
944fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        /**
954fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * @return The icon drawable for the current state of this MultiAction.
964fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         */
974fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public Drawable getCurrentDrawable() {
984fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            return mDrawables[mIndex];
994fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
1004fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
1014fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        /**
1024fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         * @return The id for this MultiAction.
1034fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri         */
1044fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        public long getId() {
1054fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri            return mId;
1064fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri        }
1074fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri    }
1084fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri
1094fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri    /**
1104fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     * Should override this method in order to provide a custom set of actions for a media item row
1114fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     * @return Array of MultiAction items to be displayed for this media item row.
1124fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri     */
1134fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri    public MultiAction[] getActions();
1144fe538f2d65eefc57f618887ccb1226ec1a9741dKeyvan Amiri}
115