Add interface for os/firmware to affect ICE selection.

This patch adds an interface for os/firmware to set a network
preference NOT_PREFERRED / NEUTRAL that can be picked up by
an IceController and used when selection ice candidate pair.

The patch exposes this using an Android Intent based interface.

BUG: webrtc:11825
Change-Id: Ic12b6bf704fde7f9c912020dd7bc79ccae4613ab
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180883
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31877}
This commit is contained in:
Jonas Oreland
2020-08-07 11:08:34 +02:00
committed by Commit Bot
parent c55e24acc7
commit f7721fb246
13 changed files with 406 additions and 187 deletions

View File

@ -15,7 +15,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.webrtc.NetworkMonitorAutoDetect.INVALID_NET_ID;
import android.annotation.SuppressLint;
import android.content.Context;
@ -31,14 +30,15 @@ import android.support.test.annotation.UiThreadTest;
import android.support.test.filters.MediumTest;
import android.support.test.filters.SmallTest;
import android.support.test.rule.UiThreadTestRule;
import java.util.List;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.webrtc.NetworkMonitorAutoDetect.ConnectionType;
import org.webrtc.NetworkChangeDetector.ConnectionType;
import org.webrtc.NetworkChangeDetector.NetworkInformation;
import org.webrtc.NetworkMonitorAutoDetect.ConnectivityManagerDelegate;
import org.webrtc.NetworkMonitorAutoDetect.NetworkInformation;
import org.webrtc.NetworkMonitorAutoDetect.NetworkState;
/**
@ -53,6 +53,9 @@ import org.webrtc.NetworkMonitorAutoDetect.NetworkState;
public class NetworkMonitorTest {
@Rule public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();
private static final long INVALID_NET_ID = -1;
private NetworkChangeDetector detector;
/**
* Listens for alerts fired by the NetworkMonitor when network status changes.
*/
@ -155,6 +158,10 @@ public class NetworkMonitorTest {
@Override
public void onNetworkDisconnect(long networkHandle) {}
@Override
public void onNetworkPreference(List<ConnectionType> types, @NetworkPreference int preference) {
}
}
private static final Object lock = new Object();
@ -179,6 +186,17 @@ public class NetworkMonitorTest {
*/
private void createTestMonitor() {
Context context = InstrumentationRegistry.getTargetContext();
NetworkMonitor.getInstance().setNetworkChangeDetectorFactory(
new NetworkChangeDetectorFactory() {
@Override
public NetworkChangeDetector create(
NetworkChangeDetector.Observer observer, Context context) {
detector = new NetworkMonitorAutoDetect(observer, context);
return detector;
}
});
receiver = NetworkMonitor.createAndSetAutoDetectForTest(context);
assertNotNull(receiver);
@ -311,9 +329,9 @@ public class NetworkMonitorTest {
Context context = ContextUtils.getApplicationContext();
networkMonitor.startMonitoring(context);
assertEquals(1, networkMonitor.getNumObservers());
assertNotNull(networkMonitor.getNetworkMonitorAutoDetect());
assertEquals(detector, networkMonitor.getNetworkChangeDetector());
networkMonitor.stopMonitoring();
assertEquals(0, networkMonitor.getNumObservers());
assertNull(networkMonitor.getNetworkMonitorAutoDetect());
assertNull(networkMonitor.getNetworkChangeDetector());
}
}