1a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn/* 2a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project 3a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * 4a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at 6a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * 7a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 8a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * 9a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License 10a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under 12a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn * the License. 13a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 14a83005b70853ea52c5d98910762344de16b850a8Tim Kilbournpackage android.support.v17.leanback.widget; 15a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 16e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.graphics.drawable.Drawable; 1770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbournimport android.text.TextUtils; 1860bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stoutimport android.view.KeyEvent; 1960bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 2060bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stoutimport java.util.ArrayList; 21e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 22a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn/** 23a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * An action contains one or two lines of text, an optional image and an optional id. It may also 24a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * be invoked by one or more keycodes. 25a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 26a83005b70853ea52c5d98910762344de16b850a8Tim Kilbournpublic class Action { 27a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 289050c0fc8fbcd8ffe794915375efd5d2b96a0b2dDake Gu /** Indicates that an id has not been set. */ 299050c0fc8fbcd8ffe794915375efd5d2b96a0b2dDake Gu public static final long NO_ID = -1; 309050c0fc8fbcd8ffe794915375efd5d2b96a0b2dDake Gu 31a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn private long mId = NO_ID; 32e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn private Drawable mIcon; 33e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn private CharSequence mLabel1; 34e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn private CharSequence mLabel2; 3560bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout private ArrayList mKeyCodes = new ArrayList(); 36a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 37beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 38beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 39beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 40beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 41beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 42a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public Action(long id) { 43a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn this(id, ""); 44a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 45a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 46beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 47beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 48beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 49beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 50beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label The label to display for the Action. 51beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 52a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public Action(long id, CharSequence label) { 53e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn this(id, label, null); 54e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 55e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 56beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 57beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 58beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 59beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 60beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label1 The label to display on the first line of the Action. 61beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label2 The label to display on the second line of the Action. 62beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 63e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public Action(long id, CharSequence label1, CharSequence label2) { 64e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn this(id, label1, label2, null); 65e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 66e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 67beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 68beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 69beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 70beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 71beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label1 The label to display on the first line of the Action. 72beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label2 The label to display on the second line of the Action. 73beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param icon The icon to display for the Action. 74beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 75e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) { 76a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn setId(id); 77e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn setLabel1(label1); 78e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn setLabel2(label2); 79e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn setIcon(icon); 80a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 81a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 82a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 83a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the id for this Action. 84a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 85a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public final void setId(long id) { 86a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn mId = id; 87a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 88a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 89a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 90beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the id for this Action. 91a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 92a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public final long getId() { 93a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn return mId; 94a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 95a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 96a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 97a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the first line label for this Action. 98e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 99e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final void setLabel1(CharSequence label) { 100e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn mLabel1 = label; 101e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 102e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 103e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 104beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the first line label for this Action. 105e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 106e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final CharSequence getLabel1() { 107e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mLabel1; 108e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 109e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 110e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 111a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the second line label for this Action. 112e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 113e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final void setLabel2(CharSequence label) { 114e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn mLabel2 = label; 115e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 116e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 117e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 118beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the second line label for this Action. 119e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 120e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final CharSequence getLabel2() { 121e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mLabel2; 122e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 123e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 124e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 125a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the icon drawable for this Action. 126a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 127e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final void setIcon(Drawable icon) { 128e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn mIcon = icon; 129a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 130a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 131a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 132beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the icon drawable for this Action. 133a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 134e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final Drawable getIcon() { 135e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mIcon; 136a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 13770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn 13860bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout /** 139a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Adds a keycode used to invoke this Action. 14060bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout */ 14160bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout public final void addKeyCode(int keyCode) { 14260bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout mKeyCodes.add(keyCode); 14360bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout } 14460bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 14560bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout /** 14660bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout * Removes a keycode used to invoke this Action. 14760bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout */ 14860bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout public final void removeKeyCode(int keyCode) { 14960bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout mKeyCodes.remove(keyCode); 15060bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout } 15160bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 15260bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout /** 15360bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout * Returns true if the Action should respond to the given keycode. 15460bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout */ 15560bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout public final boolean respondsToKeyCode(int keyCode) { 15660bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout return mKeyCodes.contains(keyCode); 15760bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout } 15860bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 15970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn @Override 16070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn public String toString(){ 16170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn StringBuilder sb = new StringBuilder(); 16270c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (!TextUtils.isEmpty(mLabel1)) { 16370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append(mLabel1); 16470c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 16570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (!TextUtils.isEmpty(mLabel2)) { 16670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (!TextUtils.isEmpty(mLabel1)) { 16770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append(" "); 16870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 16970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append(mLabel2); 17070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 17170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (mIcon != null && sb.length() == 0) { 17270c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append("(action icon)"); 17370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 17470c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn return sb.toString(); 17570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 176a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn} 177