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