Snap for 9365619 from 089ebf624b9adf64a9cfdd33fb73bff01aab9b65 to studio-flamingo-release

Change-Id: I1fba7c0b868e61866211b69cdf93b31f28a7b4de
diff --git a/BUILD b/BUILD
index 28de5c3..914753f 100644
--- a/BUILD
+++ b/BUILD
@@ -32,5 +32,7 @@
         "//tools/adt/idea/project-system:intellij.android.projectSystem[module]",
         "//tools/adt/idea/project-system-gradle:intellij.android.projectSystem.gradle[module]",
         "//tools/adt/idea/project-system-gradle-models:intellij.android.projectSystem.gradle.models[module]",
+        "//tools/adt/idea/execution/common:intellij.android.execution.common[module]",
+        "//tools/adt/idea/artwork:intellij.android.artwork[module]",
     ],
 )
diff --git a/google-appindexing.iml b/google-appindexing.iml
index 2a6d1ea..d5d8bfe 100644
--- a/google-appindexing.iml
+++ b/google-appindexing.iml
@@ -37,5 +37,7 @@
     <orderEntry type="module" module-name="intellij.android.projectSystem" />
     <orderEntry type="module" module-name="intellij.android.projectSystem.gradle" />
     <orderEntry type="module" module-name="intellij.android.projectSystem.gradle.models" />
+    <orderEntry type="module" module-name="intellij.android.execution.common" />
+    <orderEntry type="module" module-name="intellij.android.artwork" />
   </component>
 </module>
\ No newline at end of file
diff --git a/src/com/google/appindexing/ui/AppIndexingResultPanel.java b/src/com/google/appindexing/ui/AppIndexingResultPanel.java
index 9beffe8..cd5bedc 100644
--- a/src/com/google/appindexing/ui/AppIndexingResultPanel.java
+++ b/src/com/google/appindexing/ui/AppIndexingResultPanel.java
@@ -15,17 +15,17 @@
  */
 package com.google.appindexing.ui;
 
+import com.android.ddmlib.AdbCommandRejectedException;
 import com.android.ddmlib.AndroidDebugBridge;
 import com.android.ddmlib.IDevice;
+import com.android.ddmlib.ShellCommandUnresponsiveException;
+import com.android.ddmlib.TimeoutException;
 import com.android.tools.idea.adb.AdbService;
 import com.android.tools.idea.concurrency.FutureCallbackExecutor;
-import com.android.tools.idea.run.AndroidProcessHandler;
+import com.android.tools.idea.execution.common.adb.shell.ErrorMatchingReceiver;
 import com.android.tools.idea.run.DeviceCount;
 import com.android.tools.idea.run.DeviceSelectionUtils;
-import com.android.tools.idea.run.ProcessHandlerConsolePrinter;
 import com.android.tools.idea.run.TargetDeviceFilter;
-import com.android.tools.idea.run.tasks.ShellCommandLauncher;
-import com.android.tools.idea.run.util.ProcessHandlerLaunchStatus;
 import com.google.api.services.fetchasgoogle_pa.model.AppIndexingStats;
 import com.google.appindexing.fetchasgoogle.FetchAsGoogleTask;
 import com.google.appindexing.util.AppIndexingBundle;
@@ -33,12 +33,14 @@
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.intellij.icons.AllIcons;
+import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.ui.HyperlinkLabel;
 import com.intellij.ui.components.JBLabel;
 import com.intellij.util.concurrency.EdtExecutorService;
 import java.awt.BorderLayout;
 import java.io.File;
+import java.io.IOException;
 import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.Executors;
@@ -64,7 +66,7 @@
   private JBLabel myPackageLabel;
   private JBLabel myUrlTitle;
   private JPanel myDetailPanel;
-  private FetchAsGoogleTask myTask;
+  private final FetchAsGoogleTask myTask;
 
   private AppIndexingResultPanel(@NotNull FetchAsGoogleTask task, @NotNull String deepLink) {
     super(new BorderLayout());
@@ -76,11 +78,6 @@
     fillPanelContent();
   }
 
-  @NotNull
-  public static AppIndexingResultPanel buildPanelFromFetchTask(@NotNull FetchAsGoogleTask task, @NotNull String deepLink) {
-    return new AppIndexingResultPanel(task, deepLink);
-  }
-
   private void initializeTitle(@NotNull FetchAsGoogleTask task, @NotNull String deepLink) {
     myPackageLabel.setText(task.getPackageId());
     myDateLabel.setText(task.getCreatedTime().toString());
@@ -247,25 +244,23 @@
     }
     IDevice device = collection.iterator().next();
 
