android源码分析--MMS--ComposeMessageActivity

来源:互联网 发布:网络证券交易业务模式 编辑:程序博客网 时间:2024/05/16 09:43

关注点:ComposeMessageActivity 涉及到DeleteMessageListener,Contact.UpdateListener,接口回调、MessageListItem用Handler处理点击事件、startActivityForResult 添加附件、RecipientsEditor自定义收件人控件、MsgListView、MsgListAdapter

1、DeleteMessageListener:点击删除会话框的确定键之后,回调改事件,onClick中用ConversationQueryHandler( extends AsyncQueryHandler)删除信息,onDeleteComplete之后会广播方式通知桌面widget,且触发MessageListAdapter( extends CursorAdapter)重写的onContentChanged()方法,最终接口OnDataSetChangedListener回调到ComposeMessageActivity startMsgListQuery()重新查询.

2、Contact.UpdateListener:当联系人有信息更新时会调用该方法,主要是涉及到名字、号码等更新,标题和会话列表的更新。联系人信息更新可能是通过Contacts应用修改的。

3、 ComposeMessageActivity.mMessageListItemHandler:显示详情、编辑、播放(图片、视频、音频、联系人附件、日历、幻灯片),这里比较有意思的是,MessageListItem的点击事件的响应起源是在MessageListItem的onItemClick,而处理却是在Activity,中间事件的传递用到了android.os.Message的基本用法,Message.obtain(Handler,Message);Message.sendToTarget();其中android.os.Message.obj=com.android.mms.ui.MessageItem

4、startActivityForResult彩信附件有多种形式,requestCode == REQUEST_CODE_XXX_XXX对应,使代码有整洁性。

5、RecipientsEditor:方便编辑多个收件人而定义的控件,本质是MultiAutoCompleteTextView,关注TextWatcher.beforeTextChanged onTextChanged afterTextChanged,正则表达式匹配号码, RecipientsEditor中关联ContactList显示多个联系人。

附上部分ListView关键代码:
// Initialize the list adapter with a null cursor.
mMsgListAdapter = new MessageListAdapter(this, null, mMsgListView, true, highlight);
mMsgListAdapter.setOnDataSetChangedListener(mDataSetChangedListener);//监听数据库变化
mMsgListAdapter.setMsgListItemHandler(mMessageListItemHandler);//处理点击事件
mMsgListView.setAdapter(mMsgListAdapter);
mMsgListView.setItemsCanFocus(false);
mMsgListView.setVisibility((mSendDiscreetMode || MessageUtils.isMailboxMode())
? View.INVISIBLE : View.VISIBLE);
mMsgListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView

0 0