From 1b595755fef7de3cf7a50baebab64364b384dfac Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:52:53 +0100 Subject: [PATCH 01/37] refactor(jni-wrappers): remove options param from modifyRemoteStreamsSubscriptions method --- .../privmx-endpoint/src/cpp/modules/StreamApiLow.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp b/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp index 10da9904..adf9646f 100644 --- a/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp +++ b/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp @@ -665,19 +665,17 @@ Java_com_simplito_java_privmx_1endpoint_modules_stream_StreamApiLow_modifyRemote jobject thiz, jstring stream_room_id, jobject subscriptions_to_add, - jobject subscriptions_to_remove, - jobject options + jobject subscriptions_to_remove ) { JniContextUtils ctx(env); if (ctx.nullCheck(stream_room_id, "Stream Room ID") || ctx.nullCheck(subscriptions_to_add, "Subscriptions to add") || - ctx.nullCheck(subscriptions_to_add, "Subscriptions to remove") || - ctx.nullCheck(options, "Options")) { + ctx.nullCheck(subscriptions_to_add, "Subscriptions to remove")) { return; } ctx.callVoidEndpointApi( - [&ctx, &thiz, &stream_room_id, &subscriptions_to_add, &subscriptions_to_remove, &options]() { + [&ctx, &thiz, &stream_room_id, &subscriptions_to_add, &subscriptions_to_remove]() { auto subscriptions_to_add_arr = ctx.jObject2jArray(subscriptions_to_remove); auto subscriptions_to_remove_arr = ctx.jObject2jArray(subscriptions_to_remove); From c830fe41bdb4b2a4a9be32910adec135541f7fe2 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:53:28 +0100 Subject: [PATCH 02/37] refactor(privmx-endpoint): remove options param from modifyRemoteStreamsSubscriptions method --- .../java/privmx_endpoint/modules/stream/StreamApiLow.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java b/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java index c8aeec4d..546f0194 100644 --- a/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java +++ b/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java @@ -15,7 +15,6 @@ import com.simplito.java.privmx_endpoint.model.PagingList; import com.simplito.java.privmx_endpoint.model.UserWithPubKey; import com.simplito.java.privmx_endpoint.model.stream.SdpWithTypeModel; -import com.simplito.java.privmx_endpoint.model.stream.Settings; import com.simplito.java.privmx_endpoint.model.stream.StreamEncryptionMode; import com.simplito.java.privmx_endpoint.model.stream.StreamHandle; import com.simplito.java.privmx_endpoint.model.stream.StreamInfo; @@ -206,7 +205,7 @@ public native StreamHandle createStream( public native void subscribeToRemoteStreams(String streamRoomId, List subscriptions, Settings options); - public native void modifyRemoteStreamsSubscriptions(String streamRoomId, List subscriptionsToAdd, List subscriptionsToRemove, Settings options); + public native void modifyRemoteStreamsSubscriptions(String streamRoomId, List subscriptionsToAdd, List subscriptionsToRemove); public native void unsubscribeFromRemoteStreams(String streamRoomId, List subscriptionsToRemove); From a7087851eb18adbfe2c6c57b56dd041374189917 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:54:08 +0100 Subject: [PATCH 03/37] refactor(privmx-endpoint-streams/android): remove options param from modifyRemoteStreamsSubscriptions method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 87767fc2..6cb20e16 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -9,7 +9,6 @@ import com.simplito.java.privmx_endpoint.model.ContainerPolicy; import com.simplito.java.privmx_endpoint.model.PagingList; import com.simplito.java.privmx_endpoint.model.UserWithPubKey; -import com.simplito.java.privmx_endpoint.model.stream.Settings; import com.simplito.java.privmx_endpoint.model.stream.StreamHandle; import com.simplito.java.privmx_endpoint.model.stream.StreamInfo; import com.simplito.java.privmx_endpoint.model.stream.StreamPublishResult; @@ -354,8 +353,7 @@ public void modifyRemoteStreamsSubscriptions( public void modifyRemoteStreamsSubscriptions( String streamRoomId, List subscriptionsToAdd, - List subscriptionsToRemove, - Settings options + List subscriptionsToRemove ) { RoomJanusSession session = pcManager.getSession(streamRoomId); if (session == null) @@ -366,8 +364,7 @@ public void modifyRemoteStreamsSubscriptions( api.modifyRemoteStreamsSubscriptions( streamRoomId, subscriptionsToAdd, - subscriptionsToRemove, - options + subscriptionsToRemove ); } From f701c3c0b08b284bb510037e5ddb46e5c662f504 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:54:42 +0100 Subject: [PATCH 04/37] refactor(jni-wrappers): remove options param from subscribeToRemoteStreams method --- .../privmx-endpoint/src/cpp/modules/StreamApiLow.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp b/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp index adf9646f..546c8d23 100644 --- a/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp +++ b/jni-wrappers/privmx-endpoint/src/cpp/modules/StreamApiLow.cpp @@ -706,16 +706,14 @@ Java_com_simplito_java_privmx_1endpoint_modules_stream_StreamApiLow_subscribeToR JNIEnv *env, jobject thiz, jstring stream_room_id, - jobject subscriptions, - jobject options -) { + jobject subscriptions + ) { JniContextUtils ctx(env); if (ctx.nullCheck(stream_room_id, "Stream Room ID") || - ctx.nullCheck(subscriptions, "Subscriptions") || - ctx.nullCheck(options, "Options")) { + ctx.nullCheck(subscriptions, "Subscriptions")) { return; } - ctx.callVoidEndpointApi([&ctx, &thiz, &stream_room_id, &subscriptions, &options]() { + ctx.callVoidEndpointApi([&ctx, &thiz, &stream_room_id, &subscriptions]() { auto subscriptions_arr = ctx.jObject2jArray(subscriptions); auto subscriptions_c = jArrayToVector( ctx, From 843298623dd68958a4aa73888a6b78401697d50c Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:55:20 +0100 Subject: [PATCH 05/37] refactor(privmx-endpoint): remove options param from subscribeToRemoteStreams method --- .../java/privmx_endpoint/modules/stream/StreamApiLow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java b/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java index 546f0194..c6170da2 100644 --- a/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java +++ b/privmx-endpoint/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApiLow.java @@ -203,7 +203,7 @@ public native StreamHandle createStream( public native void unpublishStream(StreamHandle streamHandle); - public native void subscribeToRemoteStreams(String streamRoomId, List subscriptions, Settings options); + public native void subscribeToRemoteStreams(String streamRoomId, List subscriptions); public native void modifyRemoteStreamsSubscriptions(String streamRoomId, List subscriptionsToAdd, List subscriptionsToRemove); From ceed9ec81f6b52fdc2ab6b81e53539df209cb0be Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:55:48 +0100 Subject: [PATCH 06/37] refactor(privmx-endpoint-streams/android): remove options param from subscribeToRemoteStreams method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 6cb20e16..110fcf08 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -321,8 +321,7 @@ public void subscribeToRemoteStreams( public void subscribeToRemoteStreams( String streamRoomId, - List subscriptions, - Settings options + List subscriptions ) { RoomJanusSession session = pcManager.getSession(streamRoomId); if (session == null) @@ -334,7 +333,7 @@ public void subscribeToRemoteStreams( if (session.getSubscriber() == null) throw new IllegalStateException("This streamRoom has not created companion subscriber."); session.getSubscriber().setRTCConfiguration(getRTCConfiguration()); - api.subscribeToRemoteStreams(streamRoomId, subscriptions, options); + api.subscribeToRemoteStreams(streamRoomId, subscriptions); } public void modifyRemoteStreamsSubscriptions( From 8ab91abc24fb0fc39300e7403a7ca8fcdbc11409 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:57:41 +0100 Subject: [PATCH 07/37] refactor(privmx-endpoint-streams/android): remove duplicated modifyRemoteStreamsSubscriptions method --- .../privmx_endpoint/modules/stream/StreamApi.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 110fcf08..786a80c0 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -336,18 +336,6 @@ public void subscribeToRemoteStreams( api.subscribeToRemoteStreams(streamRoomId, subscriptions); } - public void modifyRemoteStreamsSubscriptions( - String streamRoomId, - List subscriptionsToAdd, - List subscriptionsToRemove - ) { - modifyRemoteStreamsSubscriptions( - streamRoomId, - subscriptionsToAdd, - subscriptionsToRemove, - new Settings() - ); - } public void modifyRemoteStreamsSubscriptions( String streamRoomId, From 489ce18ade70e544fab2b91b97c77a8ce24de123 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:14:27 +0100 Subject: [PATCH 08/37] refactor(privmx-endpoint-streams/android): StreamApi class description --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 786a80c0..65ba3d72 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -36,7 +36,13 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -public class StreamApi implements AutoCloseable{ +/** + * High-level API for managing PrivMX Stream Rooms and WebRTC media sessions on Android. + *

+ * {@code StreamApi} is a high-level wrapper over {@link StreamApiLow}, providing + * a simplified interface for working with Stream Rooms. + */ +public class StreamApi implements AutoCloseable { private final StreamApiLow api; private final PeerConnectionManager pcManager; public final TrackFactory trackFactory; From 170dc1640f8095c6ad0c15da30bc4f44ff6e5dde Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:18:24 +0100 Subject: [PATCH 09/37] docs(privmx-endpoint-streams/android): trackFactory param description --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 65ba3d72..7f7170f1 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -45,6 +45,10 @@ public class StreamApi implements AutoCloseable { private final StreamApiLow api; private final PeerConnectionManager pcManager; + + /** + * Factory which provides helpers for creating WebRTC media sources and tracks. + */ public final TrackFactory trackFactory; private static PeerConnectionFactory DefaultPeerConnectionFactory( From 49e82cd71f7cd94891bf40824155f6b5757fd575 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:19:54 +0100 Subject: [PATCH 10/37] docs(privmx-endpoint-streams/android): add StreamApi constructor description --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 7f7170f1..da9deed8 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -83,6 +83,13 @@ private static PeerConnectionFactory DefaultPeerConnectionFactory( return factory; } + /** + * Creates a {@code StreamApi} instance. + * + * @param appContext Android application context + * @param rootEglBase {@link EglBase} context used for hardware-accelerated video encoding and decoding + * @param api initialised {@link StreamApiLow} instance + */ public StreamApi( @NonNull Context appContext, @NonNull EglBase rootEglBase, From 5ef7af8009ddb80e6bccf2d1aa95e11264e5f863 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:20:34 +0100 Subject: [PATCH 11/37] docs(privmx-endpoint-streams/android): add description for createStreamRoom method --- .../privmx_endpoint/modules/stream/StreamApi.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index da9deed8..7e5a2e35 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -112,6 +112,19 @@ public StreamApi( trackFactory = new TrackFactory(pcManager); } + /** + * Creates a new Stream Room within the specified Context. + * + * @param contextId ID of the Context to create the Stream Room in + * @param users list of {@link UserWithPubKey} indicating which users will have + * access to the created Stream Room + * @param managers list of {@link UserWithPubKey} indicating which users will have + * access and management rights to the created Stream Room + * @param publicMeta public (unencrypted) metadata + * @param privateMeta private (encrypted) metadata + * @param policies additional container access policies, or {@code null} to use default settings + * @return ID of the created Stream Room + */ public String createStreamRoom( String contextId, List users, From be6c1252def91d365da03ac3fb56faba2a1fe21c Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:20:45 +0100 Subject: [PATCH 12/37] docs(privmx-endpoint-streams/android): add description for updateStreamRoom method --- .../modules/stream/StreamApi.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 7e5a2e35..9ffc25e7 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -136,6 +136,23 @@ public String createStreamRoom( return api.createStreamRoom(contextId, users, managers, publicMeta, privateMeta, policies); } + /** + * Updates an existing Stream Room. + * + * @param streamRoomId ID of the Stream Room to update + * @param users list of {@link UserWithPubKey} indicating which users will have + * access to the created Stream Room + * @param managers list of {@link UserWithPubKey} indicating which users will have + * access and management rights to the created Stream Room + * @param publicMeta public (unencrypted) metadata + * @param privateMeta private (encrypted) metadata + * @param version current version of the updated Stream Room + * @param force force update (without checking version) + * @param forceGenerateNewKey force to regenerate the encryption key for the Stream Room. + * Should be {@code true} whenever a user is removed + * @param policies additional container access policies, or {@code null} to keep + * current/defaults + */ public void updateStreamRoom( String streamRoomId, List users, From 641c01b3a858ff7a40f636116d2904cfe7e442ac Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:21:07 +0100 Subject: [PATCH 13/37] docs(privmx-endpoint-streams/android): add description for listStreamRooms methods --- .../modules/stream/StreamApi.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 9ffc25e7..8b6ab56c 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -167,6 +167,19 @@ public void updateStreamRoom( api.updateStreamRoom(streamRoomId, users, managers, publicMeta, privateMeta, version, force, forceGenerateNewKey, policies); } + /** + * Gets a list of Stream Rooms in given Context. + * + * @param contextId ID of the Context to get Stream Rooms from + * @param skip number of elements to skip from result + * @param limit limit of elements to return for query + * @param sortOrder order of elements in result ({@code "asc"} for ascending, + * {@code "desc"} for descending) + * @param lastId ID of the element from which query results should start + * @param sortBy field name to sort elements by + * @param queryAsJson stringified JSON object with a custom field to filter result + * @return list of Stream Rooms + */ public PagingList listStreamRooms( String contextId, long skip, @@ -179,6 +192,18 @@ public PagingList listStreamRooms( return api.listStreamRooms(contextId, skip, limit, sortOrder, lastId, sortBy, queryAsJson); } + /** + * Gets a list of Stream Rooms in given Context. + * + * @param contextId ID of the Context to get Stream Rooms from + * @param skip number of elements to skip from result + * @param limit limit of elements to return for query + * @param sortOrder order of elements in result ({@code "asc"} for ascending, + * {@code "desc"} for descending) + * @param lastId ID of the element from which query results should start + * @param sortBy field name to sort elements by + * @return list of Stream Rooms + */ public PagingList listStreamRooms( String contextId, long skip, @@ -190,6 +215,17 @@ public PagingList listStreamRooms( return listStreamRooms(contextId, skip, limit, sortOrder, lastId, sortBy, null); } + /** + * Gets a list of Stream Rooms in given Context. + * + * @param contextId ID of the Context to get Stream Rooms from + * @param skip number of elements to skip from result + * @param limit limit of elements to return for query + * @param sortOrder order of elements in result ({@code "asc"} for ascending, + * {@code "desc"} for descending) + * @param lastId ID of the element from which query results should start + * @return list of Stream Rooms + */ public PagingList listStreamRooms( String contextId, long skip, @@ -200,6 +236,16 @@ public PagingList listStreamRooms( return listStreamRooms(contextId, skip, limit, sortOrder, lastId, null, null); } + /** + * Gets a list of Stream Rooms in given Context. + * + * @param contextId ID of the Context to get Stream Rooms from + * @param skip number of elements to skip from result + * @param limit limit of elements to return for query + * @param sortOrder order of elements in result ({@code "asc"} for ascending, + * {@code "desc"} for descending) + * @return list of Stream Rooms + */ public PagingList listStreamRooms( String contextId, long skip, From 2f3d14e4c143bb5128b977da1dc18296a204d097 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:21:26 +0100 Subject: [PATCH 14/37] docs(privmx-endpoint-streams/android): add description for getStreamRoom method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 8b6ab56c..29edf045 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -255,7 +255,12 @@ public PagingList listStreamRooms( return listStreamRooms(contextId, skip, limit, sortOrder, null, null, null); } - + /** + * Gets a single Stream Room by given Stream Room ID. + * + * @param streamRoomId ID of the Stream Room to get + * @return struct containing information about the Stream Room + */ public StreamRoom getStreamRoom(String streamRoomId) { return api.getStreamRoom(streamRoomId); } From b54a8e3e7df1d255c4e9f048a98a6b1802ad4a72 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:21:42 +0100 Subject: [PATCH 15/37] docs(privmx-endpoint-streams/android): add description for deleteStreamRoom method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 29edf045..28d74ad8 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -265,6 +265,11 @@ public StreamRoom getStreamRoom(String streamRoomId) { return api.getStreamRoom(streamRoomId); } + /** + * Deletes a Stream Room by given Stream Room ID. + * + * @param streamRoomId ID of the Stream Room to delete + */ public void deleteStreamRoom(String streamRoomId) { api.deleteStreamRoom(streamRoomId); } From eae6119cdc54dcafba9123703427681515b4fa93 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:21:53 +0100 Subject: [PATCH 16/37] docs(privmx-endpoint-streams/android): add description for listStreams method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 28d74ad8..853f43df 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -274,6 +274,12 @@ public void deleteStreamRoom(String streamRoomId) { api.deleteStreamRoom(streamRoomId); } + /** + * Gets a list of currently published streams in given Stream Room. + * + * @param streamRoomId ID of the Stream Room to list streams from + * @return list of {@link StreamInfo} structs describing currently published streams + */ public List listStreams(String streamRoomId) { return api.listStreams(streamRoomId); } From 99d3485994a21f88e3c775b4643efac5334f8633 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:23:25 +0100 Subject: [PATCH 17/37] docs(privmx-endpoint-streams/android): add description for joinStreamRoom method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 853f43df..aa3f0f4a 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -284,6 +284,15 @@ public List listStreams(String streamRoomId) { return api.listStreams(streamRoomId); } + /** + * Joins a Stream Room and establishes a WebRTC session. + *

+ * Must be called before {@link #createStream(String)}, + * {@link #publishStream(StreamHandle)}, and any remote stream subscription calls + * for the given room. + * + * @param streamRoomId ID of the Stream Room to join + */ public void joinStreamRoom( String streamRoomId ) { From b90fd218666ca6a4344176c897f56de59c2232a9 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:23:50 +0100 Subject: [PATCH 18/37] docs(privmx-endpoint-streams/android): add description for leaveStreamRoom method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index aa3f0f4a..7629b608 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -300,6 +300,11 @@ public void joinStreamRoom( api.joinStreamRoom(streamRoomId, session.webrtc); } + /** + * Leaves a Stream Room and releases the associated WebRTC session. + * + * @param streamRoomId ID of the Stream Room to leave + */ public void leaveStreamRoom(String streamRoomId) { pcManager.leaveStreamRoom(streamRoomId); api.leaveStreamRoom(streamRoomId); From 127e55bbf3d08509e8aa3defff58113bcbf54dec Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:25:12 +0100 Subject: [PATCH 19/37] docs(privmx-endpoint-streams/android): add description for createStream method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 7629b608..67db76fc 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -310,6 +310,16 @@ public void leaveStreamRoom(String streamRoomId) { api.leaveStreamRoom(streamRoomId); } + /** + * Creates a local stream handle for publishing media in given Stream Room. + *

+ * {@link #joinStreamRoom(String)} must be called before this method. + * Use {@link #addTrack(StreamHandle, MediaStreamTrack)} to add media tracks + * before calling {@link #publishStream(StreamHandle)}. + * + * @param streamRoomId ID of the Stream Room to create the stream in + * @return handle to the local stream instance + */ public StreamHandle createStream(String streamRoomId) { RoomJanusSession session = pcManager.getSession(streamRoomId); if (session == null) From 45e3e0decf40aa36744ba273bc4cf118e1c1f958 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:25:32 +0100 Subject: [PATCH 20/37] docs(privmx-endpoint-streams/android): add description for addTrack method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 67db76fc..3d2ab119 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -336,8 +336,11 @@ public StreamHandle createStream(String streamRoomId) { } /** - * @param streamHandle - * @param track + * Adds a local media track to a Stream handle. + * The track is staged locally and becomes visible to others after publishStream/updateStream. + * + * @param streamHandle handle returned by {@link #createStream(String)} + * @param track {@link VideoTrack} or {@link AudioTrack} to add * @throws IllegalStateException if call addTrack before call createStream */ public void addTrack( From 232c01fda3973a26b7f133c19b249de54f64cab9 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:26:11 +0100 Subject: [PATCH 21/37] docs(privmx-endpoint-streams/android): add description for setTrackObserver method --- .../modules/stream/StreamApi.java | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 3d2ab119..2d41595e 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -366,6 +366,17 @@ public void addTrack( } } + /** + * Registers a {@link TrackObserver} to receive callbacks when remote media tracks + * become available for a specific stream in the given Stream Room. + *

+ * Use this method to observe tracks only from a selected remote stream. + * + * @param roomId ID of the Stream Room + * @param observer observer implementation receiving track callbacks + * @param streamId ID of a specific remote stream to observe, or {@code null} for all streams + * @throws IllegalStateException thrown when no active session exists for the given room. + */ public void setTrackObserver( @NonNull String roomId, TrackObserver observer, @@ -378,6 +389,20 @@ public void setTrackObserver( session.setTrackObserver(streamId, observer); } + /** + * Registers a {@link TrackObserver} to receive callbacks when remote media tracks + * become available for all streams in the given Stream Room. + * + * @param roomId ID of the Stream Room + * @param observer observer implementation receiving track callbacks + * @throws IllegalStateException thrown when no active session exists for the given room. + */ + public void setTrackObserver( + @NonNull String roomId, + TrackObserver observer + ) { + setTrackObserver(roomId, observer, null); + } public void setConnectionStateObserver( @NonNull String roomId, Consumer observer @@ -389,12 +414,6 @@ public void setConnectionStateObserver( session.setOnConnectionChange(observer); } - public void setTrackObserver( - String roomId, - TrackObserver observer - ) { - setTrackObserver(roomId, observer, null); - } /** * @param streamHandle From dc032b1508bfdcfd7e7324ae2109be399b7e1bcb Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:26:37 +0100 Subject: [PATCH 22/37] docs(privmx-endpoint-streams/android): add description for setConnectionStateObserver method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 2d41595e..9a71624e 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -403,6 +403,14 @@ public void setTrackObserver( ) { setTrackObserver(roomId, observer, null); } + + /** + * Registers an observer to receive ICE connection state changes for the given Stream Room. + * + * @param roomId ID of the Stream Room + * @param observer callback receiving {@link PeerConnection.IceConnectionState} values + * @throws IllegalStateException thrown when no active session exists for the given room. + */ public void setConnectionStateObserver( @NonNull String roomId, Consumer observer From f0ba4a04edba63604a4e68123a009990334030b8 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:26:50 +0100 Subject: [PATCH 23/37] docs(privmx-endpoint-streams/android): add description for publishStream method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 9a71624e..14098f19 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -446,6 +446,14 @@ public void removeTrack( } } + /** + * Publishes the stream (with currently added tracks) to the server, + * making it visible to other participants in the room. + * + * @param streamHandle handle returned by {@link #createStream(String)} + * @return result of the publish operation containing session information + * @throws IllegalStateException thrown when no stream exists for the given handle. + */ public StreamPublishResult publishStream(@NonNull StreamHandle streamHandle) { Objects.requireNonNull(streamHandle); RoomJanusSession session = pcManager.getSession(streamHandle); From 897dbe59ffe5da07a669ad8a0e946fda1c242d56 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:27:26 +0100 Subject: [PATCH 24/37] docs(privmx-endpoint-streams/android): add description for removeTrack method --- .../privmx_endpoint/modules/stream/StreamApi.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 14098f19..be2b579a 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -424,9 +424,14 @@ public void setConnectionStateObserver( /** - * @param streamHandle - * @param track - * @throws IllegalStateException when Stream with this StreamHandle doesn't exist. + * Removes a media track from a stream. + *

+ * After removing tracks, call {@link #updateStream(StreamHandle)} to propagate + * the change to other participants. + * + * @param streamHandle handle returned by {@link #createStream(String)} + * @param track {@link VideoTrack} or {@link AudioTrack} to remove + * @throws IllegalStateException thrown when Stream with this StreamHandle doesn't exist. */ public void removeTrack( @NonNull StreamHandle streamHandle, From 420ceb07cd97cfcfef93fcfb6e1b500b48eadd43 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:27:42 +0100 Subject: [PATCH 25/37] docs(privmx-endpoint-streams/android): add description for updateStream method --- .../privmx_endpoint/modules/stream/StreamApi.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index be2b579a..a4229998 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -471,6 +471,17 @@ public StreamPublishResult publishStream(@NonNull StreamHandle streamHandle) { return api.publishStream(streamHandle); } + /** + * Updates a published stream after track changes. + *

+ * Call this after {@link #addTrack(StreamHandle, MediaStreamTrack)} or + * {@link #removeTrack(StreamHandle, MediaStreamTrack)} on an already-published stream + * to propagate the changes to other participants. + * + * @param streamHandle handle returned by {@link #createStream(String)} + * @return result of the update operation containing updated session information + * @throws IllegalStateException thrown when no stream exists for the given handle. + */ public StreamPublishResult updateStream(@NonNull StreamHandle streamHandle) { Objects.requireNonNull(streamHandle); RoomJanusSession session = pcManager.getSession(streamHandle); From 8c284a84f29c3ee9144fe184d5f811feece060b6 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:28:24 +0100 Subject: [PATCH 26/37] docs(privmx-endpoint-streams/android): add description for unpublishStream method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index a4229998..5e8e982e 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -494,6 +494,12 @@ public StreamPublishResult updateStream(@NonNull StreamHandle streamHandle) { return api.updateStream(streamHandle); } + /** + * Stops publishing the stream. + * + * @param streamHandle handle returned by {@link #createStream(String)} + * @throws IllegalStateException thrown when instance is closed. + */ public void unpublishStream(@NonNull StreamHandle streamHandle) { Objects.requireNonNull(streamHandle); api.unpublishStream(streamHandle); From a4c04592867b2c020dead9425e10fcddd925bbef Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:30:41 +0100 Subject: [PATCH 27/37] refactor(privmx-endpoint-streams/android): remove duplicated subscribeToRemoteStreams method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 786a80c0..20a823d2 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -312,13 +312,6 @@ public void unpublishStream(@NonNull StreamHandle streamHandle) { api.unpublishStream(streamHandle); } - public void subscribeToRemoteStreams( - String streamRoomId, - List subscriptions - ) { - subscribeToRemoteStreams(streamRoomId, subscriptions, new Settings()); - } - public void subscribeToRemoteStreams( String streamRoomId, List subscriptions From 4f02917a62b99653c92463080eeeb8177cea71f4 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:33:45 +0100 Subject: [PATCH 28/37] docs(privmx-endpoint-streams/android): add description for subscribeToRemoteStreams method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 00156e7c..47574709 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -505,6 +505,16 @@ public void unpublishStream(@NonNull StreamHandle streamHandle) { api.unpublishStream(streamHandle); } + /** + * Subscribes to selected remote streams in a Stream Room. + *

+ * {@link #joinStreamRoom(String)} must be called before this method. + * + * @param streamRoomId ID of the Stream Room + * @param subscriptions list of {@link StreamSubscription} structs describing the remote + * streams to subscribe to + * @throws IllegalStateException thrown when no active session exists for the given room. + */ public void subscribeToRemoteStreams( String streamRoomId, List subscriptions From 4637f92c2d1db809f93d81cb257104e542a73708 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:36:10 +0100 Subject: [PATCH 29/37] docs(privmx-endpoint-streams/android): add description for modifyRemoteStreamsSubscriptions method --- .../privmx_endpoint/modules/stream/StreamApi.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 47574709..0f8c0a38 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -533,6 +533,18 @@ public void subscribeToRemoteStreams( } + /** + * Modifies the current list of remote stream subscriptions in a Stream Room. + *

+ * Allows atomically adding and removing remote stream subscriptions in a single call, + * avoiding the need to fully unsubscribe and resubscribe. + * + * @param streamRoomId ID of the Stream Room + * @param subscriptionsToAdd list of {@link StreamSubscription} structs to add + * @param subscriptionsToRemove list of {@link StreamSubscription} structs to remove + * @throws IllegalStateException thrown when no active session or subscriber exists + * for the given room. + */ public void modifyRemoteStreamsSubscriptions( String streamRoomId, List subscriptionsToAdd, From 97de3889cbd27c11651638d2312bd130bc655b11 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:37:39 +0100 Subject: [PATCH 30/37] docs(privmx-endpoint-streams/android): add description for unsubscribeFromRemoteStreams method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 0f8c0a38..46dce2b9 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -563,6 +563,14 @@ public void modifyRemoteStreamsSubscriptions( ); } + /** + * Unsubscribes from selected remote streams in a Stream Room. + * + * @param streamRoomId ID of the Stream Room + * @param subscriptionsToRemove list of {@link StreamSubscription} structs to remove + * @throws IllegalStateException thrown when no active session or subscriber exists + * for the given room. + */ public void unsubscribeFromRemoteStreams( String streamRoomId, List subscriptionsToRemove From 4230b7dbfc4a928b5389ff48f29496c7ddc3f2dd Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:39:23 +0100 Subject: [PATCH 31/37] docs(privmx-endpoint-streams/android): add description for dropBrokenFrames method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 46dce2b9..2944fd76 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -587,6 +587,16 @@ public void unsubscribeFromRemoteStreams( ); } + /** + * Controls whether encrypted media frames that cannot be decrypted should be dropped. + *

+ * When enabled, this prevents corrupted audio or video from being rendered in situations + * such as key rotation, where a participant may temporarily use an outdated key. + * + * @param streamRoomId ID of the Stream Room + * @param enable {@code true} to silently drop undecryptable frames; + * {@code false} to pass them through unchanged + */ public void dropBrokenFrames( String streamRoomId, boolean enable From 1005f80cb98015fd2f5005ce694b02ea5ff86827 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:44:33 +0100 Subject: [PATCH 32/37] docs(privmx-endpoint-streams/android): add description for subscribeFor method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 2944fd76..c0d8f4a5 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -609,6 +609,14 @@ public void dropBrokenFrames( } } + /** + * Subscribes to Stream Room and Stream-level events based on the provided subscription queries. + * + * @param subscriptionQueries list of queries built with + * {@link #buildSubscriptionQuery(StreamEventType, StreamEventSelectorType, String)} + * @return list of subscription IDs in matching order to {@code subscriptionQueries} + * @throws IllegalStateException thrown when instance is closed. + */ public List subscribeFor(List subscriptionQueries) { return api.subscribeFor(subscriptionQueries); } From dadbbf404ba3a0610c92c707934b9e0a2c8e0a03 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:45:48 +0100 Subject: [PATCH 33/37] docs(privmx-endpoint-streams/android): update description for subscribeFor method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index c0d8f4a5..6ceae44b 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -610,7 +610,8 @@ public void dropBrokenFrames( } /** - * Subscribes to Stream Room and Stream-level events based on the provided subscription queries. + * Subscribes to events for the Stream Room as well as its individual streams, + * based on the provided subscription queries. * * @param subscriptionQueries list of queries built with * {@link #buildSubscriptionQuery(StreamEventType, StreamEventSelectorType, String)} From 7bae4b2c32b377ec3e78f0b65982afcb3bad594e Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:46:57 +0100 Subject: [PATCH 34/37] docs(privmx-endpoint-streams/android): add description for unsubscribeFrom method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 6ceae44b..7b51f429 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -622,6 +622,12 @@ public List subscribeFor(List subscriptionQueries) { return api.subscribeFor(subscriptionQueries); } + /** + * Unsubscribes from events with the given subscription IDs. + * + * @param subscriptionIds list of subscription IDs returned by {@link #subscribeFor(List)} + * @throws IllegalStateException thrown when instance is closed. + */ public void unsubscribeFrom(List subscriptionIds) { api.unsubscribeFrom(subscriptionIds); } From 4d48f79258e4a91641c98a6171d147aad86594a6 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:50:03 +0100 Subject: [PATCH 35/37] docs(privmx-endpoint-streams/android): add description for buildSubscriptionQuery method --- .../privmx_endpoint/modules/stream/StreamApi.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 7b51f429..4fefb943 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -632,6 +632,19 @@ public void unsubscribeFrom(List subscriptionIds) { api.unsubscribeFrom(subscriptionIds); } + /** + * Generates a subscription query string for events for the Stream Room + * as well as its individual streams. + *

+ * The returned query should be passed to {@link #subscribeFor(List)} to start + * receiving the requested events. + * + * @param eventType type of event to listen for + * @param selectorType scope at which events are observed + * @param selectorId ID of the selected entity + * @return query string used for event subscription + * @throws IllegalStateException thrown when instance is closed + */ public String buildSubscriptionQuery( StreamEventType eventType, StreamEventSelectorType selectorType, From 8dd3f1c7838d1aaa63dd8b3106edd5658a8dbe32 Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:52:36 +0100 Subject: [PATCH 36/37] docs(privmx-endpoint-streams/android): add description for close method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java index 4fefb943..5ffb6f18 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/StreamApi.java @@ -657,6 +657,14 @@ public String buildSubscriptionQuery( ); } + /** + * Releases all resources associated with this instance. + *

+ * Leaves all active Stream Rooms, shuts down the peer connection manager, + * and closes the underlying {@link StreamApiLow} instance. + * + * @throws Exception thrown if an error occurs during cleanup + */ @Override public void close() throws Exception { pcManager.getRoomIds().forEach(this::leaveStreamRoom); From 88d35c0fc49d95db7f25e94114be86b15f4861cc Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 14:53:33 +0100 Subject: [PATCH 37/37] docs(privmx-endpoint-streams/android): add documentation for TrackFactory class and its methods --- .../modules/stream/TrackFactory.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/TrackFactory.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/TrackFactory.java index 9d102ebd..af555bcf 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/TrackFactory.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/TrackFactory.java @@ -2,24 +2,64 @@ import org.webrtc.*; +/** + * Factory for creating WebRTC media sources and tracks. + * Provides methods for creating the audio and video objects needed + * to publish a stream via {@link StreamApi}. + *

+ * You do not create instances of this class directly — obtain the shared instance + * from {@link StreamApi#trackFactory} after constructing a {@link StreamApi}. + */ public class TrackFactory { private final PeerConnectionFactory factory; TrackFactory(PeerConnectionManager pcManager){ factory = pcManager.pcFactory; } + /** + * Creates a {@link VideoSource} that can capture a camera or screen feed. + * + * @param isScreenCast {@code true} if the source is capturing a screen share; + * {@code false} for a regular camera feed. + * @return a new {@link VideoSource} instance + */ public VideoSource createVideoSource(boolean isScreenCast){ return factory.createVideoSource(isScreenCast); } + /** + * Creates a {@link VideoSource} with explicit timestamp alignment control. + * + * @param isScreenCast {@code true} if the source is capturing a screen share; + * {@code false} for a regular camera feed + * @param alignTimestamps {@code true} to align video frame timestamps with the + * audio clock, which can improve A/V sync in some scenarios + * @return a new {@link VideoSource} instance + */ public VideoSource createVideoSource(boolean isScreenCast, boolean alignTimestamps){ return factory.createVideoSource(isScreenCast,alignTimestamps); } + /** + * Creates an {@link AudioSource} with default media constraints. + *

+ * The source captures audio from the device microphone. Default constraints + * enable standard WebRTC audio processing (echo cancellation, noise suppression, + * auto gain control). + * + * @return a new {@link AudioSource} instance + */ public AudioSource createAudioSource(){ return factory.createAudioSource(new MediaConstraints()); } + /** + * Creates a {@link VideoTrack} using the provided {@link VideoSource}. + * @param id unique identifier for this track within the peer connection + * @param videoSource source of video frames + * + * @return a new {@link VideoTrack} instance + */ public VideoTrack createVideoTrack( String id, VideoSource videoSource @@ -27,6 +67,14 @@ public VideoTrack createVideoTrack( return factory.createVideoTrack(id,videoSource); } + /** + * Creates an {@link AudioTrack} using the provided {@link AudioSource}. + * + * @param id unique identifier for this track within the peer connection + * @param audioSource source providing audio samples + * + * @return a new {@link AudioTrack} instance + */ public AudioTrack createAudioTrack( String id, AudioSource audioSource