/* * 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 [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(), }; }