例如:开启电话簿数据保密时,进入电话簿要求输入4位密码,当输入不足4位时,左软件标签为空,达到4为时,左软件标签为OK。

刚进入输入密码界面函数EntryRstCheckPhoneLock()时,注册RegisterInputBoxValidationFunction(RstrSettingPasswdScrSoftKeyFunc); 用来控制左软件的标签显示问题。

1. 当输入不满4位时,
ChangeLeftSoftkey(0, 0);
change_left_softkey(0, 0);
MMI_softkeys[key].text = NULL,
redraw_softkey(MMI_LEFT_SOFTKEY);
show_softkey(MMI_LEFT_SOFTKEY);
if ((MMI_softkeys[key].text == NULL) && (MMI_softkeys[key].normal_up_icon == NULL))
clear_softkey_handler(MMI_LEFT_SOFTKEY);
ClearKeyHandler(KEY_LSK, KEY_EVENT_DOWN);
设置currKeyFuncPtrs[KEY_LSK][ KEY_EVENT_DOWN] = NULL;
ClearKeyHandler(KEY_LSK, KEY_EVENT_UP);
设置currKeyFuncPtrs[KEY_LSK][ KEY_EVENT_UP] = NULL;
按下LSK时,进入:
ExecuteCurrKeyHandler()
获取按键响应:currFuncPtr = currKeyFuncPtrs[keyCode][keyType]; 不论是DOWN还是UP,都为NULL,因此没有响应!!!
2. 当输入满4位时,
EnableLeftSoftkey(STR_GLOBAL_OK, IMG_GLOBAL_OK);
MMI_softkeys[key].text = OK
redraw_left_softkey()
redraw_softkey()
show_softkey()因为MMI_softkeys[key].text不为NULL,因此不会执行clear_softkey_handler()
register_left_softkey_handler()
register_softkey_handler(MMI_LEFT_SOFTKEY)
SetKeyHandler(left_softkey_down, KEY_LSK, KEY_EVENT_DOWN);
设置currKeyFuncPtrs[KEY_LSK][ KEY_EVENT_DOWN] = left_softkey_down;
SetKeyHandler(left_softkey_up, KEY_LSK, KEY_EVENT_UP);
设置currKeyFuncPtrs[KEY_LSK][ KEY_EVENT_DOWN] = left_softkey_up;
按下LSK时,进入:
ExecuteCurrKeyHandler()
获取按键响应:currFuncPtr = currKeyFuncPtrs[keyCode][keyType];
分别进入响应:left_softkey_down()
execute_softkey_function(KEY_EVENT_DOWN, MMI_LEFT_SOFTKEY);
softkey_functions[key][k] ()
执行注册的DOWN响应函数
left_softkey_up()
execute_softkey_function(KEY_EVENT_UP, MMI_LEFT_SOFTKEY);
softkey_functions[key][k] ();
执行注册的UP响应函数

 

小结:

当LSK, RSK没有标签时,设置currKeyFuncPtrs [][]对应响应为NULL;

当LSK, RSK有标签时,设置currKeyFuncPtrs [][]对应响应为:left_softkey_down(), left_softkey_up(), right_softkey_down(),right_softkey_up();

当按下/抬起LSK, RSK时,先判断currKeyFuncPtrs [][]中是否有响应,有则执行。因此,如果没有标签,则不执行。