/* * Copyright (c) 2013 Tah Wei Hoon. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Apache License Version 2.0, * with full text available at http://www.apache.org/licenses/LICENSE-2.0.html * * This software is provided "as is". Use at your own risk. */ package tiiehenry.code.view; import tiiehenry.code.language.Language; import android.view.KeyEvent; public class KeysInterpreter { public static boolean isSwitchPanel(KeyEvent event){ return (event.isShiftPressed() && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)); } /** * Maps shortcut keys and Android keycodes to printable characters. * Note that whitespace is considered printable. * * @param event The KeyEvent to interpret * @return The printable character the event represents, * or Language.NULL_CHAR if the event does not represent a printable char */ public static char keyEventToPrintableChar(KeyEvent event){ char c = Language.NULL_CHAR; // convert tab, backspace, newline and space keycodes to standard ASCII values if (isNewline(event)){ c = Language.NEWLINE; } else if (isBackspace(event)){ c = Language.BACKSPACE; } // This should be before the check for isSpace() because the // shortcut for TAB uses the SPACE key. else if (isTab(event)){ c = Language.TAB; } else if (isSpace(event)){ c = ' '; } else if (event.isPrintingKey()){ c = (char) event.getUnicodeChar(event.getMetaState()); } return c; } private static boolean isTab(KeyEvent event){ return (event.isShiftPressed() && (event.getKeyCode() == KeyEvent.KEYCODE_SPACE)) || (event.getKeyCode() == KeyEvent.KEYCODE_TAB); } private static boolean isBackspace(KeyEvent event) { return (event.getKeyCode() == KeyEvent.KEYCODE_DEL); } private static boolean isNewline(KeyEvent event) { return (event.getKeyCode() == KeyEvent.KEYCODE_ENTER); } private static boolean isSpace(KeyEvent event) { return (event.getKeyCode() == KeyEvent.KEYCODE_SPACE); } public static boolean isNavigationKey(KeyEvent event) { int keyCode = event.getKeyCode(); return keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_LEFT; } }