1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/*
2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project
3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License.
6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at
7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko *
10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software
11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and
14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License.
15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.menu;
18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Context;
20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.graphics.drawable.Drawable;
21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.text.TextUtils;
22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.MainActivity;
24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.R;
25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport com.android.tv.TvOptionsManager;
26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/**
28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * A class to define possible actions from main menu.
29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */
30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic class MenuAction {
31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    // Actions in the TV option row.
32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction SELECT_CLOSED_CAPTION_ACTION =
33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.options_item_closed_caption,
34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    TvOptionsManager.OPTION_CLOSED_CAPTIONS,
35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_tvoption_cc);
36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction SELECT_DISPLAY_MODE_ACTION =
37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.options_item_display_mode, TvOptionsManager.OPTION_DISPLAY_MODE,
38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_tvoption_aspect);
392e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko    public static final MenuAction PIP_IN_APP_ACTION =
402e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko            new MenuAction(R.string.options_item_pip, TvOptionsManager.OPTION_IN_APP_PIP,
412e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko                    R.drawable.ic_tvoption_pip);
422e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko    public static final MenuAction SYSTEMWIDE_PIP_ACTION =
432e1279b8bbe0603fb4399b25b73121bed5953c46Nick Chalko            new MenuAction(R.string.options_item_pip, TvOptionsManager.OPTION_SYSTEMWIDE_PIP,
4465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    R.drawable.ic_pip_option_layout2);
45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction SELECT_AUDIO_LANGUAGE_ACTION =
46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.options_item_multi_audio, TvOptionsManager.OPTION_MULTI_AUDIO,
47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_tvoption_multi_track);
48ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static final MenuAction MORE_CHANNELS_ACTION =
49ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            new MenuAction(R.string.options_item_more_channels,
50ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko                    TvOptionsManager.OPTION_MORE_CHANNELS, R.drawable.ic_store);
5165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public static final MenuAction DEV_ACTION =
5265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            new MenuAction(R.string.options_item_developer,
5365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    TvOptionsManager.OPTION_DEVELOPER, R.drawable.ic_developer_mode_tv_white_48dp);
54ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    // TODO: Change the icon.
55ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static final MenuAction SETTINGS_ACTION =
56ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            new MenuAction(R.string.options_item_settings, TvOptionsManager.OPTION_SETTINGS,
57ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko                    R.drawable.ic_settings);
58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    // Actions in the PIP option row.
59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction PIP_SELECT_INPUT_ACTION =
60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.pip_options_item_source, TvOptionsManager.OPTION_PIP_INPUT,
61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_pip_option_input);
62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction PIP_SWAP_ACTION =
63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.pip_options_item_swap, TvOptionsManager.OPTION_PIP_SWAP,
64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_pip_option_swap);
65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction PIP_SOUND_ACTION =
66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.pip_options_item_sound, TvOptionsManager.OPTION_PIP_SOUND,
67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_pip_option_swap_audio);
68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction PIP_LAYOUT_ACTION =
69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.pip_options_item_layout, TvOptionsManager.OPTION_PIP_LAYOUT,
70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_pip_option_layout1);
71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public static final MenuAction PIP_SIZE_ACTION =
72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            new MenuAction(R.string.pip_options_item_size, TvOptionsManager.OPTION_PIP_SIZE,
73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko                    R.drawable.ic_pip_option_size);
74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final String mActionName;
76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final int mActionNameResId;
77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private final int mType;
78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private Drawable mDrawable;
79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private int mDrawableResId;
80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    private boolean mEnabled = true;
81816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
82816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public MenuAction(int actionNameResId, int type, int drawableResId) {
83816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mActionName = null;
84816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mActionNameResId = actionNameResId;
85816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mType = type;
86816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDrawable = null;
87816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDrawableResId = drawableResId;
88816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
89816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
90816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public MenuAction(String actionName, int type, Drawable drawable) {
91816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mActionName = actionName;
92816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mActionNameResId = 0;
93816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mType = type;
94816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDrawable = drawable;
95816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDrawableResId = 0;
96816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
97816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
98816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public String getActionName(Context context) {
99816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        if (!TextUtils.isEmpty(mActionName)) {
100816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return mActionName;
101816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
102816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return context.getString(mActionNameResId);
103816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
104816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
105816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public String getActionDescription(Context context) {
106816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return ((MainActivity) context).getTvOptionsManager().getOptionString(mType);
107816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
108816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
109816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public int getType() {
110816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return mType;
111816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
112816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
113816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    /**
114816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * Returns Drawable.
115816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     */
116816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public Drawable getDrawable(Context context) {
117816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        if (mDrawable == null) {
118816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            mDrawable = context.getDrawable(mDrawableResId);
119816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
120816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return mDrawable;
121816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
122816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
123816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    /**
124816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * Sets drawable resource id.
125816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     *
126816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     * @return {@code true} if drawable is changed.
127816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko     */
128816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public boolean setDrawableResId(int resId) {
129816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        if (mDrawableResId == resId) {
130816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko            return false;
131816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        }
132816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDrawable = null;
133816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mDrawableResId = resId;
134816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return true;
135816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
136816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
137816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public boolean isEnabled() {
138816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return mEnabled;
139816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
140816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
141816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public void setEnabled(boolean enabled) {
142816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        mEnabled = enabled;
143816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
144816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko
145816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    public int getActionNameResId() {
146816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko        return mActionNameResId;
147816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko    }
148816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko}
149