/* * Copyright (c) 2012 Socialize Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.socialize.ui.actionbar; import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.util.TypedValue; import android.view.Gravity; import android.widget.*; import com.socialize.ui.view.SafeViewFlipper; import com.socialize.util.DisplayUtils; /** * An action bar item item is a single item on an action bar button or ticker. * Composed of an image and text. * @author Jason Polites */ public class ActionBarItem extends LinearLayout { public static final int DEFAULT_TEXT_COLOR = Color.WHITE; private Drawable icon; private String text; private float textSize = -1; private Integer textColor; private ImageView imageView; private TextView textView; private DisplayUtils displayUtils; private boolean invertProgressStyle = false; private ViewFlipper iconFlipper; public ActionBarItem(Context context) { super(context); } public ActionBarItem(Context context, int textColor) { super(context); this.textColor = textColor; } public void init() { int leftMargin = displayUtils.getDIP(6); LayoutParams masterParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); masterParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL; setLayoutParams(masterParams); /****************************************** * Progress Bar ******************************************/ int style = android.R.attr.progressBarStyleSmall; if(invertProgressStyle) { style = android.R.attr.progressBarStyleSmallInverse; } ProgressBar progress = new ProgressBar(getContext(), null, style); RelativeLayout progressLayout = new RelativeLayout(getContext()); int minWidth = displayUtils.getDIP(24); int minHeight = displayUtils.getDIP(24); if(icon != null) { int intrinsicWidth = icon.getMinimumWidth(); int intrinsicHeight = icon.getMinimumHeight(); if(intrinsicWidth > minWidth) { minWidth = intrinsicWidth; } if(intrinsicHeight > minHeight) { minHeight = intrinsicHeight; } } minWidth+=leftMargin; progressLayout.setMinimumWidth(minWidth); progressLayout.setMinimumHeight(minHeight); LayoutParams progressLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); progressLayoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL; progressLayoutParams.setMargins(leftMargin, 0, 0, 0); RelativeLayout.LayoutParams progressParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); progressParams.addRule(RelativeLayout.CENTER_IN_PARENT); progressParams.addRule(RelativeLayout.CENTER_VERTICAL); progressLayout.setLayoutParams(progressLayoutParams); progress.setLayoutParams(progressParams); progressLayout.addView(progress); /****************************************** * Icon ******************************************/ RelativeLayout imageLayout = new RelativeLayout(getContext()); imageLayout.setMinimumWidth(minWidth); imageLayout.setMinimumHeight(minHeight); LayoutParams imageLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); imageLayoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL; imageLayoutParams.setMargins(leftMargin, 0, 0, 0); imageLayout.setLayoutParams(imageLayoutParams); imageView = new ImageView(getContext()); RelativeLayout.LayoutParams iconParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); iconParams.addRule(RelativeLayout.CENTER_IN_PARENT); if(this.icon != null) { imageView.setImageDrawable(icon); } imageView.setLayoutParams(iconParams); imageLayout.addView(imageView); /****************************************** * Text ******************************************/ LinearLayout textLayout = new LinearLayout(getContext()); LayoutParams textLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); textLayoutParams.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL; textLayoutParams.setMargins(0, 0, 0, 0); textLayout.setLayoutParams(textLayoutParams); textView = new TextView(getContext()); textView.setSingleLine(true); LayoutParams textParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); textParams.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL; if(this.text != null) { textView.setText(text); } if(textSize > 0) { textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); } else { textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 11); } textView.setTypeface(Typeface.DEFAULT_BOLD); textView.setTextColor((textColor == null) ? DEFAULT_TEXT_COLOR : textColor); textView.setLayoutParams(textParams); textLayout.addView(textView); /****************************************** * Flipper ******************************************/ // Flipper layout LayoutParams flipperParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); flipperParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL; iconFlipper = new SafeViewFlipper(getContext()); iconFlipper.setLayoutParams(flipperParams); iconFlipper.addView(imageLayout, 0); iconFlipper.addView(progressLayout, 1); iconFlipper.setDisplayedChild(0); /****************************************** * Assembly ******************************************/ addView(iconFlipper); addView(textLayout); } public void setDisplayUtils(DisplayUtils deviceUtils) { this.displayUtils = deviceUtils; } public void setIcon(Drawable icon) { this.icon = icon; if(this.imageView != null) { imageView.setImageDrawable(icon); } } public void setTextSize(float size) { this.textSize = size; if(this.textView != null) { this.textView.setTextSize(size); } } public void setTextColor(int color) { this.textColor = color; if(this.textView != null) { this.textView.setTextColor(color); } } public void setText(String text) { this.text = text; if(this.textView != null) { this.textView.setText(text); } } public Drawable getIcon() { return icon; } public String getText() { return text; } public void setInvertProgressStyle(boolean invertProgressStyle) { this.invertProgressStyle = invertProgressStyle; } public void showLoading() { if(iconFlipper != null) { iconFlipper.setDisplayedChild(1); } } public void hideLoading() { if(iconFlipper != null) { iconFlipper.setDisplayedChild(0); } } public ImageView getImageView() { return imageView; } public TextView getTextView() { return textView; } }