/*
* 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;
import com.android.uiautomator.actions.ExpandAllAction;
import com.android.uiautomator.actions.ImageHelper;
import com.android.uiautomator.actions.ToggleNafAction;
import com.android.uiautomator.tree.AttributePair;
import com.android.uiautomator.tree.BasicTreeNode;
import com.android.uiautomator.tree.BasicTreeNodeContentProvider;
import com.android.uiautomator.tree.UiNode;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Transform;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.Tree;
import java.io.File;
import java.util.List;
public class UiAutomatorView extends Composite {
private static final int IMG_BORDER = 2;
// The screenshot area is made of a stack layout of two components: screenshot canvas and
// a "specify screenshot" button. If a screenshot is already available, then that is displayed
// on the canvas. If it is not availble, then the "specify screenshot" button is displayed.
private Composite mScreenshotComposite;
private StackLayout mStackLayout;
private Composite mSetScreenshotComposite;
private Canvas mScreenshotCanvas;
private TreeViewer mTreeViewer;
private TableViewer mTableViewer;
private float mScale = 1.0f;
private int mDx, mDy;
private UiAutomatorModel mModel;
private File mModelFile;
private Image mScreenshot;
private List<BasicTreeNode> mSearchResult;
private int mSearchResultIndex;
private ToolItem itemDeleteAndInfo;
private Text searchTextarea;
private Cursor mOrginialCursor;
private ToolItem itemPrev, itemNext;
private ToolItem coordinateLabel;
private String mLastSearchedTerm;
private Cursor mCrossCursor;
public UiAutomatorView(Composite parent, int style) {
super(parent, SWT.NONE);
setLayout(new FillLayout());
SashForm baseSash = new SashForm(this, SWT.HORIZONTAL);
mOrginialCursor = getShell().getCursor();
mCrossCursor = new Cursor(getDisplay(), SWT.CURSOR_CROSS);
mScreenshotComposite = new Composite(baseSash, SWT.BORDER);
mStackLayout = new StackLayout();
mScreenshotComposite.setLayout(mStackLayout);
// draw the canvas with border, so the divider area for sash form can be highlighted
mScreenshotCanvas = new Canvas(mScreenshotComposite, SWT.BORDER);
mStackLayout.topControl = mScreenshotCanvas;
mScreenshotComposite.layout();
// set cursor when enter canvas
mScreenshotCanvas.addListener(SWT.MouseEnter, new Listener() {
@Override
public void handleEvent(Event arg0) {
getShell().setCursor(mCrossCursor);
}
});
mScreenshotCanvas.addListener(SWT.MouseExit, new Listener() {
@Override
public void handleEvent(Event arg0) {
getShell().setCursor(mOrginialCursor);
}
});
mScreenshotCanvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
if (mModel != null) {
mModel.toggleExploreMode();
redrawScreenshot();
}
}
});
mScreenshotCanvas.setBackground(
getShell().getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
mScreenshotCanvas.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
if (mScreenshot != null) {
updateScreenshotTransformation();
// shifting the image here, so that there's a border around screen shot
// this makes highlighting red rectangles on the screen shot edges more visible
Transform t = new Transform(e.gc.getDevice());
t.translate(mDx, mDy);
t.scale(mScale, mScale);
e.gc.setTransform(t);
e.gc.drawImage(mScreenshot, 0, 0);
// this resets the transformation to identity transform, i.e. no change
// we don't use transformation here because it will cause the line pattern
// and line width of highlight rect to be scaled, causing to appear to be blurry
e.gc.setTransform(null);
if (mModel.shouldShowNafNodes()) {
// highlight the "Not Accessibility Friendly" nodes
e.gc.setForeground(e.gc.getDevice().getSystemColor(SWT.COLOR_YELLOW));
e.gc.setBackground(e.gc.getDevice().getSystemColor(SWT.COLOR_YELLOW));
for (Rectangle r : mModel.getNafNodes()) {
e.gc.setAlpha(50);
e.gc.fillRectangle(mDx + getScaledSize(r.x), mDy + getScaledSize(r.y),
getScaledSize(r.width), getScaledSize(r.height));
e.gc.setAlpha(255);
e.gc.setLineStyle(SWT.LINE_SOLID);
e.gc.setLineWidth(2);
e.gc.draw
没有合适的资源?快使用搜索试试~ 我知道了~
uiautomatorviewer最新最新源码,方便二次开发
5星 · 超过95%的资源 需积分: 50 50 下载量 8 浏览量
2019-01-11
14:09:32
上传
评论 5
收藏 31KB GZ 举报
温馨提示
共35个文件
java:18个
png:9个
gradle:1个
打包文件:swt-master-uiautomatorviewer.tar.gz,2019-01-11从googlesource下载的额
资源推荐
资源详情
资源评论
收起资源包目录
swt-master-uiautomatorviewer.tar.gz (35个子文件)
.project 376B
src
main
java
images
prev.png 920B
screenshotcompressed.png 590B
next.png 926B
expandall.png 268B
save.png 981B
screenshot.png 1KB
open-folder.png 383B
warning.png 147B
delete.png 1KB
com
android
uiautomator
DebugBridge.java 3KB
tree
AttributePair.java 833B
UiHierarchyXmlLoader.java 6KB
BasicTreeNode.java 3KB
BasicTreeNodeContentProvider.java 2KB
RootWindowNode.java 1KB
UiNode.java 4KB
UiAutomatorModel.java 5KB
actions
ImageHelper.java 2KB
ExpandAllAction.java 1KB
OpenFilesAction.java 3KB
ToggleNafAction.java 1KB
SaveScreenShotAction.java 3KB
ScreenshotAction.java 7KB
UiAutomatorView.java 25KB
UiAutomatorViewer.java 4KB
OpenDialog.java 8KB
UiAutomatorHelper.java 8KB
etc
uiautomatorviewer 3KB
uiautomatorviewer.bat 2KB
.settings
org.eclipse.jdt.core.prefs 7KB
MODULE_LICENSE_APACHE2 0B
NOTICE 10KB
.classpath 1KB
build.gradle 546B
共 35 条
- 1
资源评论
- qqlike2020-04-25good!!!!
软件测试那些事儿
- 粉丝: 8
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功