本文共 2136 字,大约阅读时间需要 7 分钟。
53平台上电话簿快速查找界面的代码分析
IdleApp.cIdleSetLRKey函数找到快速查找界面的入口函数: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_listsrv_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函数中使用。转载地址:http://hyifb.baihongyu.com/