| /* |
| * Copyright (C) 2008 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.monkey; |
| |
| import java.util.ArrayList; |
| import java.util.Random; |
| |
| /** |
| * Class for generating MonkeyEvents from multiple scripts. |
| */ |
| public class MonkeySourceRandomScript implements MonkeyEventSource { |
| /** The verbose level of the source (currently not used) */ |
| private int mVerbose = 0; |
| |
| /** The source for the setup script if it exists */ |
| private MonkeySourceScript mSetupSource = null; |
| |
| /** The list of MonkeySourceScript instances to be played in random order */ |
| private ArrayList<MonkeySourceScript> mScriptSources = new ArrayList<MonkeySourceScript>(); |
| |
| /** The current source, set to the setup source and then a random script */ |
| private MonkeySourceScript mCurrentSource = null; |
| |
| /** The random number generator */ |
| private Random mRandom; |
| |
| private boolean mRandomizeScript = false; |
| |
| private int mScriptCount = 0; |
| |
| /** |
| * Creates a MonkeySourceRandomScript instance with an additional setup script. |
| * |
| * @param setupFileName The name of the setup script file on the device. |
| * @param scriptFileNames An ArrayList of the names of the script files to be run randomly. |
| * @param throttle The amount of time to sleep in ms between events. |
| * @param randomizeThrottle Whether to randomize throttle. |
| * @param random The random number generator. |
| */ |
| public MonkeySourceRandomScript(String setupFileName, ArrayList<String> scriptFileNames, |
| long throttle, boolean randomizeThrottle, Random random, long profileWaitTime, |
| long deviceSleepTime, boolean randomizeScript) { |
| if (setupFileName != null) { |
| mSetupSource = new MonkeySourceScript(random, setupFileName, throttle, |
| randomizeThrottle, profileWaitTime, deviceSleepTime); |
| mCurrentSource = mSetupSource; |
| } |
| |
| for (String fileName: scriptFileNames) { |
| mScriptSources.add(new MonkeySourceScript(random, fileName, throttle, |
| randomizeThrottle, profileWaitTime, deviceSleepTime)); |
| } |
| |
| mRandom = random; |
| mRandomizeScript = randomizeScript; |
| } |
| |
| /** |
| * Creates a MonkeySourceRandomScript instance without an additional setup script. |
| * |
| * @param scriptFileNames An ArrayList of the names of the script files to be run randomly. |
| * @param throttle The amount of time to sleep in ms between events. |
| * @param randomizeThrottle Whether to randomize throttle. |
| * @param random The random number generator. |
| */ |
| public MonkeySourceRandomScript(ArrayList<String> scriptFileNames, long throttle, |
| boolean randomizeThrottle, Random random, long profileWaitTime, long deviceSleepTime, |
| boolean randomizeScript) { |
| this(null, scriptFileNames, throttle, randomizeThrottle, random, profileWaitTime, |
| deviceSleepTime, randomizeScript); |
| } |
| |
| /** |
| * Gets the next event from the current event source. If the event source is null, a new |
| * script event source is chosen randomly from the list of script sources and the next event is |
| * chosen from that. |
| * |
| * @return The first event in the event queue or null if the end of the file |
| * is reached or if an error is encountered reading the file. |
| */ |
| public MonkeyEvent getNextEvent() { |
| if (mCurrentSource == null) { |
| int numSources = mScriptSources.size(); |
| if (numSources == 1) { |
| mCurrentSource = mScriptSources.get(0); |
| } else if (numSources > 1 ) { |
| if (mRandomizeScript) { |
| mCurrentSource = mScriptSources.get(mRandom.nextInt(numSources)); |
| } else { |
| mCurrentSource = mScriptSources.get(mScriptCount % numSources); |
| mScriptCount++; |
| } |
| } |
| } |
| |
| if (mCurrentSource != null) { |
| MonkeyEvent nextEvent = mCurrentSource.getNextEvent(); |
| if (nextEvent == null) { |
| mCurrentSource = null; |
| } |
| return nextEvent; |
| } |
| return null; |
| } |
| |
| /** |
| * Sets the verbosity for the source as well as all sub event sources. |
| * |
| * @param verbose The verbose level. |
| */ |
| public void setVerbose(int verbose) { |
| mVerbose = verbose; |
| |
| if (mSetupSource != null) { |
| mSetupSource.setVerbose(verbose); |
| } |
| |
| for (MonkeySourceScript source: mScriptSources) { |
| source.setVerbose(verbose); |
| } |
| } |
| |
| /** |
| * Validates that all the underlying event sources are valid |
| * |
| * @return True if all the script files are valid. |
| * |
| * @see MonkeySourceScript#validate() |
| */ |
| public boolean validate() { |
| if (mSetupSource != null && !mSetupSource.validate()) { |
| return false; |
| } |
| |
| for (MonkeySourceScript source: mScriptSources) { |
| if (!source.validate()) { |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| } |