1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.tv.menu;
18 
19 import android.content.Context;
20 import android.graphics.drawable.Drawable;
21 import android.text.TextUtils;
22 import com.android.tv.R;
23 import com.android.tv.TvOptionsManager;
24 import com.android.tv.TvOptionsManager.OptionType;
25 
26 /** A class to define possible actions from main menu. */
27 public class MenuAction {
28     // Actions in the TV option row.
29     public static final MenuAction SELECT_CLOSED_CAPTION_ACTION =
30             new MenuAction(
31                     R.string.options_item_closed_caption,
32                     TvOptionsManager.OPTION_CLOSED_CAPTIONS,
33                     R.drawable.ic_tvoption_cc);
34     public static final MenuAction SELECT_DISPLAY_MODE_ACTION =
35             new MenuAction(
36                     R.string.options_item_display_mode,
37                     TvOptionsManager.OPTION_DISPLAY_MODE,
38                     R.drawable.ic_tvoption_aspect);
39     public static final MenuAction SYSTEMWIDE_PIP_ACTION =
40             new MenuAction(
41                     R.string.options_item_pip,
42                     TvOptionsManager.OPTION_SYSTEMWIDE_PIP,
43                     R.drawable.ic_tvoption_pip);
44     public static final MenuAction SELECT_AUDIO_LANGUAGE_ACTION =
45             new MenuAction(
46                     R.string.options_item_multi_audio,
47                     TvOptionsManager.OPTION_MULTI_AUDIO,
48                     R.drawable.ic_tvoption_multi_track);
49     public static final MenuAction MORE_CHANNELS_ACTION =
50             new MenuAction(
51                     R.string.options_item_more_channels,
52                     TvOptionsManager.OPTION_MORE_CHANNELS,
53                     R.drawable.ic_app_store);
54     public static final MenuAction DEV_ACTION =
55             new MenuAction(
56                     R.string.options_item_developer,
57                     TvOptionsManager.OPTION_DEVELOPER,
58                     R.drawable.quantum_ic_developer_mode_tv_white_48);
59     public static final MenuAction SETTINGS_ACTION =
60             new MenuAction(
61                     R.string.options_item_settings,
62                     TvOptionsManager.OPTION_SETTINGS,
63                     R.drawable.ic_settings);
64 
65     private final String mActionName;
66     private final int mActionNameResId;
67     @OptionType private final int mType;
68     private String mActionDescription;
69     private Drawable mDrawable;
70     private int mDrawableResId;
71     private boolean mEnabled = true;
72 
73     /** Sets the action description. Returns {@code trye} if the description is changed. */
setActionDescription(MenuAction action, String actionDescription)74     public static boolean setActionDescription(MenuAction action, String actionDescription) {
75         String oldDescription = action.mActionDescription;
76         action.mActionDescription = actionDescription;
77         return !TextUtils.equals(action.mActionDescription, oldDescription);
78     }
79 
80     /** Enables or disables the action. Returns {@code true} if the value is changed. */
setEnabled(MenuAction action, boolean enabled)81     public static boolean setEnabled(MenuAction action, boolean enabled) {
82         boolean changed = action.mEnabled != enabled;
83         action.mEnabled = enabled;
84         return changed;
85     }
86 
MenuAction(int actionNameResId, int type, int drawableResId)87     public MenuAction(int actionNameResId, int type, int drawableResId) {
88         mActionName = null;
89         mActionNameResId = actionNameResId;
90         mType = type;
91         mDrawable = null;
92         mDrawableResId = drawableResId;
93     }
94 
MenuAction(String actionName, int type, Drawable drawable)95     public MenuAction(String actionName, int type, Drawable drawable) {
96         mActionName = actionName;
97         mActionNameResId = 0;
98         mType = type;
99         mDrawable = drawable;
100         mDrawableResId = 0;
101     }
102 
getActionName(Context context)103     public String getActionName(Context context) {
104         if (!TextUtils.isEmpty(mActionName)) {
105             return mActionName;
106         }
107         return context.getString(mActionNameResId);
108     }
109 
getActionDescription()110     public String getActionDescription() {
111         return mActionDescription;
112     }
113 
114     @OptionType
getType()115     public int getType() {
116         return mType;
117     }
118 
119     /** Returns Drawable. */
getDrawable(Context context)120     public Drawable getDrawable(Context context) {
121         if (mDrawable == null) {
122             mDrawable = context.getDrawable(mDrawableResId);
123         }
124         return mDrawable;
125     }
126 
isEnabled()127     public boolean isEnabled() {
128         return mEnabled;
129     }
130 
getActionNameResId()131     public int getActionNameResId() {
132         return mActionNameResId;
133     }
134 }
135