UM在删除Folder的时候按取消提示 Unfinished,但是内容已经全部删除完
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
UM在删除Folder的时候取消提示Unfinished,但是内容全部已经删除.如果删除完,应提示”已完成”
[SOLUTION]
适用版本09A/09B/10A,10A请参考09B实现.
虽然UM是对SMS、MMS、Push、Proving的统一管理,但是具体的信息删除仍然是由各个messageapp处理。如删除SMS操作,只是UM通知SMS去删除对应
的Message,删除完毕后只需通知UM,然后UM继续进行后续操作。所以在一种messagetype被删除完毕后,UM才能获得响应自身行为(如撤消删除动作
)。如果用户在um删除某一种信息的时候选择取消,因为UM无法知晓msgapp处于的状态,所以只有等待该msgap删除完全之后,在响应此时UM的取消
操作。同样,UM并不清楚后续MsgAp是否仍然有msg信息要删除,因此只能提示”unfinished”,其意义为停止删除后续msgtype的信息。
MarkSeveral功能,用户可以在inbox(outbox等)信箱下选择MarkSeveral然后勾选需要删除的信息,或是直接选择MarkAll(目前Nokia手机就是先
做选择,然后再进行删除)。选择后选择DeleteMarked即可对信息进行删除操作。在删除过程中用户可以随时进行取消删除操作。如果对inbox等信
箱下的Option中的DeleteAll选项进行屏蔽,代之以MarkSeveral功能进行信息的删除。开启MarkSeveral功能的方法为:project.mak下设定
UNIFIED_MESSAGE_MARK_SEVERAL_FEATURE设置为TRUE。
那改进方案可以为先统计UM中各msgtype的信息数量,然后对在取消时刻,判断后续是否仍然有待删除的信息,进而提示“finished“还是”unfinished”.
修改方法参考如下:
修改代码使用//addline,//endline包裹。
09B
//addline
U32fx_cd_total_msg[4][8]={0};//msgtype,msgbox
U32fx_cd_total=0;
U32fx_cd_get_type_n(U32type)
{
U32n=0;
while(type>>=1)
{
n++;
}
returnn;
}
MMI_BOOLfx_cd_get_fin_st(srv_um_msg_enummsg_type,srv_um_msg_box_enumbox_type)
{
U32n_tmsg=0;
U32n_tbox=0;
U32total=0;
U32msg_n=0;
U32box_n=0;
for(msg_n=0;msg_n<4;msg_n++)
{
if(msg_type&(1<<MSG_N))
{
for(box_n=0;box_n<7;box_n++)
{
if(box_type&(1<<BOX_N))
total+=fx_cd_total_msg[msg_n][box_n];
}
}
}
returntotal==0?MMI_TRUE:MMI_FALSE;
}
voidfx_cd_update_num(U32type,U32n_read,U32n_unread,U32n_unsent,U32n_sent,U32n_draft,
U32n_arc,U32n_SIM)
{
U32type_n=fx_cd_get_type_n(type);
fx_cd_total_msg[type_n][0]=n_read+n_unread;//inbox
fx_cd_total_msg[type_n][1]=n_unsent;//unsent
fx_cd_total_msg[type_n][2]=n_sent;//sent
fx_cd_total_msg[type_n][3]=n_draft;
fx_cd_total_msg[type_n][4]=n_arc;
fx_cd_total_msg[type_n][7]=n_sim;
}
U32fx_cd_update_total()
{
U32i=0;
U32j=0;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
fx_cd_total+=fx_cd_total_msg[j];
}
}
//endline
S32srv_um_get_msg_num_rsp(ums_process_struct*process,srv_um_get_msg_num_rsp_struct*rsp)
{
.....................
//addline
fx_cd_update_num
(
rsp->msg_type,rsp->inbox_read_msg_number,
rsp->inbox_unread_msg_number,rsp->unsent_msg_number,
rsp->sent_msg_number,rsp->draft_msg_number,
#ifdef__UNIFIED_MESSAGE_ARCHIVE_SUPPORT__
rsp->archive_msg_number,
#else
0,
#endif
#ifdef__UNIFIED_MESSAGE_SIMBOX_SUPPORT__
rsp->sim_msg_number
#else
0
#endif
);
fx_cd_update_total();
//endline
returnSRV_UM_RESULT_OK;
}
S32srv_um_delete_folder_rsp(ums_process_struct*process,srv_um_delete_folder_rsp_struct*rsp)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
ums_delete_folder_cntx_struct*cntx=process->cntx;
/*ums_delete_folder_para_struct*para=process->para;*/
srv_um_delete_folder_result*result=process->result;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
if(cntx->running_req_type!=rsp->msg_type)
{
ASSERT(0);
returnSRV_UM_RESULT_UNKNOWN_ERROR;
}
//addline
if(result)
{
U32i=0;
U32n_tmsg=fx_cd_get_type_n(rsp->msg_type);
U32total=0;
srv_um_msg_box_enumn_tmsgbox=0;
srv_um_msg_box_enummsgbox_t=0;
msgbox_t=result->msg_box.msg_box_type;
for(i=0,n_tmsgbox=1;i<8;i++,n_tmsgbox<<=1)
if(n_tmsgbox&msgbox_t)
{
fx_cd_total_msg[n_tmsg]=0;
}
fx_cd_update_total();
}
//endline
................
}
S32srv_um_delete_folder_req(ums_process_struct*process)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
ums_delete_folder_cntx_struct*cntx=process->cntx;
ums_delete_folder_para_struct*para=process->para;
srv_um_delete_folder_result*result=process->result;
S32i=0;
srv_um_msg_enummsg_type;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
if(ISCANCELLING(process)||ISRESET(process))
{
if(fx_cd_get_fin_st(result->msg_box.msg_type,result->msg_box.msg_box_type))
result->error=SRV_UM_RESULT_OK;
else
result->error=SRV_UM_RESULT_CANCELLLED;
returnSRV_UM_RESULT_PROCESS_FINISH;
}
...................................
}
09A\10A请参考09B實現。
将mmi_msg_handle_get_num_req替换为mmi_sms_um_get_num_req_hdlr。
mmi_sms_um_get_num_req_hdlr。
UM在删除Folder的时候取消提示Unfinished,但是内容全部已经删除.如果删除完,应提示”已完成”
[SOLUTION]
适用版本09A/09B/10A,10A请参考09B实现.
虽然UM是对SMS、MMS、Push、Proving的统一管理,但是具体的信息删除仍然是由各个messageapp处理。如删除SMS操作,只是UM通知SMS去删除对应
的Message,删除完毕后只需通知UM,然后UM继续进行后续操作。所以在一种messagetype被删除完毕后,UM才能获得响应自身行为(如撤消删除动作
)。如果用户在um删除某一种信息的时候选择取消,因为UM无法知晓msgapp处于的状态,所以只有等待该msgap删除完全之后,在响应此时UM的取消
操作。同样,UM并不清楚后续MsgAp是否仍然有msg信息要删除,因此只能提示”unfinished”,其意义为停止删除后续msgtype的信息。
MarkSeveral功能,用户可以在inbox(outbox等)信箱下选择MarkSeveral然后勾选需要删除的信息,或是直接选择MarkAll(目前Nokia手机就是先
做选择,然后再进行删除)。选择后选择DeleteMarked即可对信息进行删除操作。在删除过程中用户可以随时进行取消删除操作。如果对inbox等信
箱下的Option中的DeleteAll选项进行屏蔽,代之以MarkSeveral功能进行信息的删除。开启MarkSeveral功能的方法为:project.mak下设定
UNIFIED_MESSAGE_MARK_SEVERAL_FEATURE设置为TRUE。
那改进方案可以为先统计UM中各msgtype的信息数量,然后对在取消时刻,判断后续是否仍然有待删除的信息,进而提示“finished“还是”unfinished”.
修改方法参考如下:
修改代码使用//addline,//endline包裹。
09B
//addline
U32fx_cd_total_msg[4][8]={0};//msgtype,msgbox
U32fx_cd_total=0;
U32fx_cd_get_type_n(U32type)
{
U32n=0;
while(type>>=1)
{
n++;
}
returnn;
}
MMI_BOOLfx_cd_get_fin_st(srv_um_msg_enummsg_type,srv_um_msg_box_enumbox_type)
{
U32n_tmsg=0;
U32n_tbox=0;
U32total=0;
U32msg_n=0;
U32box_n=0;
for(msg_n=0;msg_n<4;msg_n++)
{
if(msg_type&(1<<MSG_N))
{
for(box_n=0;box_n<7;box_n++)
{
if(box_type&(1<<BOX_N))
total+=fx_cd_total_msg[msg_n][box_n];
}
}
}
returntotal==0?MMI_TRUE:MMI_FALSE;
}
voidfx_cd_update_num(U32type,U32n_read,U32n_unread,U32n_unsent,U32n_sent,U32n_draft,
U32n_arc,U32n_SIM)
{
U32type_n=fx_cd_get_type_n(type);
fx_cd_total_msg[type_n][0]=n_read+n_unread;//inbox
fx_cd_total_msg[type_n][1]=n_unsent;//unsent
fx_cd_total_msg[type_n][2]=n_sent;//sent
fx_cd_total_msg[type_n][3]=n_draft;
fx_cd_total_msg[type_n][4]=n_arc;
fx_cd_total_msg[type_n][7]=n_sim;
}
U32fx_cd_update_total()
{
U32i=0;
U32j=0;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
fx_cd_total+=fx_cd_total_msg[j];
}
}
//endline
S32srv_um_get_msg_num_rsp(ums_process_struct*process,srv_um_get_msg_num_rsp_struct*rsp)
{
.....................
//addline
fx_cd_update_num
(
rsp->msg_type,rsp->inbox_read_msg_number,
rsp->inbox_unread_msg_number,rsp->unsent_msg_number,
rsp->sent_msg_number,rsp->draft_msg_number,
#ifdef__UNIFIED_MESSAGE_ARCHIVE_SUPPORT__
rsp->archive_msg_number,
#else
0,
#endif
#ifdef__UNIFIED_MESSAGE_SIMBOX_SUPPORT__
rsp->sim_msg_number
#else
0
#endif
);
fx_cd_update_total();
//endline
returnSRV_UM_RESULT_OK;
}
S32srv_um_delete_folder_rsp(ums_process_struct*process,srv_um_delete_folder_rsp_struct*rsp)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
ums_delete_folder_cntx_struct*cntx=process->cntx;
/*ums_delete_folder_para_struct*para=process->para;*/
srv_um_delete_folder_result*result=process->result;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
if(cntx->running_req_type!=rsp->msg_type)
{
ASSERT(0);
returnSRV_UM_RESULT_UNKNOWN_ERROR;
}
//addline
if(result)
{
U32i=0;
U32n_tmsg=fx_cd_get_type_n(rsp->msg_type);
U32total=0;
srv_um_msg_box_enumn_tmsgbox=0;
srv_um_msg_box_enummsgbox_t=0;
msgbox_t=result->msg_box.msg_box_type;
for(i=0,n_tmsgbox=1;i<8;i++,n_tmsgbox<<=1)
if(n_tmsgbox&msgbox_t)
{
fx_cd_total_msg[n_tmsg]=0;
}
fx_cd_update_total();
}
//endline
................
}
S32srv_um_delete_folder_req(ums_process_struct*process)
{
/*----------------------------------------------------------------*/
/*LocalVariables*/
/*----------------------------------------------------------------*/
ums_delete_folder_cntx_struct*cntx=process->cntx;
ums_delete_folder_para_struct*para=process->para;
srv_um_delete_folder_result*result=process->result;
S32i=0;
srv_um_msg_enummsg_type;
/*----------------------------------------------------------------*/
/*CodeBody*/
/*----------------------------------------------------------------*/
if(ISCANCELLING(process)||ISRESET(process))
{
if(fx_cd_get_fin_st(result->msg_box.msg_type,result->msg_box.msg_box_type))
result->error=SRV_UM_RESULT_OK;
else
result->error=SRV_UM_RESULT_CANCELLLED;
returnSRV_UM_RESULT_PROCESS_FINISH;
}
...................................
}
09A\10A请参考09B實現。
将mmi_msg_handle_get_num_req替换为mmi_sms_um_get_num_req_hdlr。
mmi_sms_um_get_num_req_hdlr。
