BaseUiDevice.java revision 70e34108e0fc19277e642aef3b36b65b8e254899
170e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin/*
270e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * Copyright (C) 2013 DroidDriver committers
370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin *
470e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * Licensed under the Apache License, Version 2.0 (the "License");
570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * you may not use this file except in compliance with the License.
670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * You may obtain a copy of the License at
770e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin *
870e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin *      http://www.apache.org/licenses/LICENSE-2.0
970e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin *
1070e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * Unless required by applicable law or agreed to in writing, software
1170e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * distributed under the License is distributed on an "AS IS" BASIS,
1270e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * See the License for the specific language governing permissions and
1470e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * limitations under the License.
1570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin */
1670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
1770e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinpackage com.google.android.droiddriver.base;
1870e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
1970e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinimport android.app.Service;
2070e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinimport android.os.PowerManager;
2170e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinimport android.view.KeyEvent;
2270e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
2370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinimport com.google.android.droiddriver.UiDevice;
2470e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinimport com.google.android.droiddriver.actions.Action;
2570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinimport com.google.android.droiddriver.actions.PressKeyAction;
2670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
2770e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin/**
2870e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin * Base implementation of {@link UiDevice}.
2970e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin */
3070e34108e0fc19277e642aef3b36b65b8e254899Kevin Jinpublic class BaseUiDevice implements UiDevice {
3170e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  // power off may not trigger new events
3270e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  private static final PressKeyAction POWER_OFF = new PressKeyAction(KeyEvent.KEYCODE_POWER, 0,
3370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin      false);
3470e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  // power on should always trigger new events
3570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  private static final PressKeyAction POWER_ON = new PressKeyAction(KeyEvent.KEYCODE_POWER, 1000L,
3670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin      false);
3770e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
3870e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  private final AbstractContext abstractContext;
3970e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
4070e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  public BaseUiDevice(AbstractContext abstractContext) {
4170e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    this.abstractContext = abstractContext;
4270e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  }
4370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
4470e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  @Override
4570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  public boolean isScreenOn() {
4670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    PowerManager pm =
4770e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin        (PowerManager) abstractContext.instrumentation.getTargetContext().getSystemService(
4870e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin            Service.POWER_SERVICE);
4970e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    return pm.isScreenOn();
5070e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  }
5170e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
5270e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  @Override
5370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  public void wakeUp() {
5470e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    if (!isScreenOn()) {
5570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin      perform(POWER_ON);
5670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    }
5770e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  }
5870e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
5970e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  @Override
6070e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  public void sleep() {
6170e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    if (isScreenOn()) {
6270e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin      perform(POWER_OFF);
6370e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    }
6470e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  }
6570e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin
6670e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  @Override
6770e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  public boolean perform(Action action) {
6870e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin    return abstractContext.driver.getRootElement().perform(action);
6970e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin  }
7070e34108e0fc19277e642aef3b36b65b8e254899Kevin Jin}
71