Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: dart/editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/MobilePortForwardDialog.java

Issue 337623003: Version 1.5.0-dev.4.11 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/MobilePortForwardDialog.java
===================================================================
--- dart/editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/MobilePortForwardDialog.java (revision 0)
+++ dart/editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/MobilePortForwardDialog.java (revision 0)
@@ -0,0 +1,205 @@
+package com.google.dart.tools.debug.ui.internal.dialogs;
+
+import com.google.dart.tools.core.DartCore;
+import com.google.dart.tools.core.mobile.AndroidDebugBridge;
+import com.google.dart.tools.core.mobile.AndroidDevice;
+import com.google.dart.tools.debug.ui.internal.mobile.MobileMainTab;
+import com.google.dart.tools.ui.internal.util.ExternalBrowserUtil;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+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.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Shell;
+
+import java.net.ConnectException;
+
+public class MobilePortForwardDialog extends Dialog {
+
+ private final String pageUrl;
+ private Link descriptionLabel;
+ private Label testResultLabel;
+
+ public MobilePortForwardDialog(Shell parentShell, String pageUrl, boolean localhostOverUsb) {
+ super(parentShell);
+ this.pageUrl = pageUrl;
+ setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
+ }
+
+ @Override
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText("Mobile Launch");
+ }
+
+ @Override
+ protected Control createButtonBar(Composite parent) {
+ Composite buttonBar = (Composite) super.createButtonBar(parent);
+ ((GridLayout) buttonBar.getLayout()).makeColumnsEqualWidth = false;
+ buttonBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL
+ | GridData.VERTICAL_ALIGN_CENTER));
+ return buttonBar;
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+
+ final Button testButton = createButton(
+ parent,
+ IDialogConstants.CLIENT_ID,
+ "Test Connection",
+ false);
+ testButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ testConnection();
+ }
+ });
+ testButton.getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ testButton.setFocus();
+ }
+ });
+
+ // increment the number of columns in the button bar
+ ((GridLayout) parent.getLayout()).numColumns++;
+ testResultLabel = new Label(parent, SWT.NONE);
+ testResultLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+
+ Button closeButton = createButton(
+ parent,
+ IDialogConstants.CLOSE_ID,
+ IDialogConstants.CLOSE_LABEL,
+ true);
+ closeButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ close();
+ }
+ });
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite container = (Composite) super.createDialogArea(parent);
+ container.setLayout(new GridLayout(2, false));
+
+ descriptionLabel = new Link(container, SWT.WRAP);
+ GridData gd_descriptionLabel = new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1);
+ gd_descriptionLabel.verticalIndent = 20;
+ gd_descriptionLabel.horizontalIndent = 20;
+ descriptionLabel.setLayoutData(gd_descriptionLabel);
+ descriptionLabel.setText("Unable to access the web server"
+ + " on the developer machine from the mobile device.\n\n"
+ + "Looks like port forwarding has not been setup between device and the machine.\n"
+ + "Follow the steps listed under " //
+ + " <a href=\"" + MobileMainTab.MOBILE_DOC_URL + "\">Set up port forwarding</a>\n"
+ + "\n\nOnce you are done, use Test Connection to verify the setup.");
+ descriptionLabel.addSelectionListener(new SelectionListener() {
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ExternalBrowserUtil.openInExternalBrowser(e.text.trim());
+ }
+ });
+
+ return container;
+ }
+
+ /**
+ * Return the initial size of the dialog.
+ */
+ @Override
+ protected Point getInitialSize() {
+ return getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+ }
+
+ /**
+ * Test the connection between the mobile device and the webserver on the development machine.
+ */
+ private void testConnection() {
+ testResultLabel.setText("Testing connection...");
+
+ // Test connection on a background thread
+ Thread thread = new Thread("Test Mobile Port Forwarding") {
+
+ @Override
+ public void run() {
+ long startTime = System.currentTimeMillis();
+
+ // Test connection from mobile device to developer machine
+ final IStatus status = testConnectionInBackground();
+
+ // Ensure text is visible for at least 1 1/2 seconds
+ long delta = startTime + 1500 - System.currentTimeMillis();
+ if (delta > 0) {
+ try {
+ Thread.sleep(delta);
+ } catch (InterruptedException e) {
+ //$FALL-THROUGH$
+ }
+ }
+
+ getShell().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ String message;
+ if (status.isOK()) {
+ message = "Connection validated";
+ } else {
+ message = status.getMessage();
+ }
+ if (message.startsWith(ConnectException.class.getName())) {
+ message = message.substring(ConnectException.class.getName().length() + 2).trim();
+ }
+ testResultLabel.setText(message);
+ }
+ });
+ }
+ };
+ thread.setDaemon(true);
+ thread.start();
+ }
+
+ private IStatus testConnectionInBackground() {
+ AndroidDebugBridge debugBridge = AndroidDebugBridge.getAndroidDebugBridge();
+
+ // Check that the device is still connected and authorized
+ AndroidDevice device = debugBridge.getConnectedDevice();
+ if (device == null) {
+ return new Status(IStatus.ERROR, DartCore.PLUGIN_ID, "No device connected");
+ }
+ if (!device.isAuthorized()) {
+ return new Status(IStatus.ERROR, DartCore.PLUGIN_ID, "Connected device is not authorized");
+ }
+
+ return debugBridge.isHtmlPageAccessible(device, pageUrl);
+ }
+}
Property changes on: dart/editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/MobilePortForwardDialog.java
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698