53的电话簿快速查找界面

来源:互联网 发布:阿里云电话号码 编辑:程序博客网 时间:2024/05/16 14:11

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函数中使用。