Loading services/core/java/com/android/server/ConnectivityService.java +1 −3 Original line number Diff line number Diff line Loading @@ -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); Loading tests/net/java/com/android/server/ConnectivityServiceTest.java +3 −4 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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)); Loading tests/utils/testutils/java/com/android/internal/util/test/BroadcastInterceptingContext.java +30 −8 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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); Loading Loading @@ -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 Loading Loading
services/core/java/com/android/server/ConnectivityService.java +1 −3 Original line number Diff line number Diff line Loading @@ -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); Loading
tests/net/java/com/android/server/ConnectivityServiceTest.java +3 −4 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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)); Loading
tests/utils/testutils/java/com/android/internal/util/test/BroadcastInterceptingContext.java +30 −8 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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); Loading Loading @@ -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 Loading