163 lines
4.6 KiB
Java
163 lines
4.6 KiB
Java
/*
|
|
* Copyright (C) 2008 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.monkey;
|
|
|
|
import android.app.IActivityManager;
|
|
import android.os.RemoteException;
|
|
import android.os.SystemClock;
|
|
import android.view.IWindowManager;
|
|
import android.view.KeyEvent;
|
|
import android.view.MotionEvent;
|
|
|
|
|
|
/**
|
|
* monkey motion event
|
|
*/
|
|
public class MonkeyMotionEvent extends MonkeyEvent {
|
|
private long mDownTime = -1;
|
|
private long mEventTime = -1;
|
|
private int mAction = -1;
|
|
private float mX = -1;
|
|
private float mY = -1;
|
|
private float mPressure = -1;
|
|
private float mSize = -1;
|
|
private int mMetaState = -1;
|
|
private float mXPrecision = -1;
|
|
private float mYPrecision = -1;
|
|
private int mDeviceId = -1;
|
|
private int mEdgeFlags = -1;
|
|
|
|
//If true, this is an intermediate step (more verbose logging, only)
|
|
private boolean mIntermediateNote;
|
|
|
|
public MonkeyMotionEvent(int type, long downAt, int action,
|
|
float x, float y, int metaState) {
|
|
super(type);
|
|
mDownTime = downAt;
|
|
mAction = action;
|
|
mX = x;
|
|
mY = y;
|
|
mMetaState = metaState;
|
|
}
|
|
|
|
public MonkeyMotionEvent(int type, long downTime, long eventTime, int action,
|
|
float x, float y, float pressure, float size, int metaState,
|
|
float xPrecision, float yPrecision, int deviceId, int edgeFlags) {
|
|
super(type);
|
|
mDownTime = downTime;
|
|
mEventTime = eventTime;
|
|
mAction = action;
|
|
mX = x;
|
|
mY = y;
|
|
mPressure = pressure;
|
|
mSize = size;
|
|
mMetaState = metaState;
|
|
mXPrecision = xPrecision;
|
|
mYPrecision = yPrecision;
|
|
mDeviceId = deviceId;
|
|
mEdgeFlags = edgeFlags;
|
|
}
|
|
|
|
public void setIntermediateNote(boolean b) {
|
|
mIntermediateNote = b;
|
|
}
|
|
|
|
public boolean getIntermediateNote() {
|
|
return mIntermediateNote;
|
|
}
|
|
|
|
public float getX() {
|
|
return mX;
|
|
}
|
|
|
|
public float getY() {
|
|
return mY;
|
|
}
|
|
|
|
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 instance of a motion event
|
|
*/
|
|
private MotionEvent getEvent() {
|
|
if (mDeviceId < 0) {
|
|
return MotionEvent.obtain(mDownTime, SystemClock.uptimeMillis(),
|
|
mAction, mX, mY, mMetaState);
|
|
}
|
|
|
|
// for scripts
|
|
return MotionEvent.obtain(mDownTime, mEventTime,
|
|
mAction, mX, mY, mPressure, mSize, mMetaState,
|
|
mXPrecision, mYPrecision, mDeviceId, mEdgeFlags);
|
|
}
|
|
|
|
@Override
|
|
public boolean isThrottlable() {
|
|
return (getAction() == KeyEvent.ACTION_UP);
|
|
}
|
|
|
|
@Override
|
|
public int injectEvent(IWindowManager iwm, IActivityManager iam, int verbose) {
|
|
|
|
String note;
|
|
if ((verbose > 0 && !mIntermediateNote) || verbose > 1) {
|
|
if (mAction == MotionEvent.ACTION_DOWN) {
|
|
note = "DOWN";
|
|
} else if (mAction == MotionEvent.ACTION_UP) {
|
|
note = "UP";
|
|
} else {
|
|
note = "MOVE";
|
|
}
|
|
System.out.println(":Sending Pointer ACTION_" + note +
|
|
" x=" + mX + " y=" + mY);
|
|
}
|
|
try {
|
|
int type = this.getEventType();
|
|
MotionEvent me = getEvent();
|
|
|
|
if ((type == MonkeyEvent.EVENT_TYPE_POINTER &&
|
|
!iwm.injectPointerEvent(me, false))
|
|
|| (type == MonkeyEvent.EVENT_TYPE_TRACKBALL &&
|
|
!iwm.injectTrackballEvent(me, false))) {
|
|
return MonkeyEvent.INJECT_FAIL;
|
|
}
|
|
} catch (RemoteException ex) {
|
|
return MonkeyEvent.INJECT_ERROR_REMOTE_EXCEPTION;
|
|
}
|
|
return MonkeyEvent.INJECT_SUCCESS;
|
|
}
|
|
}
|