diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index abad9da1b4..a7e99396e0 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -970,6 +970,7 @@ rtc_android_library("peerconnection_java") { "api/org/webrtc/NetworkMonitor.java", # TODDO(sakal): Break dependencies and move to base_java. "api/org/webrtc/NetworkMonitorAutoDetect.java", # TODDO(sakal): Break dependencies and move to base_java. "api/org/webrtc/PeerConnection.java", + "api/org/webrtc/PeerConnectionDependencies.java", "api/org/webrtc/PeerConnectionFactory.java", "api/org/webrtc/RTCStats.java", "api/org/webrtc/RTCStatsCollectorCallback.java", diff --git a/sdk/android/api/org/webrtc/PeerConnectionDependencies.java b/sdk/android/api/org/webrtc/PeerConnectionDependencies.java new file mode 100644 index 0000000000..8ecf0ff11e --- /dev/null +++ b/sdk/android/api/org/webrtc/PeerConnectionDependencies.java @@ -0,0 +1,49 @@ +/* + * Copyright 2018 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +package org.webrtc; + +import javax.annotation.Nullable; + +/** + * PeerConnectionDependencies holds all PeerConnection dependencies that are + * applied per PeerConnection. A dependency is distinct from a configuration + * as it defines significant executable code that can be provided by a user of + * the API. + */ +public final class PeerConnectionDependencies { + // Mandatory dependencies. + private PeerConnection.Observer observer; + + public static class Builder { + private PeerConnection.Observer observer; + + private Builder(PeerConnection.Observer observer) { + this.observer = observer; + } + + // Observer is a required dependency and so is forced in the construction of the object. + public PeerConnectionDependencies createPeerConnectionDependencies() { + return new PeerConnectionDependencies(observer); + } + } + + public static Builder builder(PeerConnection.Observer observer) { + return new Builder(observer); + } + + PeerConnection.Observer getObserver() { + return observer; + } + + private PeerConnectionDependencies(PeerConnection.Observer observer) { + this.observer = observer; + } +} diff --git a/sdk/android/api/org/webrtc/PeerConnectionFactory.java b/sdk/android/api/org/webrtc/PeerConnectionFactory.java index dc89aec31f..07a1cde187 100644 --- a/sdk/android/api/org/webrtc/PeerConnectionFactory.java +++ b/sdk/android/api/org/webrtc/PeerConnectionFactory.java @@ -349,6 +349,12 @@ public class PeerConnectionFactory { return createPeerConnection(rtcConfig, null /* constraints */, observer); } + @Nullable + public PeerConnection createPeerConnection( + PeerConnection.RTCConfiguration rtcConfig, PeerConnectionDependencies dependencies) { + return createPeerConnection(rtcConfig, null /* constraints */, dependencies.getObserver()); + } + public MediaStream createLocalMediaStream(String label) { return new MediaStream(nativeCreateLocalMediaStream(nativeFactory, label)); }