summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2016-02-26 17:23:48 -0800
committerDianne Hackborn <hackbod@google.com>2016-02-29 12:37:11 -0800
commit4a18c26609df2c4230885acb64e92fb51aba70df (patch)
treeb9f05aa7e6979f02a34d9ac335d06eae31358495
parent1db8850b793109da0fc4a65ec837b1a329072b07 (diff)
Fix issue #27385109: control activity behavior without triggering...
...isUserAMonkey for testing purpose Add an argument for the caller to specify if they are a poo flinging monkey. Change-Id: I0e149a8d78776abaf07517bd4ae886047b7f4252
-rw-r--r--cmds/am/src/com/android/commands/am/Am.java13
-rw-r--r--cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java4
-rw-r--r--core/java/android/app/ActivityManagerNative.java7
-rw-r--r--core/java/android/app/IActivityManager.java2
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java15
-rw-r--r--tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java2
6 files changed, 28 insertions, 15 deletions
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index eedb82bd5d0a..df0e5fc6f1bb 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -1216,6 +1216,7 @@ public class Am extends BaseCommand {
class MyActivityController extends IActivityController.Stub {
final String mGdbPort;
+ final boolean mMonkey;
static final int STATE_NORMAL = 0;
static final int STATE_CRASHED = 1;
@@ -1242,8 +1243,9 @@ public class Am extends BaseCommand {
Thread mGdbThread;
boolean mGotGdbPrint;
- MyActivityController(String gdbPort) {
+ MyActivityController(String gdbPort, boolean monkey) {
mGdbPort = gdbPort;
+ mMonkey = monkey;
}
@Override
@@ -1443,7 +1445,7 @@ public class Am extends BaseCommand {
try {
printMessageForState();
- mAm.setActivityController(this);
+ mAm.setActivityController(this, mMonkey);
mState = STATE_NORMAL;
InputStreamReader converter = new InputStreamReader(System.in);
@@ -1498,7 +1500,7 @@ public class Am extends BaseCommand {
} catch (IOException e) {
e.printStackTrace();
} finally {
- mAm.setActivityController(null);
+ mAm.setActivityController(null, mMonkey);
}
}
}
@@ -1506,16 +1508,19 @@ public class Am extends BaseCommand {
private void runMonitor() throws Exception {
String opt;
String gdbPort = null;
+ boolean monkey = false;
while ((opt=nextOption()) != null) {
if (opt.equals("--gdb")) {
gdbPort = nextArgRequired();
+ } else if (opt.equals("-m")) {
+ monkey = true;
} else {
System.err.println("Error: Unknown option: " + opt);
return;
}
}
- MyActivityController controller = new MyActivityController(gdbPort);
+ MyActivityController controller = new MyActivityController(gdbPort, monkey);
controller.run();
}
diff --git a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
index 1fa9bacc10cb..ddeb8e786271 100644
--- a/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
+++ b/cmds/uiautomator/library/testrunner-src/com/android/uiautomator/core/UiAutomationShellWrapper.java
@@ -50,9 +50,9 @@ public class UiAutomationShellWrapper {
}
try {
if (isSet) {
- am.setActivityController(new DummyActivityController());
+ am.setActivityController(new DummyActivityController(), true);
} else {
- am.setActivityController(null);
+ am.setActivityController(null, true);
}
} catch (RemoteException e) {
throw new RuntimeException(e);
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index a1f82dea9542..b264e8ec6993 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1527,7 +1527,8 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
data.enforceInterface(IActivityManager.descriptor);
IActivityController watcher = IActivityController.Stub.asInterface(
data.readStrongBinder());
- setActivityController(watcher);
+ boolean imAMonkey = data.readInt() != 0;
+ setActivityController(watcher, imAMonkey);
reply.writeNoException();
return true;
}
@@ -4860,12 +4861,14 @@ class ActivityManagerProxy implements IActivityManager
data.recycle();
reply.recycle();
}
- public void setActivityController(IActivityController watcher) throws RemoteException
+ public void setActivityController(IActivityController watcher, boolean imAMonkey)
+ throws RemoteException
{
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
+ data.writeInt(imAMonkey ? 1 : 0);
mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
reply.readException();
data.recycle();
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 2cb615103024..4bfd049fca75 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -305,7 +305,7 @@ public interface IActivityManager extends IInterface {
String packageName, boolean waitForDebugger, boolean persistent)
throws RemoteException;
public void setAlwaysFinish(boolean enabled) throws RemoteException;
- public void setActivityController(IActivityController watcher)
+ public void setActivityController(IActivityController watcher, boolean imAMonkey)
throws RemoteException;
public void setLenientBackgroundCheck(boolean enabled) throws RemoteException;
public int getMemoryTrimLevel() throws RemoteException;
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 5f40e5c38085..ceeb8006367a 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1297,6 +1297,7 @@ public final class ActivityManagerService extends ActivityManagerNative
boolean mSupportsPictureInPicture;
Rect mDefaultPinnedStackBounds;
IActivityController mController = null;
+ boolean mControllerIsAMonkey = false;
String mProfileApp = null;
ProcessRecord mProfileProc = null;
String mProfileFile;
@@ -11423,11 +11424,12 @@ public final class ActivityManagerService extends ActivityManagerNative
}
@Override
- public void setActivityController(IActivityController controller) {
+ public void setActivityController(IActivityController controller, boolean imAMonkey) {
enforceCallingPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER,
"setActivityController()");
synchronized (this) {
mController = controller;
+ mControllerIsAMonkey = imAMonkey;
Watchdog.getInstance().setActivityController(controller);
}
}
@@ -11454,7 +11456,7 @@ public final class ActivityManagerService extends ActivityManagerNative
public boolean isUserAMonkey() {
synchronized (this) {
// If there is a controller also implies the user is a monkey.
- return (mUserIsMonkey || mController != null);
+ return (mUserIsMonkey || (mController != null && mControllerIsAMonkey));
}
}
@@ -14123,10 +14125,13 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
if (dumpPackage == null) {
- if (mAlwaysFinishActivities || mLenientBackgroundCheck || mController != null) {
+ if (mAlwaysFinishActivities || mLenientBackgroundCheck) {
pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
- + " mLenientBackgroundCheck=" + mLenientBackgroundCheck
- + " mController=" + mController);
+ + " mLenientBackgroundCheck=" + mLenientBackgroundCheck);
+ }
+ if (mController != null) {
+ pw.println(" mController=" + mController
+ + " mControllerIsAMonkey=" + mControllerIsAMonkey);
}
if (dumpAll) {
pw.println(" Total persistent processes: " + numPers);
diff --git a/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java
index 3791d0246f69..d7f4a38f7644 100644
--- a/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java
@@ -140,7 +140,7 @@ public class ActivityManagerPermissionTests extends TestCase {
@SmallTest
public void testSET_ACTIVITY_WATCHER() {
try {
- mAm.setActivityController(null);
+ mAm.setActivityController(null, false);
fail("IActivityManager.setActivityController did not throw SecurityException as"
+ " expected");
} catch (SecurityException e) {