1、接收到mms的保存
接收到得mms,会在RetrieveTransaction::run()函数中调用PduPersister::persist(..)进行保存。
2、vcard、vcalendar的实现
a、接收
接收到的mms被保存时,会在PduPersister::persist(..)的最后调用checkHaveOtherAttachment(..),设置db中的Mms.OTHER_ATTACHMENT,用来标示附件的类型,如果是vcard或vcalendar,则其值为Mms.OTHER_ATTACHMENT_VCARD_UNSELECT等;
db中的Mms.OTHER_ATTACHMENT会用来标示mms中是否含有这两个东东,从而决定UI的显示;
访问part of vcard、vcalendar时,通过遍历mms uri在db中的所有part,比较器content type是否为"text/x-vCard"、"text/x-vCalendar"或"application/oct-stream",从而找出要的part,如转发时就是通过此方式(ComposeMessageActivity::importVcardVCalendar());
b、编辑
编辑时,vcard选取后,其数据会被作为一个part存储在db中,并插入到"第一个slide"中,具体可参考ComposeMessageActivity::addVCard();
生成pdu时,vcard、vcalendar会跟其他的model一样,被作为part存储,具体见SlideshowModel::makePduBody(..);
a、thread
ConversationList::startAsyncQuery(),从DB中读出列表;
ThreadListQueryHandler::onQueryComplete(..),拿到查询结果cursor;
ConversationListAdapter::bindView(..),解析cursor,并将数据赋给各个thread item;
b、message
ConversationList::onListItemClick(..),触发event of loading message list。
ComposeMessageActivity::startMsgListQuery(),从DB中读出列表;
MessageListAdapter::bindView(..); MessageItem::MessageItem(..),解析cursor,并将数据赋给各个message item; 4、RecipientsEditor的实现。
a、收件人栏输入两个及以上字符后自动列出匹配的原理
字符改变 --> 触发text changed事件 --> ... --> RecipientsAdapter::runQueryOnBackgroundThread(..) --> ... --> AutoCompleteTextView::onFilterComplete(..) --> AutoCompleteTextView::showDropDown() --> RecipientsAdapter::bindView(..)
其中,函数runQueryOnBackgroundThread是从数据库中查询符合条件的收件人号码或email地址;bindView则是将查询到的各项作为item insert到ListView中。
b、。。。。 5、发送mms的过程。
以ComposeMessageActivity中的发送为例。
保存后为草稿 --> 调用ComposeMessageActivity::sendMmsWorker(...) --> MmsMessageSender::sendMessage(...) --> 设置时间等,将mms move到 out box --> requestService TransactionService::SEND_TRANSACTION --> TransactionService::ServiceHandler::handleMessage(...) --> ... --> SendTransaction::run() --> Transaction::sendPdu(...) --> HttpUtils.httpConnection(...) --> AndroidHttpClient::execute(...)。
AndroidHttpClient::execute 会执行真正的发送操作。 6、。。。