53平台上电话簿快速查找界面的代码分析
IdleApp.c
IdleSetLRKey函数
找到快速查找界面的入口函数:mmi_phb_idle_launch
进入后,调用到 mmi_phb_launch();
进入后,调用到 mmi_phb_launch_entry();
进入后,调用到 mmi_phb_entry_quick_search_list();
进入后,可以找到显示函数: ShowCategory200Screen
进入ShowCategory200Screen函数后可以看到其catID为MMI_CATEGORY200_ID,对应custcoordinates.c中为:
const U8 category200[] =
{
5,
DM_BASE_LAYER_START,
DM_SCR_BG,
DM_SINGLELINE_INPUTBOX1,
DM_CATEGORY_CONTROLLED_AREA,
DM_BASE_CONTROL_SET_SUBMENU
};
该界面显示包括电话簿列表,下面有一个输入框,用于快速查找。
-------------------------
下面是快速查找功能的实现:
在mmi_phb_entry_quick_search_list函数中有调用到:RegisterCat200SearchFunction(mmi_phb_quick_search_find_entry);
也就是注册了快速查找函数为mmi_phb_quick_search_find_entry
进入后,调用了:mmi_phb_list_build_filter和srv_phb_oplib_build_contact_list函数。
在srv_phb_oplib_build_contact_list函数中调用srv_phb_sse_build_contact_list
srv_phb_sse_build_contact_list中的一段代码
if (!g_srv_phb_sse_cntx.q_cache)
{
g_srv_phb_sse_cntx.q_cache =
srv_phb_mem_malloc(sizeof(srv_phb_sse_qsearch_cache_struct), SRV_PHB_MEMORY_TYPE_ADM);
memset(g_srv_phb_sse_cntx.q_cache->word, 0, MMI_PHB_ENTRIES);
srv_phb_sse_reg_event();
}
分配了空间给全局变量g_srv_phb_sse_cntx.q_cache,用于存放快速查找的数组。
而其中的另一段代码:
g_srv_phb_sse_cntx.q_cache->input_mode = filter->qsearch_filter->input_mode;
srv_phb_sse_make_qsearch_cache(
g_srv_phb_sse_cntx.q_cache->word,
g_srv_phb_sse_cntx.q_cache->input_mode);
则根据当前的输入法,对快速查找数组的内容进行了重新赋值。
srv_phb_sse_make_qsearch_cache这个函数中,有一个大循环,对电话簿中的每一个电话号码进行分析,结果存放入g_srv_phb_sse_cntx.q_cache->word。
在对电话号码进行分析的时候,会判断是否unicode字符,
如果是英文,则很简单,直接cache[store_index] = name[0];
如果是中文,则比较麻烦了,调用到函数srv_phb_convert_to_spelling(input_mode, name[0], &cache[store_index], 1);
这个函数将字符编码转成与当前输入法对应的字母。
srv_phb_convert_to_spelling函数调用 mmi_imc_get_char_info
进入后,调用 mmi_ime_word_engine_get_char_info,
这个函数是每个输入法的文件下都有对应的函数体的,我们使用的为T9,因此调用到T9Engine.c下面的该函数。
-------------------------------------------------------------------
进入后,一开始为一些初始化代码,这些代码不应该每次都调用,
因此可以进行修改,使其开机后只调用一次,
这个修改可以大大提高快速查找界面的查找速度。
--------------------------------------------------------------------
实际进行转换的是该函数下的T9CCGetCharSpell和mmi_ime_t9_t9code_to_code函数调用。
g_srv_phb_sse_cntx.q_cache这个全局的数组构建好之后,会在srv_phb_sse_qsearch_filter函数中使用。
53的电话簿快速查找界面
最新推荐文章于 2023-11-30 15:13:06 发布