1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 package android.support.v17.leanback.widget; 15 16 import android.graphics.drawable.Drawable; 17 import android.text.TextUtils; 18 import android.view.KeyEvent; 19 20 import java.util.ArrayList; 21 22 /** 23 * An action contains one or two lines of text, an optional image and an optional id. It may also 24 * be invoked by one or more keycodes. 25 */ 26 public class Action { 27 28 /** Indicates that an id has not been set. */ 29 public static final long NO_ID = -1; 30 31 private long mId = NO_ID; 32 private Drawable mIcon; 33 private CharSequence mLabel1; 34 private CharSequence mLabel2; 35 private ArrayList mKeyCodes = new ArrayList(); 36 37 /** 38 * Constructor for an Action. 39 * 40 * @param id The id of the Action. 41 */ Action(long id)42 public Action(long id) { 43 this(id, ""); 44 } 45 46 /** 47 * Constructor for an Action. 48 * 49 * @param id The id of the Action. 50 * @param label The label to display for the Action. 51 */ Action(long id, CharSequence label)52 public Action(long id, CharSequence label) { 53 this(id, label, null); 54 } 55 56 /** 57 * Constructor for an Action. 58 * 59 * @param id The id of the Action. 60 * @param label1 The label to display on the first line of the Action. 61 * @param label2 The label to display on the second line of the Action. 62 */ Action(long id, CharSequence label1, CharSequence label2)63 public Action(long id, CharSequence label1, CharSequence label2) { 64 this(id, label1, label2, null); 65 } 66 67 /** 68 * Constructor for an Action. 69 * 70 * @param id The id of the Action. 71 * @param label1 The label to display on the first line of the Action. 72 * @param label2 The label to display on the second line of the Action. 73 * @param icon The icon to display for the Action. 74 */ Action(long id, CharSequence label1, CharSequence label2, Drawable icon)75 public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) { 76 setId(id); 77 setLabel1(label1); 78 setLabel2(label2); 79 setIcon(icon); 80 } 81 82 /** 83 * Sets the id for this Action. 84 */ setId(long id)85 public final void setId(long id) { 86 mId = id; 87 } 88 89 /** 90 * Returns the id for this Action. 91 */ getId()92 public final long getId() { 93 return mId; 94 } 95 96 /** 97 * Sets the first line label for this Action. 98 */ setLabel1(CharSequence label)99 public final void setLabel1(CharSequence label) { 100 mLabel1 = label; 101 } 102 103 /** 104 * Returns the first line label for this Action. 105 */ getLabel1()106 public final CharSequence getLabel1() { 107 return mLabel1; 108 } 109 110 /** 111 * Sets the second line label for this Action. 112 */ setLabel2(CharSequence label)113 public final void setLabel2(CharSequence label) { 114 mLabel2 = label; 115 } 116 117 /** 118 * Returns the second line label for this Action. 119 */ getLabel2()120 public final CharSequence getLabel2() { 121 return mLabel2; 122 } 123 124 /** 125 * Sets the icon drawable for this Action. 126 */ setIcon(Drawable icon)127 public final void setIcon(Drawable icon) { 128 mIcon = icon; 129 } 130 131 /** 132 * Returns the icon drawable for this Action. 133 */ getIcon()134 public final Drawable getIcon() { 135 return mIcon; 136 } 137 138 /** 139 * Adds a keycode used to invoke this Action. 140 */ addKeyCode(int keyCode)141 public final void addKeyCode(int keyCode) { 142 mKeyCodes.add(keyCode); 143 } 144 145 /** 146 * Removes a keycode used to invoke this Action. 147 */ removeKeyCode(int keyCode)148 public final void removeKeyCode(int keyCode) { 149 mKeyCodes.remove(keyCode); 150 } 151 152 /** 153 * Returns true if the Action should respond to the given keycode. 154 */ respondsToKeyCode(int keyCode)155 public final boolean respondsToKeyCode(int keyCode) { 156 return mKeyCodes.contains(keyCode); 157 } 158 159 @Override toString()160 public String toString(){ 161 StringBuilder sb = new StringBuilder(); 162 if (!TextUtils.isEmpty(mLabel1)) { 163 sb.append(mLabel1); 164 } 165 if (!TextUtils.isEmpty(mLabel2)) { 166 if (!TextUtils.isEmpty(mLabel1)) { 167 sb.append(" "); 168 } 169 sb.append(mLabel2); 170 } 171 if (mIcon != null && sb.length() == 0) { 172 sb.append("(action icon)"); 173 } 174 return sb.toString(); 175 } 176 } 177