Merge "pass stream contents in separate thread for executeShellCommand"
diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java
index 81bcb39..9ba6a8e 100644
--- a/core/java/android/app/UiAutomationConnection.java
+++ b/core/java/android/app/UiAutomationConnection.java
@@ -227,7 +227,7 @@
     }
 
     @Override
-    public void executeShellCommand(String command, ParcelFileDescriptor sink)
+    public void executeShellCommand(final String command, final ParcelFileDescriptor sink)
             throws RemoteException {
         synchronized (mLock) {
             throwIfCalledByNotTrustedUidLocked();
@@ -235,30 +235,35 @@
             throwIfNotConnectedLocked();
         }
 
-        InputStream in = null;
-        OutputStream out = null;
+        Thread streamReader = new Thread() {
+            public void run() {
+                InputStream in = null;
+                OutputStream out = null;
 
-        try {
-            java.lang.Process process = Runtime.getRuntime().exec(command);
+                try {
+                    java.lang.Process process = Runtime.getRuntime().exec(command);
 
-            in = process.getInputStream();
-            out = new FileOutputStream(sink.getFileDescriptor());
+                    in = process.getInputStream();
+                    out = new FileOutputStream(sink.getFileDescriptor());
 
-            final byte[] buffer = new byte[8192];
-            while (true) {
-                final int readByteCount = in.read(buffer);
-                if (readByteCount < 0) {
-                    break;
+                    final byte[] buffer = new byte[8192];
+                    while (true) {
+                        final int readByteCount = in.read(buffer);
+                        if (readByteCount < 0) {
+                            break;
+                        }
+                        out.write(buffer, 0, readByteCount);
+                    }
+                } catch (IOException ioe) {
+                    throw new RuntimeException("Error running shell command", ioe);
+                } finally {
+                    IoUtils.closeQuietly(in);
+                    IoUtils.closeQuietly(out);
+                    IoUtils.closeQuietly(sink);
                 }
-                out.write(buffer, 0, readByteCount);
-            }
-        } catch (IOException ioe) {
-            throw new RuntimeException("Error running shell command", ioe);
-        } finally {
-            IoUtils.closeQuietly(in);
-            IoUtils.closeQuietly(out);
-            IoUtils.closeQuietly(sink);
-        }
+            };
+        };
+        streamReader.start();
     }
 
     @Override