配色: 字号:
MTK 短信相关
2012-08-06 | 阅:  转:  |  分享 
  
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;

}



献花(0)
+1
(本文系小云蔡首藏)