// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/events/keycodes/keyboard_code_conversion_android.h"

#include <android/keycodes.h>

namespace ui {
namespace {

const int kCombiningAccent = 0x80000000;
const int kCombiningAccentMask = 0x7fffffff;

// The minimum Android NDK does not provide values for these yet:
enum {
  AKEYCODE_ASSIST = 219,
  AKEYCODE_BRIGHTNESS_DOWN = 220,
  AKEYCODE_BRIGHTNESS_UP = 221,
  AKEYCODE_MEDIA_AUDIO_TRACK = 222,
  AKEYCODE_SLEEP = 223,
  AKEYCODE_WAKEUP = 224,
  AKEYCODE_PAIRING = 225,
  AKEYCODE_MEDIA_TOP_MENU = 226,
  AKEYCODE_11 = 227,
  AKEYCODE_12 = 228,
  AKEYCODE_LAST_CHANNEL = 229,
  AKEYCODE_TV_DATA_SERVICE = 230,
  AKEYCODE_VOICE_ASSIST = 231,
  AKEYCODE_TV_RADIO_SERVICE = 232,
  AKEYCODE_TV_TELETEXT = 233,
  AKEYCODE_TV_NUMBER_ENTRY = 234,
  AKEYCODE_TV_TERRESTRIAL_ANALOG = 235,
  AKEYCODE_TV_TERRESTRIAL_DIGITAL = 236,
  AKEYCODE_TV_SATELLITE = 237,
  AKEYCODE_TV_SATELLITE_BS = 238,
  AKEYCODE_TV_SATELLITE_CS = 239,
  AKEYCODE_TV_SATELLITE_SERVICE = 240,
  AKEYCODE_TV_NETWORK = 241,
  AKEYCODE_TV_ANTENNA_CABLE = 242,
  AKEYCODE_TV_INPUT_HDMI_1 = 243,
  AKEYCODE_TV_INPUT_HDMI_2 = 244,
  AKEYCODE_TV_INPUT_HDMI_3 = 245,
  AKEYCODE_TV_INPUT_HDMI_4 = 246,
  AKEYCODE_TV_INPUT_COMPOSITE_1 = 247,
  AKEYCODE_TV_INPUT_COMPOSITE_2 = 248,
  AKEYCODE_TV_INPUT_COMPONENT_1 = 249,
  AKEYCODE_TV_INPUT_COMPONENT_2 = 250,
  AKEYCODE_TV_INPUT_VGA_1 = 251,
  AKEYCODE_TV_AUDIO_DESCRIPTION = 252,
  AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253,
  AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254,
  AKEYCODE_TV_ZOOM_MODE = 255,
  AKEYCODE_TV_CONTENTS_MENU = 256,
  AKEYCODE_TV_MEDIA_CONTEXT_MENU = 257,
  AKEYCODE_TV_TIMER_PROGRAMMING = 258,
  AKEYCODE_HELP = 259
};

DomKey GetDomKeyFromAndroidKeycode(int keycode) {
  switch (keycode) {
    default:
    case AKEYCODE_UNKNOWN:
      return DomKey::NONE;
    case AKEYCODE_HOME:
      return DomKey::HOME;
    case AKEYCODE_BACK:
      return DomKey::BROWSER_BACK;
    case AKEYCODE_DPAD_UP:
      return DomKey::ARROW_UP;
    case AKEYCODE_DPAD_DOWN:
      return DomKey::ARROW_DOWN;
    case AKEYCODE_DPAD_LEFT:
      return DomKey::ARROW_LEFT;
    case AKEYCODE_DPAD_RIGHT:
      return DomKey::ARROW_RIGHT;
    case AKEYCODE_VOLUME_UP:
      return DomKey::VOLUME_UP;
    case AKEYCODE_VOLUME_DOWN:
      return DomKey::VOLUME_DOWN;
    case AKEYCODE_POWER:
      return DomKey::POWER;
    case AKEYCODE_CAMERA:
      return DomKey::CAMERA;
    case AKEYCODE_CLEAR:
      return DomKey::CLEAR;
    case AKEYCODE_ALT_LEFT:
    case AKEYCODE_ALT_RIGHT:
      return DomKey::ALT;
    case AKEYCODE_SHIFT_LEFT:
    case AKEYCODE_SHIFT_RIGHT:
      return DomKey::SHIFT;
    case AKEYCODE_TAB:
      return DomKey::TAB;
    case AKEYCODE_SYM:
      return DomKey::SYMBOL;
    case AKEYCODE_EXPLORER:
      return DomKey::LAUNCH_WEB_BROWSER;
    case AKEYCODE_ENVELOPE:
      return DomKey::LAUNCH_MAIL;
    case AKEYCODE_ENTER:
      return DomKey::ENTER;
    case AKEYCODE_DEL:
      return DomKey::BACKSPACE;
    case AKEYCODE_MENU:
      return DomKey::CONTEXT_MENU;
    case AKEYCODE_SEARCH:
      return DomKey::BROWSER_SEARCH;
    case AKEYCODE_MEDIA_PLAY_PAUSE:
      return DomKey::MEDIA_PLAY_PAUSE;
    case AKEYCODE_MEDIA_STOP:
      return DomKey::MEDIA_STOP;
    case AKEYCODE_MEDIA_NEXT:
      return DomKey::MEDIA_TRACK_NEXT;
    case AKEYCODE_MEDIA_PREVIOUS:
      return DomKey::MEDIA_TRACK_PREVIOUS;
    case AKEYCODE_MEDIA_REWIND:
      return DomKey::MEDIA_REWIND;
    case AKEYCODE_MEDIA_FAST_FORWARD:
      return DomKey::MEDIA_FAST_FORWARD;
    case AKEYCODE_MUTE:
      return DomKey::VOLUME_MUTE;
    case AKEYCODE_PAGE_UP:
      return DomKey::PAGE_UP;
    case AKEYCODE_PAGE_DOWN:
      return DomKey::PAGE_DOWN;
    case AKEYCODE_ESCAPE:
      return DomKey::ESCAPE;
    case AKEYCODE_FORWARD_DEL:
      return DomKey::DEL;
    case AKEYCODE_CTRL_LEFT:
    case AKEYCODE_CTRL_RIGHT:
      return DomKey::CONTROL;
    case AKEYCODE_CAPS_LOCK:
      return DomKey::CAPS_LOCK;
    case AKEYCODE_SCROLL_LOCK:
      return DomKey::SCROLL_LOCK;
    case AKEYCODE_META_LEFT:
    case AKEYCODE_META_RIGHT:
      return DomKey::META;
    case AKEYCODE_FUNCTION:
      return DomKey::FN;
    case AKEYCODE_SYSRQ:
      return DomKey::PRINT_SCREEN;
    case AKEYCODE_BREAK:
      return DomKey::PAUSE;
    case AKEYCODE_MOVE_HOME:
      return DomKey::HOME;
    case AKEYCODE_MOVE_END:
      return DomKey::END;
    case AKEYCODE_INSERT:
      return DomKey::INSERT;
    case AKEYCODE_FORWARD:
      return DomKey::MEDIA_SKIP;
    case AKEYCODE_MEDIA_PLAY:
      return DomKey::MEDIA_PLAY;
    case AKEYCODE_MEDIA_PAUSE:
      return DomKey::MEDIA_PAUSE;
    case AKEYCODE_MEDIA_CLOSE:
      return DomKey::CLOSE;
    case AKEYCODE_MEDIA_EJECT:
      return DomKey::EJECT;
    case AKEYCODE_MEDIA_RECORD:
      return DomKey::MEDIA_RECORD;
    case AKEYCODE_F1:
      return DomKey::F1;
    case AKEYCODE_F2:
      return DomKey::F2;
    case AKEYCODE_F3:
      return DomKey::F3;
    case AKEYCODE_F4:
      return DomKey::F4;
    case AKEYCODE_F5:
      return DomKey::F5;
    case AKEYCODE_F6:
      return DomKey::F6;
    case AKEYCODE_F7:
      return DomKey::F7;
    case AKEYCODE_F8:
      return DomKey::F8;
    case AKEYCODE_F9:
      return DomKey::F9;
    case AKEYCODE_F10:
      return DomKey::F10;
    case AKEYCODE_F11:
      return DomKey::F11;
    case AKEYCODE_F12:
      return DomKey::F12;
    case AKEYCODE_NUM_LOCK:
      return DomKey::NUM_LOCK;
    case AKEYCODE_VOLUME_MUTE:
      return DomKey::VOLUME_MUTE;
    case AKEYCODE_INFO:
      return DomKey::INFO;
    case AKEYCODE_CHANNEL_UP:
      return DomKey::CHANNEL_UP;
    case AKEYCODE_CHANNEL_DOWN:
      return DomKey::CHANNEL_DOWN;
    case AKEYCODE_ZOOM_IN:
      return DomKey::ZOOM_IN;
    case AKEYCODE_ZOOM_OUT:
      return DomKey::ZOOM_OUT;
    case AKEYCODE_TV:
      return DomKey::T_V;
    case AKEYCODE_GUIDE:
      return DomKey::GUIDE;
    case AKEYCODE_CAPTIONS:
      return DomKey::CLOSED_CAPTION_TOGGLE;
    case AKEYCODE_SETTINGS:
      return DomKey::SETTINGS;
    case AKEYCODE_TV_POWER:
      return DomKey::TV_POWER;
    case AKEYCODE_TV_INPUT:
      return DomKey::TV_INPUT;
    case AKEYCODE_STB_POWER:
      return DomKey::STB_POWER;
    case AKEYCODE_STB_INPUT:
      return DomKey::STB_INPUT;
    case AKEYCODE_AVR_POWER:
      return DomKey::AVR_POWER;
    case AKEYCODE_AVR_INPUT:
      return DomKey::AVR_INPUT;
    case AKEYCODE_PROG_RED:
      return DomKey::COLOR_F0_RED;
    case AKEYCODE_PROG_GREEN:
      return DomKey::COLOR_F1_GREEN;
    case AKEYCODE_PROG_YELLOW:
      return DomKey::COLOR_F2_YELLOW;
    case AKEYCODE_PROG_BLUE:
      return DomKey::COLOR_F3_BLUE;
    case AKEYCODE_CALENDAR:
      return DomKey::LAUNCH_CALENDAR;
    case AKEYCODE_MUSIC:
      return DomKey::LAUNCH_MUSIC_PLAYER;
    case AKEYCODE_CALCULATOR:
      return DomKey::LAUNCH_CALCULATOR;
    case AKEYCODE_ZENKAKU_HANKAKU:
      return DomKey::ZENKAKU_HANKAKU;
    case AKEYCODE_EISU:
      return DomKey::EISU;
    case AKEYCODE_KATAKANA_HIRAGANA:
      return DomKey::HIRAGANA_KATAKANA;
    case AKEYCODE_BRIGHTNESS_DOWN:
      return DomKey::BRIGHTNESS_DOWN;
    case AKEYCODE_BRIGHTNESS_UP:
      return DomKey::BRIGHTNESS_UP;
    case AKEYCODE_SLEEP:
      return DomKey::STANDBY;
    case AKEYCODE_WAKEUP:
      return DomKey::WAKE_UP;
    case AKEYCODE_LAST_CHANNEL:
      return DomKey::MEDIA_LAST;
    case AKEYCODE_TV_ZOOM_MODE:
      return DomKey::ZOOM_TOGGLE;
    case AKEYCODE_HELP:
      return DomKey::HELP;

    // The following codes should already be handled as printable
    // character mapping.

    // case AKEYCODE_0:
    // case AKEYCODE_1:
    // case AKEYCODE_2:
    // case AKEYCODE_3:
    // case AKEYCODE_4:
    // case AKEYCODE_5:
    // case AKEYCODE_6:
    // case AKEYCODE_7:
    // case AKEYCODE_8:
    // case AKEYCODE_9:
    // case AKEYCODE_STAR:
    // case AKEYCODE_POUND:
    // case AKEYCODE_A:
    // case AKEYCODE_B:
    // case AKEYCODE_C:
    // case AKEYCODE_D:
    // case AKEYCODE_E:
    // case AKEYCODE_F:
    // case AKEYCODE_G:
    // case AKEYCODE_H:
    // case AKEYCODE_I:
    // case AKEYCODE_J:
    // case AKEYCODE_K:
    // case AKEYCODE_L:
    // case AKEYCODE_M:
    // case AKEYCODE_N:
    // case AKEYCODE_O:
    // case AKEYCODE_P:
    // case AKEYCODE_Q:
    // case AKEYCODE_R:
    // case AKEYCODE_S:
    // case AKEYCODE_T:
    // case AKEYCODE_U:
    // case AKEYCODE_V:
    // case AKEYCODE_W:
    // case AKEYCODE_X:
    // case AKEYCODE_Y:
    // case AKEYCODE_Z:
    // case AKEYCODE_COMMA:
    // case AKEYCODE_PERIOD:
    // case AKEYCODE_GRAVE:
    // case AKEYCODE_MINUS:
    // case AKEYCODE_EQUALS:
    // case AKEYCODE_LEFT_BRACKET:
    // case AKEYCODE_RIGHT_BRACKET:
    // case AKEYCODE_BACKSLASH:
    // case AKEYCODE_SEMICOLON:
    // case AKEYCODE_APOSTROPHE:
    // case AKEYCODE_SLASH:
    // case AKEYCODE_AT:
    // case AKEYCODE_NUM:
    // case AKEYCODE_NUMPAD_0:
    // case AKEYCODE_NUMPAD_1:
    // case AKEYCODE_NUMPAD_2:
    // case AKEYCODE_NUMPAD_3:
    // case AKEYCODE_NUMPAD_4:
    // case AKEYCODE_NUMPAD_5:
    // case AKEYCODE_NUMPAD_6:
    // case AKEYCODE_NUMPAD_7:
    // case AKEYCODE_NUMPAD_8:
    // case AKEYCODE_NUMPAD_9:
    // case AKEYCODE_NUMPAD_DIVIDE:
    // case AKEYCODE_NUMPAD_MULTIPLY:
    // case AKEYCODE_NUMPAD_SUBTRACT:
    // case AKEYCODE_NUMPAD_ADD:
    // case AKEYCODE_NUMPAD_DOT:
    // case AKEYCODE_NUMPAD_COMMA:
    // case AKEYCODE_NUMPAD_ENTER:
    // case AKEYCODE_NUMPAD_EQUALS:
    // case AKEYCODE_NUMPAD_LEFT_PAREN:
    // case AKEYCODE_NUMPAD_RIGHT_PAREN:
    // case AKEYCODE_SPACE:
    // case AKEYCODE_PLUS:

    // The following codes are unsupported. ie; there is no
    // applicable mapping from the Android keycode to DOM Code
    // currently.

    // case AKEYCODE_SOFT_LEFT:
    // case AKEYCODE_SOFT_RIGHT:
    // case AKEYCODE_CALL:
    // case AKEYCODE_ENDCALL:
    // case AKEYCODE_DPAD_CENTER:
    // case AKEYCODE_HEADSETHOOK:
    // case AKEYCODE_FOCUS:
    // case AKEYCODE_NOTIFICATION:
    // case AKEYCODE_PICTSYMBOLS:
    // case AKEYCODE_SWITCH_CHARSET:
    // case AKEYCODE_BUTTON_A:
    // case AKEYCODE_BUTTON_B:
    // case AKEYCODE_BUTTON_C:
    // case AKEYCODE_BUTTON_X:
    // case AKEYCODE_BUTTON_Y:
    // case AKEYCODE_BUTTON_Z:
    // case AKEYCODE_BUTTON_L1:
    // case AKEYCODE_BUTTON_R1:
    // case AKEYCODE_BUTTON_L2:
    // case AKEYCODE_BUTTON_R2:
    // case AKEYCODE_BUTTON_THUMBL:
    // case AKEYCODE_BUTTON_THUMBR:
    // case AKEYCODE_BUTTON_START:
    // case AKEYCODE_BUTTON_SELECT:
    // case AKEYCODE_BUTTON_MODE:
    // case AKEYCODE_WINDOW:
    // case AKEYCODE_DVR:
    // case AKEYCODE_BOOKMARK:
    // case AKEYCODE_APP_SWITCH:
    // case AKEYCODE_BUTTON_1:
    // case AKEYCODE_BUTTON_2:
    // case AKEYCODE_BUTTON_3:
    // case AKEYCODE_BUTTON_4:
    // case AKEYCODE_BUTTON_5:
    // case AKEYCODE_BUTTON_6:
    // case AKEYCODE_BUTTON_7:
    // case AKEYCODE_BUTTON_8:
    // case AKEYCODE_BUTTON_9:
    // case AKEYCODE_BUTTON_10:
    // case AKEYCODE_BUTTON_11:
    // case AKEYCODE_BUTTON_12:
    // case AKEYCODE_BUTTON_13:
    // case AKEYCODE_BUTTON_14:
    // case AKEYCODE_BUTTON_15:
    // case AKEYCODE_BUTTON_16:
    // case AKEYCODE_LANGUAGE_SWITCH:
    // case AKEYCODE_MANNER_MODE:
    // case AKEYCODE_3D_MODE:
    // case AKEYCODE_CONTACTS:
    // case AKEYCODE_MUHENKAN:
    // case AKEYCODE_HENKAN:
    // case AKEYCODE_YEN:
    // case AKEYCODE_RO:
    // case AKEYCODE_KANA:
    // case AKEYCODE_ASSIST:
    // case AKEYCODE_MEDIA_AUDIO:
    // case AKEYCODE_PAIRING:
    // case AKEYCODE_MEDIA_TOP:
    // case AKEYCODE_11:
    // case AKEYCODE_12:
    // case AKEYCODE_TV_DATA:
    // case AKEYCODE_VOICE_ASSIST:
    // case AKEYCODE_TV_RADIO:
    // case AKEYCODE_TV_TELETEXT:
    // case AKEYCODE_TV_NUMBER:
    // case AKEYCODE_TV_TERRESTRIAL_ANALOG:
    // case AKEYCODE_TV_TERRESTRIAL_DIGITAL:
    // case AKEYCODE_TV_SATELLITE:
    // case AKEYCODE_TV_SATELLITE_BS:
    // case AKEYCODE_TV_SATELLITE_CS:
    // case AKEYCODE_TV_SATELLITE_SERVICE:
    // case AKEYCODE_TV_NETWORK:
    // case AKEYCODE_TV_ANTENNA_CABLE:
    // case AKEYCODE_TV_INPUT_HDMI_1:
    // case AKEYCODE_TV_INPUT_HDMI_2:
    // case AKEYCODE_TV_INPUT_HDMI_3:
    // case AKEYCODE_TV_INPUT_HDMI_4:
    // case AKEYCODE_TV_INPUT_COMPOSITE_1:
    // case AKEYCODE_TV_INPUT_COMPOSITE_2:
    // case AKEYCODE_TV_INPUT_COMPONENT_1:
    // case AKEYCODE_TV_INPUT_COMPONENT_2:
    // case AKEYCODE_TV_INPUT_VGA_1:
    // case AKEYCODE_TV_AUDIO_DESCRIPTION:
    // case AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP:
    // case AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN:
    // case AKEYCODE_TV_CONTENTS_MENU:
    // case AKEYCODE_TV_MEDIA_CONTEXT_MENU:
    // case AKEYCODE_TV_TIMER_PROGRAMMING:
  }
}

}  // namespace

DomKey GetDomKeyFromAndroidEvent(int keycode, int unicode_character) {
  // Android maps ENTER to '\n'; but the DOM maps it to '\r'; ensure
  // the difference in mapping is mitigated.
  if (unicode_character == '\n')
    unicode_character = '\r';

  // Android generates unicode_characters with the high bit on indicating
  // the key is a combining character.
  if (unicode_character & kCombiningAccent) {
    return DomKey::DeadKeyFromCombiningCharacter(unicode_character &
                                                 kCombiningAccentMask);
  }

  // |unicode_character| is the character generated by applying the
  // keyboard layout and modifiers. When the |unicode_character|
  // is non-zero then a printable character has been successfully
  // mapped; otherwise generate the DomKey from the keycode.
  if (unicode_character)
    return DomKey::FromCharacter(unicode_character);
  return GetDomKeyFromAndroidKeycode(keycode);
}

KeyboardCode KeyboardCodeFromAndroidKeyCode(int keycode) {
  // Does not provide all key codes, and does not handle all keys.
  switch (keycode) {
    case AKEYCODE_DEL:
      return VKEY_BACK;
    case AKEYCODE_TAB:
      return VKEY_TAB;
    case AKEYCODE_CLEAR:
      return VKEY_CLEAR;
    case AKEYCODE_DPAD_CENTER:
    case AKEYCODE_ENTER:
      return VKEY_RETURN;
    case AKEYCODE_SHIFT_LEFT:
      return VKEY_LSHIFT;
    case AKEYCODE_SHIFT_RIGHT:
      return VKEY_RSHIFT;
    case AKEYCODE_BACK:
      return VKEY_BROWSER_BACK;
    case AKEYCODE_FORWARD:
      return VKEY_BROWSER_FORWARD;
    case AKEYCODE_SPACE:
      return VKEY_SPACE;
    case AKEYCODE_MOVE_HOME:
      return VKEY_HOME;
    case AKEYCODE_DPAD_LEFT:
      return VKEY_LEFT;
    case AKEYCODE_DPAD_UP:
      return VKEY_UP;
    case AKEYCODE_DPAD_RIGHT:
      return VKEY_RIGHT;
    case AKEYCODE_DPAD_DOWN:
      return VKEY_DOWN;
    case AKEYCODE_0:
      return VKEY_0;
    case AKEYCODE_1:
      return VKEY_1;
    case AKEYCODE_2:
      return VKEY_2;
    case AKEYCODE_3:
      return VKEY_3;
    case AKEYCODE_4:
      return VKEY_4;
    case AKEYCODE_5:
      return VKEY_5;
    case AKEYCODE_6:
      return VKEY_6;
    case AKEYCODE_7:
      return VKEY_7;
    case AKEYCODE_8:
      return VKEY_8;
    case AKEYCODE_9:
      return VKEY_9;
    case AKEYCODE_A:
      return VKEY_A;
    case AKEYCODE_B:
      return VKEY_B;
    case AKEYCODE_C:
      return VKEY_C;
    case AKEYCODE_D:
      return VKEY_D;
    case AKEYCODE_E:
      return VKEY_E;
    case AKEYCODE_F:
      return VKEY_F;
    case AKEYCODE_G:
      return VKEY_G;
    case AKEYCODE_H:
      return VKEY_H;
    case AKEYCODE_I:
      return VKEY_I;
    case AKEYCODE_J:
      return VKEY_J;
    case AKEYCODE_K:
      return VKEY_K;
    case AKEYCODE_L:
      return VKEY_L;
    case AKEYCODE_M:
      return VKEY_M;
    case AKEYCODE_N:
      return VKEY_N;
    case AKEYCODE_O:
      return VKEY_O;
    case AKEYCODE_P:
      return VKEY_P;
    case AKEYCODE_Q:
      return VKEY_Q;
    case AKEYCODE_R:
      return VKEY_R;
    case AKEYCODE_S:
      return VKEY_S;
    case AKEYCODE_T:
      return VKEY_T;
    case AKEYCODE_U:
      return VKEY_U;
    case AKEYCODE_V:
      return VKEY_V;
    case AKEYCODE_W:
      return VKEY_W;
    case AKEYCODE_X:
      return VKEY_X;
    case AKEYCODE_Y:
      return VKEY_Y;
    case AKEYCODE_Z:
      return VKEY_Z;
    case AKEYCODE_VOLUME_DOWN:
      return VKEY_VOLUME_DOWN;
    case AKEYCODE_VOLUME_UP:
      return VKEY_VOLUME_UP;
    case AKEYCODE_MEDIA_NEXT:
      return VKEY_MEDIA_NEXT_TRACK;
    case AKEYCODE_MEDIA_PREVIOUS:
      return VKEY_MEDIA_PREV_TRACK;
    case AKEYCODE_MEDIA_STOP:
      return VKEY_MEDIA_STOP;
    case AKEYCODE_MEDIA_PAUSE:
      return VKEY_MEDIA_PLAY_PAUSE;
    // Colon key.
    case AKEYCODE_SEMICOLON:
      return VKEY_OEM_1;
    case AKEYCODE_COMMA:
      return VKEY_OEM_COMMA;
    case AKEYCODE_MINUS:
      return VKEY_OEM_MINUS;
    case AKEYCODE_EQUALS:
      return VKEY_OEM_PLUS;
    case AKEYCODE_PERIOD:
      return VKEY_OEM_PERIOD;
    case AKEYCODE_SLASH:
      return VKEY_OEM_2;
    case AKEYCODE_LEFT_BRACKET:
      return VKEY_OEM_4;
    case AKEYCODE_BACKSLASH:
      return VKEY_OEM_5;
    case AKEYCODE_RIGHT_BRACKET:
      return VKEY_OEM_6;
    case AKEYCODE_MUTE:
    case AKEYCODE_VOLUME_MUTE:
      return VKEY_VOLUME_MUTE;
    case AKEYCODE_ESCAPE:
      return VKEY_ESCAPE;
    case AKEYCODE_MEDIA_PLAY:
    case AKEYCODE_MEDIA_PLAY_PAUSE:
      return VKEY_MEDIA_PLAY_PAUSE;
    case AKEYCODE_MOVE_END:
      return VKEY_END;
    case AKEYCODE_ALT_LEFT:
      return VKEY_LMENU;
    case AKEYCODE_ALT_RIGHT:
      return VKEY_RMENU;
    case AKEYCODE_GRAVE:
      return VKEY_OEM_3;
    case AKEYCODE_APOSTROPHE:
      return VKEY_OEM_3;
    case AKEYCODE_MEDIA_REWIND:
      return VKEY_OEM_103;
    case AKEYCODE_MEDIA_FAST_FORWARD:
      return VKEY_OEM_104;
    case AKEYCODE_PAGE_UP:
      return VKEY_PRIOR;
    case AKEYCODE_PAGE_DOWN:
      return VKEY_NEXT;
    case AKEYCODE_FORWARD_DEL:
      return VKEY_DELETE;
    case AKEYCODE_CTRL_LEFT:
      return VKEY_LCONTROL;
    case AKEYCODE_CTRL_RIGHT:
      return VKEY_RCONTROL;
    case AKEYCODE_CAPS_LOCK:
      return VKEY_CAPITAL;
    case AKEYCODE_SCROLL_LOCK:
      return VKEY_SCROLL;
    case AKEYCODE_META_LEFT:
      return VKEY_LWIN;
    case AKEYCODE_META_RIGHT:
      return VKEY_RWIN;
    case AKEYCODE_BREAK:
      return VKEY_PAUSE;
    case AKEYCODE_INSERT:
      return VKEY_INSERT;
    case AKEYCODE_F1:
      return VKEY_F1;
    case AKEYCODE_F2:
      return VKEY_F2;
    case AKEYCODE_F3:
      return VKEY_F3;
    case AKEYCODE_F4:
      return VKEY_F4;
    case AKEYCODE_F5:
      return VKEY_F5;
    case AKEYCODE_F6:
      return VKEY_F6;
    case AKEYCODE_F7:
      return VKEY_F7;
    case AKEYCODE_F8:
      return VKEY_F8;
    case AKEYCODE_F9:
      return VKEY_F9;
    case AKEYCODE_F10:
      return VKEY_F10;
    case AKEYCODE_F11:
      return VKEY_F11;
    case AKEYCODE_F12:
      return VKEY_F12;
    case AKEYCODE_NUM_LOCK:
      return VKEY_NUMLOCK;
    case AKEYCODE_NUMPAD_0:
      return VKEY_NUMPAD0;
    case AKEYCODE_NUMPAD_1:
      return VKEY_NUMPAD1;
    case AKEYCODE_NUMPAD_2:
      return VKEY_NUMPAD2;
    case AKEYCODE_NUMPAD_3:
      return VKEY_NUMPAD3;
    case AKEYCODE_NUMPAD_4:
      return VKEY_NUMPAD4;
    case AKEYCODE_NUMPAD_5:
      return VKEY_NUMPAD5;
    case AKEYCODE_NUMPAD_6:
      return VKEY_NUMPAD6;
    case AKEYCODE_NUMPAD_7:
      return VKEY_NUMPAD7;
    case AKEYCODE_NUMPAD_8:
      return VKEY_NUMPAD8;
    case AKEYCODE_NUMPAD_9:
      return VKEY_NUMPAD9;
    case AKEYCODE_NUMPAD_DIVIDE:
      return VKEY_DIVIDE;
    case AKEYCODE_NUMPAD_MULTIPLY:
      return VKEY_MULTIPLY;
    case AKEYCODE_NUMPAD_SUBTRACT:
      return VKEY_SUBTRACT;
    case AKEYCODE_NUMPAD_ADD:
      return VKEY_ADD;
    case AKEYCODE_NUMPAD_DOT:
      return VKEY_DECIMAL;
    case AKEYCODE_CHANNEL_UP:
      return VKEY_PRIOR;
    case AKEYCODE_CHANNEL_DOWN:
      return VKEY_NEXT;
    default:
      return VKEY_UNKNOWN;
  }
}

}  // namespace ui
