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