Merge "Use maven directory structure"
diff --git a/chimpchat/src/com/android/chimpchat/adb/AdbChimpDevice.java b/chimpchat/src/com/android/chimpchat/adb/AdbChimpDevice.java
index 200c69e..af09efe 100644
--- a/chimpchat/src/com/android/chimpchat/adb/AdbChimpDevice.java
+++ b/chimpchat/src/com/android/chimpchat/adb/AdbChimpDevice.java
@@ -264,9 +264,16 @@
 
     @Override
     public String shell(String cmd) {
+        // 5000 is the default timeout from the ddmlib.
+        // This timeout arg is needed to the backwards compatibility.
+        return shell(cmd, 5000);
+    }
+
+    @Override
+    public String shell(String cmd, int timeout) {
         CommandOutputCapture capture = new CommandOutputCapture();
         try {
-            device.executeShellCommand(cmd, capture);
+            device.executeShellCommand(cmd, capture, timeout);
         } catch (TimeoutException e) {
             LOG.log(Level.SEVERE, "Error executing command: " + cmd, e);
             return null;
diff --git a/chimpchat/src/com/android/chimpchat/core/IChimpDevice.java b/chimpchat/src/com/android/chimpchat/core/IChimpDevice.java
index 14b58a7..60cfa76 100644
--- a/chimpchat/src/com/android/chimpchat/core/IChimpDevice.java
+++ b/chimpchat/src/com/android/chimpchat/core/IChimpDevice.java
@@ -131,12 +131,23 @@
     /**
      * Execute a shell command.
      *
+     * Will timeout if there is no ouput for 5 secounds.
+     *
      * @param cmd the command to execute
      * @return the output of the command
      */
     String shell(String cmd);
 
     /**
+     * Execute a shell command.
+     *
+     * @param cmd the command to execute
+     * @param timeout maximum time to output response
+     * @return the output of the command
+     */
+    String shell(String cmd, int timeout);
+
+    /**
      * Install a given package.
      *
      * @param path the path to the installation package
diff --git a/monkeyrunner/src/com/android/monkeyrunner/MonkeyDevice.java b/monkeyrunner/src/com/android/monkeyrunner/MonkeyDevice.java
index 41e58f9..5dc7e7b 100644
--- a/monkeyrunner/src/com/android/monkeyrunner/MonkeyDevice.java
+++ b/monkeyrunner/src/com/android/monkeyrunner/MonkeyDevice.java
@@ -209,15 +209,22 @@
     }
 
     @MonkeyRunnerExported(doc = "Executes an adb shell command and returns the result, if any.",
-            args = { "cmd"},
-            argDocs = { "The adb shell command to execute." },
+            args = { "cmd", "timeout"},
+            argDocs = { "The adb shell command to execute.",
+            "This arg is optional. It specifies the maximum amount of time during which the" +
+            "command can go without any output. A value of 0 means the method" +
+            "will wait forever. The unit of the timeout is millisecond"},
             returns = "The output from the command.")
     public String shell(PyObject[] args, String[] kws) {
         ArgParser ap = JythonUtils.createArgParser(args, kws);
         Preconditions.checkNotNull(ap);
-
         String cmd = ap.getString(0);
-        return impl.shell(cmd);
+
+        if (args.length == 2) {
+            return impl.shell(cmd, ap.getInt(1));
+        } else {
+            return impl.shell(cmd);
+        }
     }
 
     @MonkeyRunnerExported(doc = "Reboots the specified device into a specified bootloader.",