| /* |
| * Copyright (C) 2013 DroidDriver committers |
| * |
| * 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.google.android.droiddriver.util; |
| |
| import android.os.SystemClock; |
| import android.view.InputDevice; |
| import android.view.KeyEvent; |
| import android.view.MotionEvent; |
| |
| import com.google.android.droiddriver.actions.InputInjector; |
| import com.google.android.droiddriver.exceptions.ActionException; |
| |
| /** |
| * Helper methods to create InputEvents. |
| */ |
| public class Events { |
| /** |
| * @return a touch down event at the specified coordinates |
| */ |
| public static MotionEvent newTouchDownEvent(int x, int y) { |
| long downTime = SystemClock.uptimeMillis(); |
| MotionEvent event = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 1); |
| event.setSource(InputDevice.SOURCE_TOUCHSCREEN); |
| return event; |
| } |
| |
| /** |
| * @return a touch up event at the specified coordinates |
| */ |
| public static MotionEvent newTouchUpEvent(long downTime, int x, int y) { |
| long eventTime = SystemClock.uptimeMillis(); |
| MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 1); |
| event.setSource(InputDevice.SOURCE_TOUCHSCREEN); |
| return event; |
| } |
| |
| /** |
| * @return a touch move event at the specified coordinates |
| */ |
| public static MotionEvent newTouchMoveEvent(long downTime, int x, int y) { |
| long eventTime = SystemClock.uptimeMillis(); |
| MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, x, y, 1); |
| event.setSource(InputDevice.SOURCE_TOUCHSCREEN); |
| return event; |
| } |
| |
| public static KeyEvent newKeyEvent(long downTime, int action, int keyCode) { |
| KeyEvent event = new KeyEvent(downTime, downTime, action, keyCode, 0 /* repeat */); |
| event.setSource(InputDevice.SOURCE_KEYBOARD); |
| return event; |
| } |
| |
| /** |
| * Injects {@code event}. {@code event} is recycled and should not be used |
| * after. |
| * |
| * @throws ActionException if injection failed |
| */ |
| public static void injectEvent(InputInjector injector, MotionEvent event) { |
| Logs.call(injector, "injectInputEvent", event); |
| try { |
| if (!injector.injectInputEvent(event)) { |
| throw new ActionException("Failed to inject " + event); |
| } |
| } finally { |
| event.recycle(); |
| } |
| } |
| |
| public static long touchDown(InputInjector injector, int x, int y) { |
| MotionEvent downEvent = newTouchDownEvent(x, y); |
| long downTime = downEvent.getDownTime(); |
| injectEvent(injector, downEvent); |
| return downTime; |
| } |
| |
| public static void touchUp(InputInjector injector, long downTime, int x, int y) { |
| injectEvent(injector, newTouchUpEvent(downTime, x, y)); |
| } |
| |
| public static void touchMove(InputInjector injector, long downTime, int x, int y) { |
| injectEvent(injector, newTouchMoveEvent(downTime, x, y)); |
| } |
| |
| private Events() {} |
| } |