Don't use ShellCommandLauncher in AppIndexingResultPanel
We can directly call device.executeShellCommand
+ we wrongly used AndroidProcessHandler. We created an instance only for the sake of passing to ShellCommandLauncher
Fixes: n/a
Test: n/a
Change-Id: I948b5f8b0ffb4cec60785c483138bdb2fdd99f34
diff --git a/BUILD b/BUILD
index 28de5c3..b82bbcf 100644
--- a/BUILD
+++ b/BUILD
@@ -32,5 +32,6 @@
"//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]",
],
)
diff --git a/google-appindexing.iml b/google-appindexing.iml
index 2a6d1ea..46315c9 100644
--- a/google-appindexing.iml
+++ b/google-appindexing.iml
@@ -37,5 +37,6 @@
<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" />
</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);
+ }
}