对应到目录

Z:\android\aml\s905x5\aml-s905x5-androidu-v2\bootable\recovery\recovery_ui\ui.cpp

对应代码

这里在对返回的按键做判定,判定之后根据需求返回信号

RecoveryUI::KeyAction RecoveryUI::CheckKey(int key, bool is_long_press) 
{
    ...
    //这是目前reset键的判定,这个if判定成功说明按下了reset,返回了TOGGLE
    if ((key == KEY_VOLUMEUP || key == KEY_UP) && IsKeyPressed(KEY_POWER)) 
    {
      return TOGGLE;
    }
    ...
}

在这里对返回的信号进行处理

​ 原有的逻辑是现实/关闭UI文字,现在修改为移动索引,由于之前索引的移动是按下KEY_DOWN,所以可以直接复用逻辑,直接发送KEY_DOWN即可。另外还需要实现一个长按3s确认的功能。所以在接收到这个信号的时候进行一次判定如果是长按到来的信号,那么就走KEY_ENTER逻辑,否则就走KEY_DOWN逻辑

void RecoveryUI::ProcessKey(int key_code, int updown) 
{
    ...
    case RecoveryUI::TOGGLE:
        ShowText(!IsTextVisible());
        break;
    ...
}
void RecoveryUI::ProcessKey(int key_code, int updown) 
{
    ...
    case RecoveryUI::TOGGLE:
        ShowText(true);
        if (long_press) 
        {
            EnqueueKey(KEY_ENTER);  // 长按确认
        } 
    	else
        {
            EnqueueKey(KEY_DOWN);   // 短按下移
        }
        break;
    ...
}

另外对应到长按的逻辑在

void RecoveryUI::TimeKey(int key_code, int count) 
{
  ...
  std::this_thread::sleep_for(750ms);  // 750 ms == "long"
  ...
}