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 */ 14ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.leanback.widget; 15a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 16e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbournimport android.graphics.drawable.Drawable; 1770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbournimport android.text.TextUtils; 1860bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 1960bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stoutimport java.util.ArrayList; 20e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 21a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn/** 22a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * An action contains one or two lines of text, an optional image and an optional id. It may also 23a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * be invoked by one or more keycodes. 24a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 25a83005b70853ea52c5d98910762344de16b850a8Tim Kilbournpublic class Action { 26a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 279050c0fc8fbcd8ffe794915375efd5d2b96a0b2dDake Gu /** Indicates that an id has not been set. */ 289050c0fc8fbcd8ffe794915375efd5d2b96a0b2dDake Gu public static final long NO_ID = -1; 299050c0fc8fbcd8ffe794915375efd5d2b96a0b2dDake Gu 30a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn private long mId = NO_ID; 31e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn private Drawable mIcon; 32e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn private CharSequence mLabel1; 33e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn private CharSequence mLabel2; 34abc73958d264e1eed7fd401a18be1d9ede8304ebAurimas Liutikas private ArrayList<Integer> mKeyCodes = new ArrayList<>(); 35a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 36beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 37beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 38beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 39beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 40beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 41a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public Action(long id) { 42a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn this(id, ""); 43a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 44a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 45beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 46beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 47beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 48beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 49beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label The label to display for the Action. 50beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 51a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public Action(long id, CharSequence label) { 52e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn this(id, label, null); 53e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 54e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 55beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 56beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 57beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 58beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 59beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label1 The label to display on the first line of the Action. 60beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label2 The label to display on the second line of the Action. 61beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 62e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public Action(long id, CharSequence label1, CharSequence label2) { 63e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn this(id, label1, label2, null); 64e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 65e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 66beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn /** 67beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Constructor for an Action. 68beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * 69beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param id The id of the Action. 70beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label1 The label to display on the first line of the Action. 71beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param label2 The label to display on the second line of the Action. 72beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * @param icon The icon to display for the Action. 73beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn */ 74e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) { 75a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn setId(id); 76e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn setLabel1(label1); 77e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn setLabel2(label2); 78e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn setIcon(icon); 79a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 80a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 81a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 82a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the id for this Action. 83a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 84a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public final void setId(long id) { 85a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn mId = id; 86a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 87a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 88a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 89beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the id for this Action. 90a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 91a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn public final long getId() { 92a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn return mId; 93a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 94a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 95a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 96a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the first line label for this Action. 97e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 98e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final void setLabel1(CharSequence label) { 99e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn mLabel1 = label; 100e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 101e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 102e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 103beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the first line label for this Action. 104e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 105e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final CharSequence getLabel1() { 106e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mLabel1; 107e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 108e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 109e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 110a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the second line label for this Action. 111e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 112e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final void setLabel2(CharSequence label) { 113e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn mLabel2 = label; 114e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 115e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 116e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 117beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the second line label for this Action. 118e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn */ 119e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final CharSequence getLabel2() { 120e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mLabel2; 121e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn } 122e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn 123e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn /** 124a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Sets the icon drawable for this Action. 125a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 126e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final void setIcon(Drawable icon) { 127e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn mIcon = icon; 128a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 129a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn 130a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn /** 131beeaa973d1b5bd79ee8ae798141231d9a315eba7Tim Kilbourn * Returns the icon drawable for this Action. 132a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn */ 133e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn public final Drawable getIcon() { 134e652714f2fcc876de6f168b28dd03bfc22e1cb96Tim Kilbourn return mIcon; 135a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn } 13670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn 13760bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout /** 138a00bada00bff4a58436a39472ab14ccb7a8f619dCraig Stout * Adds a keycode used to invoke this Action. 13960bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout */ 14060bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout public final void addKeyCode(int keyCode) { 14160bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout mKeyCodes.add(keyCode); 14260bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout } 14360bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 14460bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout /** 14560bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout * Removes a keycode used to invoke this Action. 14660bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout */ 14760bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout public final void removeKeyCode(int keyCode) { 14860bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout mKeyCodes.remove(keyCode); 14960bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout } 15060bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 15160bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout /** 15260bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout * Returns true if the Action should respond to the given keycode. 15360bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout */ 15460bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout public final boolean respondsToKeyCode(int keyCode) { 15560bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout return mKeyCodes.contains(keyCode); 15660bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout } 15760bb6af2e336072921f5d3c3861e86b3cc6241b3Craig Stout 15870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn @Override 15970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn public String toString(){ 16070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn StringBuilder sb = new StringBuilder(); 16170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (!TextUtils.isEmpty(mLabel1)) { 16270c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append(mLabel1); 16370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 16470c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (!TextUtils.isEmpty(mLabel2)) { 16570c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (!TextUtils.isEmpty(mLabel1)) { 16670c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append(" "); 16770c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 16870c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append(mLabel2); 16970c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 17070c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn if (mIcon != null && sb.length() == 0) { 17170c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn sb.append("(action icon)"); 17270c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 17370c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn return sb.toString(); 17470c858a5ca5b7ed9862e2edfa43912faecf42f96Tim Kilbourn } 175a83005b70853ea52c5d98910762344de16b850a8Tim Kilbourn} 176