|
MTK 短信相关 |
|
|
MTK短信相关
分类:MTK学习资料2012-04-0814:2732人阅读评论(0)收藏举报
1、全局变量和资源
短信箱容量
[\custom\ps\IWIT23_07A_PMJ_BB\customer_ps_inc.h]
?
#defineCM_SMS_MAX_MSG_NUM400//手机+SIM卡
[\custom\common\PLUTO_MMI\nvram_common_defs.h]
#defineNVRAM_EF_SMSAL_SMS_TOTAL200//手机
信箱和索引表
[\custom\common\mmi_msg_context.c]
unsignedshortmmi_frm_sms_inbox_list[CM_SMS_MAX_MSG_NUM];//收件箱索引表
unsignedshortmmi_frm_sms_outbox_list[CM_SMS_MAX_MSG_NUM];//发件箱索引表
mmi_frm_sms_msgbox_structmmi_frm_sms_msg_box[CM_SMS_MAX_MSG_NUM];//信箱
[\plutommi\mmi\miscframework\miscframeworkinc\SMSApi.h]
mmi_frm_sms_app_msgbox_enum//信箱类型枚举
MMI_FRM_SMS_APP_INBOX=0x02,
MMI_FRM_SMS_APP_OUTBOX=0x04
[\plutommi\mmi\miscframework\miscframeworkinc\SMSStruct.h]
?
mmi_frm_sms_msgbox_enum//信箱类型枚举
MMI_FRM_SMS_INBOX=0x02,
MMI_FRM_SMS_OUTBOX=0x04,
索引表mmi_frm_sms_inbox_list和索引表mmi_frm_sms_outbox_list,分别对应【消息】菜单中的【收件箱】和【发件箱】。
信箱mmi_frm_sms_msg_box保存的只是短信副本,用于显示和其它处理,直接更改其数据对实际的短信无效,必须向L4层发送消息才能生效。
通过索引列表(mmi_frm_sms_xxbox_list)在短信箱菜单和短信之间建立关联:
>菜单
>消息
>收件箱
>短信1-->mmi_frm_sms_inbox_list[itemIndex]-->smsIndex
>短信2
[...]
>短信n
短信箱(字串/屏幕)资源
[plutommi\mmi\Messages\MessagesInc\MessagesResourceData.h]
?
STR_INBOX_MENUENTRY//“收件箱”
STR_OUTBOX_MENUENTRY,//“发件箱”
SCR_ID_MSG_INBOX_LIST//收件箱屏
SCR_ID_MSG_OUTBOX_LIST,//发件箱屏幕
STR_SCR6028_CAPTION//“消息选单”
2、发短信
2.1、发送过程SmsMoMtGuiInterface.c
? SmsMoMtGuiInterface SmsPsHandler SMSCore SMSMsg ? 1 mmi_msg_highlight_done
短信编辑[完成] ? ? ? ? ? mmi_msg_entry_send_option
进入[发送选项] ? ? ? ? 2 mmi_msg_highlight_send_only
高亮[(仅)发送]选项 ? ? ? ? 3 mmi_msg_send_msg_to_only_entry
进入[(仅)发送]选项 ? ? ? ? 4 ? mmi_msg_send_msg_req ? ? ? ? ? ? mmi_frm_sms_send_sms ? ? ? ? ? mmi_frm_sms_write_action ? ? ? ? ? mmi_frm_sms_read_action ? ? 5 ? ? ? mmi_frm_sms_pre_send_sms ? 6 ? ? ? ?mmi_frm_sms_send_sms_req ? ? ? ? ? mmi_frm_sms_send_sms_seg ? ? ? ? ? [......] ? 7 ? ? ? mmi_frm_sms_send_sms_rsp ? ? ? ? ? mmi_msg_send_msg_rsp ? ? HighlightWMessageHandler
回到[写短信]菜单项 ? ? ? ? ? ? ? ? ? 2.2、发送过程详解:
2.2.1、短信编辑【完成】
短信编辑编辑【完成】后,按[完成]键盘进入发送选项单:
[SmsMoMtGuiInterface.c]
voidmmi_msg_highlight_done(void)
{
mmi_msg_highlight_generic(
STR_GLOBAL_OK,
IMG_GLOBAL_OK,
STR_GLOBAL_BACK,
IMG_GLOBAL_BACK,
mmi_msg_entry_send_option,
GoBackHistory);
[...]
}
进入[发送选项],将默认发送选项设为(仅)发送(SENDONLY):
[SmsMoMtGuiInterface.c]
voidmmi_msg_entry_send_option(void)
{
[...]
if(g_msg_cntx.sendMessageCase!=SEND_CASE_SEND_FROM_OTHER_APP)
{
g_msg_cntx.sendMessageCase=SEND_CASE_SEND_ONLY;/reset/
}
[...]
}
2.2.1、选择发送选项
以(仅)发送(SENDONLY)为例。在高亮事件中注册ENTRY函数:
[SmsMoMtGuiInterface.c]
voidmmi_msg_highlight_send_only(void)
{
#ifdef__MMI_SEND_BY_SEARCH_NAME__
[...]
#else/__MMI_SEND_BY_SEARCH_NAME__/
mmi_msg_highlight_generic(
STR_GLOBAL_OK,
IMG_GLOBAL_OK,
STR_GLOBAL_BACK,
IMG_GLOBAL_BACK,
mmi_msg_send_msg_to_only_entry,
GoBackHistory);
#endif/__MMI_SEND_BY_SEARCH_NAME__/
}
2.2.2、进入【(仅)发送】选项
[SmsMoMtGuiInterface.c]
voidmmi_msg_send_msg_to_only_entry(void)
{
[...]
g_msg_cntx.msg_send_info.CurrSendSmsNumbers=0;
g_msg_cntx.msg_send_info.TotalSendSmsNumbers=1;
[...]
elseif(g_msg_cntx.sendMessageCase!=SEND_CASE_SEND_FROM_PHB)
{
memset(g_msg_cntx.smsPhoneNumber,0,(MAX_DIGITS+1)ENCODING_LENGTH);
[...]
}
mmi_msg_send_msg_req((U8)g_msg_cntx.smsPhoneNumber,MMI_FRM_SMS_INVALID_INDEX,0);
}
2.2.3、设置短信发送请求标志
[SmsPsHandler.c]
voidmmi_msg_send_msg_req(U8number,U16replyindex,U8hidenumscreen)
{
mmi_frm_sms_send_structsendData=OslMalloc(sizeof(mmi_frm_sms_send_struct));
memset((S8)sendData,0,sizeof(mmi_frm_sms_send_struct));
#ifdef__MMI_UNIFIED_MESSAGE__
if(!(mmi_um_get_current_msg_box_type()==UM_MSG_BOX_TYPE_UNSENT&&GetExitScrnID()==SCR_ID_MSG_OUTBOX_OPTION))
#else
if(GetMessagesCurrScrnID()!=SCR_ID_MSG_OUTBOX_SEND_OPTION)
#endif
{
sendData->sendrequire=MMI_FRM_SMS_SAVE_AFTER_FAIL;/ML:tocontrolifwecanreleaseEMSornot/
}
[...]
mmi_frm_sms_send_sms(mmi_msg_send_msg_rsp,MOD_MMI,sendData);
OslMfree(sendData);
}
2.3.4、注册短信发送回调函数
注册短信发送回调函数(callback,mmi_msg_send_msg_rsp),调用短信发送预处理函
数(action,mmi_frm_sms_pre_send_sms)
[SMSCore.c]
voidmmi_frm_sms_send_sms(PsFuncPtrU16callback,module_typemod_src,mmi_frm_sms_send_structsendData)
{
mmi_frm_sms_send_structdata=OslMalloc(sizeof(mmi_frm_sms_send_struct));
memcpy((S8)data,(S8)sendData,sizeof(mmi_frm_sms_send_struct));
mmi_frm_sms_write_action(callback,mod_src,data,mmi_frm_sms_pre_send_sms);
}
U8mmi_frm_sms_write_action(PsFuncPtrU16callback,module_typemod_src,voiddata,PsFuncPtrfunction)
{
mmi_frm_sms_action_structaction;
action.mod_src=mod_src;
action.data=data;
action.callback=callback;
action.action=function;
[...]
mmi_frm_sms_action_num++;
[...]
if(mmi_frm_sms_action_curr==MMI_FRM_SMS_INVALID_NUM)
{
mmi_frm_sms_read_action();
}
returnTRUE;
}
U8mmi_frm_sms_read_action(void)
{
PsFuncPtrcurrFuncPtr=mmi_frm_sms_action[mmi_frm_sms_action_head].action;
voidcurrFuncData=mmi_frm_sms_action[mmi_frm_sms_action_head].data;
[...]
mmi_frm_sms_action_num--;
[...]
if(currFuncPtr!=NULL)
{
(currFuncPtr)(currFuncData);
}
[...]
returnTRUE;
}
2.3.5、短信发送预处理
[SMSMsg.c]
voidmmi_frm_sms_pre_send_sms(voidinMsg)
{
mmi_frm_sms_send_structsendData=(mmi_frm_sms_send_struct)inMsg;
[...]
mmi_frm_sms_free_sendsms_data();
sendSMS=OslMalloc(sizeof(mmi_frm_sms_send_struct));
memcpy((S8)sendSMS,(S8)sendData,sizeof(mmi_frm_sms_send_struct));
OslMfree(sendData);
mmi_frm_sms_send_sms_req();
}
2.3.6、短信发送请求
voidmmi_frm_sms_send_sms_req(void)
{
[...]
/checkSC:getSCaddress,inMsgkeepstheflag/
if((sendSMS->sendcheck&MMI_FRM_SMS_SC)!=MMI_FRM_SMS_SC)
{
[...首次进入...]
return;
}
/checkDA:showinputscreen,inMsgkeepsthenumber/
if((sendSMS->sendcheck&MMI_FRM_SMS_DA)!=MMI_FRM_SMS_DA)
{
[...二次进入,弹出号码输入框...]
elseif((strlen((S8)sendSMS->number)==0)&&((sendSMS->sendrequire&MMI_FRM_SMS_REPLY)==0))
{
if(GetCurrScrnId()!=SCR_ID_MSG_NUMBER)
{
mmi_frm_sms_entry_number();
}
return;
}
sendSMS->sendcheck=MMI_FRM_SMS_DA;
}
/checkvalidityofDA/
[...]
/checkFDL:whenFDNon/
{
[...号码输入完毕,按[确认]到此...]
[...短信内容编码...]
result=mmi_frm_sms_pack_sms();
[...绘制发送短信发送界面...]
mmi_frm_sms_entry_send();
[...设置短信发送回调...]
SetProtocolEventHandler(mmi_frm_sms_send_sms_rsp,PRT_MSG_ID_MMI_SMS_SEND_MSG_RSP);
SetProtocolEventHandler(mmi_frm_sms_abort_sms_ind,PRT_MSG_ID_MMI_SMS_SEND_ABORT_START_IND);
[...(如果是长短信,循环)发送...]
for(i=0;i {
mmi_frm_sms_send_sms_seg();
}
[...]
}
}
voidmmi_frm_sms_send_sms_seg(void)
{
MMI_FRM_SMS_SEND_MSG_REQ_STRUCTsendSms;
[...]
mmi_frm_sms_send_message(MOD_MMI,MOD_L4C,0,PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ,(oslParaType)sendSms,NULL);
[...]
}
2.3.7、短信发送回调
无论发送是否成功(或者[取消]),最后返回并高亮[写短信]菜单项:HighlightWMessageHandler()。
[SMSMsg.c]
voidmmi_frm_sms_send_sms_rsp(voidinMsg)
{
[...]
mmi_frm_sms_callback_action((void)number,sendResult);
[...]
}
[SmsPsHandler.c]
voidmmi_msg_send_msg_rsp(voidnumber,module_typemod,U16result)
{
switch(result)
{
caseMMI_FRM_SMS_OK:
[...设置跳转节点...]
elseif(IsScreenPresent(SCR_ID_MSG_WRITE))
{
SetMessagesScrnIdToDelHistoryNodes(SCR_ID_MSG_WRITE);
}
[...删除历史屏幕,返回[写短信]...]
if(g_msg_cntx.msg_send_info.CurrSendSmsNumbers==g_msg_cntx.msg_send_info.TotalSendSmsNumbers)
{
DeleteMessagesHistoryNodes();
mmi_frm_sms_delete_screen_history();
}
[...]
}
}
3、收短信
3.1、短信接收过程
l4a_callback
SMSMsg
SmsPsHandler
MessagesMiscell
1
l4c_sms_new_msg_text_lind
[...]
mmi_frm_sms_new_sms_ind
2
mmi_frm_sms_new_sms
mmi_frm_sms_indicate_sms
mmi_frm_sms_new_msg_ind
3
mmi_msg_handle_new_msg_ind
4
mmi_msg_new_msg_ind
mmi_msg_entry_new_msg_ind
3.2、接收过程详解:
3.2.1、收到新短信
L4层收到短信,向MMI_Task递交消息。
[l4a_callback.c]
voidl4c_sms_new_msg_text_lind(...)
{
[…]
ilm_ptr->msg_id=(kal_uint16)MSG_ID_MMI_SMS_DELIVER_MSG_IND;/Setthemessageid/
//MSG_ID_MMI_SMS_DELIVER_MSG_IND被注册到mmi_frm_sms_new_sms_ind函数:↘
[SMSMsg.c]
voidmmi_frm_sms_set_protocol_event_handler(void)
{
SetProtocolEventHandler(mmi_frm_sms_new_sms_ind,PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND);
[…]
}
[ProtocolEvents.h]
#definePRT_MSG_ID_MMI_SMS_DELIVER_MSG_INDMSG_ID_MMI_SMS_DELIVER_MSG_IND
[…]
SEND_ILM(MOD_L4C,MOD_MMI,MMI_L4C_SAP,ilm_ptr);
}
MMI层收到新短信,更新短信计数器,转换短信数据,并压入未读短信队列。短信过滤等操作放在CHISTIncRecvdSMS()之前。
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
voidmmi_frm_sms_new_sms_ind(voidinMsg)
{
if((1==IsBlockAndEmergencyOnly())
{
[…]
delete_pending_sms();
[…]
}
CHISTIncRecvdSMS();
/convertL4datatoMMIdata/
mmi_frm_sms_convert_new_sms(msgInd,data);
/puttoawaitedlistlastentry,fromnowononlyprocessnewdataasawaitedlistlastentry/
mmi_frm_sms_add_new_sms(data,msgInd->no_msg_data,msgInd->msg_data);
/processnewsmsdata/
mmi_frm_sms_new_sms();
[…]
}
3.2.2、短信分类
新短信的信箱类型为MMI_FRM_SMS_AWAITS,消息类型为mmi_frm_sms_deliver_msg_struct,必须转换为mmi_frm_sms_msgbox_struct类型,保存到全局的msgbox,并设置其信箱类型为MMI_FRM_SMS_UNREAD,添加其索引到inbox。
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
voidmmi_frm_sms_new_sms(void)
{
[...]
caseMMI_FRM_SMS_AWAITS:
{
mmi_frm_sms_indicate_sms(index);
}
[...]
}
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
voidmmi_frm_sms_indicate_sms(U16index)
{
[…]
mmi_frm_sms_convert_mt_to_entry(data,entry);↘
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
voidmmi_frm_sms_convert_mt_to_entry(mmi_frm_sms_deliver_msg_structdata,mmi_frm_sms_msgbox_structentry)
type=MMI_FRM_SMS_UNREAD;//设置短信类型
msgbox_index=mmi_frm_sms_add_sms_to_msgbox(entry,data->index,segment);//添加短信到inbox,关键!
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
U16mmi_frm_sms_add_sms_to_msgbox(mmi_frm_sms_msgbox_structentry,U16index,U8thisseg)
entryindex=mmi_frm_sms_add_sms_entry(entry,index,thisseg);↘
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
U16mmi_frm_sms_add_sms_entry(mmi_frm_sms_msgbox_structdata,U16L4index,U8thissegment)
#endif/__UNIFIED_MESSAGE_SIMBOX_SUPPORT__/
if((data->msgtype&MMI_FRM_SMS_INBOX)==MSMS_INBOX)
{
type=MMI_FRM_SMS_INBOX;//短信分类
}
mmi_frm_sms_add_sms_to_list(entry,entryindex);↘
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
voidmmi_frm_sms_add_sms_to_list(mmi_frm_sm_msgbox_structdata,U16index)
caseMMI_FRM_SMS_UNREAD:
[...添加索引到收件箱...]
if(i==mmi_frm_sms_msg_check_num)
{
mmi_frm_sms_new_msg_ind(msgbox_index);
}
[…]
}
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
voidmmi_frm_sms_new_msg_ind(U16index)
{
[…]
if(mmi_frm_sms_interrupt_handler[i].msgid==PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND)
{
mmi_frm_sms_interrupt_handler[i].callback((void)data,MOD_MMI,MMI_FRM_SMS_OK);//callback注册的函数为mmi_msg_handle_new_msg_ind↘
[\plutommi\mmi\messages\messagessrc\SmsPsHandler.c]
voidmmi_msg_set_protocol_event_handler(void)
{
mmi_frm_sms_reg_interrupt_check(MOD_MMI,PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND,mmi_msg_handle_new_msg_ind);
[…]
}
//对比mmi_msg_set_protocol_event_handler与mmi_frm_sms_set_protocol_event_handler,这两个函数都使用了PRT_MSG_ID_MMI_SMS_DELIVER_MSG_IND
break;
[…]
}
3.2.3、新短信提示
收到新短信之后,弹出“新短信”提示,如果当前处在待机界面,则显示新短信来自,并更改左软键为[读取]。
[\plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c]
voidmmi_msg_new_msg_ind(U16index)
{
[...]
#ifdef__UNIFIED_MESSAGE_SIMBOX_SUPPORT__
mmi_msg_entry_new_sim_msg_ind();
#else/__UNIFIED_MESSAGE_SIMBOX_SUPPORT__/
mmi_msg_entry_new_msg_ind();//新短信查看入口
[...]
mmi_frm_sms_get_list_index(&type,&list_index,g_msg_cntx.msg_ind_index);
[\plutommi\mmi\miscframework\miscframeworksrc\SMSCore.c]
voidmmi_frm_sms_get_list_index(U16type,U16index,U16msgbox_index)
mmi_frm_sms_get_sms_list_index(type,index,msgbox_index);↘
voidmmi_frm_sms_get_sms_list_index(U16type,U16index,U16msgbox_index)
while(i while(i while(i [...]
mmi_msg_entry_new_msg_popup(MSG_NEW_MSG_NORMAL);//1.弹出新短信提示框
#endif/__UNIFIED_MESSAGE_SIMBOX_SUPPORT__/
[...]
}
[plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c]
voidmmi_msg_entry_new_msg_ind(void)
{
[...]
g_msg_cntx.msg_ind_after_call=FALSE;
if(IsKeyPadLockState()==0)
{
ShowCategory154Screen(
0,
0,
STR_SCR6035_LSK,
IMG_SMS_COMMON_NOIMAGE,
STR_GLOBAL_BACK,
IMG_SMS_COMMON_NOIMAGE,
(PU8)GetString(STR_NEW_MESSAGE_FROM_ID),//在待机界面显示“消息来自:”
(PU8)mmi_msg_get_new_msg_ind_string(),
IMG_NEW_MESSAGE_NOTIFICATION_MSG_IN_IDLE,
NULL);
SetRightSoftkeyFunction(mmi_msg_go_back_from_new_msg_ind,KEY_EVENT_UP);
SetLeftSoftkeyFunction(mmi_msg_get_msg_new,KEY_EVENT_UP);//左软键[读取]
SetKeyHandler(mmi_msg_end_key_from_new_msg_ind,KEY_END,KEY_EVENT_DOWN);
}
[…]
}
3.3、【读取】短信
在待机屏按下[读取]键,向底层请求短信内容。阅读短信内容之后,按[返回]键,则退到收件箱。
[\plutommi\mmi\messages\messagessrc\SmsPsHandler.c]
voidmmi_msg_get_msg_new(void)
{
[...]
mmi_msg_get_msg_req(MMI_FRM_SMS_APP_NOBOX,g_msg_cntx.msg_ind_index);//发送读取短信内容的请求,注意,这里用的是NOBOX
mmi_frm_sms_get_list_index(&type,&list_index,g_msg_cntx.msg_ind_index);
[...]
mmi_msg_exit_bizbox_list_dummy();↘
[\plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c]
voidmmi_msg_exit_inbox_list_dummy(void)
currHistory.entryFuncPtr=mmi_msg_entry_inbox_list;//设置阅读新短信之后按“返回”键跳转到哪里。
g_msg_cntx.toDisplayMessageList=TO_DISPLAY_MESSAGE_LIST_INBOX;//设置显示页面
3.4、更新短信状态
读取请求发出之后,L4层已经把新短信状态改成已读,mmi_frm_sms_msg_box中的状态也应同步。
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
voidmmi_frm_sms_read_sms(PsFuncPtrU16callback,module_typemod_src,U16type,U16index,MMI_BOOLchange_status)
mmi_frm_sms_set_sms_status(type,index,MMI_FRM_SMS_INBOX);
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
U8mmi_frm_sms_set_sms_status(U16type,U16index,U16newtype)
{
[...]
switch(type)
{
[...]
caseMMI_FRM_SMS_INBOX:
caseMMI_FRM_SMS_UNREAD:
msgindex=mmi_frm_sms_inbox_list[index];
mti=(mmi_frm_sms_msg_box[msgindex].msgtype&0xf000);
mmi_frm_sms_msg_box[msgindex].msgtype=mti|newtype;//更改状态
break;
[…]
}
3、短信箱
3.1、信箱初始化
开机时,系统逐条读取所有短信,保存到mmi_frm_sms_msg_box,然后根据短信类型(未读/已读/已发送...)将索引添加到对应的mmi_frm_sms_xxbox_list。
开机之后,收到新短信或者发送短信时选择了“发送并保存”,则短信会即时添加到mmi_frm_sms_msg_box和各自对应的mmi_frm_sms_xxbox_list。
(1)voidmmi_frm_sms_convert_mt_to_entry()
(2)voidmmi_frm_sms_convert_startup_read_to_entry()
3.2、信箱入口
以收件箱为例。入口函数并不直接生成列表,而是传递回调函数mmi_msg_inbox_list_get_item给Categrory。
mmi_msg_pre_entry_inbox_list
[\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_inbox_list(void)
{
[...]
ShowCategory184Screen(
STR_SCR6010_CAPTION,
IMG_SMS_ENTRY_SCRN_CAPTION,
STR_GLOBAL_OK,
IMG_GLOBAL_OK,
STR_GLOBAL_BACK,
IMG_GLOBAL_BACK,
numitem,
mmi_msg_inbox_list_get_item,
mmi_msg_inbox_list_get_hint,
hiliteitem,
guiBuffer);
[...]
}
[\plutommi\mmi\GUI\GUI_SRC\wgui_dynamic_menuitems.c]
voidload_dynamic_item_buffer(S32n_items)
{
for(i=0;i {
if(dynamic_item_buffer.load_func(i,(UI_string_type)subMenuData[i],&image,3))
//调用mmi_msg_inbox_list_get_item
[...]
}
在mmi_msg_inbox_list_get_item函数,取方号码(或姓名)做信箱列表item标题,并判断短信的状态(已读/未读)。
[\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c]
pBOOLmmi_msg_inbox_list_get_item(S32item_index,UI_string_typestr_buff,PU8img_buff_p,U8str_img_mask)mmi_msg_inbox_list_get_item
{
[…]
AnsiiToUnicodeString(temp,(S8)mmi_frm_sms_get_address(MMI_FRM_SMS_APP_INBOX
,(U16)item_index));//1取发件方号码
name=lookUpNumber(temp);//2取发件方姓名(如果电话本有记录)
[…]
img_buff_p=get_image(IMG_MESSAGE_UNREAD);//3未读短信图标
[…]
img_buff_p=get_image(IMG_MESSAGE_READ);//4已读短信图标
[…]
}
3.3、阅读短信
以收件箱为例。阅读短信时,并不是直接从全局数组mmi_frm_sms_msg_box读取,而是通过发送PRT_MSG_ID_MMI_SMS_GET_MSG_REQ获得短信,读取之后,短信的未读状态变为已读。
[\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_inbox_list(void)
SetLeftSoftkeyFunction(mmi_msg_get_msg_inbox,KEY_EVENT_UP);//设置左软件
[\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c]
voidmmi_msg_get_msg_inbox(void)
g_msg_cntx.toDisplayMessageList=TO_DISPLAY_MESSAGE_LIST_INBOX;
mmi_msg_get_msg_req(MMI_FRM_SMS_APP_INBOX,(U16)g_msg_cntx.currBoxIndex);//请求的是MMI_FRM_SMS_APP_INBOX短信
[\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c]
voidmmi_msg_get_msg_req(U16type,U16index)
mmi_frm_sms_read_sms(mmi_msg_get_msg_rsp,MOD_MMI,type,index,MMI_TRUE);
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
voidmmi_frm_sms_read_sms(PsFuncPtrU16callback,module_typemod_src,U16type,U16index,MMI_BOOLchange_status)
{
mmi_frm_sms_get_sms_index((mmi_frm_sms_msgbox_enum)type,index,data);//根据信箱类型,取得L4index。
[...]
mmi_frm_sms_set_sms_status(type,index,MMI_FRM_SMS_INBOX);//同步更改mmi_frm_sms_msg_box短信状态,底层短信状态在发送读取请求时更改。
[...]
mmi_frm_sms_write_action(callback,mod_src,data,mmi_frm_sms_read_sms_req);//提交读取短信请求
}
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
voidmmi_frm_sms_read_sms_req(voidinMsg)
mmi_frm_sms_read_sms_seg();
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
U8mmi_frm_sms_read_sms_seg(void)
SetProtocolEventHandler(mmi_frm_sms_read_sms_rsp,PRT_MSG_ID_MMI_SMS_GET_MSG_RSP);
mmi_frm_sms_send_message(MOD_MMI,MOD_L4C,0,PRT_MSG_ID_MMI_SMS_GET_MSG_REQ,(oslParaType)msgReq,NULL);
读取请求发送之后,在mmi_frm_sms_read_sms_rsp接收请求处理结果,显示短信。
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
voidmmi_frm_sms_read_sms_rsp(voidinMsg)//短信请求应答
mmi_frm_sms_callback_action(&type,result);
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
voidmmi_frm_sms_callback_action(voiddata,U16result)
callback(data,(module_type)mod_src,result);//调用mmi_msg_entry_inbox_msg
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_inbox_msg(void)
//显示短信内容
3.4、短信【选项】菜单
1、选项菜单资源:
SMS_INBOX_OPTIONS_MENUID//菜单ID
STR_GLOBAL_OPTIONS//字串资源
2、选项菜单入口:
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_option_inbox(void)
3、菜单子选项的初始化:
[\plutommi\customer\custresource\pluto_mmi\res_mmi\Res_Messages.c]
voidPopulateMessagesResData(void)
{
[...]
ADD_APPLICATION_MENUITEM((SMS_INBOX_OPTIONS_MENUID,/1.收件箱短信的[选项]菜单/
0,NUM_MESSAGES_INBOXOP_MENU,/2.[选项]菜单项个数/
SMS_INBOX_OPT_REPLY_MENUID,/3.[回复]选项/
SMS_INBOX_OPT_DELETE_MENUID,/4.[删除]选项/
[...]
STR_GLOBAL_OPTIONS,IMG_SMS_COMMON_NOIMAGE));
[...]
}
短信相关的高亮注册集中在mmi_msg_set_highlight_handler,可以从这里快速查找到[选项]各子项:
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_set_highlight_handler(void)
{
[...]
SetHiliteHandler(SMS_INBOX_OPT_REPLY_MENUID,mmi_msg_highlight_reply);
SetHiliteHandler(SMS_INBOX_OPT_EDIT_MENUID,mmi_msg_highlight_edit);
SetHiliteHandler(SMS_INBOX_OPT_FORWARD_MENUID,mmi_msg_highlight_forward);
[...]
}
4、业务信箱
业务信箱沿用原有的收/发件箱模式,但由于无法保存自定义的短信状态值,所以必须自行建一个状态映射表,用以保存是否业务短信。
4.1、定义相关资源
[\custom\common\mmi_msg_context.c]
unsignedshortmmi_frm_sms_inbox_list[CM_SMS_MAX_MSG_NUM];
unsignedshortmmi_frm_sms_outbox_list[CM_SMS_MAX_MSG_NUM];
unsignedshortmmi_frm_sms_bizbox_list[CM_SMS_MAX_MSG_NUM];//add
mmi_frm_sms_msgbox_structmmi_frm_sms_msg_box[CM_SMS_MAX_MSG_NUM];
[\custom\common\mmi_msg_context.h]
externunsignedshortmmi_frm_sms_inbox_list[CM_SMS_MAX_MSG_NUM];
externunsignedshortmmi_frm_sms_outbox_list[CM_SMS_MAX_MSG_NUM];
externunsignedshortmmi_frm_sms_drafts_list[CM_SMS_MAX_MSG_NUM];
externunsignedshortmmi_frm_sms_bizbox_list[CM_SMS_MAX_MSG_NUM];//add
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
staticU16mmi_frm_sms_msgbox_size=0;
staticU16mmi_frm_sms_inbox_size=0;
staticU16mmi_frm_sms_outbox_size=0;
staticU16mmi_frm_sms_bizbox_size=0;//add
[\plutommi\mmi\miscframework\miscframeworkinc\SMSStruct.h]
mmi_frm_sms_msgbox_enum
MMI_FRM_SMS_INBOX=0x02,//read
MMI_FRM_SMS_OUTBOX=0x04,
MMI_FRM_SMS_BIZUNREAD=0x200,//add
MMI_FRM_SMS_BIZINBOX=0x400,//add
[\plutommi\mmi\miscframework\miscframeworkinc\SMSApi.h]
typedefenum
{
[...]
MMI_FRM_SMS_APP_INBOX=0x02,
MMI_FRM_SMS_APP_OUTBOX=0x04,
MMI_FRM_SMS_APP_BIZUNREAD=0x200,//add
MMI_FRM_SMS_APP_BIZINBOX=0x400,//add
[...]
}mmi_frm_sms_app_msgbox_enum;
[\plutommi\mmi\messages\messagesinc\MessagesResourceData.h]
typedefenum
{
[...]
SCR_ID_MSG_BIZBOX_MSG,//add
SCR_ID_MSG_BIZBOX_LIST,//add
MESSAGES_SCR_ID_DEFINES_MAX
}MESSAGES_SCREEN_ENUM;
[\plutommi\mmi\messages\messagesinc\MessagesResourceData.h]
typedefenum
{
MESSAGES_MENU_WMESSAGE,
MESSAGES_MENU_INBOX,
MESSAGES_MENU_OUTBOX,
MESSAGES_MEUN_BIZBOX,//add
[...]
NUM_MESSAGES_MAIN_MENU
}MESSAGES_MAIN_MENU_ENUMS;
[\plutommi\mmi\messages\messagesinc\SmsGuiInterfaceType.h]
TO_DISPLAY_MESSAGE_LIST_NONE,
TO_DISPLAY_MESSAGE_LIST_INBOX,
TO_DISPLAY_MESSAGE_LIST_OUTBOX,
TO_DISPLAY_MESSAGE_LIST_BIZBOX,//add
4.2、接收业务短信
4.2.1、新短信类型
[\plutommi\mmi\miscframework\miscframeworksrc\SMSCore.c]
voidmmi_frm_sms_read_sms(PsFuncPtrU16callback,module_typemod_src,U16type,U16index,MMI_BOOLchange_status)
{
[...]
if(TRUE==IsBusinessPlatformNumber(mmi_frm_sms_msg_box[index].number))
{
mmi_frm_sms_set_sms_status(type,index,MMI_FRM_SMS_BIZINBOX);
}
else
{
mmi_frm_sms_set_sms_status(type,index,MMI_FRM_SMS_INBOX);
}
[...]
}
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
voidmmi_frm_sms_convert_mt_to_entry(mmi_frm_sms_deliver_msg_structdata,mmi_frm_sms_msgbox_structentry)
{
[...]
if(TRUE==IsBusinessPlatformNumber((S8)data->addr_number.number))/是否业务短信/
type=MMI_FRM_SMS_BIZUNREAD;
else
type=MMI_FRM_SMS_UNREAD;
[...]
}
4.2.2、添加到信箱
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
U16mmi_frm_sms_add_sms_to_msgbox(mmi_frm_sms_msgbox_structentry,U16index,U8thisseg)
{
U16entryindex;
/1.addtomsgentry/
entryindex=mmi_frm_sms_add_sms_entry(entry,index,thisseg);
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
U16mmi_frm_sms_add_sms_entry(mmi_frm_sms_msgbox_structdata,U16L4index,U8thissegment)
{
[...]
#endif/__UNIFIED_MESSAGE_SIMBOX_SUPPORT__/
if((data->msgtype&MMI_FRM_SMS_BIZBOX)==MMI_FRM_SMS_BIZBOX)
{
type=MMI_FRM_SMS_BIZBOX;
}
elseif((data->msgtype&MMI_FRM_SMS_INBOX)==MMI_FRM_SMS_INBOX)
{
type=MMI_FRM_SMS_INBOX;
}
[...]
}
/2.updatemsglist/
if(mmi_frm_sms_list_done)
{
mmi_frm_sms_add_sms_to_list(entry,entryindex);
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
voidmmi_frm_sms_add_sms_to_list(mmi_frm_sms_msgbox_structdata,U16index)
{
[...]
if((data->msgtype&MMI_FRM_SMS_UNREAD)==MMI_FRM_SMS_UNREAD)
{
type=MMI_FRM_SMS_UNREAD;
}
elseif((data->msgtype&MMI_FRM_SMS_INBOX)==MMI_FRM_SMS_INBOX)
{
type=MMI_FRM_SMS_INBOX;
}
elseif((data->msgtype&MMI_FRM_SMS_BIZUNREAD)==MMI_FRM_SMS_BIZUNREAD)
{
type=MMI_FRM_SMS_BIZUNREAD;
}
if((data->msgtype&MMI_FRM_SMS_BIZINBOX)==MMI_FRM_SMS_BIZINBOX)
{
type=MMI_FRM_SMS_BIZINBOX;
}
[...]
switch(type)
{
caseMMI_FRM_SMS_BIZUNREAD:
caseMMI_FRM_SMS_BIZINBOX:
[...]
mmi_frm_sms_bizbox_list[i]=index;//把索引添加到业务信箱的索引表
mmi_frm_sms_bizbox_size++;
break;
caseMMI_FRM_SMS_UNREAD:
caseMMI_FRM_SMS_INBOX:
[...]
}
}
returnentryindex;/3.返回入口索引/
}
//执行mmi_msg_get_msg_req(MMI_FRM_SMS_APP_NOBOX,g_msg_cntx.msg_ind_index);发送读取短//信请求之后,在voidmmi_frm_sms_read_sms_rsp(voidinMsg)[\plutommi\mmi\MiscFramew//ork\MiscFrameworkSrc\SMSMsg.c]收到应答:
caseSMSAL_REC_READ:
type=(msgRsp->mti<<12)|mmi_frm_sms_msg_box[g_msg_cntx.msg_ind_index].msgtype;/直接使用短信本身的类型,以区分业务信箱和普通信箱/
[\plutommi\mmi\messages\messagessrc\SmsPsHandler.c]
voidmmi_msg_get_msg_rsp(voiddata,module_typemod,U16result)
caseMMI_FRM_SMS_BIZBOX:
mmi_msg_entry_bizbox_msg();//读取业务信箱的短信内容
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_bizbox_msg(void)
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
U8mmi_msg_get_bizbox_header(void)
voidmmi_msg_go_back_from_bizbox_msg(void)//跳转到业务信箱-》
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
U8mmi_frm_sms_get_sms_address(U16type,U16index)
caseMMI_FRM_SMS_BIZBOX:
entryindex=mmi_frm_sms_bizbox_list[index];
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
U16mmi_frm_sms_get_sms_list_size(U16type)
caseMMI_FRM_SMS_BIZBOX:
returnmmi_frm_sms_bizbox_size
4.2.3、新业务短信提示
[\plutommi\mmi\messages\messagessrc\MessagesMiscell.c]
voidmmi_msg_new_msg_ind(U16index)
{
[…]
//弹出新短信提示框
if(MMI_FRM_SMS_APP_BIZUNREAD==mmi_frm_sms_msg_box[index].msgtype)
{
mmi_msg_entry_new_msg_popup(MSG_NEW_MSG_BUSINESS);//弹出新业务短信提示框
}
else
{
mmi_msg_entry_new_msg_popup(MSG_NEW_MSG_NORMAL);
}
[…]
mmi_msg_entry_new_msg_ind();
[…]
}
[\plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c]
voidmmi_msg_entry_new_msg_ind(void)
{
[…]
if(MMI_FRM_SMS_APP_BIZUNREAD==mmi_frm_sms_msg_box[g_msg_cntx.msg_ind_index].msgtype)
{
titleID=STR_NEW_BUSINESS_MESSAGE_FROM;
}
else
{
titleID=STR_NEW_MESSAGE_FROM_ID;
}
[…]
//在待机界面显示“新短信来自:”
ShowCategory154Screen(
0,
0,
STR_SCR6035_LSK,
IMG_SMS_COMMON_NOIMAGE,
STR_GLOBAL_BACK,
IMG_SMS_COMMON_NOIMAGE,
(PU8)GetString(titleID),
(PU8)mmi_msg_get_new_msg_ind_string(),
IMG_NEW_MESSAGE_NOTIFICATION_MSG_IN_IDLE,
NULL);
[…]
}
4.3、阅读新短信
4.3.1、响应【读取】键、发送“读取”请求
voidmmi_msg_get_msg_new(void)
{
[...]
g_msg_cntx.msg_ind_in_idle=FALSE;
mmi_msg_get_msg_req(MMI_FRM_SMS_APP_NOBOX,g_msg_cntx.msg_ind_index);
mmi_frm_sms_get_list_index(&type,&list_index,g_msg_cntx.msg_ind_index);
[...]
if(!pending)
{
if(type==MMI_FRM_SMS_BIZUNREAD||type==MMI_FRM_SMS_BIZINBOX)
{
mmi_msg_exit_bizbox_list_dummy();
g_msg_cntx.toDisplayMessageList=TO_DISPLAY_MESSAGE_LIST_BIZBOX;
}
else
{
mmi_msg_exit_inbox_list_dummy();
g_msg_cntx.toDisplayMessageList=TO_DISPLAY_MESSAGE_LIST_INBOX;
}
}
[...]
}
4.3.2、设置【返回】键路径
[\plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c]
voidmmi_msg_exit_bizbox_list_dummy(void)
{
historycurrHistory;
memset(&currHistory,0,sizeof(currHistory));
currHistory.scrnID=SCR_ID_MSG_BIZBOX_LIST;
SetMessagesCurrScrnID(0);
g_msg_cntx.MessagesScrnIdToDelHistoryNodes=SCR_ID_MSG_BIZBOX_LIST;
g_msg_cntx.MessagesScrnIdDelUptoHistoryNodes=SCR_ID_MSG_BIZBOX_LIST;
currHistory.entryFuncPtr=mmi_msg_entry_bizbox_list;//详见3.4查看业务信箱
memset((S8)currHistory.inputBuffer,0,ENCODING_LENGTH);
AddHistory(currHistory);
}
4.3.3、接收“读取”请求的回复
[\plutommi\mmi\miscframework\miscframeworksrc\SMSMsg.c]
voidmmi_frm_sms_read_sms_rsp(voidinMsg)
{
[...]
caseSMSAL_REC_READ:mmi_frm_sms_msg_box[g_msg_cntx.msg_ind_index].msgtype;
type=(msgRsp->mti<<12)|mmi_frm_sms_index_list[g_msg_cntx.msg_ind_index].prevtype;
[...]
mmi_frm_sms_callback_action(&type,result);
}
[\plutommi\mmi\messages\messagessrc\SmsPsHandler.c]
voidmmi_msg_get_msg_rsp(voiddata,module_typemod,U16result)
{
[...]
caseMMI_FRM_SMS_BIZBOX:
mmi_msg_entry_bizbox_msg();
[...]
}
4.3.4、显示短信内容
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_bizbox_msg(void)
{
U8guiBuffer=NULL;
U8pHeader;
EMSDatapEms;
U16strtitle;
if(IsScreenPresent(SCR_ID_MSG_PROCESSING))
{
HistoryReplace(SCR_ID_MSG_PROCESSING,SCR_ID_MSG_BIZBOX_MSG,mmi_msg_entry_bizbox_msg);
return;
}
EntryNewScreen(SCR_ID_MSG_BIZBOX_MSG,mmi_msg_exit_generic,mmi_msg_entry_bizbox_msg,NULL);
PRINT_INFORMATION_2((MMI_TRACE_G6_SMS,"[SmsMoMtGuiInterface.c]mmi_msg_entry_bizbox_msg\n"));
#ifdef__UNIFIED_MESSAGE_LIST_OPTION_SUPPORT__
if(IsScreenPresent(SCR_ID_MSG_BIZBOX_LIST_OPTION))
{
SetMessagesScrnIdToDelHistoryNodes(SCR_ID_MSG_BIZBOX_LIST_OPTION);
}
else
#endif/__UNIFIED_MESSAGE_LIST_OPTION_SUPPORT__/
{
SetMessagesScrnIdToDelHistoryNodes(SCR_ID_MSG_BIZBOX_MSG);
}
SetMessagesCurrScrnID(SCR_ID_MSG_BIZBOX_MSG);
GetCurrEndKeyDownHandler();
guiBuffer=GetCurrGuiBuffer(SCR_ID_MSG_BIZBOX_MSG);
GetEMSDataForView(&pEms,0);
pHeader=mmi_msg_get_bizbox_header();
g_msg_cntx.number_from_phb=0;
#ifdefined(__MMI_MESSAGES_EMS__)
EnableDisableAudioPlayback();
#endif
#ifdef__MMI_MESSAGES_CHAT__
if(pEms->listHead==NULL)
{
if(gChatInvitation)
{
SetChatInboxIndex(PendingSaveSendData.msgboxindex);
strtitle=STR_CHAT_INVITATION;
}
elseif(CheckForInvitationMsg(pEms->textBuffer,(S32)pEms->textLength,TRUE)==TRUE)
{
SetChatInboxIndex(PendingSaveSendData.msgboxindex);
strtitle=STR_CHAT_INVITATION;
if(guiBuffer==NULL)
{
RemoveInvitationChar();
}
}
else
{
strtitle=STR_SCR6024_CAPTION;
gChatInvitation=0;
}
}
else
{
strtitle=STR_SCR6024_CAPTION;
gChatInvitation=0;
}
#else/__MMI_MESSAGES_CHAT__/
strtitle=0;//strtitle=STR_SCR6024_CAPTION;
#endif/__MMI_MESSAGES_CHAT__/
ShowCategory39Screen(
(U16)strtitle,
IMG_SMS_ENTRY_SCRN_CAPTION,
STR_GLOBAL_OPTIONS,
IMG_SMS_COMMON_NOIMAGE,
STR_GLOBAL_BACK,
IMG_SMS_COMMON_NOIMAGE,
pEms,
pHeader,
guiBuffer);
#ifdef__MMI_MESSAGES_CHAT__
if(strtitle==STR_CHAT_INVITATION)
{
SetLeftSoftkeyFunction(mmi_msg_entry_option_chat,KEY_EVENT_UP);
}
else
{
SetLeftSoftkeyFunction(mmi_msg_entry_option_bizbox,KEY_EVENT_UP);
}
#else/__MMI_MESSAGES_CHAT__/
SetLeftSoftkeyFunction(mmi_msg_entry_option_bizbox,KEY_EVENT_UP);//设置【选项】
#endif/__MMI_MESSAGES_CHAT__/
SetLeftSoftkeyFunction(mmi_msg_entry_option_bizbox,KEY_EVENT_UP);//TODO:smsnote:overwriteLSKfunc??(Tonysaid:oldbug.keepit)
SetRightSoftkeyFunction(mmi_msg_go_back_from_bizbox_msg,KEY_EVENT_UP);
}
4.3.5、更新短信状态
读取之后,短信状态发生变化。
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
U8mmi_frm_sms_set_sms_status(U16type,U16index,U8newtype)
{
[...]
caseMMI_FRM_SMS_BIZBOX:
[...]
}
4.4、查看业务短信箱
[plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidHighlightBizboxHandler(void)
{
ChangeLeftSoftkey(STR_GLOBAL_OK,IMG_SMS_COMMON_NOIMAGE);
ChangeRightSoftkey(STR_GLOBAL_BACK,IMG_SMS_COMMON_NOIMAGE);
SetLeftSoftkeyFunction(mmi_msg_pre_entry_bizbox_list,KEY_EVENT_UP);
SetKeyHandler(GoBackHistory,KEY_LEFT_ARROW,KEY_EVENT_DOWN);
SetKeyHandler(mmi_msg_pre_entry_bizbox_list,KEY_RIGHT_ARROW,KEY_EVENT_DOWN);
}
[\plutommi\mmi\messages\messagesinc\SmsGuiInterfaceProt.h]
externvoidHighlightBizboxHandler(void);
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_set_highlight_handler(void)
{
#ifndef__MMI_UNIFIED_MESSAGE__
SetHiliteHandler(MESSAGES_MENU_WMESSAGE_MENU_ID,HighlightWMessageHandler);
SetHiliteHandler(MESSAGES_MENU_INBOX_MENUID,HighlightInboxHandler);
SetHiliteHandler(MESSAGES_MENU_BUSINESS_INBOX_MENUID,HighlightBizboxHandler);
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_set_msg_menu_highlight_handler(void)
{
#ifndef__MMI_UNIFIED_MESSAGE__
SetHiliteHandler(MESSAGES_MENU_WMESSAGE_MENU_ID,HighlightWMessageHandler);
SetHiliteHandler(MESSAGES_MENU_INBOX_MENUID,HighlightInboxHandler);
SetHiliteHandler(MESSAGES_MENU_BUSINESS_INBOX_MENUID,HighlightBizboxHandler);
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_pre_entry_inbox_list(void)
{
if(mmi_frm_sms_get_sms_list_size(MMI_FRM_SMS_APP_BIZBOX)==0)
{
DisplayPopup(
(U8)GetString(STR_GLOBAL_EMPTY),
IMG_GLOBAL_EMPTY,
1,
MESSAGES_POPUP_TIME_OUT,
(U8)EMPTY_LIST_TONE);
}
elseif(mmi_frm_sms_get_sms_list_size(MMI_FRM_SMS_APP_BIZBOX)==MMI_FRM_SMS_INVALID_INDEX)
{
mmi_msg_set_processing_screen(
STR_MESSAGE_MAIN_MENU_CAPTION,
STR_LOADING_SMS,
IMG_GLOBAL_PROGRESS,
STR_LOADING_INBOX_BACK);//沿用INBOX字符
mmi_msg_entry_processing_generic();
/SetInterruptEventHandler(mmi_msg_handle_ready_ind_inbox,NULL,PRT_MSG_ID_MMI_SMS_READY_IND);/
}
/disallowre-enteringSMSapplicationwhenthereisapendingSMSjobrunninginthebackground/
elseif(mmi_frm_sms_check_action_pending())
{
DisplayPopup(
(PU8)GetString(STR_SMS_MSG_NOT_READY_YET),
IMG_GLOBAL_UNFINISHED,
1,
MESSAGES_POPUP_TIME_OUT,
(U8)ERROR_TONE);
}
else
{
mmi_msg_entry_bizbox_list();
}
}
[\plutommi\mmi\messages\messagesinc\SmsGuiInterfaceProt.h]
externvoidmmi_msg_pre_entry_inbox_list(void);
externvoidmmi_msg_pre_entry_bizbox_list(void);
[\plutommi\mmi\messages\messagesinc\SmsGuiInterfaceProt.h]
externvoidmmi_msg_entry_inbox_list(void);
externvoidmmi_msg_entry_bizbox_list(void);//bizboxtest
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_bizbox_list(void)
{
U8guiBuffer=NULL;
S32hiliteitem=0;
S32numitem=mmi_frm_sms_get_sms_list_size(MMI_FRM_SMS_APP_BIZBOX);
if(IsScreenPresent(SCR_ID_MSG_PROCESSING))
{
HistoryReplace(SCR_ID_MSG_PROCESSING,SCR_ID_MSG_BIZBOX_LIST,mmi_msg_entry_bizbox_list);
g_msg_cntx.MessagesScrnIdDelUptoHistoryNodes=SCR_ID_MSG_BIZBOX_LIST;
return;
}
if(numitem==0)
{
DisplayPopup(
(U8)GetString(STR_GLOBAL_EMPTY),
IMG_GLOBAL_EMPTY,
1,
MESSAGES_POPUP_TIME_OUT,
(U8)EMPTY_LIST_TONE);
return;
}
/MostcasesofenteringinboxlistwhileSMSnotreadyarecheckedinmmi_msg_pre_entry_inbox_list.
However,IfnewMTSMScomesduringSMSnotready,afterdeleting/saving/copying/movingSMS,
inboxlistcannotbeenteredandusershouldgobacktoidlescreen./
elseif(numitem==MMI_FRM_SMS_INVALID_INDEX)
{
DeleteScreenIfPresent(SCR_ID_MSG_BIZBOX_LIST);
GoBackHistory();
return;
}
/Updatethetotalinboxvalueinordertogetthecurrentinboxlistsize/
msgbox_info.totalinbox=mmi_frm_sms_get_sms_list_size(MMI_FRM_SMS_APP_BIZBOX);
EntryNewScreen(SCR_ID_MSG_BIZBOX_LIST,mmi_msg_exit_generic,mmi_msg_entry_bizbox_list,NULL);
PRINT_INFORMATION_2((MMI_TRACE_G6_SMS,"[SmsMoMtGuiInterface.c]mmi_msg_entry_bizbox_list\n"));
g_msg_cntx.msg_ind_in_idle=FALSE;
g_msg_cntx.msg_ind_after_call=FALSE;
SetMessagesCurrScrnID(SCR_ID_MSG_BIZBOX_LIST);
SetMessagesScrnIdToDelHistoryNodes(SCR_ID_MSG_BIZBOX_LIST);
guiBuffer=GetCurrGuiBuffer(SCR_ID_MSG_BIZBOX_LIST);
RegisterHighlightHandler(GetMsgIndex);
if(guiBuffer!=NULL)
{
hiliteitem=(g_msg_cntx.currBoxIndex /changeguibuffercontent/
change_cat184_list_menu_history_highlighted_item(hiliteitem,guiBuffer);
}
ShowCategory184Screen(
STR_BUSINESS_INBOX,
IMG_SMS_ENTRY_SCRN_CAPTION,
STR_GLOBAL_OK,
IMG_GLOBAL_OK,
STR_GLOBAL_BACK,
IMG_GLOBAL_BACK,
numitem,
mmi_msg_bizbox_list_get_item,
mmi_msg_bizbox_list_get_hint,
hiliteitem,
guiBuffer);
SetLeftSoftkeyFunction(mmi_msg_get_msg_bizbox,KEY_EVENT_UP);
SetKeyHandler(mmi_msg_get_msg_bizbox,KEY_RIGHT_ARROW,KEY_EVENT_DOWN);
#if(defined(__MMI_SMART_MESSAGE_MO__)&&!defined(__MMI_MESSAGES_EMS__))||defined(__MMI_SMART_MESSAGE_MT__)
SetRightSoftkeyFunction(mmi_msg_go_to_msg_menu,KEY_EVENT_UP);
SetKeyHandler(mmi_msg_go_to_msg_menu,KEY_LEFT_ARROW,KEY_EVENT_DOWN);
#else/(defined(__MMI_SMART_MESSAGE_MO__)&&!defined(__MMI_MESSAGES_EMS__))||defined(__MMI_SMART_MESSAGE_MT__)/
SetRightSoftkeyFunction(GoBackHistory,KEY_EVENT_UP);
SetKeyHandler(GoBackHistory,KEY_LEFT_ARROW,KEY_EVENT_DOWN);
#endif/(defined(__MMI_SMART_MESSAGE_MO__)&&!defined(__MMI_MESSAGES_EMS__))||defined(__MMI_SMART_MESSAGE_MT__)/
}
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
pBOOLmmi_msg_bizbox_list_get_item(S32item_index,UI_string_typestr_buff,PU8img_buff_p,U8str_img_mask)
{
/----------------------------------------------------------------/
/LocalVariables/
/----------------------------------------------------------------/
S8temp[(MAX_DIGITS_SMS+1)ENCODING_LENGTH];
S8name;
/----------------------------------------------------------------/
/CodeBody/
/----------------------------------------------------------------/
if(((mmi_frm_sms_get_status(MMI_FRM_SMS_APP_BIZBOX,(U16)item_index)&0xf000)>>12)==SMSAL_MTI_STATUS_REPORT)
{
UCS2Strcpy((S8)str_buff,(S8)GetString(STR_BIZBOX_REPORT_ID));
}
else
{
memset(temp,0,(MAX_DIGITS_SMS+1)ENCODING_LENGTH);
AnsiiToUnicodeString(temp,(S8)mmi_frm_sms_get_address(MMI_FRM_SMS_APP_BIZBOX,(U16)item_index));
name=lookUpNumber(temp);
if(UCS2Strlen(name))
{
UCS2Strcpy((S8)str_buff,name);
}
else
{
UCS2Strcpy((S8)str_buff,temp);
}
}
if((mmi_frm_sms_get_status(MMI_FRM_SMS_APP_BIZBOX,(U16)item_index)&0x0f)==MMI_FRM_SMS_APP_UNREAD)
{
img_buff_p=get_image(IMG_MESSAGE_UNREAD);
}
else
{
if(mmi_frm_sms_check_complete(MMI_FRM_SMS_APP_BIZBOX,(U16)item_index)==TRUE)
{
img_buff_p=get_image(IMG_MESSAGE_READ);
}
else
{
img_buff_p=get_image(IMG_MESSAGE_SS_NCOMP);
}
}
returnTRUE;
}
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
S32mmi_msg_bizbox_list_get_hint(S32item_index,UI_string_typehint_array)
{
mmi_msg_get_msg_date_time(
(S8)hint_array[0],
NULL,
mmi_frm_sms_get_timestamp(MMI_FRM_SMS_APP_BIZBOX,(U16)item_index));
returnTRUE;
}
[\plutommi\mmi\messages\messagesinc\SmsPsHandler.h]
externvoidmmi_msg_get_msg_inbox(void);
externvoidmmi_msg_get_msg_bizbox(void);
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_get_msg_bizbox(void)
{
g_msg_cntx.toDisplayMessageList=TO_DISPLAY_MESSAGE_LIST_BIZBOX;
mmi_msg_get_msg_req(MMI_FRM_SMS_APP_BIZBOX,(U16)g_msg_cntx.currBoxIndex);
}
4.5、查看业务短信内容
1.从mmi_frm_sms_bizbox_list[]读取短信的L4index:
[\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c]
voidmmi_msg_get_msg_bizbox(void)
mmi_msg_get_msg_req(MMI_FRM_SMS_BIZBOX,(U16)g_msg_cntx.currBoxIndex);
[\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c]
voidmmi_msg_get_msg_req(U16type,U16index)//提交读取短信请求
mmi_frm_sms_read_sms(mmi_msg_get_msg_rsp,MOD_MMI,type,index,MMI_TRUE);
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
voidmmi_frm_sms_read_sms(PsFuncPtrU16callback,module_typemod_src,U16type,U16index,MMI_BOOLchange_status)
mmi_frm_sms_get_sms_index((mmi_frm_sms_msgbox_enum)type,index,data);
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
voidmmi_frm_sms_get_sms_index(mmi_frm_sms_msgbox_enumtype,U16index,U16l4_index)
caseMMI_FRM_SMS_BIZBOX:
L4index=mmi_frm_sms_msg_box[mmi_frm_sms_bizbox_list[index]].startindex;
2.发送读短信请求注册回调:
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
voidmmi_frm_sms_read_sms(PsFuncPtrU16callback,module_typemod_src,U16type,U16index,MMI_BOOLchange_status)
mmi_frm_sms_write_action(callback,mod_src,data,mmi_frm_sms_read_sms_req);
//callback=>mmi_msg_get_msg_rsp
3.在应答回调中显示短信内容:
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
voidmmi_frm_sms_read_sms_rsp(voidinMsg)//短信请求应答
[\plutommi\mmi\messages\messagessrc\SmsMoMtGuiInterface.c]
voidmmi_msg_entry_bizbox_msg(void)//显示短信内容
4.6、开机加载短信
[\plutommi\mmi\miscframework\miscframeworksrc\SMSMsg.c]
voidmmi_frm_sms_startup_read_ind(voidinMsg)
{
[...]
mmi_frm_sms_convert_startup_read_to_entry((MMI_FRM_SMS_STARTUP_READ_MSG_IND_STRUCT)msgInd,entry);//1.短信数据类型转换
mmi_frm_sms_add_sms_to_msgbox(entry,msgInd->index,thisseg);//2.添加到短信箱和索引表
[...]
}
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
voidmmi_frm_sms_convert_startup_read_to_entry(
MMI_FRM_SMS_STARTUP_READ_MSG_IND_STRUCTdata,
mmi_frm_sms_msgbox_structentry)
{
[...]
switch(data->status)
{
caseSMSAL_REC_UNREAD:
[...]
type=MMI_FRM_SMS_BIZINBOX;//如果是业务短信
[...]
type=MMI_FRM_SMS_INBOX;//如果是普通短信
caseSMSAL_REC_READ:
[...]//处理过程与SMSAL_REC_UNREAD相同
[...]
}
[\plutommi\mmi\miscframework\miscframeworksrc\SMSUtil.c]
U16mmi_frm_sms_add_sms_to_msgbox(mmi_frm_sms_msgbox_structentry,U16index,U8thisseg)
{
[..]
/addtomsgentry/
entryindex=mmi_frm_sms_add_sms_entry(entry,index,thisseg);//添加到短信箱
/updatemsglist/
if(mmi_frm_sms_list_done)
{
mmi_frm_sms_add_sms_to_list(entry,entryindex);//添加到索引表
}
returnentryindex;
}
|
|
|
|
|
|
|
|
|
|
|