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