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

Commit 44c816cc authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Create a mock instead of subclassing BroadcastSkipPolicy."

parents 6e7ba2fc 04f593d1
Loading
Loading
Loading
Loading
+16 −48
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.os.UserHandle.USER_SYSTEM;

import static com.android.server.am.BroadcastProcessQueue.reasonToString;
import static com.android.server.am.BroadcastRecord.deliveryStateToString;
import static com.android.server.am.BroadcastRecord.isReceiverEquals;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -76,8 +77,6 @@ import android.os.PowerExemptionManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;
@@ -160,7 +159,7 @@ public class BroadcastQueueTest {
    private ActivityManagerService mAms;
    private BroadcastQueue mQueue;
    BroadcastConstants mConstants;
    private TestBroadcastSkipPolicy mSkipPolicy;
    private BroadcastSkipPolicy mSkipPolicy;

    /**
     * Desired behavior of the next
@@ -287,7 +286,10 @@ public class BroadcastQueueTest {
        mConstants = new BroadcastConstants(Settings.Global.BROADCAST_FG_CONSTANTS);
        mConstants.TIMEOUT = 100;
        mConstants.ALLOW_BG_ACTIVITY_START_TIMEOUT = 0;
        mSkipPolicy = new TestBroadcastSkipPolicy(mAms);

        mSkipPolicy = spy(new BroadcastSkipPolicy(mAms));
        doReturn(null).when(mSkipPolicy).shouldSkipMessage(any(), any());
        doReturn(false).when(mSkipPolicy).disallowBackgroundStart(any());

        final BroadcastHistory emptyHistory = new BroadcastHistory(mConstants) {
            public void addBroadcastToHistoryLocked(BroadcastRecord original) {
@@ -324,48 +326,6 @@ public class BroadcastQueueTest {
        }
    }

    private static class TestBroadcastSkipPolicy extends BroadcastSkipPolicy {
        private final ArrayMap<String, ArraySet> mReceiversToSkip = new ArrayMap<>();

        TestBroadcastSkipPolicy(ActivityManagerService service) {
            super(service);
        }

        public String shouldSkipMessage(BroadcastRecord r, Object o) {
            if (shouldSkipReceiver(r.intent.getAction(), o)) {
                return "test skipped receiver";
            }
            return null;
        }

        private boolean shouldSkipReceiver(String action, Object o) {
            final ArraySet<Object> receiversToSkip = mReceiversToSkip.get(action);
            if (receiversToSkip == null) {
                return false;
            }
            for (int i = 0; i < receiversToSkip.size(); ++i) {
                if (BroadcastRecord.isReceiverEquals(o, receiversToSkip.valueAt(i))) {
                    return true;
                }
            }
            return false;
        }

        public void setSkipReceiver(String action, Object o) {
            ArraySet<Object> receiversToSkip = mReceiversToSkip.get(action);
            if (receiversToSkip == null) {
                receiversToSkip = new ArraySet<>();
                mReceiversToSkip.put(action, receiversToSkip);
            }
            receiversToSkip.add(o);
        }
        public boolean disallowBackgroundStart(BroadcastRecord r) {
            // Ignored
            return false;
        }

    }

    private class TestInjector extends Injector {
        TestInjector(Context context) {
            super(context);
@@ -2039,8 +1999,16 @@ public class BroadcastQueueTest {
            enqueueBroadcast(makeBroadcastRecord(airplane, callerApp,
                    List.of(greenReceiver, blueReceiver, yellowReceiver, orangeReceiver)));

            mSkipPolicy.setSkipReceiver(airplane.getAction(), greenReceiver);
            mSkipPolicy.setSkipReceiver(airplane.getAction(), orangeReceiver);
            doAnswer(invocation -> {
                final BroadcastRecord r = invocation.getArgument(0);
                final Object o = invocation.getArgument(1);
                if (airplane.getAction().equals(r.intent.getAction())
                        && (isReceiverEquals(o, greenReceiver)
                                || isReceiverEquals(o, orangeReceiver))) {
                    return "test skipped receiver";
                }
                return null;
            }).when(mSkipPolicy).shouldSkipMessage(any(BroadcastRecord.class), any());
        }

        waitForIdle();