1cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le/* 2cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * Copyright (C) 2013 DroidDriver committers 3cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * 4cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * Licensed under the Apache License, Version 2.0 (the "License"); 5cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * you may not use this file except in compliance with the License. 6cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * You may obtain a copy of the License at 7cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * 8cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * http://www.apache.org/licenses/LICENSE-2.0 9cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * 10cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * Unless required by applicable law or agreed to in writing, software 11cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * distributed under the License is distributed on an "AS IS" BASIS, 12cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * See the License for the specific language governing permissions and 14cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le * limitations under the License. 15cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le */ 16cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le 17cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Lepackage com.google.android.droiddriver.actions; 18cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le 19cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Leimport android.os.SystemClock; 20cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Leimport android.view.KeyEvent; 21cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le 22cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Leimport com.google.android.droiddriver.InputInjector; 23cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Leimport com.google.android.droiddriver.UiElement; 24cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Leimport com.google.android.droiddriver.util.Events; 2552b875da168081ca17d5532cebfbe78974ecce55Kevin Jinimport com.google.common.base.Objects; 26cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le 27cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le/** 2821a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin * An action to press a single key. TODO: rename to SingleKeyAction 29cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le */ 3021a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jinpublic class PressKeyAction extends KeyAction { 31cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le private final int keyCode; 32cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le 3321a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin /** 3421a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin * Defaults timeoutMillis to 0. 3521a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin */ 36cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le public PressKeyAction(int keyCode) { 3721a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin this(keyCode, 0L); 3821a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin } 3921a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin 4021a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin public PressKeyAction(int keyCode, long timeoutMillis) { 4121a0001e2426644dd68e6140b5873ebaeafcc3dcKevin Jin super(timeoutMillis); 42cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le this.keyCode = keyCode; 43cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le } 44cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le 45cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le @Override 46cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le public boolean perform(InputInjector injector, UiElement element) { 47cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le final long downTime = SystemClock.uptimeMillis(); 48cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le KeyEvent downEvent = Events.newKeyEvent(downTime, KeyEvent.ACTION_DOWN, keyCode); 49cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le KeyEvent upEvent = Events.newKeyEvent(downTime, KeyEvent.ACTION_UP, keyCode); 50cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le 51cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le return injector.injectInputEvent(downEvent) && injector.injectInputEvent(upEvent); 52cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le } 5352b875da168081ca17d5532cebfbe78974ecce55Kevin Jin 5452b875da168081ca17d5532cebfbe78974ecce55Kevin Jin @Override 5552b875da168081ca17d5532cebfbe78974ecce55Kevin Jin public String toString() { 5652b875da168081ca17d5532cebfbe78974ecce55Kevin Jin return Objects.toStringHelper(this).addValue(KeyEvent.keyCodeToString(keyCode)).toString(); 5752b875da168081ca17d5532cebfbe78974ecce55Kevin Jin } 58cce3dd4492cf04a89154e36fda1909ab4e35213aThanh Le} 59