package com.mcxiaoke.minicat.menu;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import butterknife.ButterKnife;
import com.mcxiaoke.minicat.AppContext;
import com.mcxiaoke.minicat.R;
import com.mcxiaoke.minicat.app.UIHome;
import com.mcxiaoke.minicat.config.AccountInfo;
import com.mcxiaoke.minicat.util.LogUtil;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
/**
* @author mcxiaoke
* @version 2.1 2012.04.24
*/
public class MenuFragment extends Fragment implements AdapterView.OnItemClickListener {
private static final boolean DEBUG = AppContext.DEBUG;
private static final String TAG = MenuFragment.class.getSimpleName();
private static final int MENU_ID = 1000;
public static final int MENU_ID_HOME = MENU_ID + 1;
public static final int MENU_ID_PROFILE = MENU_ID + 2;
public static final int MENU_ID_MESSAGE = MENU_ID + 3;
public static final int MENU_ID_TOPIC = MENU_ID + 4;
public static final int MENU_ID_RECORD = MENU_ID + 5;
public static final int MENU_ID_DIGEST = MENU_ID + 6;
public static final int MENU_ID_THEME = MENU_ID + 7;
public static final int MENU_ID_LOGOUT = MENU_ID + 8;
public static final int MENU_ID_OPTION = MENU_ID + 9;
public static final int MENU_ID_ABOUT = MENU_ID + 10;
public static final int MENU_ID_DEBUG = MENU_ID + 99;
private ViewGroup mHeaderView;
private ImageView mHeaderImage;
private TextView mHeaderText;
private ListView mListView;
private TextView mFooterTextView1;
private TextView mFooterTextView2;
private MenuItemListAdapter mMenuAdapter;
private List<MenuItemResource> mMenuItems;
private MenuCallback mCallback;
private SparseBooleanArray mCheckedState;
private UIHome mUiHome;
static void debug(String message) {
LogUtil.v(TAG, message);
}
public static MenuFragment newInstance() {
return new MenuFragment();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mCallback = (MenuCallback) activity;
mUiHome = (UIHome) activity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMenuItems = new ArrayList<MenuItemResource>();
mCheckedState = new SparseBooleanArray();
fillColumns();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fm_menu, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
}
});
mHeaderView = ButterKnife.findById(view, R.id.header);
mHeaderImage = ButterKnife.findById(view, R.id.header_image);
mHeaderText = ButterKnife.findById(view, R.id.header_text);
mListView = ButterKnife.findById(view, android.R.id.list);
mFooterTextView1 = ButterKnife.findById(view, android.R.id.text1);
mFooterTextView2 = ButterKnife.findById(view, android.R.id.text2);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final AccountInfo account = AppContext.getAccountInfo();
if (account != null) {
mHeaderView.setVisibility(View.VISIBLE);
LogUtil.e(TAG, "profile image url:" + account.getProfileImage());
ImageLoader.getInstance().displayImage(account.getProfileImage(), mHeaderImage);
mHeaderText.setText(account.getScreenName());
mHeaderImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
onMenuLogoutClick();
}
});
} else {
mHeaderView.setVisibility(View.GONE);
}
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mListView.setSelector(getResources().getDrawable(
R.drawable.selector_drawer_menu));
// mListView.setDivider(getResources().getDrawable(
// R.drawable.sliding_menu_list_divider));
mMenuAdapter = new MenuItemListAdapter(getActivity(), mMenuItems);
mListView.setOnItemClickListener(this);
mListView.setDrawSelectorOnTop(true);
mListView.setAdapter(mMenuAdapter);
mListView.setItemChecked(0, true);
mFooterTextView1.setText(AppContext.versionName + " Build " + AppContext.versionCode + (AppContext.DEBUG ? " Debug" : ""));
}
@Override
public void onResume() {
super.onResume();
Animation fadeOut = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out_long);
mFooterTextView2.startAnimation(fadeOut);
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
mFooterTextView2.clearAnimation();
}
protected void onMenuLogoutClick() {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("@" + AppContext.getScreenName());
builder.setMessage("确定注销当前登录帐号吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
AppContext.doLogin(getActivity());
getActivity().finish();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final MenuItemResource menuItem = (MenuItemResource) parent
.getItemAtPosition(position);
debug("on item click ,position=" + position + " item=" + menuItem);
ListView listView = (ListView) parent;
listView.setItemChecked(position, true);
if (menuItem != null) {
mCheckedState.clear();
mCheckedState.put(position, true);
if (menuItem.highlight) {
mMenuAdapter.setCurrentPosition(position);
}
mMenuAdapter.notifyDataSetChanged();
if (mCallback != null) {
mCallback.onMenuItemSelected(position, menuItem);
}
}
}
private void fillColumns() {
MenuItemResource home = MenuItemResource.newBuilder().id(MENU_ID_HOME)
.text("首页").iconId(R.drawable.ic_menu_home).highlight(true)
.build();
MenuItemResource profile = MenuItemResource.newBuilder()
.id(MENU_ID_PROFILE).text("我的资料")
.iconId(R.drawable.ic_item_profile).highlight(true).build();
MenuItemResource message = MenuItemResource.newBuilder()
.id(MENU_ID_MESSAGE).text("收件箱")
.iconId(R.drawable.ic_item_feedback).highlight(true).build();
MenuItemResource topic = MenuItemResource.newBuilder()
.id(MENU_ID_TOPIC).text("热门话题")
.iconId(R.drawable.ic_item_topic).highlight(false).build();
/* MenuItemResource drafts = MenuItemResource.newBuilder()
.id(MENU_ID_RECORD).text("草稿箱")
.iconId(R.drawable.ic_item_record).highlight(false).build();*/
// MenuItemResource logout = MenuItemResource.newBuilder()
// .id(MENU_ID_LOGOUT).text("切换帐号")
// .iconId(R.drawable.ic_item_logout).highlight(false).build();
MenuItemResource option = MenuItemResource.newBuilder()
.id(MENU_ID_OPTION).text("设置")
.iconId(R.drawable.ic_item_option).highlight(false).build();
//
// MenuItemResource theme = MenuItemResource.newBuilder()
// .id(MENU_ID_THEME).text("主题切换")
// .iconId(R.drawable.ic_item_theme).highlight(false).build();
/* MenuItemResource blog = MenuItemResource.newBuilder()
.id(MENU_ID_DIGEST).text("饭否语录")
.iconId(R.drawable.ic_item_digest).highlight(false).build();*/
MenuItemResource about = MenuItemResource.newBuilder()
.id(MENU_ID_ABOUT).text("关于").iconId(R.drawable.ic_item_info)
.highlight(false).build();
mMenuItems.add(home);
mMenuItems.add(profile);
mMenuItems.add(message);
mMenuItems.add(topic);
// mMenuItems.add(drafts);
// mMenuItems.add(logout);
mMenuItems.add(option);
// mMenuItems.add(theme);
// mMenuItems.add(blog);
// mMenuItems.add(about);
if (DEBUG) {
MenuItemResource test = MenuItemResource.newBuilder()
.id(MENU_ID_DEBUG).text("调试模式")
.iconId(R.drawable.ic_item_modify).highlight(false).build();
// mMenuItems.add(test);
}
}
private static class MenuItemListAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private List<MenuItemResource> mItems;
private int currentPosition;
private int mHighlightColor;
public MenuItemListAdapter(Context context, List<MenuItemResource> data) {
this.context = context;
this.inflater = LayoutInflater.from(context);
this.mItems = new ArrayList<MenuItemResource>();
if (data != null && data.size() > 0) {
this.mItems.addAll(data);
}
this.mHighlightColor = context.getResources().getColor(R.color.holo_primary);
}
public void setCurrentPosition(int position) {
this.currentPosition = position;
}
@Override
public int getCount() {
return mItems.size();
}
@Override
public MenuItemResource getItem(int position) {
return mItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item_menu, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final MenuItemResource item = mItems.get(position);
holder.icon.setImageResource(item.iconId);
holder.icon.setVisibility(View.GONE);
holder.text.setText(item.text);
if (position == currentPosition && item.highlight) {
holder.text.setTextColor(mHighlightColor);
} else {
holder.text.setTextColor(Color.DKGRAY);
}
return convertView;
}
private static class ViewHolder {
ImageView icon;
TextView text;
public ViewHolder(View base) {
icon = (ImageView) base.findViewById(R.id.icon);
text = (TextView) base.findViewById(R.id.text);
}
}
}
}