Home | History | Annotate | Download | only in gdx
      1 /*******************************************************************************
      2  * Copyright 2011 See AUTHORS file.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *   http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  ******************************************************************************/
     16 
     17 package com.badlogic.gdx;
     18 
     19 import com.badlogic.gdx.graphics.Pixmap;
     20 import com.badlogic.gdx.utils.ObjectIntMap;
     21 
     22 /** <p>
     23  * Interface to the input facilities. This allows polling the state of the keyboard, the touch screen and the accelerometer. On
     24  * some backends (desktop, gwt, etc) the touch screen is replaced by mouse input. The accelerometer is of course not available on
     25  * all backends.
     26  * </p>
     27  *
     28  * <p>
     29  * Instead of polling for events, one can process all input events with an {@link InputProcessor}. You can set the InputProcessor
     30  * via the {@link #setInputProcessor(InputProcessor)} method. It will be called before the {@link ApplicationListener#render()}
     31  * method in each frame.
     32  * </p>
     33  *
     34  * <p>
     35  * Keyboard keys are translated to the constants in {@link Keys} transparently on all systems. Do not use system specific key
     36  * constants.
     37  * </p>
     38  *
     39  * <p>
     40  * The class also offers methods to use (and test for the presence of) other input systems like vibration, compass, on-screen
     41  * keyboards, and cursor capture. Support for simple input dialogs is also provided.
     42  * </p>
     43  *
     44  * @author mzechner */
     45 public interface Input {
     46 	/** Callback interface for {@link Input#getTextInput(TextInputListener, String, String, String)}
     47 	 *
     48 	 * @author mzechner */
     49 	static public interface TextInputListener {
     50 		public void input (String text);
     51 
     52 		public void canceled ();
     53 	}
     54 
     55 	/** Mouse buttons.
     56 	 * @author mzechner */
     57 	static public class Buttons {
     58 		public static final int LEFT = 0;
     59 		public static final int RIGHT = 1;
     60 		public static final int MIDDLE = 2;
     61 		public static final int BACK = 3;
     62 		public static final int FORWARD = 4;
     63 	}
     64 
     65 	/** Keys.
     66 	 *
     67 	 * @author mzechner */
     68 	static public class Keys {
     69 		public static final int ANY_KEY = -1;
     70 		public static final int NUM_0 = 7;
     71 		public static final int NUM_1 = 8;
     72 		public static final int NUM_2 = 9;
     73 		public static final int NUM_3 = 10;
     74 		public static final int NUM_4 = 11;
     75 		public static final int NUM_5 = 12;
     76 		public static final int NUM_6 = 13;
     77 		public static final int NUM_7 = 14;
     78 		public static final int NUM_8 = 15;
     79 		public static final int NUM_9 = 16;
     80 		public static final int A = 29;
     81 		public static final int ALT_LEFT = 57;
     82 		public static final int ALT_RIGHT = 58;
     83 		public static final int APOSTROPHE = 75;
     84 		public static final int AT = 77;
     85 		public static final int B = 30;
     86 		public static final int BACK = 4;
     87 		public static final int BACKSLASH = 73;
     88 		public static final int C = 31;
     89 		public static final int CALL = 5;
     90 		public static final int CAMERA = 27;
     91 		public static final int CLEAR = 28;
     92 		public static final int COMMA = 55;
     93 		public static final int D = 32;
     94 		public static final int DEL = 67;
     95 		public static final int BACKSPACE = 67;
     96 		public static final int FORWARD_DEL = 112;
     97 		public static final int DPAD_CENTER = 23;
     98 		public static final int DPAD_DOWN = 20;
     99 		public static final int DPAD_LEFT = 21;
    100 		public static final int DPAD_RIGHT = 22;
    101 		public static final int DPAD_UP = 19;
    102 		public static final int CENTER = 23;
    103 		public static final int DOWN = 20;
    104 		public static final int LEFT = 21;
    105 		public static final int RIGHT = 22;
    106 		public static final int UP = 19;
    107 		public static final int E = 33;
    108 		public static final int ENDCALL = 6;
    109 		public static final int ENTER = 66;
    110 		public static final int ENVELOPE = 65;
    111 		public static final int EQUALS = 70;
    112 		public static final int EXPLORER = 64;
    113 		public static final int F = 34;
    114 		public static final int FOCUS = 80;
    115 		public static final int G = 35;
    116 		public static final int GRAVE = 68;
    117 		public static final int H = 36;
    118 		public static final int HEADSETHOOK = 79;
    119 		public static final int HOME = 3;
    120 		public static final int I = 37;
    121 		public static final int J = 38;
    122 		public static final int K = 39;
    123 		public static final int L = 40;
    124 		public static final int LEFT_BRACKET = 71;
    125 		public static final int M = 41;
    126 		public static final int MEDIA_FAST_FORWARD = 90;
    127 		public static final int MEDIA_NEXT = 87;
    128 		public static final int MEDIA_PLAY_PAUSE = 85;
    129 		public static final int MEDIA_PREVIOUS = 88;
    130 		public static final int MEDIA_REWIND = 89;
    131 		public static final int MEDIA_STOP = 86;
    132 		public static final int MENU = 82;
    133 		public static final int MINUS = 69;
    134 		public static final int MUTE = 91;
    135 		public static final int N = 42;
    136 		public static final int NOTIFICATION = 83;
    137 		public static final int NUM = 78;
    138 		public static final int O = 43;
    139 		public static final int P = 44;
    140 		public static final int PERIOD = 56;
    141 		public static final int PLUS = 81;
    142 		public static final int POUND = 18;
    143 		public static final int POWER = 26;
    144 		public static final int Q = 45;
    145 		public static final int R = 46;
    146 		public static final int RIGHT_BRACKET = 72;
    147 		public static final int S = 47;
    148 		public static final int SEARCH = 84;
    149 		public static final int SEMICOLON = 74;
    150 		public static final int SHIFT_LEFT = 59;
    151 		public static final int SHIFT_RIGHT = 60;
    152 		public static final int SLASH = 76;
    153 		public static final int SOFT_LEFT = 1;
    154 		public static final int SOFT_RIGHT = 2;
    155 		public static final int SPACE = 62;
    156 		public static final int STAR = 17;
    157 		public static final int SYM = 63;
    158 		public static final int T = 48;
    159 		public static final int TAB = 61;
    160 		public static final int U = 49;
    161 		public static final int UNKNOWN = 0;
    162 		public static final int V = 50;
    163 		public static final int VOLUME_DOWN = 25;
    164 		public static final int VOLUME_UP = 24;
    165 		public static final int W = 51;
    166 		public static final int X = 52;
    167 		public static final int Y = 53;
    168 		public static final int Z = 54;
    169 		public static final int META_ALT_LEFT_ON = 16;
    170 		public static final int META_ALT_ON = 2;
    171 		public static final int META_ALT_RIGHT_ON = 32;
    172 		public static final int META_SHIFT_LEFT_ON = 64;
    173 		public static final int META_SHIFT_ON = 1;
    174 		public static final int META_SHIFT_RIGHT_ON = 128;
    175 		public static final int META_SYM_ON = 4;
    176 		public static final int CONTROL_LEFT = 129;
    177 		public static final int CONTROL_RIGHT = 130;
    178 		public static final int ESCAPE = 131;
    179 		public static final int END = 132;
    180 		public static final int INSERT = 133;
    181 		public static final int PAGE_UP = 92;
    182 		public static final int PAGE_DOWN = 93;
    183 		public static final int PICTSYMBOLS = 94;
    184 		public static final int SWITCH_CHARSET = 95;
    185 		public static final int BUTTON_CIRCLE = 255;
    186 		public static final int BUTTON_A = 96;
    187 		public static final int BUTTON_B = 97;
    188 		public static final int BUTTON_C = 98;
    189 		public static final int BUTTON_X = 99;
    190 		public static final int BUTTON_Y = 100;
    191 		public static final int BUTTON_Z = 101;
    192 		public static final int BUTTON_L1 = 102;
    193 		public static final int BUTTON_R1 = 103;
    194 		public static final int BUTTON_L2 = 104;
    195 		public static final int BUTTON_R2 = 105;
    196 		public static final int BUTTON_THUMBL = 106;
    197 		public static final int BUTTON_THUMBR = 107;
    198 		public static final int BUTTON_START = 108;
    199 		public static final int BUTTON_SELECT = 109;
    200 		public static final int BUTTON_MODE = 110;
    201 
    202 		public static final int NUMPAD_0 = 144;
    203 		public static final int NUMPAD_1 = 145;
    204 		public static final int NUMPAD_2 = 146;
    205 		public static final int NUMPAD_3 = 147;
    206 		public static final int NUMPAD_4 = 148;
    207 		public static final int NUMPAD_5 = 149;
    208 		public static final int NUMPAD_6 = 150;
    209 		public static final int NUMPAD_7 = 151;
    210 		public static final int NUMPAD_8 = 152;
    211 		public static final int NUMPAD_9 = 153;
    212 
    213 // public static final int BACKTICK = 0;
    214 // public static final int TILDE = 0;
    215 // public static final int UNDERSCORE = 0;
    216 // public static final int DOT = 0;
    217 // public static final int BREAK = 0;
    218 // public static final int PIPE = 0;
    219 // public static final int EXCLAMATION = 0;
    220 // public static final int QUESTIONMARK = 0;
    221 
    222 // ` | VK_BACKTICK
    223 // ~ | VK_TILDE
    224 // : | VK_COLON
    225 // _ | VK_UNDERSCORE
    226 // . | VK_DOT
    227 // (break) | VK_BREAK
    228 // | | VK_PIPE
    229 // ! | VK_EXCLAMATION
    230 // ? | VK_QUESTION
    231 		public static final int COLON = 243;
    232 		public static final int F1 = 244;
    233 		public static final int F2 = 245;
    234 		public static final int F3 = 246;
    235 		public static final int F4 = 247;
    236 		public static final int F5 = 248;
    237 		public static final int F6 = 249;
    238 		public static final int F7 = 250;
    239 		public static final int F8 = 251;
    240 		public static final int F9 = 252;
    241 		public static final int F10 = 253;
    242 		public static final int F11 = 254;
    243 		public static final int F12 = 255;
    244 
    245 		/** @return a human readable representation of the keycode. The returned value can be used in
    246 		 *         {@link Input.Keys#valueOf(String)} */
    247 		public static String toString (int keycode) {
    248 			if (keycode < 0) throw new IllegalArgumentException("keycode cannot be negative, keycode: " + keycode);
    249 			if (keycode > 255) throw new IllegalArgumentException("keycode cannot be greater than 255, keycode: " + keycode);
    250 			switch (keycode) {
    251 			// META* variables should not be used with this method.
    252 			case UNKNOWN:
    253 				return "Unknown";
    254 			case SOFT_LEFT:
    255 				return "Soft Left";
    256 			case SOFT_RIGHT:
    257 				return "Soft Right";
    258 			case HOME:
    259 				return "Home";
    260 			case BACK:
    261 				return "Back";
    262 			case CALL:
    263 				return "Call";
    264 			case ENDCALL:
    265 				return "End Call";
    266 			case NUM_0:
    267 				return "0";
    268 			case NUM_1:
    269 				return "1";
    270 			case NUM_2:
    271 				return "2";
    272 			case NUM_3:
    273 				return "3";
    274 			case NUM_4:
    275 				return "4";
    276 			case NUM_5:
    277 				return "5";
    278 			case NUM_6:
    279 				return "6";
    280 			case NUM_7:
    281 				return "7";
    282 			case NUM_8:
    283 				return "8";
    284 			case NUM_9:
    285 				return "9";
    286 			case STAR:
    287 				return "*";
    288 			case POUND:
    289 				return "#";
    290 			case UP:
    291 				return "Up";
    292 			case DOWN:
    293 				return "Down";
    294 			case LEFT:
    295 				return "Left";
    296 			case RIGHT:
    297 				return "Right";
    298 			case CENTER:
    299 				return "Center";
    300 			case VOLUME_UP:
    301 				return "Volume Up";
    302 			case VOLUME_DOWN:
    303 				return "Volume Down";
    304 			case POWER:
    305 				return "Power";
    306 			case CAMERA:
    307 				return "Camera";
    308 			case CLEAR:
    309 				return "Clear";
    310 			case A:
    311 				return "A";
    312 			case B:
    313 				return "B";
    314 			case C:
    315 				return "C";
    316 			case D:
    317 				return "D";
    318 			case E:
    319 				return "E";
    320 			case F:
    321 				return "F";
    322 			case G:
    323 				return "G";
    324 			case H:
    325 				return "H";
    326 			case I:
    327 				return "I";
    328 			case J:
    329 				return "J";
    330 			case K:
    331 				return "K";
    332 			case L:
    333 				return "L";
    334 			case M:
    335 				return "M";
    336 			case N:
    337 				return "N";
    338 			case O:
    339 				return "O";
    340 			case P:
    341 				return "P";
    342 			case Q:
    343 				return "Q";
    344 			case R:
    345 				return "R";
    346 			case S:
    347 				return "S";
    348 			case T:
    349 				return "T";
    350 			case U:
    351 				return "U";
    352 			case V:
    353 				return "V";
    354 			case W:
    355 				return "W";
    356 			case X:
    357 				return "X";
    358 			case Y:
    359 				return "Y";
    360 			case Z:
    361 				return "Z";
    362 			case COMMA:
    363 				return ",";
    364 			case PERIOD:
    365 				return ".";
    366 			case ALT_LEFT:
    367 				return "L-Alt";
    368 			case ALT_RIGHT:
    369 				return "R-Alt";
    370 			case SHIFT_LEFT:
    371 				return "L-Shift";
    372 			case SHIFT_RIGHT:
    373 				return "R-Shift";
    374 			case TAB:
    375 				return "Tab";
    376 			case SPACE:
    377 				return "Space";
    378 			case SYM:
    379 				return "SYM";
    380 			case EXPLORER:
    381 				return "Explorer";
    382 			case ENVELOPE:
    383 				return "Envelope";
    384 			case ENTER:
    385 				return "Enter";
    386 			case DEL:
    387 				return "Delete"; // also BACKSPACE
    388 			case GRAVE:
    389 				return "`";
    390 			case MINUS:
    391 				return "-";
    392 			case EQUALS:
    393 				return "=";
    394 			case LEFT_BRACKET:
    395 				return "[";
    396 			case RIGHT_BRACKET:
    397 				return "]";
    398 			case BACKSLASH:
    399 				return "\\";
    400 			case SEMICOLON:
    401 				return ";";
    402 			case APOSTROPHE:
    403 				return "'";
    404 			case SLASH:
    405 				return "/";
    406 			case AT:
    407 				return "@";
    408 			case NUM:
    409 				return "Num";
    410 			case HEADSETHOOK:
    411 				return "Headset Hook";
    412 			case FOCUS:
    413 				return "Focus";
    414 			case PLUS:
    415 				return "Plus";
    416 			case MENU:
    417 				return "Menu";
    418 			case NOTIFICATION:
    419 				return "Notification";
    420 			case SEARCH:
    421 				return "Search";
    422 			case MEDIA_PLAY_PAUSE:
    423 				return "Play/Pause";
    424 			case MEDIA_STOP:
    425 				return "Stop Media";
    426 			case MEDIA_NEXT:
    427 				return "Next Media";
    428 			case MEDIA_PREVIOUS:
    429 				return "Prev Media";
    430 			case MEDIA_REWIND:
    431 				return "Rewind";
    432 			case MEDIA_FAST_FORWARD:
    433 				return "Fast Forward";
    434 			case MUTE:
    435 				return "Mute";
    436 			case PAGE_UP:
    437 				return "Page Up";
    438 			case PAGE_DOWN:
    439 				return "Page Down";
    440 			case PICTSYMBOLS:
    441 				return "PICTSYMBOLS";
    442 			case SWITCH_CHARSET:
    443 				return "SWITCH_CHARSET";
    444 			case BUTTON_A:
    445 				return "A Button";
    446 			case BUTTON_B:
    447 				return "B Button";
    448 			case BUTTON_C:
    449 				return "C Button";
    450 			case BUTTON_X:
    451 				return "X Button";
    452 			case BUTTON_Y:
    453 				return "Y Button";
    454 			case BUTTON_Z:
    455 				return "Z Button";
    456 			case BUTTON_L1:
    457 				return "L1 Button";
    458 			case BUTTON_R1:
    459 				return "R1 Button";
    460 			case BUTTON_L2:
    461 				return "L2 Button";
    462 			case BUTTON_R2:
    463 				return "R2 Button";
    464 			case BUTTON_THUMBL:
    465 				return "Left Thumb";
    466 			case BUTTON_THUMBR:
    467 				return "Right Thumb";
    468 			case BUTTON_START:
    469 				return "Start";
    470 			case BUTTON_SELECT:
    471 				return "Select";
    472 			case BUTTON_MODE:
    473 				return "Button Mode";
    474 			case FORWARD_DEL:
    475 				return "Forward Delete";
    476 			case CONTROL_LEFT:
    477 				return "L-Ctrl";
    478 			case CONTROL_RIGHT:
    479 				return "R-Ctrl";
    480 			case ESCAPE:
    481 				return "Escape";
    482 			case END:
    483 				return "End";
    484 			case INSERT:
    485 				return "Insert";
    486 			case NUMPAD_0:
    487 				return "Numpad 0";
    488 			case NUMPAD_1:
    489 				return "Numpad 1";
    490 			case NUMPAD_2:
    491 				return "Numpad 2";
    492 			case NUMPAD_3:
    493 				return "Numpad 3";
    494 			case NUMPAD_4:
    495 				return "Numpad 4";
    496 			case NUMPAD_5:
    497 				return "Numpad 5";
    498 			case NUMPAD_6:
    499 				return "Numpad 6";
    500 			case NUMPAD_7:
    501 				return "Numpad 7";
    502 			case NUMPAD_8:
    503 				return "Numpad 8";
    504 			case NUMPAD_9:
    505 				return "Numpad 9";
    506 			case COLON:
    507 				return ":";
    508 			case F1:
    509 				return "F1";
    510 			case F2:
    511 				return "F2";
    512 			case F3:
    513 				return "F3";
    514 			case F4:
    515 				return "F4";
    516 			case F5:
    517 				return "F5";
    518 			case F6:
    519 				return "F6";
    520 			case F7:
    521 				return "F7";
    522 			case F8:
    523 				return "F8";
    524 			case F9:
    525 				return "F9";
    526 			case F10:
    527 				return "F10";
    528 			case F11:
    529 				return "F11";
    530 			case F12:
    531 				return "F12";
    532 				// BUTTON_CIRCLE unhandled, as it conflicts with the more likely to be pressed F12
    533 			default:
    534 				// key name not found
    535 				return null;
    536 			}
    537 		}
    538 
    539 		private static ObjectIntMap<String> keyNames;
    540 
    541 		/** @param keyname the keyname returned by the {@link Keys#toString(int)} method
    542 		 * @return the int keycode */
    543 		public static int valueOf (String keyname) {
    544 			if (keyNames == null) initializeKeyNames();
    545 			return keyNames.get(keyname, -1);
    546 		}
    547 
    548 		/** lazily intialized in {@link Keys#valueOf(String)} */
    549 		private static void initializeKeyNames () {
    550 			keyNames = new ObjectIntMap<String>();
    551 			for (int i = 0; i < 256; i++) {
    552 				String name = toString(i);
    553 				if (name != null) keyNames.put(name, i);
    554 			}
    555 		}
    556 	}
    557 
    558 	/** Enumeration of potentially available peripherals. Use with {@link Input#isPeripheralAvailable(Peripheral)}.
    559 	 * @author mzechner */
    560 	public enum Peripheral {
    561 		HardwareKeyboard, OnscreenKeyboard, MultitouchScreen, Accelerometer, Compass, Vibrator, Gyroscope
    562 	}
    563 
    564 	/** @return The rate of rotation around the x axis. (rad/s) */
    565 	public float getAccelerometerX ();
    566 
    567 	/** @return The rate of rotation around the y axis. (rad/s) */
    568 	public float getAccelerometerY ();
    569 
    570 	/** @return The rate of rotation around the z axis. (rad/s) */
    571 	public float getAccelerometerZ ();
    572 
    573 	public float getGyroscopeX ();
    574 
    575 	public float getGyroscopeY ();
    576 
    577 	public float getGyroscopeZ ();
    578 
    579 	/** @return The x coordinate of the last touch on touch screen devices and the current mouse position on desktop for the first
    580 	 *         pointer in screen coordinates. The screen origin is the top left corner. */
    581 	public int getX ();
    582 
    583 	/** Returns the x coordinate in screen coordinates of the given pointer. Pointers are indexed from 0 to n. The pointer id
    584 	 * identifies the order in which the fingers went down on the screen, e.g. 0 is the first finger, 1 is the second and so on.
    585 	 * When two fingers are touched down and the first one is lifted the second one keeps its index. If another finger is placed on
    586 	 * the touch screen the first free index will be used.
    587 	 *
    588 	 * @param pointer the pointer id.
    589 	 * @return the x coordinate */
    590 	public int getX (int pointer);
    591 
    592 	/** @return the different between the current pointer location and the last pointer location on the x-axis. */
    593 	public int getDeltaX ();
    594 
    595 	/** @return the different between the current pointer location and the last pointer location on the x-axis. */
    596 	public int getDeltaX (int pointer);
    597 
    598 	/** @return The y coordinate of the last touch on touch screen devices and the current mouse position on desktop for the first
    599 	 *         pointer in screen coordinates. The screen origin is the top left corner. */
    600 	public int getY ();
    601 
    602 	/** Returns the y coordinate in screen coordinates of the given pointer. Pointers are indexed from 0 to n. The pointer id
    603 	 * identifies the order in which the fingers went down on the screen, e.g. 0 is the first finger, 1 is the second and so on.
    604 	 * When two fingers are touched down and the first one is lifted the second one keeps its index. If another finger is placed on
    605 	 * the touch screen the first free index will be used.
    606 	 *
    607 	 * @param pointer the pointer id.
    608 	 * @return the y coordinate */
    609 	public int getY (int pointer);
    610 
    611 	/** @return the different between the current pointer location and the last pointer location on the y-axis. */
    612 	public int getDeltaY ();
    613 
    614 	/** @return the different between the current pointer location and the last pointer location on the y-axis. */
    615 	public int getDeltaY (int pointer);
    616 
    617 	/** @return whether the screen is currently touched. */
    618 	public boolean isTouched ();
    619 
    620 	/** @return whether a new touch down event just occurred. */
    621 	public boolean justTouched ();
    622 
    623 	/** Whether the screen is currently touched by the pointer with the given index. Pointers are indexed from 0 to n. The pointer
    624 	 * id identifies the order in which the fingers went down on the screen, e.g. 0 is the first finger, 1 is the second and so on.
    625 	 * When two fingers are touched down and the first one is lifted the second one keeps its index. If another finger is placed on
    626 	 * the touch screen the first free index will be used.
    627 	 *
    628 	 * @param pointer the pointer
    629 	 * @return whether the screen is touched by the pointer */
    630 	public boolean isTouched (int pointer);
    631 
    632 	/** Whether a given button is pressed or not. Button constants can be found in {@link Buttons}. On Android only the Button#LEFT
    633 	 * constant is meaningful before version 4.0.
    634 	 * @param button the button to check.
    635 	 * @return whether the button is down or not. */
    636 	public boolean isButtonPressed (int button);
    637 
    638 	/** Returns whether the key is pressed.
    639 	 *
    640 	 * @param key The key code as found in {@link Input.Keys}.
    641 	 * @return true or false. */
    642 	public boolean isKeyPressed (int key);
    643 
    644 	/** Returns whether the key has just been pressed.
    645 	 *
    646 	 * @param key The key code as found in {@link Input.Keys}.
    647 	 * @return true or false. */
    648 	public boolean isKeyJustPressed (int key);
    649 
    650 	/** System dependent method to input a string of text. A dialog box will be created with the given title and the given text as a
    651 	 * message for the user. Once the dialog has been closed the provided {@link TextInputListener} will be called on the rendering
    652 	 * thread.
    653 	 *
    654 	 * @param listener The TextInputListener.
    655 	 * @param title The title of the text input dialog.
    656 	 * @param text The message presented to the user. */
    657 	public void getTextInput (TextInputListener listener, String title, String text, String hint);
    658 
    659 	/** Sets the on-screen keyboard visible if available.
    660 	 *
    661 	 * @param visible visible or not */
    662 	public void setOnscreenKeyboardVisible (boolean visible);
    663 
    664 	/** Vibrates for the given amount of time. Note that you'll need the permission
    665 	 * <code> <uses-permission android:name="android.permission.VIBRATE" /></code> in your manifest file in order for this to work.
    666 	 *
    667 	 * @param milliseconds the number of milliseconds to vibrate. */
    668 	public void vibrate (int milliseconds);
    669 
    670 	/** Vibrate with a given pattern. Pass in an array of ints that are the times at which to turn on or off the vibrator. The first
    671 	 * one is how long to wait before turning it on, and then after that it alternates. If you want to repeat, pass the index into
    672 	 * the pattern at which to start the repeat.
    673 	 * @param pattern an array of longs of times to turn the vibrator on or off.
    674 	 * @param repeat the index into pattern at which to repeat, or -1 if you don't want to repeat. */
    675 	public void vibrate (long[] pattern, int repeat);
    676 
    677 	/** Stops the vibrator */
    678 	public void cancelVibrate ();
    679 
    680 	/** The azimuth is the angle of the device's orientation around the z-axis. The positive z-axis points towards the earths
    681 	 * center.
    682 	 *
    683 	 * @see <a
    684 	 *      href="http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])">http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])</a>
    685 	 * @return the azimuth in degrees */
    686 	public float getAzimuth ();
    687 
    688 	/** The pitch is the angle of the device's orientation around the x-axis. The positive x-axis roughly points to the west and is
    689 	 * orthogonal to the z- and y-axis.
    690 	 * @see <a
    691 	 *      href="http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])">http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])</a>
    692 	 * @return the pitch in degrees */
    693 	public float getPitch ();
    694 
    695 	/** The roll is the angle of the device's orientation around the y-axis. The positive y-axis points to the magnetic north pole
    696 	 * of the earth.
    697 	 * @see <a
    698 	 *      href="http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])">http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])</a>
    699 	 * @return the roll in degrees */
    700 	public float getRoll ();
    701 
    702 	/** Returns the rotation matrix describing the devices rotation as per <a href=
    703 	 * "http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])"
    704 	 * >SensorManager#getRotationMatrix(float[], float[], float[], float[])</a>. Does not manipulate the matrix if the platform
    705 	 * does not have an accelerometer.
    706 	 * @param matrix */
    707 	public void getRotationMatrix (float[] matrix);
    708 
    709 	/** @return the time of the event currently reported to the {@link InputProcessor}. */
    710 	public long getCurrentEventTime ();
    711 
    712 	/** Sets whether the BACK button on Android should be caught. This will prevent the app from being paused. Will have no effect
    713 	 * on the desktop.
    714 	 *
    715 	 * @param catchBack whether to catch the back button */
    716 	public void setCatchBackKey (boolean catchBack);
    717 
    718 	/** @return whether the back button is currently being caught */
    719 	public boolean isCatchBackKey ();
    720 
    721 	/** Sets whether the MENU button on Android should be caught. This will prevent the onscreen keyboard to show up. Will have no
    722 	 * effect on the desktop.
    723 	 *
    724 	 * @param catchMenu whether to catch the menu button */
    725 	public void setCatchMenuKey (boolean catchMenu);
    726 
    727 	/** @return whether the menu button is currently being caught */
    728 	public boolean isCatchMenuKey ();
    729 
    730 	/** Sets the {@link InputProcessor} that will receive all touch and key input events. It will be called before the
    731 	 * {@link ApplicationListener#render()} method each frame.
    732 	 *
    733 	 * @param processor the InputProcessor */
    734 	public void setInputProcessor (InputProcessor processor);
    735 
    736 	/** @return the currently set {@link InputProcessor} or null. */
    737 	public InputProcessor getInputProcessor ();
    738 
    739 	/** Queries whether a {@link Peripheral} is currently available. In case of Android and the {@link Peripheral#HardwareKeyboard}
    740 	 * this returns the whether the keyboard is currently slid out or not.
    741 	 *
    742 	 * @param peripheral the {@link Peripheral}
    743 	 * @return whether the peripheral is available or not. */
    744 	public boolean isPeripheralAvailable (Peripheral peripheral);
    745 
    746 	/** @return the rotation of the device with respect to its native orientation. */
    747 	public int getRotation ();
    748 
    749 	/** @return the native orientation of the device. */
    750 	public Orientation getNativeOrientation ();
    751 
    752 	public enum Orientation {
    753 		Landscape, Portrait
    754 	}
    755 
    756 	/** Only viable on the desktop. Will confine the mouse cursor location to the window and hide the mouse cursor. X and y
    757 	 * coordinates are still reported as if the mouse was not catched.
    758 	 * @param catched whether to catch or not to catch the mouse cursor */
    759 	public void setCursorCatched (boolean catched);
    760 
    761 	/** @return whether the mouse cursor is catched. */
    762 	public boolean isCursorCatched ();
    763 
    764 	/** Only viable on the desktop. Will set the mouse cursor location to the given window coordinates (origin top-left corner).
    765 	 * @param x the x-position
    766 	 * @param y the y-position */
    767 	public void setCursorPosition (int x, int y);
    768 }
    769