/* * Copyright (C) 2011 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.chimpchat; import com.android.chimpchat.adb.AdbBackend; import com.android.chimpchat.core.IChimpBackend; import com.android.chimpchat.core.IChimpDevice; import java.util.Map; import java.util.TreeMap; /** * ChimpChat is a host-side library that provides an API for communication with * an instance of Monkey on a device. This class provides an entry point to * setting up communication with a device. Currently it only supports communciation * over ADB, however. */ public class ChimpChat { private final IChimpBackend mBackend; private static String sAdbLocation; private static boolean sNoInitAdb; private ChimpChat(IChimpBackend backend) { this.mBackend = backend; } /** * Generates a new instance of ChimpChat based on the options passed. * @param options a map of settings for the new ChimpChat instance * @return a new instance of ChimpChat or null if errors occur during creation */ public static ChimpChat getInstance(Map<String, String> options) { sAdbLocation = options.get("adbLocation"); sNoInitAdb = Boolean.valueOf(options.get("noInitAdb")); IChimpBackend backend = createBackendByName(options.get("backend")); if (backend == null) { return null; } ChimpChat chimpchat = new ChimpChat(backend); return chimpchat; } /** Generates a new instance of ChimpChat using default settings * @return a new instance of ChimpChat or null if errors occur during creation */ public static ChimpChat getInstance() { Map<String, String> options = new TreeMap<String, String>(); options.put("backend", "adb"); return ChimpChat.getInstance(options); } /** * Creates a specific backend by name. * * @param backendName the name of the backend to create * @return the new backend, or null if none were found. */ private static IChimpBackend createBackendByName(String backendName) { if ("adb".equals(backendName)) { return new AdbBackend(sAdbLocation, sNoInitAdb); } else { return null; } } /** * Retrieves an instance of the device from the backend * @param timeoutMs length of time to wait before timing out * @param deviceId the id of the device you want to connect to * @return an instance of the device */ public IChimpDevice waitForConnection(long timeoutMs, String deviceId){ return mBackend.waitForConnection(timeoutMs, deviceId); } /** * Retrieves an instance of the device from the backend. * Defaults to the longest possible wait time and any available device. * @return an instance of the device */ public IChimpDevice waitForConnection(){ return mBackend.waitForConnection(Integer.MAX_VALUE, ".*"); } /** * Shutdown and clean up chimpchat. */ public void shutdown(){ mBackend.shutdown(); } }