• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package android.system.helpers;
2 
3 import android.app.Instrumentation;
4 import android.support.test.InstrumentationRegistry;
5 import android.support.test.uiautomator.UiDevice;
6 import android.util.Log;
7 import java.io.IOException;
8 import java.util.Arrays;
9 import java.util.List;
10 
11 /**
12  * Implement common helper for executing shell commands on device
13  */
14 public class CommandsHelper {
15     private static final String TAG = CommandsHelper.class.getSimpleName();
16     private static CommandsHelper sInstance = null;
17     private Instrumentation mInstrumentation = null;
18 
19     private static final String LINE_SEPARATORS = "\\r?\\n";
20 
21 
CommandsHelper(Instrumentation instrumentation)22     private CommandsHelper(Instrumentation instrumentation) {
23         mInstrumentation = instrumentation;
24     }
25 
26     /**
27      * @deprecated Should use {@link CommandsHelper#getInstance(Instrumentation)} instead.
28      */
29     @Deprecated
getInstance()30     public static CommandsHelper getInstance() {
31         if (sInstance == null) {
32             sInstance = new CommandsHelper(InstrumentationRegistry.getInstrumentation());
33         }
34         return sInstance;
35     }
36 
getInstance(Instrumentation instrumentation)37     public static CommandsHelper getInstance(Instrumentation instrumentation) {
38         if (sInstance == null) {
39             sInstance = new CommandsHelper(instrumentation);
40         } else {
41             sInstance.injectInstrumentation(instrumentation);
42         }
43         return sInstance;
44     }
45 
46     /**
47      * Injects instrumentation into this helper.
48      *
49      * @param instrumentation the instrumentation to use with this instance
50      */
injectInstrumentation(Instrumentation instrumentation)51     public void injectInstrumentation(Instrumentation instrumentation) {
52         mInstrumentation = instrumentation;
53     }
54 
55     /**
56      * Executes a shell command on device, and return the standard output in string.
57      * @param command the command to run
58      * @return the standard output of the command, or empty string if
59      * failed without throwing an IOException
60      */
executeShellCommand(String command)61     public String executeShellCommand(String command) {
62         try {
63             return UiDevice.getInstance(mInstrumentation).executeShellCommand(command);
64         } catch (IOException e) {
65             // ignore
66             Log.e(TAG, String.format("The shell command failed to run: %s exception: %s",
67                     command, e.getMessage()));
68             return "";
69         }
70     }
71 
72     /**
73      * Executes a shell command on device, and split the multi-line output into collection
74      * @param command the command to run
75      * @param separatorChars the line separator
76      * @return the List of strings from the standard output of the command
77      */
executeShellCommandAndSplitOutput(String command, final String separatorChars)78     public List<String> executeShellCommandAndSplitOutput(String command,
79             final String separatorChars) {
80         return Arrays.asList(executeShellCommand(command).split(separatorChars));
81     }
82 
83     /**
84      * Convenience version of {@link #executeShellCommand} for use without having a reference to
85      * CommandsHelper.
86      * @param command the command to run
87      */
88     @Deprecated
execute(String command)89     public static String execute(String command) {
90         return getInstance().executeShellCommand(command);
91     }
92 
93     /**
94      * Convenience version of {@link #executeShellCommandAndSplitOutput} for use
95      * without having a reference to CommandsHelper.
96      * @param command the command to run
97      */
98     @Deprecated
executeAndSplitLines(String command)99     public static List<String> executeAndSplitLines(String command) {
100         return getInstance().executeShellCommandAndSplitOutput(command, LINE_SEPARATORS);
101     }
102 }
103