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