diff --git a/cmds/monkey/src/com/android/commands/monkey/Monkey.java b/cmds/monkey/src/com/android/commands/monkey/Monkey.java index e76a89dde..c35d9a799 100644 --- a/cmds/monkey/src/com/android/commands/monkey/Monkey.java +++ b/cmds/monkey/src/com/android/commands/monkey/Monkey.java @@ -48,6 +48,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -187,8 +188,8 @@ public class Monkey { /** Categories we are allowed to launch **/ private ArrayList mMainCategories = new ArrayList(); - /** Applications we can switch to. */ - private ArrayList mMainApps = new ArrayList(); + /** Applications we can switch to, as well as their corresponding categories. */ + private HashMap mMainApps = new HashMap<>(); /** The delay between event inputs **/ long mThrottle = 0; @@ -1073,7 +1074,8 @@ public class Monkey { Logger.out.println("// + Using main activity " + r.activityInfo.name + " (from package " + packageName + ")"); } - mMainApps.add(new ComponentName(packageName, r.activityInfo.name)); + mMainApps.put( + new ComponentName(packageName, r.activityInfo.name), category); } else { if (mVerbose >= 3) { // very very verbose Logger.out.println("// - NOT USING main activity " diff --git a/cmds/monkey/src/com/android/commands/monkey/MonkeyActivityEvent.java b/cmds/monkey/src/com/android/commands/monkey/MonkeyActivityEvent.java index 0e793a68b..5aed40cad 100644 --- a/cmds/monkey/src/com/android/commands/monkey/MonkeyActivityEvent.java +++ b/cmds/monkey/src/com/android/commands/monkey/MonkeyActivityEvent.java @@ -27,12 +27,15 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.view.IWindowManager; +import java.util.HashMap; + /** * monkey activity event */ public class MonkeyActivityEvent extends MonkeyEvent { private ComponentName mApp; long mAlarmTime = 0; + private HashMap mMainApps = new HashMap<>(); public MonkeyActivityEvent(ComponentName app) { super(EVENT_TYPE_ACTIVITY); @@ -45,12 +48,23 @@ public class MonkeyActivityEvent extends MonkeyEvent { mAlarmTime = arg; } + public MonkeyActivityEvent(ComponentName app, + HashMap MainApps) { + super(EVENT_TYPE_ACTIVITY); + mApp = app; + mMainApps = MainApps; + } + /** * @return Intent for the new activity */ private Intent getEvent() { Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); + if (mMainApps.containsKey(mApp)) { + intent.addCategory(mMainApps.get(mApp)); + } else { + intent.addCategory(Intent.CATEGORY_LAUNCHER); + } intent.setComponent(mApp); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); return intent; diff --git a/cmds/monkey/src/com/android/commands/monkey/MonkeySourceRandom.java b/cmds/monkey/src/com/android/commands/monkey/MonkeySourceRandom.java index 7d308bf25..d75c823c2 100644 --- a/cmds/monkey/src/com/android/commands/monkey/MonkeySourceRandom.java +++ b/cmds/monkey/src/com/android/commands/monkey/MonkeySourceRandom.java @@ -26,7 +26,8 @@ import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Surface; -import java.util.List; +import java.util.ArrayList; +import java.util.HashMap; import java.util.Random; /** @@ -94,7 +95,7 @@ public class MonkeySourceRandom implements MonkeyEventSource { * values after we read any optional values. **/ private float[] mFactors = new float[FACTORZ_COUNT]; - private List mMainApps; + private HashMap mMainApps; private int mEventCount = 0; //total number of events generated so far private MonkeyEventQueue mQ; private Random mRandom; @@ -119,7 +120,7 @@ public class MonkeySourceRandom implements MonkeyEventSource { return KeyEvent.keyCodeFromString(keyName); } - public MonkeySourceRandom(Random random, List MainApps, + public MonkeySourceRandom(Random random, HashMap MainApps, long throttle, boolean randomizeThrottle, boolean permissionTargetSystem) { // default values for random distributions // note, these are straight percentages, to match user input (cmd line args) @@ -430,8 +431,8 @@ public class MonkeySourceRandom implements MonkeyEventSource { } else if (cls < mFactors[FACTOR_SYSOPS]) { lastKey = SYS_KEYS[mRandom.nextInt(SYS_KEYS.length)]; } else if (cls < mFactors[FACTOR_APPSWITCH]) { - MonkeyActivityEvent e = new MonkeyActivityEvent(mMainApps.get( - mRandom.nextInt(mMainApps.size()))); + MonkeyActivityEvent e = new MonkeyActivityEvent(new ArrayList(mMainApps.keySet()).get( + mRandom.nextInt(mMainApps.size())), mMainApps); mQ.addLast(e); return; } else if (cls < mFactors[FACTOR_FLIP]) { @@ -479,8 +480,8 @@ public class MonkeySourceRandom implements MonkeyEventSource { * generate an activity event */ public void generateActivity() { - MonkeyActivityEvent e = new MonkeyActivityEvent(mMainApps.get( - mRandom.nextInt(mMainApps.size()))); + MonkeyActivityEvent e = new MonkeyActivityEvent(new ArrayList(mMainApps.keySet()).get( + mRandom.nextInt(mMainApps.size())), mMainApps); mQ.addLast(e); }