| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.uiautomator.core; |
| |
| import android.app.ActivityManagerNative; |
| import android.app.IActivityManager; |
| import android.app.IActivityManager.ContentProviderHolder; |
| import android.app.UiAutomation; |
| import android.content.Context; |
| import android.content.IContentProvider; |
| import android.database.Cursor; |
| import android.hardware.display.DisplayManagerGlobal; |
| import android.os.Binder; |
| import android.os.IBinder; |
| import android.os.IPowerManager; |
| import android.os.RemoteException; |
| import android.os.ServiceManager; |
| import android.os.UserHandle; |
| import android.provider.Settings; |
| import android.util.Log; |
| import android.view.Display; |
| import android.view.IWindowManager; |
| |
| /** |
| * @hide |
| */ |
| public class ShellUiAutomatorBridge extends UiAutomatorBridge { |
| |
| private static final String LOG_TAG = ShellUiAutomatorBridge.class.getSimpleName(); |
| |
| public ShellUiAutomatorBridge(UiAutomation uiAutomation) { |
| super(uiAutomation); |
| } |
| |
| public Display getDefaultDisplay() { |
| return DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY); |
| } |
| |
| public long getSystemLongPressTime() { |
| // Read the long press timeout setting. |
| long longPressTimeout = 0; |
| try { |
| IContentProvider provider = null; |
| Cursor cursor = null; |
| IActivityManager activityManager = ActivityManagerNative.getDefault(); |
| String providerName = Settings.Secure.CONTENT_URI.getAuthority(); |
| IBinder token = new Binder(); |
| try { |
| ContentProviderHolder holder = activityManager.getContentProviderExternal( |
| providerName, UserHandle.USER_OWNER, token); |
| if (holder == null) { |
| throw new IllegalStateException("Could not find provider: " + providerName); |
| } |
| provider = holder.provider; |
| cursor = provider.query(null, Settings.Secure.CONTENT_URI, |
| new String[] { |
| Settings.Secure.VALUE |
| }, "name=?", |
| new String[] { |
| Settings.Secure.LONG_PRESS_TIMEOUT |
| }, null, null); |
| if (cursor.moveToFirst()) { |
| longPressTimeout = cursor.getInt(0); |
| } |
| } finally { |
| if (cursor != null) { |
| cursor.close(); |
| } |
| if (provider != null) { |
| activityManager.removeContentProviderExternal(providerName, token); |
| } |
| } |
| } catch (RemoteException e) { |
| String message = "Error reading long press timeout setting."; |
| Log.e(LOG_TAG, message, e); |
| throw new RuntimeException(message, e); |
| } |
| return longPressTimeout; |
| } |
| |
| @Override |
| public int getRotation() { |
| IWindowManager wm = |
| IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); |
| int ret = -1; |
| try { |
| ret = wm.getRotation(); |
| } catch (RemoteException e) { |
| Log.e(LOG_TAG, "Error getting screen rotation", e); |
| throw new RuntimeException(e); |
| } |
| return ret; |
| } |
| |
| @Override |
| public boolean isScreenOn() { |
| IPowerManager pm = |
| IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE)); |
| boolean ret = false; |
| try { |
| ret = pm.isInteractive(); |
| } catch (RemoteException e) { |
| Log.e(LOG_TAG, "Error getting screen status", e); |
| throw new RuntimeException(e); |
| } |
| return ret; |
| } |
| } |