blob: 7bb696accb3a7d9f10b6b1b748066f39ced229fe [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package android.support.v17.leanback.widget;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.KeyEvent;
import java.util.ArrayList;
import static android.support.v17.leanback.widget.ObjectAdapter.NO_ID;
/**
* An action contains one or two lines of text, an optional image and an optional id. It may also
* be invoked by one or more keycodes.
*/
public class Action {
private long mId = NO_ID;
private Drawable mIcon;
private CharSequence mLabel1;
private CharSequence mLabel2;
private ArrayList mKeyCodes = new ArrayList();
/**
* Constructor for an Action.
*
* @param id The id of the Action.
*/
public Action(long id) {
this(id, "");
}
/**
* Constructor for an Action.
*
* @param id The id of the Action.
* @param label The label to display for the Action.
*/
public Action(long id, CharSequence label) {
this(id, label, null);
}
/**
* Constructor for an Action.
*
* @param id The id of the Action.
* @param label1 The label to display on the first line of the Action.
* @param label2 The label to display on the second line of the Action.
*/
public Action(long id, CharSequence label1, CharSequence label2) {
this(id, label1, label2, null);
}
/**
* Constructor for an Action.
*
* @param id The id of the Action.
* @param label1 The label to display on the first line of the Action.
* @param label2 The label to display on the second line of the Action.
* @param icon The icon to display for the Action.
*/
public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {
setId(id);
setLabel1(label1);
setLabel2(label2);
setIcon(icon);
}
/**
* Sets the id for this Action.
*/
public final void setId(long id) {
mId = id;
}
/**
* Returns the id for this Action.
*/
public final long getId() {
return mId;
}
/**
* Sets the first line label for this Action.
*/
public final void setLabel1(CharSequence label) {
mLabel1 = label;
}
/**
* Returns the first line label for this Action.
*/
public final CharSequence getLabel1() {
return mLabel1;
}
/**
* Sets the second line label for this Action.
*/
public final void setLabel2(CharSequence label) {
mLabel2 = label;
}
/**
* Returns the second line label for this Action.
*/
public final CharSequence getLabel2() {
return mLabel2;
}
/**
* Sets the icon drawable for this Action.
*/
public final void setIcon(Drawable icon) {
mIcon = icon;
}
/**
* Returns the icon drawable for this Action.
*/
public final Drawable getIcon() {
return mIcon;
}
/**
* Adds a keycode used to invoke this Action.
*/
public final void addKeyCode(int keyCode) {
mKeyCodes.add(keyCode);
}
/**
* Removes a keycode used to invoke this Action.
*/
public final void removeKeyCode(int keyCode) {
mKeyCodes.remove(keyCode);
}
/**
* Returns true if the Action should respond to the given keycode.
*/
public final boolean respondsToKeyCode(int keyCode) {
return mKeyCodes.contains(keyCode);
}
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
if (!TextUtils.isEmpty(mLabel1)) {
sb.append(mLabel1);
}
if (!TextUtils.isEmpty(mLabel2)) {
if (!TextUtils.isEmpty(mLabel1)) {
sb.append(" ");
}
sb.append(mLabel2);
}
if (mIcon != null && sb.length() == 0) {
sb.append("(action icon)");
}
return sb.toString();
}
}