/*******************************************************************************
* Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang
*
* 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.fanfou.app.opensource.ui;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.fanfou.app.opensource.R;
import com.fanfou.app.opensource.api.bean.Status;
import com.fanfou.app.opensource.util.CommonHelper;
/**
* @author mcxiaoke
* @version 1.0 2011.06.15
* @version 2.0 2011.08.20
* @version 3.0 2011.09.18
* @version 3.5 2011.10.27
* @version 3.6 2011.11.04
*
*/
public class ActionBar extends RelativeLayout implements OnClickListener {
public static abstract class AbstractAction implements Action {
final private int mDrawable;
public AbstractAction(final int drawable) {
this.mDrawable = drawable;
}
@Override
public int getDrawable() {
return this.mDrawable;
}
}
public interface Action {
public int getDrawable();
public void performAction(View view);
}
public static class BackAction extends AbstractAction {
private final Activity context;
public BackAction(final Activity mContext) {
super(R.drawable.i_back);
this.context = mContext;
}
@Override
public void performAction(final View view) {
this.context.finish();
}
}
public static class IntentAction extends AbstractAction {
Context mContext;
Intent mIntent;
public IntentAction(final Context context, final Intent intent,
final int drawable) {
super(drawable);
this.mContext = context;
this.mIntent = intent;
}
@Override
public void performAction(final View view) {
try {
this.mContext.startActivity(this.mIntent);
} catch (final ActivityNotFoundException e) {
CommonHelper.notify(this.mContext, "Activity Not Found.");
}
}
}
public interface OnRefreshClickListener {
public void onRefreshClick();
}
public static class RefreshAction extends AbstractAction {
private final ActionBar ab;
public RefreshAction(final ActionBar ab) {
super(R.drawable.i_refresh);
this.ab = ab;
}
@Override
public void performAction(final View view) {
this.ab.onRefreshClick();
}
}
public static class SearchAction extends AbstractAction {
private final Activity mActivity;
public SearchAction(final Activity activity) {
super(R.drawable.i_search);
this.mActivity = activity;
}
@Override
public void performAction(final View view) {
this.mActivity.onSearchRequested();
}
}
public static class ToastAction extends AbstractAction {
private final Context mContext;
private final String mText;
public ToastAction(final Context context, final String text,
final int drawable) {
super(drawable);
this.mContext = context;
this.mText = text;
}
@Override
public void performAction(final View view) {
Toast.makeText(this.mContext, this.mText, Toast.LENGTH_SHORT)
.show();
}
}
public static class WriteAction extends AbstractAction {
private final Context context;
private final Status status;
public WriteAction(final Context context, final Status status) {
super(R.drawable.i_write);
this.context = context;
this.status = status;
}
@Override
public void performAction(final View view) {
if (this.status == null) {
ActionManager.doWrite(this.context, null);
// ActionManager.doSend(context);
} else {
ActionManager.doReply(this.context, this.status);
}
}
}
public static final int TYPE_HOME = 0; // 左侧LOGO,中间标题文字,右侧编辑图标
public static final int TYPE_NORMAL = 1; // 左侧LOGO,中间标题文字,右侧编辑图标
// private boolean mRefreshable=false;
public static final int TYPE_EDIT = 2; // 左侧LOGO,中间标题文字,右侧发送图标
private Context mContext;
private LayoutInflater mInflater;
private ViewGroup mActionBar;// 标题栏
private ImageView mLeftButton;// 饭否标志
private ImageView mRightButton;// 右边的动作图标
private ImageView mRefreshButton;// 右侧第二个图标,刷新
private TextView mTitle;// 居中标题
private OnRefreshClickListener mOnRefreshClickListener = null;
public ActionBar(final Context context) {
super(context);
initViews(context);
}
public ActionBar(final Context context, final AttributeSet attrs) {
super(context, attrs);
initViews(context);
}
private void initViews(final Context context) {
this.mContext = context;
this.mInflater = LayoutInflater.from(this.mContext);
this.mActionBar = (ViewGroup) this.mInflater.inflate(
R.layout.actionbar, null);
addView(this.mActionBar);
this.mLeftButton = (ImageView) this.mActionBar
.findViewById(R.id.actionbar_left);
this.mRightButton = (ImageView) this.mActionBar
.findViewById(R.id.actionbar_right);
this.mRefreshButton = (ImageView) findViewById(R.id.actionbar_refresh);
this.mTitle = (TextView) this.mActionBar
.findViewById(R.id.actionbar_title);
this.mLeftButton.setOnClickListener(this);
this.mRightButton.setOnClickListener(this);
this.mRefreshButton.setOnClickListener(this);
}
@Override
public void onClick(final View view) {
final Object tag = view.getTag();
if (tag instanceof Action) {
final Action action = (Action) tag;
action.performAction(view);
}
}
private void onRefreshClick() {
if (this.mOnRefreshClickListener != null) {
this.mOnRefreshClickListener.onRefreshClick();
}
}
public void removeLeftIcon() {
this.mLeftButton.setVisibility(View.GONE);
}
public void removeRightIcon() {
this.mRightButton.setVisibility(View.GONE);
}
public void setLeftAction(final Action action) {
this.mLeftButton.setImageResource(action.getDrawable());
this.mLeftButton.setTag(action);
}
public void setLeftActionEnabled(final boolean enabled) {
this.mLeftButton.setEnabled(enabled);
}
public void setLeftIcon(final int resId) {
this.mLeftButton.setImageResource(resId);
}
private void setRefreshAction(final Action action) {
this.mRefreshButton.setImageResource(action.getDrawable());
this.mRefreshButton.setTag(action);
}
public void setRefreshActionEnabled(final boolean enabled) {
this.mRefreshButton.setEnabled(enabled);
}
public void setRefreshEnabled(
final OnRefreshClickListener onRefreshClickListener) {
if (onRefreshClickListener != null) {
this.mOnRefreshClickListener = onRefreshClickListener;
setRefreshAction(new RefreshAction(this));
}
}
public void setRightAction(final Action action) {
this.mRightButton.setImageResource(action.getDrawable());
this.mRightButton.setTag(action);
}
public void setRightActionEnabled(final boolean enabled) {
this.mRightButton.setEnabled(enabled);
}
public void setRightIcon(final int resId) {
this.mRightButton.setImageResource(resId);
}
public void setTitle(final CharSequence text) {
this.mTitle.setText(text);
}
public void setTitle(final int resId) {
this.mTitle.setText(resId);
}
public void setTitleClickListener(final OnClickListener li) {
this.mTitle.setOnClickListener(li);
}
public void setType() {
}
public void startAnimation() {
post(new Runnable() {
@Override
public void run() {
ActionBar.this.mRefreshButton.setOnClickListener(null);
ActionBar.this.mRefreshButton.setImageDrawable(null);
ActionBar.this.mRefreshButton
.setBackgroundResource(R.drawable.animation_refresh);
final AnimationDrawable frameAnimation = (AnimationDrawable) ActionBar.this.mRefreshButton
.getBackground();
frameAnimation.start();
}
});
}
public void stopAnimation() {
post(new Runnable() {
@Override
public void run() {
final AnimationDrawable frameAnimation = (AnimationDrawable) ActionBar.this.mRefreshButton
.getBackground();
if (frameAnimation != null) {
frameAnimation.stop();
ActionBar.this.mRefreshButton.setBackgroundDrawable(null);
ActionBar.this.mRefreshButton
.setImageResource(R.drawable.i_refresh);
ActionBar.this.mRefreshButton
.setOnClickListener(ActionBar.this);
}
}
});
}
}