《《Iphone PhoneBook(iphone 电话本 MTK)》.doc
文本预览下载声明
PhoneBook
一、PhoneBook的流程分析
查看MTK文档,PhoneBook主界面的入口函数是mmi_phb_entry_main_menu,因此需要找到这个函数,然后找到PhoneBook主界面的创建处。
1、首先在mmi_phb_entry_main_menu()函数处断下
直接F5进来,来到了第一个函数:
MMI_TRACE(MMI_PHB_TRACE_GROUP, TRC_MMI_PHB_ENTRY_MAIN_MENU); 这个函数暂且不管,没有时间,估计是跟踪消息的。
接下来就到了这个函数,看意思是里面的界面元素是否准备好,不妨跟踪进去
if (!mmi_phb_check_ready(MMI_TRUE))
{
return;
} 跟踪进来发现函数描述是“测试电话本是否准备就绪”;其中的主要判断函数是:
MTPNP_PFAL_Phb_IsReady() == MTPNP_FALSE 进过看看这个变量的定义:
typedef enum
{
MTPNP_FALSE = 0,
MTPNP_TRUE = 1
} MTPNP_BOOL; 下面来进入这个函数来看看
MTPNP_BOOL MTPNP_PFAL_Phb_IsReady(void)
{
MTPNP_BOOL SlaveEffect;
if (MTPNP_PFAL_Is_Card2Absent() ||
MTPNP_AD_Get_Card2Status() == MTPNP_AD_SIMCARD_INVALID ||
MTPNP_AD_Get_Card2Status() MTPNP_AD_SIMCARD_VALID)
{
SlaveEffect = MTPNP_TRUE;
}
else
{
SlaveEffect = MTPNP_AD_ADN_SIM2_Is_LoadFinished();
}
if (g_phb_cntx.phb_ready !g_phb_cessing SlaveEffect)
{
return MTPNP_TRUE;
}
else
{
return MTPNP_FALSE;
}
} 都是一些状态的判断,这里就不管了。接着mmi_phb_entry_main_menu函数讲。
中间过了几个函数,不是我们所关心的,下面直接来到函数:
mmi_phb_quick_search_list_pre_entry(); 看名字也知道是很重要的,跟进:
mmi_phb_entry_quick_search_list(); 这个是主要的函数。跟进来到的第一个函数就是:
EntryNewScreen(
SCR_ID_PHB_QUICK_SEARCH_LIST,
mmi_phb_exit_quick_search_list,
mmi_phb_quick_search_list_pre_entry,
MMI_FULL_SCREEN); 接着保存屏幕历史机制:
guiBuffer = GetCurrGuiBuffer(SCR_ID_PHB_QUICK_SEARCH_LIST);
RegisterHighlightHandler(mmi_phb_quick_search_get_index); 这个是注册高亮处理,里面应该是处理函数,通过对mmi_phb_quick_search_get_index函数的断点发现,每次点击菜单子项都会高亮,并在相应事件的时候断下。
注册搜索函数:
RegisterCat200SearchFunction(mmi_phb_quick_search_find_entry); 这个函数非常重要,通过我对mmi_phb_quick_search_find_entry下断点,发现,只要输入框中的字符串有变化(包括输入和删除),那么这个函数就被执行,可见这个函数对我有多主要。
void RegisterCat200SearchFunction(S32(*search_function) (U8 *))
{
if (search_function)
{
cat200_search_function = search_function;
}
} 跟踪到内部发现RegisterCat200SearchFunction函数是对搜索函数做了一次封装,而被封装的函数的命名又是与200有关,这不仅让我汗颜,M
显示全部