| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.commands.uiautomator; |
| |
| import android.os.Process; |
| |
| import java.util.Arrays; |
| |
| /** |
| * Entry point into the uiautomator command line |
| * |
| * This class maintains the list of sub commands, and redirect the control into it based on the |
| * command line arguments. It also prints out help arguments for each sub commands. |
| * |
| * To add a new sub command, implement {@link Command} and add an instance into COMMANDS array |
| */ |
| public class Launcher { |
| |
| /** |
| * A simple abstraction class for supporting generic sub commands |
| */ |
| public static abstract class Command { |
| private String mName; |
| |
| public Command(String name) { |
| mName = name; |
| } |
| |
| /** |
| * Returns the name of the sub command |
| * @return |
| */ |
| public String name() { |
| return mName; |
| } |
| |
| /** |
| * Returns a one-liner of the function of this command |
| * @return |
| */ |
| public abstract String shortHelp(); |
| |
| /** |
| * Returns a detailed explanation of the command usage |
| * |
| * Usage may have multiple lines, indentation of 4 spaces recommended. |
| * @return |
| */ |
| public abstract String detailedOptions(); |
| |
| /** |
| * Starts the command with the provided arguments |
| * @param args |
| */ |
| public abstract void run(String args[]); |
| } |
| |
| public static void main(String[] args) { |
| // show a meaningful process name in `ps` |
| Process.setArgV0("uiautomator"); |
| if (args.length >= 1) { |
| Command command = findCommand(args[0]); |
| if (command != null) { |
| String[] args2 = {}; |
| if (args.length > 1) { |
| // consume the first arg |
| args2 = Arrays.copyOfRange(args, 1, args.length); |
| } |
| command.run(args2); |
| return; |
| } |
| } |
| HELP_COMMAND.run(args); |
| } |
| |
| private static Command findCommand(String name) { |
| for (Command command : COMMANDS) { |
| if (command.name().equals(name)) { |
| return command; |
| } |
| } |
| return null; |
| } |
| |
| private static Command HELP_COMMAND = new Command("help") { |
| @Override |
| public void run(String[] args) { |
| System.err.println("Usage: uiautomator <subcommand> [options]\n"); |
| System.err.println("Available subcommands:\n"); |
| for (Command command : COMMANDS) { |
| String shortHelp = command.shortHelp(); |
| String detailedOptions = command.detailedOptions(); |
| if (shortHelp == null) { |
| shortHelp = ""; |
| } |
| if (detailedOptions == null) { |
| detailedOptions = ""; |
| } |
| System.err.println(String.format("%s: %s", command.name(), shortHelp)); |
| System.err.println(detailedOptions); |
| } |
| } |
| |
| @Override |
| public String detailedOptions() { |
| return null; |
| } |
| |
| @Override |
| public String shortHelp() { |
| return "displays help message"; |
| } |
| }; |
| |
| private static Command[] COMMANDS = new Command[] { |
| HELP_COMMAND, |
| new RunTestCommand(), |
| new DumpCommand(), |
| new EventsCommand(), |
| }; |
| } |