Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a18c266 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

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
parent 1db8850b
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -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();
    }

+2 −2
Original line number Diff line number Diff line
@@ -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);
+5 −2
Original line number Diff line number Diff line
@@ -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();
+1 −1
Original line number Diff line number Diff line
@@ -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;
+10 −5
Original line number Diff line number Diff line
@@ -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);
Loading