package org.wordpress.android.ui; import java.util.ArrayList; import android.graphics.drawable.Drawable; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animation.RotateAnimation; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.TextView; import com.justsystems.hpb.pad.R; import org.wordpress.android.WordPress; import org.wordpress.android.task.RefreshMenuTask; class MenuDrawerAdapter extends BaseAdapter implements OnClickListener { private static final int TYPE_NORAML = 0; private static final int TYPE_COMMENT = 1; private static final int TYPE_ADDABLE = 2; private WPActionBarActivity activity; private ArrayList<MenuDrawerItem> mItems; MenuDrawerAdapter(WPActionBarActivity activity, ArrayList<MenuDrawerItem> items) { this.activity = activity; this.mItems = items; } public void setItems(ArrayList<MenuDrawerItem> items) { this.mItems = items; notifyDataSetChanged(); } public void clear() { mItems.clear(); } public ArrayList<MenuDrawerItem> getItems() { return this.mItems; } @Override public int getCount() { return mItems.size(); } @Override public MenuDrawerItem getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { final int type = getItem(position).getItemId(); switch (type) { case WPActionBarActivity.PAGES_ACTIVITY: case WPActionBarActivity.POSTS_ACTIVITY: case WPActionBarActivity.CUSTOM_TYPE_ACTIVITY: return TYPE_ADDABLE; case WPActionBarActivity.COMMENTS_ACTIVITY: return TYPE_COMMENT; default: return TYPE_NORAML; } } @Override public int getViewTypeCount() { return 3; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; final ViewHolder holder; final MenuDrawerItem item = getItem(position); final int viewType = getItemViewType(position); final int activityTag = item.getItemId(); if (v == null) { switch (viewType) { case TYPE_ADDABLE: v = activity.getLayoutInflater().inflate( R.layout.menu_drawer_custom_row, parent, false); ImageView newPost = (ImageView) v.findViewById(R.id.new_post); newPost.setOnClickListener(this); break; case TYPE_COMMENT: v = activity.getLayoutInflater().inflate( R.layout.menu_drawer_comment_row, parent, false); break; default: v = activity.getLayoutInflater().inflate( R.layout.menu_drawer_row, parent, false); break; } holder = new ViewHolder(); holder.icon = (ImageView) v.findViewById(R.id.menu_row_icon); holder.title = (TextView) v.findViewById(R.id.menu_row_title); holder.bagde = (TextView) v.findViewById(R.id.menu_row_badge); holder.newPost = (ImageView) v.findViewById(R.id.new_post); v.setTag(holder); } else { holder = (ViewHolder) v.getTag(); } holder.title.setText(item.getTitle()); ImageView iconImageView = holder.icon; Drawable d = item.getIcon(); if (d != null) { iconImageView.setScaleType(ScaleType.CENTER_CROP); iconImageView.setImageDrawable(d); } else { iconImageView.setImageDrawable(activity.getResources().getDrawable( R.drawable.ic_md_post)); } // TODO fix waste of resource if (RefreshMenuTask.isUnedrTask() && activityTag == WPActionBarActivity.REFRESH_MENU) { if (iconImageView.getAnimation() == null) { RotateAnimation anim = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); anim.setInterpolator(new LinearInterpolator()); anim.setRepeatCount(Animation.INFINITE); anim.setDuration(1400); iconImageView.startAnimation(anim); } } else if ((!RefreshMenuTask.isUnedrTask() || activityTag != WPActionBarActivity.REFRESH_MENU) && iconImageView.getAnimation() != null) { iconImageView.getAnimation().cancel(); iconImageView.setAnimation(null); } if (item.isSelected()) { // http://stackoverflow.com/questions/5890379/setbackgroundresource-discards-my-xml-layout-attributes int bottom = v.getPaddingBottom(); int top = v.getPaddingTop(); int right = v.getPaddingRight(); int left = v.getPaddingLeft(); v.setBackgroundColor(v.getResources().getColor( R.color.md_list_selected)); v.setPadding(left, top, right, bottom); } else { int bottom = v.getPaddingBottom(); int top = v.getPaddingTop(); int right = v.getPaddingRight(); int left = v.getPaddingLeft(); v.setBackgroundResource(R.drawable.md_list_selector); v.setPadding(left, top, right, bottom); } TextView bagdeTextView = holder.bagde; if (activityTag == WPActionBarActivity.COMMENTS_ACTIVITY && WordPress.currentBlog != null) { int commentCount = WordPress.currentBlog .getUnmoderatedCommentCount(); if (commentCount > 0) { bagdeTextView.setVisibility(View.VISIBLE); } else { bagdeTextView.setVisibility(View.GONE); } bagdeTextView.setText(String.valueOf(commentCount)); } ImageView newPost = holder.newPost; if (newPost != null) { newPost.setTag(position); } return v; } @Override public void onClick(View v) { final int index = (Integer) v.getTag(); final MenuDrawerItem item = mItems.get(index); final int tag = item.getItemId(); final String typeName = item.getPostType(); activity.startNewPost(tag, typeName); } private static class ViewHolder { private ImageView icon; private TextView title; private TextView bagde; private ImageView newPost; } }