118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu/* 218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * Copyright (C) 2012 The Android Open Source Project 318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * 418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * Licensed under the Apache License, Version 2.0 (the "License"); 518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * you may not use this file except in compliance with the License. 618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * You may obtain a copy of the License at 718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * 818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * http://www.apache.org/licenses/LICENSE-2.0 918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * 1018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * Unless required by applicable law or agreed to in writing, software 1118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * distributed under the License is distributed on an "AS IS" BASIS, 1218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * See the License for the specific language governing permissions and 1418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * limitations under the License. 1518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu */ 1618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 1718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhupackage com.android.uiautomator.core; 1818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 19dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0Sudheer Shankaimport android.app.ActivityManager; 20fc46e9b643881b7b2ab76854f3a0ac077e9def8dSudheer Shankaimport android.app.ContentProviderHolder; 2118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.app.IActivityManager; 2218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.app.UiAutomation; 23ea93fe75396465b26429cfe1c1dcfadf7351354fSteve McKayimport android.content.ContentResolver; 2418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.content.Context; 2518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.content.IContentProvider; 2618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.database.Cursor; 2718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.hardware.display.DisplayManagerGlobal; 2818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.os.Binder; 2918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.os.IBinder; 3018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.os.IPowerManager; 3118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.os.RemoteException; 3218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.os.ServiceManager; 3318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.os.UserHandle; 3418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.provider.Settings; 3518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.util.Log; 3618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.view.Display; 3718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhuimport android.view.IWindowManager; 3818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 3918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu/** 4018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu * @hide 4118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu */ 4218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhupublic class ShellUiAutomatorBridge extends UiAutomatorBridge { 4318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 4418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu private static final String LOG_TAG = ShellUiAutomatorBridge.class.getSimpleName(); 4518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 4618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public ShellUiAutomatorBridge(UiAutomation uiAutomation) { 4718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu super(uiAutomation); 4818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 4918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 5018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public Display getDefaultDisplay() { 5118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu return DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY); 5218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 5318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 5418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public long getSystemLongPressTime() { 5518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu // Read the long press timeout setting. 5618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu long longPressTimeout = 0; 5718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu try { 5818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu IContentProvider provider = null; 5918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Cursor cursor = null; 60dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0Sudheer Shanka IActivityManager activityManager = ActivityManager.getService(); 6118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu String providerName = Settings.Secure.CONTENT_URI.getAuthority(); 6218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu IBinder token = new Binder(); 6318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu try { 6418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu ContentProviderHolder holder = activityManager.getContentProviderExternal( 65bd0e03bb763ae7956ecba35fe5759d4b443158caXiaohui Chen providerName, UserHandle.USER_SYSTEM, token); 6618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if (holder == null) { 6718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu throw new IllegalStateException("Could not find provider: " + providerName); 6818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 6918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu provider = holder.provider; 7018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu cursor = provider.query(null, Settings.Secure.CONTENT_URI, 7118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu new String[] { 7218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Settings.Secure.VALUE 73ea93fe75396465b26429cfe1c1dcfadf7351354fSteve McKay }, 74ea93fe75396465b26429cfe1c1dcfadf7351354fSteve McKay ContentResolver.createSqlQueryBundle( 75ea93fe75396465b26429cfe1c1dcfadf7351354fSteve McKay "name=?", 76ea93fe75396465b26429cfe1c1dcfadf7351354fSteve McKay new String[] { Settings.Secure.LONG_PRESS_TIMEOUT }, 77ea93fe75396465b26429cfe1c1dcfadf7351354fSteve McKay null), 78ea93fe75396465b26429cfe1c1dcfadf7351354fSteve McKay null); 7918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if (cursor.moveToFirst()) { 8018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu longPressTimeout = cursor.getInt(0); 8118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 8218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } finally { 8318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if (cursor != null) { 8418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu cursor.close(); 8518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 8618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu if (provider != null) { 8718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu activityManager.removeContentProviderExternal(providerName, token); 8818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 8918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 9018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } catch (RemoteException e) { 9118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu String message = "Error reading long press timeout setting."; 9218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Log.e(LOG_TAG, message, e); 9318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu throw new RuntimeException(message, e); 9418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 9518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu return longPressTimeout; 9618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 9718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 9818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 9918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public int getRotation() { 10018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu IWindowManager wm = 10118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); 10218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu int ret = -1; 10318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu try { 1048ee7285128c3843401d4c4d0412cd66e86ba49e3Andrii Kulian ret = wm.getDefaultDisplayRotation(); 10518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } catch (RemoteException e) { 10618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Log.e(LOG_TAG, "Error getting screen rotation", e); 10718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu throw new RuntimeException(e); 10818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 10918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu return ret; 11018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 11118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu 11218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu @Override 11318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu public boolean isScreenOn() { 11418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu IPowerManager pm = 11518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE)); 11618b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu boolean ret = false; 11718b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu try { 11818b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu ret = pm.isInteractive(); 11918b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } catch (RemoteException e) { 12018b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu Log.e(LOG_TAG, "Error getting screen status", e); 12118b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu throw new RuntimeException(e); 12218b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 12318b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu return ret; 12418b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu } 12518b892c723e812a7e111f102d2b0c0782b116bb6Guang Zhu} 126