package net.dev123.yibo.service.listener; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import net.dev123.mblog.entity.DirectMessage; import net.dev123.mblog.entity.User; import net.dev123.yibo.ConversationActivity; import net.dev123.yibo.EditDirectMessageActivity; import net.dev123.yibo.ProfileActivity; import net.dev123.yibo.R; import net.dev123.yibo.common.Constants; import net.dev123.yibo.db.LocalAccount; import net.dev123.yibo.db.LocalDirectMessage; import net.dev123.yibo.service.adapter.CacheAdapter; import net.dev123.yibo.service.task.DestroyDirectMessageTask; 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 DirectMessagesItemClickListener implements OnItemClickListener { private Context context; private DirectMessage message; private List<String> listItem; public DirectMessagesItemClickListener(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(); message = (DirectMessage)adapter.getItem(position); if (message == null || (message instanceof LocalDirectMessage && ((LocalDirectMessage)message).isDivider())) { return; } if (adapter instanceof HeaderViewListAdapter) { adapter = ((HeaderViewListAdapter)adapter).getWrappedAdapter(); } CacheAdapter<DirectMessage> cacheAdapter = (CacheAdapter<DirectMessage>)adapter; Dialog dialog = onCreateDialog(cacheAdapter, position); if (dialog != null) { dialog.show(); } } public Dialog onCreateDialog(final CacheAdapter<DirectMessage> cacheAdapter, final int position) { if (message == null) { return null; } listItem.clear(); listItem.add(context.getString(R.string.menu_message_reply)); listItem.add(context.getString(R.string.menu_message_conversation)); listItem.add(context.getString(R.string.menu_message_user_info)); listItem.add(context.getString(R.string.menu_message_conversation_destroy)); Matcher m = Constants.URL_PATTERN.matcher(message.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_message) .setItems(selectItems, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { LocalAccount account = cacheAdapter.getAccount(); String myId = account.getUser().getId(); User conversationUser = message.getSender(); if (myId.equals(message.getSenderId())) { conversationUser = message.getRecipient(); } Intent intent = new Intent(); Bundle bundle = new Bundle(); if (which == 0) { String recipientName = conversationUser.getDisplayName(); bundle.putString("DISPLAY_NAME", recipientName); bundle.putInt("TYPE", Constants.EDIT_TYPE_REMESSAGE); intent.putExtras(bundle); intent.setClass(context, EditDirectMessageActivity.class); ((Activity)context).startActivity(intent); } else if (which == 1) { intent.setClass(context, ConversationActivity.class); bundle.putSerializable("USER", conversationUser); intent.putExtras(bundle); context.startActivity(intent); } else if (which == 2) { bundle.putSerializable("USER", conversationUser); intent.putExtras(bundle); intent.setClass(context, ProfileActivity.class); ((Activity)context).startActivity(intent); } else if (which == 3) { destroyConversation(cacheAdapter); } 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 void destroyConversation(final CacheAdapter<DirectMessage> cacheAdapter) { Dialog dialog = new AlertDialog.Builder(context) .setTitle(R.string.title_dialog_alert) .setMessage(R.string.msg_message_destroy_conversation_confirm) .setPositiveButton(R.string.btn_confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DestroyDirectMessageTask destroyTask = new DestroyDirectMessageTask(cacheAdapter, message); destroyTask.execute(); } }) .setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create(); dialog.show(); } }