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