| /* |
| * 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 org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| 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.Shell; |
| import org.eclipse.swt.widgets.Text; |
| |
| import java.io.File; |
| |
| /** |
| * Implements a file selection dialog for both screen shot and xml dump file |
| * |
| * "OK" button won't be enabled unless both files are selected |
| * It also has a convenience feature such that if one file has been picked, and the other |
| * file path is empty, then selection for the other file will start from the same base folder |
| * |
| */ |
| public class OpenDialog extends Dialog { |
| private static final int FIXED_TEXT_FIELD_WIDTH = 300; |
| private static final int DEFAULT_LAYOUT_SPACING = 10; |
| private Text mScreenshotText; |
| private Text mXmlText; |
| private boolean mFileChanged = false; |
| private Button mOkButton; |
| |
| private static File sScreenshotFile; |
| private static File sXmlDumpFile; |
| |
| /** |
| * Create the dialog. |
| * @param parentShell |
| */ |
| public OpenDialog(Shell parentShell) { |
| super(parentShell); |
| setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); |
| } |
| |
| /** |
| * Create contents of the dialog. |
| * @param parent |
| */ |
| @Override |
| protected Control createDialogArea(Composite parent) { |
| Composite container = (Composite) super.createDialogArea(parent); |
| GridLayout gl_container = new GridLayout(1, false); |
| gl_container.verticalSpacing = DEFAULT_LAYOUT_SPACING; |
| gl_container.horizontalSpacing = DEFAULT_LAYOUT_SPACING; |
| gl_container.marginWidth = DEFAULT_LAYOUT_SPACING; |
| gl_container.marginHeight = DEFAULT_LAYOUT_SPACING; |
| container.setLayout(gl_container); |
| |
| Group openScreenshotGroup = new Group(container, SWT.NONE); |
| openScreenshotGroup.setLayout(new GridLayout(2, false)); |
| openScreenshotGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); |
| openScreenshotGroup.setText("Screenshot"); |
| |
| mScreenshotText = new Text(openScreenshotGroup, SWT.BORDER | SWT.READ_ONLY); |
| if (sScreenshotFile != null) { |
| mScreenshotText.setText(sScreenshotFile.getAbsolutePath()); |
| } |
| GridData gd_screenShotText = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); |
| gd_screenShotText.minimumWidth = FIXED_TEXT_FIELD_WIDTH; |
| gd_screenShotText.widthHint = FIXED_TEXT_FIELD_WIDTH; |
| mScreenshotText.setLayoutData(gd_screenShotText); |
| |
| Button openScreenshotButton = new Button(openScreenshotGroup, SWT.NONE); |
| openScreenshotButton.setText("..."); |
| openScreenshotButton.addListener(SWT.Selection, new Listener() { |
| @Override |
| public void handleEvent(Event event) { |
| handleOpenScreenshotFile(); |
| } |
| }); |
| |
| Group openXmlGroup = new Group(container, SWT.NONE); |
| openXmlGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); |
| openXmlGroup.setText("UI XML Dump"); |
| openXmlGroup.setLayout(new GridLayout(2, false)); |
| |
| mXmlText = new Text(openXmlGroup, SWT.BORDER | SWT.READ_ONLY); |
| mXmlText.setEditable(false); |
| if (sXmlDumpFile != null) { |
| mXmlText.setText(sXmlDumpFile.getAbsolutePath()); |
| } |
| GridData gd_xmlText = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); |
| gd_xmlText.minimumWidth = FIXED_TEXT_FIELD_WIDTH; |
| gd_xmlText.widthHint = FIXED_TEXT_FIELD_WIDTH; |
| mXmlText.setLayoutData(gd_xmlText); |
| |
| Button openXmlButton = new Button(openXmlGroup, SWT.NONE); |
| openXmlButton.setText("..."); |
| openXmlButton.addListener(SWT.Selection, new Listener() { |
| @Override |
| public void handleEvent(Event event) { |
| handleOpenXmlDumpFile(); |
| } |
| }); |
| |
| return container; |
| } |
| |
| /** |
| * Create contents of the button bar. |
| * @param parent |
| */ |
| @Override |
| protected void createButtonsForButtonBar(Composite parent) { |
| mOkButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); |
| createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); |
| updateButtonState(); |
| } |
| |
| /** |
| * Return the initial size of the dialog. |
| */ |
| @Override |
| protected Point getInitialSize() { |
| return new Point(368, 233); |
| } |
| |
| @Override |
| protected void configureShell(Shell newShell) { |
| super.configureShell(newShell); |
| newShell.setText("Open UI Dump Files"); |
| } |
| |
| private void handleOpenScreenshotFile() { |
| FileDialog fd = new FileDialog(getShell(), SWT.OPEN); |
| fd.setText("Open Screenshot File"); |
| File initialFile = sScreenshotFile; |
| // if file has never been selected before, try to base initial path on the mXmlDumpFile |
| if (initialFile == null && sXmlDumpFile != null && sXmlDumpFile.isFile()) { |
| initialFile = sXmlDumpFile.getParentFile(); |
| } |
| if (initialFile != null) { |
| if (initialFile.isFile()) { |
| fd.setFileName(initialFile.getAbsolutePath()); |
| } else if (initialFile.isDirectory()) { |
| fd.setFilterPath(initialFile.getAbsolutePath()); |
| } |
| } |
| String[] filter = {"*.png"}; |
| fd.setFilterExtensions(filter); |
| String selected = fd.open(); |
| if (selected != null) { |
| sScreenshotFile = new File(selected); |
| mScreenshotText.setText(selected); |
| mFileChanged = true; |
| } |
| updateButtonState(); |
| } |
| |
| private void handleOpenXmlDumpFile() { |
| FileDialog fd = new FileDialog(getShell(), SWT.OPEN); |
| fd.setText("Open UI Dump XML File"); |
| File initialFile = sXmlDumpFile; |
| // if file has never been selected before, try to base initial path on the mScreenshotFile |
| if (initialFile == null && sScreenshotFile != null && sScreenshotFile.isFile()) { |
| initialFile = sScreenshotFile.getParentFile(); |
| } |
| if (initialFile != null) { |
| if (initialFile.isFile()) { |
| fd.setFileName(initialFile.getAbsolutePath()); |
| } else if (initialFile.isDirectory()) { |
| fd.setFilterPath(initialFile.getAbsolutePath()); |
| } |
| } |
| String initialPath = mXmlText.getText(); |
| if (initialPath.isEmpty() && sScreenshotFile != null && sScreenshotFile.isFile()) { |
| initialPath = sScreenshotFile.getParentFile().getAbsolutePath(); |
| } |
| String[] filter = {"*.uix"}; |
| fd.setFilterExtensions(filter); |
| String selected = fd.open(); |
| if (selected != null) { |
| sXmlDumpFile = new File(selected); |
| mXmlText.setText(selected); |
| mFileChanged = true; |
| } |
| updateButtonState(); |
| } |
| |
| private void updateButtonState() { |
| mOkButton.setEnabled(sXmlDumpFile != null && sXmlDumpFile.isFile()); |
| } |
| |
| public boolean hasFileChanged() { |
| return mFileChanged; |
| } |
| |
| public File getScreenshotFile() { |
| return sScreenshotFile; |
| } |
| |
| public File getXmlDumpFile() { |
| return sXmlDumpFile; |
| } |
| } |