diff options
author | Dianne Hackborn <hackbod@google.com> | 2016-02-26 17:23:48 -0800 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2016-02-29 12:37:11 -0800 |
commit | 4a18c26609df2c4230885acb64e92fb51aba70df (patch) | |
tree | b9f05aa7e6979f02a34d9ac335d06eae31358495 | |
parent | 1db8850b793109da0fc4a65ec837b1a329072b07 (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
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) { |