您的位置:首页 > 其它

通过函数实现删除通话记录

2010-08-31 12:23 267 查看
这里只讨论双卡平台,并以已拨电话为例(其他类似),卡1跟卡2的实现函数不一样。

卡1:
1、 函数实现调用入口:myapp_DeleteDialedNum()
其函数原型为:myapp_DeleteDialedNum()
{
myapp_ReqDeleteCallLog(PHB_LND, chis_p->currDialedCallIndex, 1);
return;
}//和系统函数一样,只是改了函数名
2、 调用函数myapp_ReqDeleteCallLog(U8 type, U8 index, U8 no_data)
其函数原型为:void myapp_ReqDeleteCallLog(U8 type, U8 index, U8 no_data)
{

MYQUEUE Message;
DEL_LAST_NUMBER_REQ *dataPtr;
ClearInputEventHandler(MMI_DEVICE_ALL);
if(type==PHB_LND)
{
SetProtocolEventHandler(myapp_RspDeleteDialedNum, PRT_MMI_PHB_DEL_LAST_NUMBER_RSP);
}
else{
return;
}

dataPtr = (DEL_LAST_NUMBER_REQ*) OslConstructDataPtr(sizeof(DEL_LAST_NUMBER_REQ));
dataPtr->type = type;
dataPtr->index = index;
dataPtr->no_data = no_data;

Message.oslSrcId = MOD_MMI;
Message.oslDestId = MOD_L4C;
Message.oslMsgId = PRT_MMI_PHB_DEL_LAST_NUMBER_REQ;
Message.oslDataPtr = (oslParaType*) dataPtr;
Message.oslPeerBuffPtr = NULL;

ClearInputEventHandler(MMI_DEVICE_ALL);
OslMsgSendExtQueue(&Message);
return;
}//和系统函数不一样,改的地方是if语句,原为switch语句,实现选择删除哪种通话记录,我们只需实现删除已拨电话(其他类同),所以除去多余代码。
3、 在上一个函数里的if条件满足后调用函数myapp_RspDeleteDialedNum(void *info)
其函数原型为:void myapp_RspDeleteDialedNum(void *info)
{

S32 i;
DEL_LAST_NUMBER_RSP *rsp;

rsp = (DEL_LAST_NUMBER_RSP*) info;

if (rsp->result.flag == CALL_LOG_RESULT_OK)
{
for (i = chis_p->currDialedCallIndex; i < (chis_p->nDialedCalls - 1); i++)
{
memcpy(&chis_p->dialedCalls[i], &chis_p->dialedCalls[i + 1], sizeof(DIALED_CALL));
}
chis_p->nDialedCalls--;
if ((chis_p->currDialedCallIndex >= chis_p->nDialedCalls) && (chis_p->nDialedCalls !=

0))
{ chis_p->currDialedCallIndex = chis_p->nDialedCalls - 1;
}
}
if (chis_p->nDialedCalls == 0)
{ #ifdef __MMI_CH_MIXED_CALL_LOG__
if (!IsScreenPresent(SCR8055_CALLS_LIST_DIALED))
#ifdef __MMI_CH_OPTIONS_INCLUDE_INFO__
DeleteScreenIfPresent(SCR8009_DIALED_CALL_OPTIONS);
#else
DeleteBetweenScreen(SCR8008_CALL_DIALED, SCR8009_DIALED_CALL_OPTIONS);
#endif
else
#endif /* __MMI_CH_MIXED_CALL_LOG__ */
DeleteBetweenScreen(SCR8055_CALLS_LIST_DIALED, SCR8009_DIALED_CALL_OPTIONS);
}
else
#ifdef __MMI_CH_OPTIONS_INCLUDE_INFO__
DeleteScreenIfPresent(SCR8009_DIALED_CALL_OPTIONS);
#else
DeleteBetweenScreen(SCR8008_CALL_DIALED, SCR8009_DIALED_CALL_OPTIONS);
#endif
return;
}//和系统函数不一样,修改部分为除去了删除成功后的提示

至此,用以上三个函数可实现删除卡1已拨电话的记录,每次删除一条。

卡2:
1、调用函数入口MTPNP_PFAL_CallLog_Del_DialedNum(),是系统函数。
其函数原型为:void MTPNP_PFAL_CallLog_Del_DialedNum(void)
{
U8 index;

ClearInputEventHandler(MMI_DEVICE_ALL);
ClearKeyHandler(KEY_END, KEY_EVENT_UP);
ClearKeyHandler(KEY_END, KEY_EVENT_DOWN);
ClearKeyHandler(KEY_END, KEY_LONG_PRESS);
ClearKeyHandler(KEY_END, KEY_REPEAT);
myapp_trace("111");
index = slave_chis_p->currDialedCallIndex;
g_slave_chist_del_call_log_type = MTPNP_PFAL_DIALED;
slave_chis_p->isDeleteAll = MTPNP_FALSE;
MTPNP_AD_DelDialedCallHistory(index);
}
2、调用了一个系统封装了的函数MTPNP_AD_DelDialedCallHistory(index);
3、在上个函数应该是实现了删除卡2已拨电话的功能,完成后调用函数
MTPNP_PFAL_Delete_DialedCalllog_Success(),
在该函数里有弹出删除成功的语句,所以需要在实现我们功能时候跳过提示语句
DisplayPopup((MTPNP_UINT8 *) GetString(STR_GLOBAL_DELETED), IMG_GLOBAL_ACTIVATED, 1, CS_NOTIFYDURATION, SUCCESS_TONE);
因此增加了一个全局变量标志位myapp_deleteFlag,在函数myapp_DeleteSim2DialedFlag里对其实现赋值为真,再用语句if(myapp_deleteFlag==1)
{myapp_deleteFlag=0;
}else{提示}把提示包含起来,实现在通过我们函数删除卡2已拨电话时不提示删除成功。

因此在调用卡2删除已拨电话函数入口的时候,需先调用函数myapp_DeleteSim2DialedFlag。

总结:因为卡1、卡2不一样,所以在实现总的删除已拨电话是还需要判断卡,在此引用了系统函数mmi_bootup_is_sim_valid(),所以实现功能调用时为:
#ifdef __MMI_DUAL_SIM_SINGLE_CALL__
if(mmi_bootup_is_sim_valid())
{
myapp_DeleteDialedNum();//实现删除卡1已拨电话
}
else{

myapp_DeleteSim2DialedFlag();//置标志位值为真,跳过删除成功提示
MTPNP_PFAL_CallLog_Del_DialedNum();//实现删除卡2已拨电话
}
#endif
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