1aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu/* 2aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Copyright (C) 2012 The Android Open Source Project 3aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * 4aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Licensed under the Apache License, Version 2.0 (the "License"); 5aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * you may not use this file except in compliance with the License. 6aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * You may obtain a copy of the License at 7aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * 8aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * http://www.apache.org/licenses/LICENSE-2.0 9aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * 10aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Unless required by applicable law or agreed to in writing, software 11aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * distributed under the License is distributed on an "AS IS" BASIS, 12aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * See the License for the specific language governing permissions and 14aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * limitations under the License. 15aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu */ 16aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 17aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhupackage com.android.uiautomator; 18aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 19aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.jface.dialogs.Dialog; 20aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.jface.dialogs.IDialogConstants; 21aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.SWT; 22aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.graphics.Point; 23aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.layout.GridData; 24aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.layout.GridLayout; 25aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Button; 26aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Composite; 27aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Control; 28aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Event; 29aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.FileDialog; 30aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Group; 31aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Listener; 32aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Shell; 33aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport org.eclipse.swt.widgets.Text; 34aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 35aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhuimport java.io.File; 36aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 37aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu/** 38aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Implements a file selection dialog for both screen shot and xml dump file 39aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * 40aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * "OK" button won't be enabled unless both files are selected 41aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * It also has a convenience feature such that if one file has been picked, and the other 42aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * file path is empty, then selection for the other file will start from the same base folder 43aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * 44aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu */ 45aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhupublic class OpenDialog extends Dialog { 46aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 47aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private static final int FIXED_TEXT_FIELD_WIDTH = 300; 48aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private static final int DEFAULT_LAYOUT_SPACING = 10; 49aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private Text mScreenshotText; 50aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private Text mXmlText; 51aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private File mScreenshotFile; 52aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private File mXmlDumpFile; 53aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private boolean mFileChanged = false; 54aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private Button mOkButton; 55aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 56aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu /** 57aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Create the dialog. 58aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * @param parentShell 59aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu */ 60aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu public OpenDialog(Shell parentShell) { 61aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu super(parentShell); 62aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu setShellStyle(SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); 63aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 64aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 65aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu /** 66aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Create contents of the dialog. 67aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * @param parent 68aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu */ 69aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu @Override 70aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu protected Control createDialogArea(Composite parent) { 71aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu loadDataFromModel(); 72aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 73aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu Composite container = (Composite) super.createDialogArea(parent); 74aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu GridLayout gl_container = new GridLayout(1, false); 75aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gl_container.verticalSpacing = DEFAULT_LAYOUT_SPACING; 76aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gl_container.horizontalSpacing = DEFAULT_LAYOUT_SPACING; 77aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gl_container.marginWidth = DEFAULT_LAYOUT_SPACING; 78aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gl_container.marginHeight = DEFAULT_LAYOUT_SPACING; 79aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu container.setLayout(gl_container); 80aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 81aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu Group openScreenshotGroup = new Group(container, SWT.NONE); 82aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openScreenshotGroup.setLayout(new GridLayout(2, false)); 83aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openScreenshotGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 84aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openScreenshotGroup.setText("Screenshot"); 85aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 86aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mScreenshotText = new Text(openScreenshotGroup, SWT.BORDER | SWT.READ_ONLY); 87aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (mScreenshotFile != null) { 88aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mScreenshotText.setText(mScreenshotFile.getAbsolutePath()); 89aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 90aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu GridData gd_screenShotText = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); 91aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gd_screenShotText.minimumWidth = FIXED_TEXT_FIELD_WIDTH; 92aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gd_screenShotText.widthHint = FIXED_TEXT_FIELD_WIDTH; 93aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mScreenshotText.setLayoutData(gd_screenShotText); 94aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 95aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu Button openScreenshotButton = new Button(openScreenshotGroup, SWT.NONE); 96aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openScreenshotButton.setText("..."); 97aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openScreenshotButton.addListener(SWT.Selection, new Listener() { 98aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu @Override 99aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu public void handleEvent(Event event) { 100aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu handleOpenScreenshotFile(); 101aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 102aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu }); 103aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 104aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu Group openXmlGroup = new Group(container, SWT.NONE); 105aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openXmlGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); 106aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openXmlGroup.setText("UI XML Dump"); 107aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openXmlGroup.setLayout(new GridLayout(2, false)); 108aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 109aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mXmlText = new Text(openXmlGroup, SWT.BORDER | SWT.READ_ONLY); 110aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mXmlText.setEditable(false); 111aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (mXmlDumpFile != null) { 112aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mXmlText.setText(mXmlDumpFile.getAbsolutePath()); 113aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 114aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu GridData gd_xmlText = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); 115aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gd_xmlText.minimumWidth = FIXED_TEXT_FIELD_WIDTH; 116aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu gd_xmlText.widthHint = FIXED_TEXT_FIELD_WIDTH; 117aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mXmlText.setLayoutData(gd_xmlText); 118aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 119aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu Button openXmlButton = new Button(openXmlGroup, SWT.NONE); 120aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openXmlButton.setText("..."); 121aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu openXmlButton.addListener(SWT.Selection, new Listener() { 122aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu @Override 123aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu public void handleEvent(Event event) { 124aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu handleOpenXmlDumpFile(); 125aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 126aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu }); 127aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 128aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu return container; 129aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 130aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 131aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu /** 132aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Create contents of the button bar. 133aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * @param parent 134aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu */ 135aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu @Override 136aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu protected void createButtonsForButtonBar(Composite parent) { 137aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mOkButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); 138aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); 139aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu updateButtonState(); 140aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 141aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 142aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu /** 143aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu * Return the initial size of the dialog. 144aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu */ 145aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu @Override 146aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu protected Point getInitialSize() { 147aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu return new Point(368, 233); 148aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 149aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 150aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu @Override 151aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu protected void configureShell(Shell newShell) { 152aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu super.configureShell(newShell); 153aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu newShell.setText("Open UI Dump Files"); 154aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 155aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 156aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private void loadDataFromModel() { 157aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mScreenshotFile = UiAutomatorModel.getModel().getScreenshotFile(); 158aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mXmlDumpFile = UiAutomatorModel.getModel().getXmlDumpFile(); 159aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 160aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 161aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private void handleOpenScreenshotFile() { 162aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu FileDialog fd = new FileDialog(getShell(), SWT.OPEN); 163aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setText("Open Screenshot File"); 164aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu File initialFile = mScreenshotFile; 165aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu // if file has never been selected before, try to base initial path on the mXmlDumpFile 166aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (initialFile == null && mXmlDumpFile != null && mXmlDumpFile.isFile()) { 167aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu initialFile = mXmlDumpFile.getParentFile(); 168aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 169aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (initialFile != null) { 170aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (initialFile.isFile()) { 171aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setFileName(initialFile.getAbsolutePath()); 172aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } else if (initialFile.isDirectory()) { 173aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setFilterPath(initialFile.getAbsolutePath()); 174aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 175aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 176aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu String[] filter = {"*.png"}; 177aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setFilterExtensions(filter); 178aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu String selected = fd.open(); 179aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (selected != null) { 180aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mScreenshotFile = new File(selected); 181aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mScreenshotText.setText(selected); 182aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mFileChanged = true; 183aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 184aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu updateButtonState(); 185aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 186aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 187aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private void handleOpenXmlDumpFile() { 188aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu FileDialog fd = new FileDialog(getShell(), SWT.OPEN); 189aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setText("Open UI Dump XML File"); 190aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu File initialFile = mXmlDumpFile; 191aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu // if file has never been selected before, try to base initial path on the mScreenshotFile 192aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (initialFile == null && mScreenshotFile != null && mScreenshotFile.isFile()) { 193aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu initialFile = mScreenshotFile.getParentFile(); 194aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 195aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (initialFile != null) { 196aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (initialFile.isFile()) { 197aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setFileName(initialFile.getAbsolutePath()); 198aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } else if (initialFile.isDirectory()) { 199aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setFilterPath(initialFile.getAbsolutePath()); 200aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 201aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 202aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu String initialPath = mXmlText.getText(); 203aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (initialPath.isEmpty() && mScreenshotFile != null && mScreenshotFile.isFile()) { 204aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu initialPath = mScreenshotFile.getParentFile().getAbsolutePath(); 205aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 206aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu String[] filter = {"*.xml"}; 207aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu fd.setFilterExtensions(filter); 208aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu String selected = fd.open(); 209aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu if (selected != null) { 210aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mXmlDumpFile = new File(selected); 211aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mXmlText.setText(selected); 212aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mFileChanged = true; 213aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 214aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu updateButtonState(); 215aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 216aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 217aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu private void updateButtonState() { 218aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu mOkButton.setEnabled(mScreenshotFile != null && mXmlDumpFile != null 219aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu && mScreenshotFile.isFile() && mXmlDumpFile.isFile()); 220aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 221aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 222aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu public boolean hasFileChanged() { 223aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu return mFileChanged; 224aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 225aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 226aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu public File getScreenshotFile() { 227aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu return mScreenshotFile; 228aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 229aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu 230aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu public File getXmlDumpFile() { 231aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu return mXmlDumpFile; 232aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu } 233aecdc4a41f1f2f3e76e05d6549df75359f8397c3Guang Zhu} 234