package net.dev123.yibo.service.listener; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import net.dev123.mblog.entity.Comment; import net.dev123.mblog.entity.Status; import net.dev123.mblog.entity.User; import net.dev123.yibo.EditCommentActivity; import net.dev123.yibo.MicroBlogActivity; import net.dev123.yibo.ProfileActivity; import net.dev123.yibo.R; import net.dev123.yibo.YiBoApplication; import net.dev123.yibo.common.Constants; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.db.LocalComment; import net.dev123.yibo.service.adapter.CacheAdapter; import net.dev123.yibo.service.task.DestroyCommentTask; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.HeaderViewListAdapter; public class CommentsItemClickListener implements OnItemClickListener { private Context context; private LocalAccount account; private Comment comment; private List<String> listItem; private boolean isDeleteable = false; public CommentsItemClickListener(Context context) { this.context = context; listItem = new ArrayList<String>(); } @SuppressWarnings("unchecked") @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Adapter adapter = parent.getAdapter(); comment = (Comment)adapter.getItem(position); if (comment == null || (comment instanceof LocalComment && ((LocalComment)comment).isDivider())) { return; } if (adapter instanceof HeaderViewListAdapter) { adapter = ((HeaderViewListAdapter)adapter).getWrappedAdapter(); } CacheAdapter<Comment> cacheAdapter = (CacheAdapter<Comment>)adapter; Dialog dialog = onCreateDialog(cacheAdapter, position); if (dialog != null) { dialog.show(); } } public Dialog onCreateDialog(final CacheAdapter<Comment> cacheAdapter, final int position) { if (comment == null) { return null; } YiBoApplication yibo = (YiBoApplication)context.getApplicationContext(); account = yibo.getCurrentAccount(); listItem.clear(); listItem.add(context.getString(R.string.menu_comment_reply)); listItem.add(context.getString(R.string.menu_comment_personal_info)); listItem.add(context.getString(R.string.menu_comment_blog)); User me = null; if (account != null) { me = (User) account.getUser(); } if (comment.getUser().equals(me) || ( comment.getInReplyToStatus() != null && comment.getInReplyToStatus().getUser() != null && comment.getInReplyToStatus().getUser().equals(me) ) ) { isDeleteable = true; listItem.add(context.getString(R.string.menu_comment_destroy)); } Matcher m = Constants.URL_PATTERN.matcher(comment.getText()); while (m.find()) { String url = m.group(); listItem.add(url); } String[] selectItems = new String[listItem.size()]; listItem.toArray(selectItems); return new AlertDialog.Builder(context) .setTitle(R.string.menu_title_comment) .setItems(selectItems, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(); Bundle bundle = new Bundle(); if (which == 0) { bundle.putInt("TYPE", Constants.EDIT_TYPE_RECOMMENT); bundle.putSerializable("COMMENT", comment); intent.putExtras(bundle); intent.setClass(context, EditCommentActivity.class); ((Activity)context).startActivity(intent); } else if (which == 1) { User user = comment.getUser(); bundle.putSerializable("USER", user); intent.putExtras(bundle); intent.setClass(context, ProfileActivity.class); ((Activity)context).startActivity(intent); } else if (which == 2) { Status status = comment.getInReplyToStatus(); bundle.putSerializable("STATUS", status); intent.putExtras(bundle); intent.setClass(context, MicroBlogActivity.class); ((Activity)context).startActivity(intent); } else if (which == 3) { if (isDeleteable()) { DestroyCommentTask destroyTask = new DestroyCommentTask(cacheAdapter, comment); destroyTask.execute(); } else { intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(getItem(which))); context.startActivity(intent); } } else { intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(getItem(which))); context.startActivity(intent); } } }) .create(); } private String getItem(int i) { return listItem.get(i); } private boolean isDeleteable() { return isDeleteable; } }