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

Commit 49645d4d authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Automerger Merge Worker
Browse files

Merge "BroadcastInterceptingContext: use passed-in broadcast Handler." am:...

Merge "BroadcastInterceptingContext: use passed-in broadcast Handler." am: 4346a646 am: 46654fe8 am: 61dd4acc am: 1fc48edf

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1589251

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I88efc8aa6e53b1d5f9ff27a69c13ee77585d12a0
parents 2c288a0d 1fc48edf
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -4987,9 +4987,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: make BroadcastInterceptingContext use the Handler passed in to registerReceiver
            // and put this back.
            // ensureRunningOnConnectivityServiceThread();
            ensureRunningOnConnectivityServiceThread();
            final String action = intent.getAction();
            final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);

+3 −4
Original line number Diff line number Diff line
@@ -1300,10 +1300,8 @@ public class ConnectivityServiceTest {
    }

    private void processBroadcastForVpn(Intent intent) {
        // The BroadcastReceiver for this broadcast checks it is being run on the handler thread.
        final Handler handler = new Handler(mVMSHandlerThread.getLooper());
        handler.post(() -> mServiceContext.sendBroadcast(intent));
        HandlerUtils.waitForIdle(handler, TIMEOUT_MS);
        mServiceContext.sendBroadcast(intent);
        HandlerUtils.waitForIdle(mVMSHandlerThread, TIMEOUT_MS);
        waitForIdle();
    }

@@ -1430,6 +1428,7 @@ public class ConnectivityServiceTest {
        FakeSettingsProvider.clearSettingsProvider();
        mServiceContext = new MockContext(InstrumentationRegistry.getContext(),
                new FakeSettingsProvider());
        mServiceContext.setUseRegisteredHandlers(true);
        LocalServices.removeServiceForTest(NetworkPolicyManagerInternal.class);
        LocalServices.addService(
                NetworkPolicyManagerInternal.class, mock(NetworkPolicyManagerInternal.class));
+30 −8
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ public class BroadcastInterceptingContext extends ContextWrapper {

    private final List<BroadcastInterceptor> mInterceptors = new ArrayList<>();

    private boolean mUseRegisteredHandlers;

    public abstract class FutureIntent extends FutureTask<Intent> {
        public FutureIntent() {
            super(
@@ -61,17 +63,24 @@ public class BroadcastInterceptingContext extends ContextWrapper {
    public class BroadcastInterceptor extends FutureIntent {
        private final BroadcastReceiver mReceiver;
        private final IntentFilter mFilter;
        private final Handler mHandler;

        public BroadcastInterceptor(BroadcastReceiver receiver, IntentFilter filter) {
        public BroadcastInterceptor(BroadcastReceiver receiver, IntentFilter filter,
                Handler handler) {
            mReceiver = receiver;
            mFilter = filter;
            mHandler = mUseRegisteredHandlers ? handler : null;
        }

        public boolean dispatchBroadcast(Intent intent) {
            if (mFilter.match(getContentResolver(), intent, false, TAG) > 0) {
                if (mReceiver != null) {
                    final Context context = BroadcastInterceptingContext.this;
                    if (mHandler == null) {
                        mReceiver.onReceive(context, intent);
                    } else {
                        mHandler.post(() -> mReceiver.onReceive(context, intent));
                    }
                    return false;
                } else {
                    set(intent);
@@ -116,25 +125,38 @@ public class BroadcastInterceptingContext extends ContextWrapper {
    }

    public FutureIntent nextBroadcastIntent(IntentFilter filter) {
        final BroadcastInterceptor interceptor = new BroadcastInterceptor(null, filter);
        final BroadcastInterceptor interceptor = new BroadcastInterceptor(null, filter, null);
        synchronized (mInterceptors) {
            mInterceptors.add(interceptor);
        }
        return interceptor;
    }

    @Override
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
    /**
     * Whether to send broadcasts to registered handlers. By default, receivers are called
     * synchronously by sendBroadcast. If this method is called with {@code true}, the receiver is
     * instead called by a runnable posted to the Handler specified when the receiver was
     * registered. This method applies only to future registrations, already-registered receivers
     * are unaffected.
     */
    public void setUseRegisteredHandlers(boolean use) {
        synchronized (mInterceptors) {
            mInterceptors.add(new BroadcastInterceptor(receiver, filter));
            mUseRegisteredHandlers = use;
        }
        return null;
    }

    @Override
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
        return registerReceiver(receiver, filter, null, null);
    }

    @Override
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,
            String broadcastPermission, Handler scheduler) {
        return registerReceiver(receiver, filter);
        synchronized (mInterceptors) {
            mInterceptors.add(new BroadcastInterceptor(receiver, filter, scheduler));
        }
        return null;
    }

    @Override