From 4b31201b5a2dbf8036da5a8d089a68a39cc1dc44 Mon Sep 17 00:00:00 2001 From: Kevin Jin Date: Fri, 20 Feb 2015 09:35:39 -0800 Subject: rename package 'com.google.android' to 'io.appium' Change-Id: I2c7c96cd6a6971806e2ea7b06cd6c2c6666e4340 --- .../instrumentation/InstrumentationUiDevice.java | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/io/appium/droiddriver/instrumentation/InstrumentationUiDevice.java (limited to 'src/io/appium/droiddriver/instrumentation/InstrumentationUiDevice.java') diff --git a/src/io/appium/droiddriver/instrumentation/InstrumentationUiDevice.java b/src/io/appium/droiddriver/instrumentation/InstrumentationUiDevice.java new file mode 100644 index 0000000..3e3b35c --- /dev/null +++ b/src/io/appium/droiddriver/instrumentation/InstrumentationUiDevice.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2013 DroidDriver committers + * + * 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 io.appium.droiddriver.instrumentation; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.RectF; +import android.util.Log; +import android.view.View; + +import io.appium.droiddriver.base.BaseUiDevice; +import io.appium.droiddriver.base.DroidDriverContext; +import io.appium.droiddriver.util.Logs; + +class InstrumentationUiDevice extends BaseUiDevice { + private final DroidDriverContext context; + + InstrumentationUiDevice(DroidDriverContext context) { + this.context = context; + } + + @Override + protected Bitmap takeScreenshot() { + ScreenshotRunnable screenshotRunnable = + new ScreenshotRunnable(context.getDriver().getRootElement().getRawElement()); + context.runOnMainSync(screenshotRunnable); + return screenshotRunnable.screenshot; + } + + @Override + protected DroidDriverContext getContext() { + return context; + } + + private static class ScreenshotRunnable implements Runnable { + private final View rootView; + Bitmap screenshot; + + private ScreenshotRunnable(View rootView) { + this.rootView = rootView; + } + + @Override + public void run() { + try { + rootView.destroyDrawingCache(); + rootView.buildDrawingCache(false); + Bitmap drawingCache = rootView.getDrawingCache(); + int[] xy = new int[2]; + rootView.getLocationOnScreen(xy); + if (xy[0] == 0 && xy[1] == 0) { + screenshot = Bitmap.createBitmap(drawingCache); + } else { + Canvas canvas = new Canvas(); + Rect rect = new Rect(0, 0, drawingCache.getWidth(), drawingCache.getHeight()); + rect.offset(xy[0], xy[1]); + screenshot = + Bitmap.createBitmap(rect.width() + xy[0], rect.height() + xy[1], Config.ARGB_8888); + canvas.setBitmap(screenshot); + canvas.drawBitmap(drawingCache, null, new RectF(rect), null); + canvas.setBitmap(null); + } + rootView.destroyDrawingCache(); + } catch (Throwable e) { + Logs.log(Log.ERROR, e); + } + } + } +} -- cgit v1.2.3