diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
commit | 9066cfe9886ac131c34d59ed0e2d287b0e3c0087 (patch) | |
tree | d88beb88001f2482911e3d28e43833b50e4b4e97 /cmds/input/src/com | |
parent | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (diff) | |
download | frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.zip frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.gz frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'cmds/input/src/com')
-rwxr-xr-x | cmds/input/src/com/android/commands/input/Input.java | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/cmds/input/src/com/android/commands/input/Input.java b/cmds/input/src/com/android/commands/input/Input.java new file mode 100755 index 0000000..3a1accd --- /dev/null +++ b/cmds/input/src/com/android/commands/input/Input.java @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.commands.input; + +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemClock; +import android.util.Log; +import android.view.IWindowManager; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; + +/** + * Command that sends key events to the device, either by their keycode, or by + * desired character output. + */ + +public class Input { + + /** + * Command-line entry point. + * + * @param args The command-line arguments + */ + public static void main(String[] args) { + (new Input()).run(args); + } + + private void run(String[] args) { + if (args.length < 1) { + showUsage(); + return; + } + + String command = args[0]; + + if (command.equals("text")) { + sendText(args[1]); + } else if (command.equals("keyevent")) { + sendKeyEvent(args[1]); + } else if (command.equals("motionevent")) { + System.err.println("Error: motionevent not yet supported."); + return; + } + else { + System.err.println("Error: Unknown command: " + command); + showUsage(); + return; + } + } + + /** + * Convert the characters of string text into key event's and send to + * device. + * + * @param text is a string of characters you want to input to the device. + */ + + private void sendText(String text) { + + StringBuffer buff = new StringBuffer(text); + + boolean escapeFlag = false; + for (int i=0; i<buff.length(); i++) { + if (escapeFlag) { + escapeFlag = false; + if (buff.charAt(i) == 's') { + buff.setCharAt(i, ' '); + buff.deleteCharAt(--i); + } + } + if (buff.charAt(i) == '%') { + escapeFlag = true; + } + } + + char[] chars = buff.toString().toCharArray(); + + KeyCharacterMap mKeyCharacterMap = KeyCharacterMap. + load(KeyCharacterMap.BUILT_IN_KEYBOARD); + + KeyEvent[] events = mKeyCharacterMap.getEvents(chars); + + for(int i = 0; i < events.length; i++) { + KeyEvent event = events[i]; + Log.i("SendKeyEvent", Integer.toString(event.getKeyCode())); + try { + (IWindowManager.Stub + .asInterface(ServiceManager.getService("window"))) + .injectKeyEvent(event, true); + } catch (RemoteException e) { + Log.i("Input", "DeadOjbectException"); + } + } + } + + /** + * Send a single key event. + * + * @param event is a string representing the keycode of the key event you + * want to execute. + */ + private void sendKeyEvent(String event) { + int eventCode = Integer.parseInt(event); + long now = SystemClock.uptimeMillis(); + Log.i("SendKeyEvent", event); + try { + KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, eventCode, 0); + KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, eventCode, 0); + (IWindowManager.Stub + .asInterface(ServiceManager.getService("window"))) + .injectKeyEvent(down, true); + (IWindowManager.Stub + .asInterface(ServiceManager.getService("window"))) + .injectKeyEvent(up, true); + } catch (RemoteException e) { + Log.i("Input", "DeadOjbectException"); + } + } + + private void sendMotionEvent(long downTime, int action, float x, float y, + float pressure, float size) { + } + + private void showUsage() { + System.err.println("usage: input [text|keyevent]"); + System.err.println(" input text <string>"); + System.err.println(" input keyevent <event_code>"); + } +} |