TitleView.java revision a373804d10f93a9488adc35cf6ce44dce09b3778
1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14package android.support.v17.leanback.widget; 15 16import android.content.Context; 17import android.graphics.drawable.Drawable; 18import android.support.v17.leanback.R; 19import android.util.AttributeSet; 20import android.view.LayoutInflater; 21import android.view.View; 22import android.widget.FrameLayout; 23import android.widget.ImageView; 24import android.widget.TextView; 25 26import static android.support.v17.leanback.widget.TitleViewAdapter.BRANDING_VIEW_VISIBLE; 27import static android.support.v17.leanback.widget.TitleViewAdapter.SEARCH_VIEW_VISIBLE; 28import static android.support.v17.leanback.widget.TitleViewAdapter.FULL_VIEW_VISIBLE; 29 30/** 31 * Title view for a leanback fragment. 32 */ 33public class TitleView extends FrameLayout implements TitleViewAdapter.Provider { 34 35 private ImageView mBadgeView; 36 private TextView mTextView; 37 private SearchOrbView mSearchOrbView; 38 private int flags = FULL_VIEW_VISIBLE; 39 40 private final TitleViewAdapter mTitleViewAdapter = new TitleViewAdapter() { 41 @Override 42 public View getSearchAffordanceView() { 43 return TitleView.this.getSearchAffordanceView(); 44 } 45 46 @Override 47 public void setOnSearchClickedListener(View.OnClickListener listener) { 48 TitleView.this.setOnSearchClickedListener(listener); 49 } 50 51 @Override 52 public void setAnimationEnabled(boolean enable) { 53 TitleView.this.enableAnimation(enable); 54 } 55 56 @Override 57 public Drawable getBadgeDrawable() { 58 return TitleView.this.getBadgeDrawable(); 59 } 60 61 @Override 62 public SearchOrbView.Colors getSearchAffordanceColors() { 63 return TitleView.this.getSearchAffordanceColors(); 64 } 65 66 @Override 67 public CharSequence getTitle() { 68 return TitleView.this.getTitle(); 69 } 70 71 @Override 72 public void setBadgeDrawable(Drawable drawable) { 73 TitleView.this.setBadgeDrawable(drawable); 74 } 75 76 @Override 77 public void setSearchAffordanceColors(SearchOrbView.Colors colors) { 78 TitleView.this.setSearchAffordanceColors(colors); 79 } 80 81 @Override 82 public void setTitle(CharSequence titleText) { 83 TitleView.this.setTitle(titleText); 84 } 85 86 @Override 87 public void updateComponentsVisibility(int flags) { 88 TitleView.this.updateComponentsVisibility(flags); 89 } 90 }; 91 92 public TitleView(Context context) { 93 this(context, null); 94 } 95 96 public TitleView(Context context, AttributeSet attrs) { 97 this(context, attrs, R.attr.browseTitleViewStyle); 98 } 99 100 public TitleView(Context context, AttributeSet attrs, int defStyleAttr) { 101 super(context, attrs, defStyleAttr); 102 103 LayoutInflater inflater = LayoutInflater.from(context); 104 View rootView = inflater.inflate(R.layout.lb_title_view, this); 105 106 mBadgeView = (ImageView) rootView.findViewById(R.id.title_badge); 107 mTextView = (TextView) rootView.findViewById(R.id.title_text); 108 mSearchOrbView = (SearchOrbView) rootView.findViewById(R.id.title_orb); 109 110 setClipToPadding(false); 111 setClipChildren(false); 112 } 113 114 /** 115 * Sets the title text. 116 */ 117 public void setTitle(CharSequence titleText) { 118 mTextView.setText(titleText); 119 updateBadgeVisibility(); 120 } 121 122 /** 123 * Returns the title text. 124 */ 125 public CharSequence getTitle() { 126 return mTextView.getText(); 127 } 128 129 /** 130 * Sets the badge drawable. 131 * If non-null, the drawable is displayed instead of the title text. 132 */ 133 public void setBadgeDrawable(Drawable drawable) { 134 mBadgeView.setImageDrawable(drawable); 135 updateBadgeVisibility(); 136 } 137 138 /** 139 * Returns the badge drawable. 140 */ 141 public Drawable getBadgeDrawable() { 142 return mBadgeView.getDrawable(); 143 } 144 145 /** 146 * Sets the listener to be called when the search affordance is clicked. 147 */ 148 public void setOnSearchClickedListener(View.OnClickListener listener) { 149 mSearchOrbView.setOnOrbClickedListener(listener); 150 } 151 152 /** 153 * Returns the view for the search affordance. 154 */ 155 public View getSearchAffordanceView() { 156 return mSearchOrbView; 157 } 158 159 /** 160 * Sets the {@link SearchOrbView.Colors} used to draw the search affordance. 161 */ 162 public void setSearchAffordanceColors(SearchOrbView.Colors colors) { 163 mSearchOrbView.setOrbColors(colors); 164 } 165 166 /** 167 * Returns the {@link SearchOrbView.Colors} used to draw the search affordance. 168 */ 169 public SearchOrbView.Colors getSearchAffordanceColors() { 170 return mSearchOrbView.getOrbColors(); 171 } 172 173 /** 174 * Enables or disables any view animations. 175 */ 176 public void enableAnimation(boolean enable) { 177 mSearchOrbView.enableOrbColorAnimation(enable && mSearchOrbView.hasFocus()); 178 } 179 180 /** 181 * Based on the flag, it updates the visibility of the individual components - 182 * BadgeView, TextView and SearchView. 183 * 184 * @param flags integer representing the visibility of TitleView components. 185 * @see TitleViewAdapter#SEARCH_VIEW_VISIBLE 186 * @see TitleViewAdapter#BRANDING_VIEW_VISIBLE 187 * @see TitleViewAdapter#FULL_VIEW_VISIBLE 188 */ 189 public void updateComponentsVisibility(int flags) { 190 this.flags = flags; 191 192 if ((flags & BRANDING_VIEW_VISIBLE) == BRANDING_VIEW_VISIBLE) { 193 updateBadgeVisibility(); 194 } else { 195 mBadgeView.setVisibility(View.GONE); 196 mTextView.setVisibility(View.GONE); 197 } 198 199 int visibility = (flags & SEARCH_VIEW_VISIBLE) == SEARCH_VIEW_VISIBLE 200 ? View.VISIBLE : View.INVISIBLE; 201 mSearchOrbView.setVisibility(visibility); 202 } 203 204 private void updateBadgeVisibility() { 205 Drawable drawable = mBadgeView.getDrawable(); 206 if (drawable != null) { 207 mBadgeView.setVisibility(View.VISIBLE); 208 mTextView.setVisibility(View.GONE); 209 } else { 210 mBadgeView.setVisibility(View.GONE); 211 mTextView.setVisibility(View.VISIBLE); 212 } 213 } 214 215 @Override 216 public TitleViewAdapter getTitleViewAdapter() { 217 return mTitleViewAdapter; 218 } 219} 220