-    AndroidProcessHandler androidProcessHandler = new AndroidProcessHandler(facet.getModule().getProject(), myTask.getPackageId());
-    androidProcessHandler.addTargetDevice(device);
     FutureCallbackExecutor f = FutureCallbackExecutor.wrap(Executors.newSingleThreadExecutor());
-    ListenableFuture<Boolean> launchResult =
-      f.executeAsync(() -> ShellCommandLauncher.execute("am start -a \"com.google.android.gms.icing.APP_INDEXING_DEBUG\"", device,
-                                                        new ProcessHandlerLaunchStatus(androidProcessHandler),
-                                                        new ProcessHandlerConsolePrinter(androidProcessHandler), 10,
-                                                        TimeUnit.SECONDS));
-    Futures.addCallback(launchResult, new FutureCallback<Boolean>() {
-      @Override
-      public void onSuccess(Boolean result) {
-        setOpenDeveloperToolResult(result, collapsablePanel);
-      }
 
-      @Override
-      public void onFailure(@NotNull Throwable t) {
-        setOpenDeveloperToolResult(false, collapsablePanel);
+
+    ApplicationManager.getApplication().executeOnPooledThread(() -> {
+      ErrorMatchingReceiver receiver = new ErrorMatchingReceiver();
+      try {
+        device.executeShellCommand("am start -a \"com.google.android.gms.icing.APP_INDEXING_DEBUG\"",
+                                   receiver,
+                                   10,
+                                   TimeUnit.SECONDS);
       }
-    }, EdtExecutorService.getInstance());
+      catch (TimeoutException | AdbCommandRejectedException | ShellCommandUnresponsiveException | IOException e) {
+        setOpenDeveloperToolResult(false, collapsablePanel);
+        return;
+      }
+      setOpenDeveloperToolResult(!receiver.hasError(), collapsablePanel);
+    });
   }
 
   private void setOpenDeveloperToolResult(@Nullable Boolean succeeded, @NotNull CollapsablePanel collapsablePanel) {
@@ -276,4 +271,9 @@
     collapsablePanel.setActionErrorMessage(
       (succeeded != null && succeeded) ? "" : AppIndexingBundle.message("app.indexing.open.developer.tool.fail.message"));
   }
+
+  @NotNull
+  public static AppIndexingResultPanel buildPanelFromFetchTask(@NotNull FetchAsGoogleTask task, @NotNull String deepLink) {
+    return new AppIndexingResultPanel(task, deepLink);
+  }
 }
diff --git a/src/com/google/appindexing/ui/InsertApiCodeDialog.java b/src/com/google/appindexing/ui/InsertApiCodeDialog.java
index c7f9a81..481a308 100644
--- a/src/com/google/appindexing/ui/InsertApiCodeDialog.java
+++ b/src/com/google/appindexing/ui/InsertApiCodeDialog.java
@@ -20,7 +20,6 @@
 import com.google.appindexing.api.ApiCreator;
 import com.google.appindexing.util.AppIndexingBundle;
 import com.google.urlassistant.ActivityData;
-import com.google.urlassistant.UrlAssistIcons;
 import com.google.urlassistant.util.ManifestUtils;
 import com.google.wireless.android.sdk.stats.AndroidStudioEvent;
 import com.intellij.ide.BrowserUtil;
@@ -44,13 +43,22 @@
 import com.intellij.ui.components.JBScrollPane;
 import com.intellij.uiDesigner.core.GridConstraints;
 import com.intellij.uiDesigner.core.GridLayoutManager;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import javax.swing.*;
-import java.awt.*;
+import icons.StudioIcons;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
 import java.awt.event.MouseEvent;
 import java.util.List;
+import javax.swing.AbstractListModel;
+import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JTextPane;
+import javax.swing.ListSelectionModel;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * A dialog to select activity for code inserting.
@@ -90,7 +98,7 @@
     GridConstraints constraints = new GridConstraints();
     constraints.setAnchor(GridConstraints.ANCHOR_WEST);
     JBLabel iconLabel = new JBLabel();
-    iconLabel.setIcon(UrlAssistIcons.FAIL_ICON);
+    iconLabel.setIcon(StudioIcons.Common.ERROR);
     myMessagePanel.add(iconLabel, constraints);
 
     constraints.setColumn(1);