/* * Copyright (C) 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.google.tv.leftnavbar; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.view.Window; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; /** * Holds the various widgets of the title bar. */ public class TitleBarView extends RelativeLayout { private final VisibilityController mVisibilityController; private boolean mIsLegacy; private boolean mAnimationsEnabled; private TextView mTitle; private TextView mSubtitle; private ImageView mLeftIcon; private ImageView mRightIcon; private ProgressBar mCircularProgress; private ProgressBar mHorizontalProgress; private int mTitleResource; private int mSubtitleResource; Context mContext; public TitleBarView(Context context, AttributeSet attrs) { super(context, attrs, 0); mContext=context; mVisibilityController = new VisibilityController(this); TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.windowTitleStyle, android.R.attr.defaultValue }); mIsLegacy = a.getBoolean(a.getIndex(1 /* defaultValue */), false); if (mIsLegacy) { mTitleResource = a.getResourceId(a.getIndex(0 /* windowTitleStyle */), 0); } else { a.recycle(); a = context.obtainStyledAttributes(null, new int[] { android.R.attr.titleTextStyle, android.R.attr.subtitleTextStyle }, android.R.attr.actionBarStyle, 0); mTitleResource = a.getResourceId(a.getIndex(0 /* titleTextStyle */), 0); mSubtitleResource = a.getResourceId(a.getIndex(1 /* subtitleTextStyle */), 0); } a.recycle(); } @Override protected void onFinishInflate() { super.onFinishInflate(); if (getChildCount() == 0) { // Set up the default content. LayoutInflater.from(mContext).inflate(R.layout.lib_title_bar, this, true); } mTitle = (TextView) findViewById(R.id.title); mSubtitle = (TextView) findViewById(R.id.subtitle); mLeftIcon = (ImageView) findViewById(R.id.left_icon); mRightIcon = (ImageView) findViewById(R.id.right_icon); mCircularProgress = (ProgressBar) findViewById(R.id.progress_circular); if (mCircularProgress != null) { mCircularProgress.setIndeterminate(true); // Cannot be done in XML... } mHorizontalProgress = (ProgressBar) findViewById(R.id.progress_horizontal); if (mIsLegacy) { setTextStyle(mTitle, mTitleResource); disableSubtitle(); } else { setTextStyle(mTitle, mTitleResource); setTextStyle(mSubtitle, mSubtitleResource); disableLeftIcon(); disableRightIcon(); } } private void setTextStyle(TextView view, int style) { if (style != 0) { view.setTextAppearance(getContext(), style); } } public void setTitle(CharSequence text) { mTitle.setText(text); } public void setTitleColor(int color) { mTitle.setTextColor(color); } public void setLeftIcon(Drawable drawable, int alpha) { setIcon(mLeftIcon, drawable, alpha); } public void setRightIcon(Drawable drawable, int alpha) { setIcon(mRightIcon, drawable, alpha); } private void setIcon(ImageView view, Drawable drawable, int alpha) { if (view == null) { return; } if (drawable != null) { drawable.setAlpha(alpha); view.setImageDrawable(drawable); view.setVisibility(View.VISIBLE); } else { view.setVisibility(View.GONE); } } public void setHorizontalProgress(int value) { if (mHorizontalProgress == null) { return; } switch (value) { case Window.PROGRESS_VISIBILITY_ON: mHorizontalProgress.setVisibility(View.VISIBLE); break; case Window.PROGRESS_VISIBILITY_OFF: mHorizontalProgress.setVisibility(View.GONE); break; case Window.PROGRESS_INDETERMINATE_ON: mHorizontalProgress.setIndeterminate(true); break; case Window.PROGRESS_INDETERMINATE_OFF: mHorizontalProgress.setIndeterminate(false); break; default: if (Window.PROGRESS_START <= value && value <= Window.PROGRESS_END) { mHorizontalProgress.setProgress(value - Window.PROGRESS_START); } else if (Window.PROGRESS_SECONDARY_START <= value && value <= Window.PROGRESS_SECONDARY_END) { mHorizontalProgress.setSecondaryProgress( value - Window.PROGRESS_SECONDARY_START); } break; } } public boolean isHorizontalProgressVisible() { return mHorizontalProgress != null && mHorizontalProgress.getVisibility() == VISIBLE; } public void setCircularProgress(int value) { if (mCircularProgress == null) { return; } switch (value) { case Window.PROGRESS_VISIBILITY_ON: mCircularProgress.setVisibility(View.VISIBLE); break; case Window.PROGRESS_VISIBILITY_OFF: mCircularProgress.setVisibility(View.GONE); break; default: break; } } public void disableLeftIcon() { removeFromParent(mLeftIcon); mLeftIcon = null; } public void disableRightIcon() { removeFromParent(mRightIcon); mRightIcon = null; } public void disableHorizontalProgress() { removeFromParent(mHorizontalProgress); mHorizontalProgress = null; } public void disableCircularProgress() { removeFromParent(mCircularProgress); mCircularProgress = null; } private void disableSubtitle() { removeFromParent(mSubtitle); mSubtitle = null; } private static void removeFromParent(View view) { if (view == null) { return; } ViewParent parent = view.getParent(); if (parent != null) { ((ViewGroup) parent).removeView(view); } } public CharSequence getTitle() { return mTitle.getText(); } public void setSubtitle(CharSequence text) { mSubtitle.setText(text); mSubtitle.setVisibility(TextUtils.isEmpty(text) ? GONE : VISIBLE); } public CharSequence getSubtitle() { return mSubtitle.getText(); } public void setAnimationsEnabled(boolean enabled) { mAnimationsEnabled = enabled; } public void setVisible(boolean visible, boolean animated) { mVisibilityController.setVisible(visible, animated && mAnimationsEnabled); } public boolean isVisible() { return mVisibilityController.isVisible(); } public int getApparentHeight() { return isVisible() ? getContext().getResources().getDimensionPixelSize(R.dimen.title_bar_apparent_height) : 0; } public void setProgressVisible(boolean visible) { setCircularProgress(visible ? Window.PROGRESS_VISIBILITY_ON : Window.PROGRESS_VISIBILITY_OFF); } }