/* * 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.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 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; } }