/**
* monkey key event
*/
-public class MonkeyKeyEvent extends MonkeyEvent {
+public class MonkeyKeyEvent extends MonkeyEvent {
private long mDownTime = -1;
private int mMetaState = -1;
private int mAction = -1;
private int mRepeatCount = -1;
private int mDeviceId = -1;
private long mEventTime = -1;
-
+
+ private KeyEvent keyEvent = null;
+
public MonkeyKeyEvent(int action, int keycode) {
super(EVENT_TYPE_KEY);
mAction = action;
mKeyCode = keycode;
}
-
+
+ public MonkeyKeyEvent(KeyEvent e) {
+ super(EVENT_TYPE_KEY);
+ keyEvent = e;
+ }
+
public MonkeyKeyEvent(long downTime, long eventTime, int action,
int code, int repeat, int metaState,
int device, int scancode) {
super(EVENT_TYPE_KEY);
-
+
mAction = action;
mKeyCode = code;
mMetaState = metaState;
mDownTime = downTime;
mEventTime = eventTime;
}
-
+
public int getKeyCode() {
return mKeyCode;
}
-
+
public int getAction() {
return mAction;
}
-
+
public long getDownTime() {
return mDownTime;
}
-
+
public long getEventTime() {
return mEventTime;
}
-
+
public void setDownTime(long downTime) {
mDownTime = downTime;
}
-
+
public void setEventTime(long eventTime) {
mEventTime = eventTime;
}
-
- /**
+
+ /**
* @return the key event
- */
+ */
private KeyEvent getEvent() {
- if (mDeviceId < 0) {
- return new KeyEvent(mAction, mKeyCode);
- }
-
- // for scripts
- return new KeyEvent(mDownTime, mEventTime, mAction,
- mKeyCode, mRepeatCount, mMetaState, mDeviceId, mScancode);
+ if (keyEvent == null) {
+ if (mDeviceId < 0) {
+ keyEvent = new KeyEvent(mAction, mKeyCode);
+ } else {
+ // for scripts
+ keyEvent = new KeyEvent(mDownTime, mEventTime, mAction,
+ mKeyCode, mRepeatCount, mMetaState, mDeviceId, mScancode);
+ }
+ }
+ return keyEvent;
}
@Override
public boolean isThrottlable() {
return (getAction() == KeyEvent.ACTION_UP);
}
-
+
@Override
public int injectEvent(IWindowManager iwm, IActivityManager iam, int verbose) {
if (verbose > 1) {
} catch (RemoteException ex) {
return MonkeyEvent.INJECT_ERROR_REMOTE_EXCEPTION;
}
-
+
return MonkeyEvent.INJECT_SUCCESS;
}
}
import android.os.ServiceManager;
import android.os.SystemClock;
import android.util.Log;
+import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.MotionEvent;
try {
sleep = Integer.parseInt(sleepStr);
} catch (NumberFormatException e) {
- Log.e(TAG, "Not a number: " + sleepStr, e);
+ Log.e(TAG, "Not a number: " + sleepStr, e);
}
return new MonkeyThrottleEvent(sleep);
}
}
/**
+ * Command to type a string
+ */
+ private static class TypeCommand implements MonkeyCommand {
+ // wake
+ public MonkeyEvent translateCommand(List<String> command,
+ CommandQueue queue) {
+ if (command.size() == 2) {
+ String str = command.get(1);
+
+ char[] chars = str.toString().toCharArray();
+
+ // Convert the string to an array of KeyEvent's for
+ // the built in keymap.
+ KeyCharacterMap keyCharacterMap = KeyCharacterMap.
+ load(KeyCharacterMap.BUILT_IN_KEYBOARD);
+ KeyEvent[] events = keyCharacterMap.getEvents(chars);
+
+ // enqueue all the events we just got.
+ for (KeyEvent event : events) {
+ queue.enqueueEvent(new MonkeyKeyEvent(event));
+ }
+ return new MonkeyNoopEvent();
+ }
+ return null;
+ }
+ }
+
+ /**
* Command to wake the device up
*/
private static class WakeCommand implements MonkeyCommand {
COMMAND_MAP.put("wake", new WakeCommand());
COMMAND_MAP.put("tap", new TapCommand());
COMMAND_MAP.put("press", new PressCommand());
+ COMMAND_MAP.put("type", new TypeCommand());
}
// QUIT command
}
/**
+ * Helper function for commandLineSplit that replaces quoted
+ * charaters with their real values.
+ *
+ * @param input the string to do replacement on.
+ * @returns the results with the characters replaced.
+ */
+ private static String replaceQuotedChars(String input) {
+ return input.replace("\\\"", "\"");
+ }
+
+ /**
* This function splits the given line into String parts. It obey's quoted
* strings and returns them as a single part.
*
String cur = tok.nextToken();
if (!insideQuote && cur.startsWith("\"")) {
// begin quote
- quotedWord.append(cur);
+ quotedWord.append(replaceQuotedChars(cur));
insideQuote = true;
} else if (insideQuote) {
// end quote
if (cur.endsWith("\"")) {
insideQuote = false;
- quotedWord.append(cur);
+ quotedWord.append(" ").append(replaceQuotedChars(cur));
String word = quotedWord.toString();
// trim off the quotes
result.add(word.substring(1, word.length() - 1));
} else {
- quotedWord.append(cur);
+ quotedWord.append(" ").append(replaceQuotedChars(cur));
}
} else {
- result.add(cur);
+ result.add(replaceQuotedChars(cur));
}
}
return result;