• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // CHECKSTYLE:OFF Generated code
2 /* This file is auto-generated from BrandedSupportFragment.java.  DO NOT MODIFY. */
3 
4 /*
5  * Copyright (C) 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software distributed under the License
13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14  * or implied. See the License for the specific language governing permissions and limitations under
15  * the License.
16  */
17 package android.support.v17.leanback.app;
18 
19 import android.graphics.drawable.Drawable;
20 import android.os.Bundle;
21 import android.support.v17.leanback.R;
22 import android.support.v17.leanback.widget.SearchOrbView;
23 import android.support.v17.leanback.widget.TitleHelper;
24 import android.support.v17.leanback.widget.TitleViewAdapter;
25 import android.app.Fragment;
26 import android.util.TypedValue;
27 import android.view.LayoutInflater;
28 import android.view.View;
29 import android.view.ViewGroup;
30 
31 /**
32  * Fragment class for managing search and branding using a view that implements
33  * {@link TitleViewAdapter.Provider}.
34  */
35 public class BrandedFragment extends Fragment {
36 
37     // BUNDLE attribute for title is showing
38     private static final String TITLE_SHOW = "titleShow";
39 
40     private boolean mShowingTitle = true;
41     private CharSequence mTitle;
42     private Drawable mBadgeDrawable;
43     private View mTitleView;
44     private TitleViewAdapter mTitleViewAdapter;
45     private SearchOrbView.Colors mSearchAffordanceColors;
46     private boolean mSearchAffordanceColorSet;
47     private View.OnClickListener mExternalOnSearchClickedListener;
48     private TitleHelper mTitleHelper;
49 
50     /**
51      * Called by {@link #installTitleView(LayoutInflater, ViewGroup, Bundle)} to inflate
52      * title view.  Default implementation uses layout file lb_browse_title.
53      * Subclass may override and use its own layout, the layout must have a descendant with id
54      * browse_title_group that implements {@link TitleViewAdapter.Provider}. Subclass may return
55      * null if no title is needed.
56      *
57      * @param inflater           The LayoutInflater object that can be used to inflate
58      *                           any views in the fragment,
59      * @param parent             Parent of title view.
60      * @param savedInstanceState If non-null, this fragment is being re-constructed
61      *                           from a previous saved state as given here.
62      * @return Title view which must have a descendant with id browse_title_group that implements
63      *         {@link TitleViewAdapter.Provider}, or null for no title view.
64      */
onInflateTitleView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)65     public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,
66                                 Bundle savedInstanceState) {
67         TypedValue typedValue = new TypedValue();
68         boolean found = parent.getContext().getTheme().resolveAttribute(
69                 R.attr.browseTitleViewLayout, typedValue, true);
70         return inflater.inflate(found ? typedValue.resourceId : R.layout.lb_browse_title,
71                 parent, false);
72     }
73 
74     /**
75      * Inflate title view and add to parent.  This method should be called in
76      * {@link Fragment#onCreateView(LayoutInflater, ViewGroup, Bundle)}.
77      * @param inflater The LayoutInflater object that can be used to inflate
78      * any views in the fragment,
79      * @param parent Parent of title view.
80      * @param savedInstanceState If non-null, this fragment is being re-constructed
81      * from a previous saved state as given here.
82      */
installTitleView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)83     public void installTitleView(LayoutInflater inflater, ViewGroup parent,
84                             Bundle savedInstanceState) {
85         View titleLayoutRoot = onInflateTitleView(inflater, parent, savedInstanceState);
86         if (titleLayoutRoot != null) {
87             parent.addView(titleLayoutRoot);
88             setTitleView(titleLayoutRoot.findViewById(R.id.browse_title_group));
89         } else {
90             setTitleView(null);
91         }
92     }
93 
94     /**
95      * Sets the view that implemented {@link TitleViewAdapter}.
96      * @param titleView The view that implemented {@link TitleViewAdapter.Provider}.
97      */
setTitleView(View titleView)98     public void setTitleView(View titleView) {
99         mTitleView = titleView;
100         if (mTitleView == null) {
101             mTitleViewAdapter = null;
102             mTitleHelper = null;
103         } else {
104             mTitleViewAdapter = ((TitleViewAdapter.Provider) mTitleView).getTitleViewAdapter();
105             mTitleViewAdapter.setTitle(mTitle);
106             mTitleViewAdapter.setBadgeDrawable(mBadgeDrawable);
107             if (mSearchAffordanceColorSet) {
108                 mTitleViewAdapter.setSearchAffordanceColors(mSearchAffordanceColors);
109             }
110             if (mExternalOnSearchClickedListener != null) {
111                 setOnSearchClickedListener(mExternalOnSearchClickedListener);
112             }
113             if (getView() instanceof ViewGroup) {
114                 mTitleHelper = new TitleHelper((ViewGroup) getView(), mTitleView);
115             }
116         }
117     }
118 
119     /**
120      * Returns the view that implements {@link TitleViewAdapter.Provider}.
121      * @return The view that implements {@link TitleViewAdapter.Provider}.
122      */
getTitleView()123     public View getTitleView() {
124         return mTitleView;
125     }
126 
127     /**
128      * Returns the {@link TitleViewAdapter} implemented by title view.
129      * @return The {@link TitleViewAdapter} implemented by title view.
130      */
getTitleViewAdapter()131     public TitleViewAdapter getTitleViewAdapter() {
132         return mTitleViewAdapter;
133     }
134 
135     /**
136      * Returns the {@link TitleHelper}.
137      */
getTitleHelper()138     TitleHelper getTitleHelper() {
139         return mTitleHelper;
140     }
141 
142     @Override
onSaveInstanceState(Bundle outState)143     public void onSaveInstanceState(Bundle outState) {
144         super.onSaveInstanceState(outState);
145         outState.putBoolean(TITLE_SHOW, mShowingTitle);
146     }
147 
148     @Override
onViewCreated(View view, Bundle savedInstanceState)149     public void onViewCreated(View view, Bundle savedInstanceState) {
150         super.onViewCreated(view, savedInstanceState);
151         if (savedInstanceState != null) {
152             mShowingTitle = savedInstanceState.getBoolean(TITLE_SHOW);
153         }
154         if (mTitleView != null && view instanceof ViewGroup) {
155             mTitleHelper = new TitleHelper((ViewGroup) view, mTitleView);
156             mTitleHelper.showTitle(mShowingTitle);
157         }
158     }
159 
160     @Override
onDestroyView()161     public void onDestroyView() {
162         super.onDestroyView();
163         mTitleHelper = null;
164     }
165 
166     /**
167      * Shows or hides the title view.
168      * @param show True to show title view, false to hide title view.
169      */
showTitle(boolean show)170     public void showTitle(boolean show) {
171         // TODO: handle interruptions?
172         if (show == mShowingTitle) {
173             return;
174         }
175         mShowingTitle = show;
176         if (mTitleHelper != null) {
177             mTitleHelper.showTitle(show);
178         }
179     }
180 
181     /**
182      * Changes title view's components visibility and shows title.
183      * @param flags Flags representing the visibility of components inside title view.
184      * @see TitleViewAdapter#SEARCH_VIEW_VISIBLE
185      * @see TitleViewAdapter#BRANDING_VIEW_VISIBLE
186      * @see TitleViewAdapter#FULL_VIEW_VISIBLE
187      * @see TitleViewAdapter#updateComponentsVisibility(int)
188      */
showTitle(int flags)189     public void showTitle(int flags) {
190         if (mTitleViewAdapter != null) {
191             mTitleViewAdapter.updateComponentsVisibility(flags);
192         }
193         showTitle(true);
194     }
195 
196     /**
197      * Sets the drawable displayed in the fragment title.
198      *
199      * @param drawable The Drawable to display in the fragment title.
200      */
setBadgeDrawable(Drawable drawable)201     public void setBadgeDrawable(Drawable drawable) {
202         if (mBadgeDrawable != drawable) {
203             mBadgeDrawable = drawable;
204             if (mTitleViewAdapter != null) {
205                 mTitleViewAdapter.setBadgeDrawable(drawable);
206             }
207         }
208     }
209 
210     /**
211      * Returns the badge drawable used in the fragment title.
212      * @return The badge drawable used in the fragment title.
213      */
getBadgeDrawable()214     public Drawable getBadgeDrawable() {
215         return mBadgeDrawable;
216     }
217 
218     /**
219      * Sets title text for the fragment.
220      *
221      * @param title The title text of the fragment.
222      */
setTitle(CharSequence title)223     public void setTitle(CharSequence title) {
224         mTitle = title;
225         if (mTitleViewAdapter != null) {
226             mTitleViewAdapter.setTitle(title);
227         }
228     }
229 
230     /**
231      * Returns the title text for the fragment.
232      * @return Title text for the fragment.
233      */
getTitle()234     public CharSequence getTitle() {
235         return mTitle;
236     }
237 
238     /**
239      * Sets a click listener for the search affordance.
240      *
241      * <p>The presence of a listener will change the visibility of the search
242      * affordance in the fragment title. When set to non-null, the title will
243      * contain an element that a user may click to begin a search.
244      *
245      * <p>The listener's {@link View.OnClickListener#onClick onClick} method
246      * will be invoked when the user clicks on the search element.
247      *
248      * @param listener The listener to call when the search element is clicked.
249      */
setOnSearchClickedListener(View.OnClickListener listener)250     public void setOnSearchClickedListener(View.OnClickListener listener) {
251         mExternalOnSearchClickedListener = listener;
252         if (mTitleViewAdapter != null) {
253             mTitleViewAdapter.setOnSearchClickedListener(listener);
254         }
255     }
256 
257     /**
258      * Sets the {@link android.support.v17.leanback.widget.SearchOrbView.Colors} used to draw the
259      * search affordance.
260      *
261      * @param colors Colors used to draw search affordance.
262      */
setSearchAffordanceColors(SearchOrbView.Colors colors)263     public void setSearchAffordanceColors(SearchOrbView.Colors colors) {
264         mSearchAffordanceColors = colors;
265         mSearchAffordanceColorSet = true;
266         if (mTitleViewAdapter != null) {
267             mTitleViewAdapter.setSearchAffordanceColors(mSearchAffordanceColors);
268         }
269     }
270 
271     /**
272      * Returns the {@link android.support.v17.leanback.widget.SearchOrbView.Colors}
273      * used to draw the search affordance.
274      */
getSearchAffordanceColors()275     public SearchOrbView.Colors getSearchAffordanceColors() {
276         if (mSearchAffordanceColorSet) {
277             return mSearchAffordanceColors;
278         }
279         if (mTitleViewAdapter == null) {
280             throw new IllegalStateException("Fragment views not yet created");
281         }
282         return mTitleViewAdapter.getSearchAffordanceColors();
283     }
284 
285     /**
286      * Sets the color used to draw the search affordance.
287      * A default brighter color will be set by the framework.
288      *
289      * @param color The color to use for the search affordance.
290      */
setSearchAffordanceColor(int color)291     public void setSearchAffordanceColor(int color) {
292         setSearchAffordanceColors(new SearchOrbView.Colors(color));
293     }
294 
295     /**
296      * Returns the color used to draw the search affordance.
297      */
getSearchAffordanceColor()298     public int getSearchAffordanceColor() {
299         return getSearchAffordanceColors().color;
300     }
301 
302     @Override
onStart()303     public void onStart() {
304         super.onStart();
305         if (mTitleViewAdapter != null) {
306             showTitle(mShowingTitle);
307             mTitleViewAdapter.setAnimationEnabled(true);
308         }
309     }
310 
311     @Override
onPause()312     public void onPause() {
313         if (mTitleViewAdapter != null) {
314             mTitleViewAdapter.setAnimationEnabled(false);
315         }
316         super.onPause();
317     }
318 
319     @Override
onResume()320     public void onResume() {
321         super.onResume();
322         if (mTitleViewAdapter != null) {
323             mTitleViewAdapter.setAnimationEnabled(true);
324         }
325     }
326 
327     /**
328      * Returns true/false to indicate the visibility of TitleView.
329      *
330      * @return boolean to indicate whether or not it's showing the title.
331      */
isShowingTitle()332     public final boolean isShowingTitle() {
333         return mShowingTitle;
334     }
335 
336 }
337