bool CGUIDialogGamepad::OnAction(const CAction &action) { if ((action.GetButtonCode() >= KEY_BUTTON_A && action.GetButtonCode() <= KEY_BUTTON_RIGHT_TRIGGER) || (action.GetButtonCode() >= KEY_BUTTON_DPAD_UP && action.GetButtonCode() <= KEY_BUTTON_DPAD_RIGHT) || (action.GetID() >= ACTION_MOVE_LEFT && action.GetID() <= ACTION_MOVE_DOWN) || action.GetID() == ACTION_PLAYER_PLAY ) { switch (action.GetButtonCode()) { case KEY_BUTTON_A : m_strUserInput += "A"; break; case KEY_BUTTON_B : m_strUserInput += "B"; break; case KEY_BUTTON_X : m_strUserInput += "X"; break; case KEY_BUTTON_Y : m_strUserInput += "Y"; break; case KEY_BUTTON_BLACK : m_strUserInput += "K"; break; case KEY_BUTTON_WHITE : m_strUserInput += "W"; break; case KEY_BUTTON_LEFT_TRIGGER : m_strUserInput += "("; break; case KEY_BUTTON_RIGHT_TRIGGER : m_strUserInput += ")"; break; case KEY_BUTTON_DPAD_UP : m_strUserInput += "U"; break; case KEY_BUTTON_DPAD_DOWN : m_strUserInput += "D"; break; case KEY_BUTTON_DPAD_LEFT : m_strUserInput += "L"; break; case KEY_BUTTON_DPAD_RIGHT : m_strUserInput += "R"; break; default: switch (action.GetID()) { case ACTION_MOVE_LEFT: m_strUserInput += "L"; break; case ACTION_MOVE_RIGHT: m_strUserInput += "R"; break; case ACTION_MOVE_UP: m_strUserInput += "U"; break; case ACTION_MOVE_DOWN: m_strUserInput += "D"; break; case ACTION_PLAYER_PLAY: m_strUserInput += "P"; break; default: return true; } break; } std::string strHiddenInput(m_strUserInput); for (int i = 0; i < (int)strHiddenInput.size(); i++) { strHiddenInput[i] = m_cHideInputChar; } SetLine(2, CVariant{std::move(strHiddenInput)}); return true; } else if (action.GetButtonCode() == KEY_BUTTON_BACK || action.GetID() == ACTION_PREVIOUS_MENU || action.GetID() == ACTION_NAV_BACK) { m_bConfirmed = false; m_bCanceled = true; m_strUserInput = ""; m_bHideInputChars = true; Close(); return true; } else if (action.GetButtonCode() == KEY_BUTTON_START || action.GetID() == ACTION_SELECT_ITEM) { m_bConfirmed = false; m_bCanceled = false; std::string md5pword2 = XBMC::XBMC_MD5::GetMD5(m_strUserInput); if (!StringUtils::EqualsNoCase(m_strPassword, md5pword2)) { // incorrect password entered m_iRetries--; // don't clean up if the calling code wants the bad user input if (m_bUserInputCleanup) m_strUserInput = ""; else m_bUserInputCleanup = true; m_bHideInputChars = true; Close(); return true; } // correct password entered m_bConfirmed = true; m_iRetries = 0; m_strUserInput = ""; m_bHideInputChars = true; Close(); return true; } else if (action.GetID() >= REMOTE_0 && action.GetID() <= REMOTE_9) { return true; // unhandled } else { return CGUIDialog::OnAction(action); } }
bool CGUIDialogGamepad::OnAction(const CAction &action) { if ((action.GetButtonCode() >= KEY_BUTTON_A && action.GetButtonCode() <= KEY_BUTTON_RIGHT_TRIGGER) || (action.GetButtonCode() >= KEY_BUTTON_DPAD_UP && action.GetButtonCode() <= KEY_BUTTON_DPAD_RIGHT)) { switch (action.GetButtonCode()) { case KEY_BUTTON_A : m_strUserInput += "A"; break; case KEY_BUTTON_B : m_strUserInput += "B"; break; case KEY_BUTTON_X : m_strUserInput += "X"; break; case KEY_BUTTON_Y : m_strUserInput += "Y"; break; case KEY_BUTTON_BLACK : m_strUserInput += "K"; break; case KEY_BUTTON_WHITE : m_strUserInput += "W"; break; case KEY_BUTTON_LEFT_TRIGGER : m_strUserInput += "("; break; case KEY_BUTTON_RIGHT_TRIGGER : m_strUserInput += ")"; break; case KEY_BUTTON_DPAD_UP : m_strUserInput += "U"; break; case KEY_BUTTON_DPAD_DOWN : m_strUserInput += "D"; break; case KEY_BUTTON_DPAD_LEFT : m_strUserInput += "L"; break; case KEY_BUTTON_DPAD_RIGHT : m_strUserInput += "R"; break; default : return true; break; } CStdString strHiddenInput(m_strUserInput); for (int i = 0; i < (int)strHiddenInput.size(); i++) { strHiddenInput[i] = m_cHideInputChar; } SetLine(2, strHiddenInput); return true; } else if (action.GetButtonCode() == KEY_BUTTON_BACK || action.GetID() == ACTION_PREVIOUS_MENU || action.GetID() == ACTION_NAV_BACK) { m_bConfirmed = false; m_bCanceled = true; m_strUserInput = ""; m_bHideInputChars = true; Close(); return true; } else if (action.GetButtonCode() == KEY_BUTTON_START) { m_bConfirmed = false; m_bCanceled = false; CStdString md5pword2; XBMC::XBMC_MD5 md5state; md5state.append(m_strUserInput); md5state.getDigest(md5pword2); if (!m_strPassword.Equals(md5pword2)) { // incorrect password entered m_iRetries--; // don't clean up if the calling code wants the bad user input if (m_bUserInputCleanup) m_strUserInput = ""; else m_bUserInputCleanup = true; m_bHideInputChars = true; Close(); return true; } // correct password entered m_bConfirmed = true; m_iRetries = 0; m_strUserInput = ""; m_bHideInputChars = true; Close(); return true; } else if (action.GetID() >= REMOTE_0 && action.GetID() <= REMOTE_9) { return true; // unhandled } else { return CGUIDialog::OnAction(action); } }