/* * Copyright (C) 2007 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.ime; import com.android.internal.view.IInputMethodManager; import android.os.RemoteException; import android.os.ServiceManager; import android.util.PrintStreamPrinter; import android.util.Printer; import android.view.inputmethod.InputMethodInfo; import java.util.List; public final class Ime { IInputMethodManager mImm; private String[] mArgs; private int mNextArg; private String mCurArgData; private static final String IMM_NOT_RUNNING_ERR = "Error: Could not access the Input Method Manager. Is the system running?"; public static void main(String[] args) { new Ime().run(args); } public void run(String[] args) { if (args.length < 1) { showUsage(); return; } mImm = IInputMethodManager.Stub.asInterface(ServiceManager.getService("input_method")); if (mImm == null) { System.err.println(IMM_NOT_RUNNING_ERR); return; } mArgs = args; String op = args[0]; mNextArg = 1; if ("list".equals(op)) { runList(); return; } if ("enable".equals(op)) { runSetEnabled(true); return; } if ("disable".equals(op)) { runSetEnabled(false); return; } if ("set".equals(op)) { runSet(); return; } if (op != null) { System.err.println("Error: unknown command '" + op + "'"); } showUsage(); } /** * Execute the list sub-command. */ private void runList() { String opt; boolean all = false; boolean brief = false; while ((opt=nextOption()) != null) { if (opt.equals("-a")) { all = true; } else if (opt.equals("-s")) { brief = true; } else { System.err.println("Error: Unknown option: " + opt); showUsage(); return; } } List methods; if (!all) { try { methods = mImm.getEnabledInputMethodList(); } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(IMM_NOT_RUNNING_ERR); return; } } else { try { methods = mImm.getInputMethodList(); } catch (RemoteException e) { System.err.println(e.toString()); System.err.println(IMM_NOT_RUNNING_ERR); return; } } if (methods != null) { Printer pr = new PrintStreamPrinter(System.out); for (int i=0; i= mArgs.length) { return null; } String arg = mArgs[mNextArg]; if (!arg.startsWith("-")) { return null; } mNextArg++; if (arg.equals("--")) { return null; } if (arg.length() > 1 && arg.charAt(1) != '-') { if (arg.length() > 2) { mCurArgData = arg.substring(2); return arg.substring(0, 2); } else { mCurArgData = null; return arg; } } mCurArgData = null; return arg; } private String nextOptionData() { if (mCurArgData != null) { return mCurArgData; } if (mNextArg >= mArgs.length) { return null; } String data = mArgs[mNextArg]; mNextArg++; return data; } private String nextArg() { if (mNextArg >= mArgs.length) { return null; } String arg = mArgs[mNextArg]; mNextArg++; return arg; } private static void showUsage() { System.err.println("usage: ime list [-a] [-s]"); System.err.println(" ime enable ID"); System.err.println(" ime disable ID"); System.err.println(" ime set ID"); System.err.println(""); System.err.println("The list command prints all enabled input methods. Use"); System.err.println("the -a option to see all input methods. Use"); System.err.println("the -s option to see only a single summary line of each."); System.err.println(""); System.err.println("The enable command allows the given input method ID to be used."); System.err.println(""); System.err.println("The disable command disallows the given input method ID from use."); System.err.println(""); System.err.println("The set command switches to the given input method ID."); } }