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