博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
53的电话簿快速查找界面
阅读量:2222 次
发布时间:2019-05-08

本文共 2136 字,大约阅读时间需要 7 分钟。

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

转载地址:http://hyifb.baihongyu.com/

你可能感兴趣的文章
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
(PAT 1019) General Palindromic Number (进制转换)
查看>>
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>