From 1b595755fef7de3cf7a50baebab64364b384dfac Mon Sep 17 00:00:00 2001 From: Doominika Date: Thu, 26 Mar 2026 13:52:53 +0100 Subject: [PATCH 01/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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/58] 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 From 303571fdaa4ae94d4205a28b1b72914c89be882a Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 12:45:48 +0200 Subject: [PATCH 38/58] docs: change description for TrackFactory.createVideoSource --- .../privmx_endpoint/modules/stream/TrackFactory.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 af555bcf..8c6d77e8 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 @@ -30,10 +30,14 @@ public VideoSource createVideoSource(boolean 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 + * @param isScreenCast {@code true} if the source is capturing a screen share; + * {@code false} for a regular camera + * @param alignTimestamps if {@code} false - the caller is responsible for aligning + * frame timestamps to {@code rtc::TimeNanos()} — useful for + * higher accuracy when there is a significant delay between + * frame creation and delivery; if {@code true}, timestamps + * are automatically aligned to {@code rtc::TimeNanos()} + * upon arrival at the returned video source * @return a new {@link VideoSource} instance */ public VideoSource createVideoSource(boolean isScreenCast, boolean alignTimestamps){ From 15fda01f826ce9f92557392861cfbdddef31a6a0 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 12:48:10 +0200 Subject: [PATCH 39/58] docs: change description for StreamApi.close --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 4 +--- 1 file changed, 1 insertion(+), 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 5ffb6f18..0aa163d4 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 @@ -659,9 +659,7 @@ 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. + * Leaves all active StreamRooms and releases allocated resources. * * @throws Exception thrown if an error occurs during cleanup */ From 21da6b796ccac720412f9e80de4aaca62de135b3 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:00:23 +0200 Subject: [PATCH 40/58] docs: remove paragraphs tags --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 10 ---------- .../privmx_endpoint/modules/stream/TrackFactory.java | 2 -- 2 files 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 0aa163d4..f80b4501 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 @@ -38,7 +38,6 @@ /** * 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. */ @@ -286,7 +285,6 @@ public List listStreams(String 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. @@ -312,7 +310,6 @@ public void leaveStreamRoom(String 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)}. @@ -369,7 +366,6 @@ 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 @@ -425,7 +421,6 @@ public void setConnectionStateObserver( /** * Removes a media track from a stream. - *

* After removing tracks, call {@link #updateStream(StreamHandle)} to propagate * the change to other participants. * @@ -473,7 +468,6 @@ public StreamPublishResult publishStream(@NonNull StreamHandle 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. @@ -507,7 +501,6 @@ public void unpublishStream(@NonNull StreamHandle 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 @@ -535,7 +528,6 @@ 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. * @@ -589,7 +581,6 @@ 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. * @@ -635,7 +626,6 @@ public void unsubscribeFrom(List 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. * 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 8c6d77e8..71d67d70 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 @@ -6,7 +6,6 @@ * 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}. */ @@ -46,7 +45,6 @@ public VideoSource createVideoSource(boolean isScreenCast, boolean alignTimestam /** * 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). From 09542dc85cfa291d1cc9af8397805810a0f0c1ef Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:02:56 +0200 Subject: [PATCH 41/58] docs: add more info in StreamApi class description --- .../simplito/java/privmx_endpoint/modules/stream/StreamApi.java | 2 +- 1 file changed, 1 insertion(+), 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 f80b4501..7f1416de 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 @@ -38,7 +38,7 @@ /** * 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 + * {@code StreamApi} is a high-level wrapper over {@link StreamApiLow} and WebRTC, providing * a simplified interface for working with Stream Rooms. */ public class StreamApi implements AutoCloseable { From 76494ed48687ef2e494045d92130d53d23b69980 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:05:52 +0200 Subject: [PATCH 42/58] docs: update description of StreamApi.getStreamRoom method --- .../simplito/java/privmx_endpoint/modules/stream/StreamApi.java | 2 +- 1 file changed, 1 insertion(+), 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 7f1416de..ddbcc23d 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,7 @@ public PagingList listStreamRooms( } /** - * Gets a single Stream Room by given Stream Room ID. + * Gets a single StreamRoom identified by given StreamRoom ID. * * @param streamRoomId ID of the Stream Room to get * @return struct containing information about the Stream Room From e318d11e8ea3f2bbc1198ed7e1da0d1eb16fe425 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:12:10 +0200 Subject: [PATCH 43/58] docs: kick structs out of java documentation --- .../privmx_endpoint/modules/stream/StreamApi.java | 12 ++++++------ 1 file changed, 6 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 ddbcc23d..188be173 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 @@ -258,7 +258,7 @@ public PagingList listStreamRooms( * Gets a single StreamRoom identified by given StreamRoom ID. * * @param streamRoomId ID of the Stream Room to get - * @return struct containing information about the Stream Room + * @return {@link StreamRoom} containing information about the room */ public StreamRoom getStreamRoom(String streamRoomId) { return api.getStreamRoom(streamRoomId); @@ -277,7 +277,7 @@ public void deleteStreamRoom(String 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 + * @return list of {@link StreamInfo} describing currently published streams */ public List listStreams(String streamRoomId) { return api.listStreams(streamRoomId); @@ -504,7 +504,7 @@ public void unpublishStream(@NonNull StreamHandle streamHandle) { * {@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 + * @param subscriptions list of {@link StreamSubscription} describing the remote * streams to subscribe to * @throws IllegalStateException thrown when no active session exists for the given room. */ @@ -532,8 +532,8 @@ public void subscribeToRemoteStreams( * 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 + * @param subscriptionsToAdd list of {@link StreamSubscription} to add + * @param subscriptionsToRemove list of {@link StreamSubscription} to remove * @throws IllegalStateException thrown when no active session or subscriber exists * for the given room. */ @@ -559,7 +559,7 @@ 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 + * @param subscriptionsToRemove list of {@link StreamSubscription} to remove * @throws IllegalStateException thrown when no active session or subscriber exists * for the given room. */ From acee671b7d041c19b21851c75e3447ff68e79794 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:18:42 +0200 Subject: [PATCH 44/58] docs: fix desc for forceGenerateNewKey param --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 3 +-- 1 file changed, 1 insertion(+), 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 188be173..a4d65dd7 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 @@ -147,8 +147,7 @@ public String createStreamRoom( * @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 forceGenerateNewKey force to regenerate the encryption key for the StreamRoom * @param policies additional container access policies, or {@code null} to keep * current/defaults */ From df46e6c11c571746138a423fda931de772519cba Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:21:28 +0200 Subject: [PATCH 45/58] docs: update description for StreamApi.deleteStreamRoom --- .../simplito/java/privmx_endpoint/modules/stream/StreamApi.java | 2 +- 1 file changed, 1 insertion(+), 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 a4d65dd7..723c2437 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 @@ -264,7 +264,7 @@ public StreamRoom getStreamRoom(String streamRoomId) { } /** - * Deletes a Stream Room by given Stream Room ID. + * Deletes a StreamRoom identified by given StreamRoom ID. * * @param streamRoomId ID of the Stream Room to delete */ From e01df5a6962f76ef1e2257e2dc39ee00f634238b Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:24:13 +0200 Subject: [PATCH 46/58] docs: fix description for StreamApi.joinStreamRoom --- .../simplito/java/privmx_endpoint/modules/stream/StreamApi.java | 2 +- 1 file changed, 1 insertion(+), 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 723c2437..64823d73 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 @@ -283,7 +283,7 @@ public List listStreams(String streamRoomId) { } /** - * Joins a Stream Room and establishes a WebRTC session. + * Joins a StreamRoom and prepares the session for WebRTC communication. * Must be called before {@link #createStream(String)}, * {@link #publishStream(StreamHandle)}, and any remote stream subscription calls * for the given room. From 3cec66999039348ff1d638903418e856b044e1db Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:28:44 +0200 Subject: [PATCH 47/58] docs: update description for StreamApi.createStream --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 6 ++---- 1 file changed, 2 insertions(+), 4 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 64823d73..232698e1 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 @@ -308,12 +308,10 @@ public void leaveStreamRoom(String streamRoomId) { } /** - * Creates a local stream handle for publishing media in given Stream Room. + * Creates a local stream handle for publishing media in given StreamRoom. * {@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 + * @param streamRoomId ID of the StreamRoom to create the stream in * @return handle to the local stream instance */ public StreamHandle createStream(String streamRoomId) { From 6fb47efe2dcc9420ee78c5464301d00d733a91ce Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:37:50 +0200 Subject: [PATCH 48/58] docs: update description for StreamApi.setTrackObserver --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 10 +++++----- 1 file changed, 5 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 232698e1..215d41c5 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 @@ -362,12 +362,12 @@ 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. + * become available for a specified stream in the given StreamRoom. * Use this method to observe tracks only from a selected remote stream. * - * @param roomId ID of the Stream Room + * @param roomId ID of the StreamRoom * @param observer observer implementation receiving track callbacks - * @param streamId ID of a specific remote stream to observe, or {@code null} for all streams + * @param streamId ID of a specific remote stream to observe, or {@code null} for all streams in the given StreamRoom. * @throws IllegalStateException thrown when no active session exists for the given room. */ public void setTrackObserver( @@ -384,9 +384,9 @@ public void setTrackObserver( /** * Registers a {@link TrackObserver} to receive callbacks when remote media tracks - * become available for all streams in the given Stream Room. + * become available for all streams in the given StreamRoom. * - * @param roomId ID of the Stream Room + * @param roomId ID of the StreamRoom * @param observer observer implementation receiving track callbacks * @throws IllegalStateException thrown when no active session exists for the given room. */ From 0d50f66716f8522e682c9fe4afe8739654018682 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:39:27 +0200 Subject: [PATCH 49/58] docs: update description for StreamApi.setTrackObserver --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 4 ++-- 1 file changed, 2 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 215d41c5..deb55ce1 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 @@ -361,7 +361,7 @@ public void addTrack( } /** - * Registers a {@link TrackObserver} to receive callbacks when remote media tracks + * Registers a {@link TrackObserver} to receive callbacks when a remote media track * become available for a specified stream in the given StreamRoom. * Use this method to observe tracks only from a selected remote stream. * @@ -383,7 +383,7 @@ public void setTrackObserver( } /** - * Registers a {@link TrackObserver} to receive callbacks when remote media tracks + * Registers a {@link TrackObserver} to receive callbacks when a remote media track * become available for all streams in the given StreamRoom. * * @param roomId ID of the StreamRoom From bd6c7bda8fa8faf4dd166f5c7a70481488b2ec09 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:43:47 +0200 Subject: [PATCH 50/58] docs: update return description for publishStream and updateStream --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 4 ++-- 1 file changed, 2 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 deb55ce1..30ae7b18 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 @@ -448,7 +448,7 @@ public void removeTrack( * 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 + * @return result of the publish operation containing stream information * @throws IllegalStateException thrown when no stream exists for the given handle. */ public StreamPublishResult publishStream(@NonNull StreamHandle streamHandle) { @@ -470,7 +470,7 @@ public StreamPublishResult publishStream(@NonNull StreamHandle streamHandle) { * 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 + * @return result of the update operation containing updated stream information * @throws IllegalStateException thrown when no stream exists for the given handle. */ public StreamPublishResult updateStream(@NonNull StreamHandle streamHandle) { From d1f71c1eaf85f76ddfe6f8358e2448862280c50d Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:46:49 +0200 Subject: [PATCH 51/58] docs: update subscribeToRemoteStreams method description --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 5 +++-- 1 file changed, 3 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 30ae7b18..e19392d1 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 @@ -497,10 +497,11 @@ public void unpublishStream(@NonNull StreamHandle streamHandle) { } /** - * Subscribes to selected remote streams in a Stream Room. + * Subscribes to selected remote streams in a StreamRoom. + * Individual tracks within a stream can also be selected for subscription. * {@link #joinStreamRoom(String)} must be called before this method. * - * @param streamRoomId ID of the Stream Room + * @param streamRoomId ID of the StreamRoom * @param subscriptions list of {@link StreamSubscription} describing the remote * streams to subscribe to * @throws IllegalStateException thrown when no active session exists for the given room. From c7ed828179d19fc0ab1f4005e0e0a79dbedf708d Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:48:38 +0200 Subject: [PATCH 52/58] docs: update dropBrokenFrames method description --- .../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 e19392d1..25404e22 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 @@ -579,12 +579,9 @@ 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 + * @param streamRoomId ID of the StreamRoom + * @param enable if {@code true}, broken frames will be dropped */ public void dropBrokenFrames( String streamRoomId, From 6c5e35c68d9a6e9b697bcb315edb24c16d21a59c Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 13:51:12 +0200 Subject: [PATCH 53/58] docs: change Stream Room to StreamRoom --- .../modules/stream/StreamApi.java | 109 +++++++++--------- 1 file changed, 54 insertions(+), 55 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 25404e22..1e97beec 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 @@ -5,7 +5,6 @@ import androidx.annotation.NonNull; -import com.simplito.java.privmx_endpoint.model.ConnectionType; import com.simplito.java.privmx_endpoint.model.ContainerPolicy; import com.simplito.java.privmx_endpoint.model.PagingList; import com.simplito.java.privmx_endpoint.model.UserWithPubKey; @@ -37,9 +36,9 @@ import java.util.stream.Collectors; /** - * High-level API for managing PrivMX Stream Rooms and WebRTC media sessions on Android. + * High-level API for managing PrivMX StreamRooms and WebRTC media sessions on Android. * {@code StreamApi} is a high-level wrapper over {@link StreamApiLow} and WebRTC, providing - * a simplified interface for working with Stream Rooms. + * a simplified interface for working with StreamRooms. */ public class StreamApi implements AutoCloseable { private final StreamApiLow api; @@ -112,17 +111,17 @@ public StreamApi( } /** - * Creates a new Stream Room within the specified Context. + * Creates a new StreamRoom within the speci fvfied Context. * - * @param contextId ID of the Context to create the Stream Room in + * @param contextId ID of the Context to create the StreamRoom in * @param users list of {@link UserWithPubKey} indicating which users will have - * access to the created Stream Room + * access to the created StreamRoom * @param managers list of {@link UserWithPubKey} indicating which users will have - * access and management rights to the created Stream Room + * access and management rights to the created StreamRoom * @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 + * @return ID of the created StreamRoom */ public String createStreamRoom( String contextId, @@ -136,16 +135,16 @@ public String createStreamRoom( } /** - * Updates an existing Stream Room. + * Updates an existing StreamRoom. * - * @param streamRoomId ID of the Stream Room to update + * @param streamRoomId ID of the StreamRoom to update * @param users list of {@link UserWithPubKey} indicating which users will have - * access to the created Stream Room + * access to the StreamRoom * @param managers list of {@link UserWithPubKey} indicating which users will have - * access and management rights to the created Stream Room + * access and management rights to the created StreamRoom * @param publicMeta public (unencrypted) metadata * @param privateMeta private (encrypted) metadata - * @param version current version of the updated Stream Room + * @param version current version of the updated StreamRoom * @param force force update (without checking version) * @param forceGenerateNewKey force to regenerate the encryption key for the StreamRoom * @param policies additional container access policies, or {@code null} to keep @@ -166,9 +165,9 @@ public void updateStreamRoom( } /** - * Gets a list of Stream Rooms in given Context. + * Gets a list of StreamRooms in given Context. * - * @param contextId ID of the Context to get Stream Rooms from + * @param contextId ID of the Context to get StreamRooms 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, @@ -176,7 +175,7 @@ public void updateStreamRoom( * @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 + * @return list of StreamRooms */ public PagingList listStreamRooms( String contextId, @@ -191,16 +190,16 @@ public PagingList listStreamRooms( } /** - * Gets a list of Stream Rooms in given Context. + * Gets a list of StreamRooms 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 + * @param contextId ID of the Context to get StreamRooms 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 StreamRooms */ public PagingList listStreamRooms( String contextId, @@ -214,15 +213,15 @@ public PagingList listStreamRooms( } /** - * Gets a list of Stream Rooms in given Context. + * Gets a list of StreamRooms 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 + * @param contextId ID of the Context to get StreamRooms 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 StreamRooms */ public PagingList listStreamRooms( String contextId, @@ -235,14 +234,14 @@ public PagingList listStreamRooms( } /** - * Gets a list of Stream Rooms in given Context. + * Gets a list of StreamRooms 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 + * @param contextId ID of the Context to get StreamRooms 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 StreamRooms */ public PagingList listStreamRooms( String contextId, @@ -256,7 +255,7 @@ public PagingList listStreamRooms( /** * Gets a single StreamRoom identified by given StreamRoom ID. * - * @param streamRoomId ID of the Stream Room to get + * @param streamRoomId ID of the StreamRoom to get * @return {@link StreamRoom} containing information about the room */ public StreamRoom getStreamRoom(String streamRoomId) { @@ -266,16 +265,16 @@ public StreamRoom getStreamRoom(String streamRoomId) { /** * Deletes a StreamRoom identified by given StreamRoom ID. * - * @param streamRoomId ID of the Stream Room to delete + * @param streamRoomId ID of the StreamRoom to delete */ public void deleteStreamRoom(String streamRoomId) { api.deleteStreamRoom(streamRoomId); } /** - * Gets a list of currently published streams in given Stream Room. + * Gets a list of currently published streams in given StreamRoom. * - * @param streamRoomId ID of the Stream Room to list streams from + * @param streamRoomId ID of the StreamRoom to list streams from * @return list of {@link StreamInfo} describing currently published streams */ public List listStreams(String streamRoomId) { @@ -288,7 +287,7 @@ public List listStreams(String streamRoomId) { * {@link #publishStream(StreamHandle)}, and any remote stream subscription calls * for the given room. * - * @param streamRoomId ID of the Stream Room to join + * @param streamRoomId ID of the StreamRoom to join */ public void joinStreamRoom( String streamRoomId @@ -298,9 +297,9 @@ public void joinStreamRoom( } /** - * Leaves a Stream Room and releases the associated WebRTC session. + * Leaves a StreamRoom and releases the associated WebRTC session. * - * @param streamRoomId ID of the Stream Room to leave + * @param streamRoomId ID of the StreamRoom to leave */ public void leaveStreamRoom(String streamRoomId) { pcManager.leaveStreamRoom(streamRoomId); @@ -398,9 +397,9 @@ public void setTrackObserver( } /** - * Registers an observer to receive ICE connection state changes for the given Stream Room. + * Registers an observer to receive ICE connection state changes for the given StreamRoom. * - * @param roomId ID of the Stream Room + * @param roomId ID of the StreamRoom * @param observer callback receiving {@link PeerConnection.IceConnectionState} values * @throws IllegalStateException thrown when no active session exists for the given room. */ @@ -525,11 +524,11 @@ public void subscribeToRemoteStreams( /** - * Modifies the current list of remote stream subscriptions in a Stream Room. + * Modifies the current list of remote stream subscriptions in a StreamRoom. * 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 streamRoomId ID of the StreamRoom * @param subscriptionsToAdd list of {@link StreamSubscription} to add * @param subscriptionsToRemove list of {@link StreamSubscription} to remove * @throws IllegalStateException thrown when no active session or subscriber exists @@ -554,9 +553,9 @@ public void modifyRemoteStreamsSubscriptions( } /** - * Unsubscribes from selected remote streams in a Stream Room. + * Unsubscribes from selected remote streams in a StreamRoom. * - * @param streamRoomId ID of the Stream Room + * @param streamRoomId ID of the StreamRoom * @param subscriptionsToRemove list of {@link StreamSubscription} to remove * @throws IllegalStateException thrown when no active session or subscriber exists * for the given room. @@ -596,7 +595,7 @@ public void dropBrokenFrames( } /** - * Subscribes to events for the Stream Room as well as its individual streams, + * Subscribes to events for the StreamRoom as well as its individual streams, * based on the provided subscription queries. * * @param subscriptionQueries list of queries built with @@ -619,7 +618,7 @@ public void unsubscribeFrom(List subscriptionIds) { } /** - * Generates a subscription query string for events for the Stream Room + * Generates a subscription query string for events for the StreamRoom * as well as its individual streams. * The returned query should be passed to {@link #subscribeFor(List)} to start * receiving the requested events. From f156d2c7427b8a583ea78b7f20886921af8122e4 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 15:10:01 +0200 Subject: [PATCH 54/58] docs: update TrackFactory.createVideoSource method description --- .../java/privmx_endpoint/modules/stream/TrackFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 71d67d70..2e651d8b 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 @@ -16,10 +16,10 @@ public class TrackFactory { } /** - * Creates a {@link VideoSource} that can capture a camera or screen feed. + * Creates a {@link VideoSource} that can capture a camera or screen with alignTimestamps to {@code true}. * * @param isScreenCast {@code true} if the source is capturing a screen share; - * {@code false} for a regular camera feed. + * {@code false} for a regular camera * @return a new {@link VideoSource} instance */ public VideoSource createVideoSource(boolean isScreenCast){ From b9d9bc2f5422a6ba14702691a65ed48d1aa41c3f Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 15:11:40 +0200 Subject: [PATCH 55/58] docs: reformat code --- .../modules/stream/StreamApi.java | 4 ++-- .../modules/stream/TrackFactory.java | 22 +++++++++---------- 2 files changed, 13 insertions(+), 13 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 1e97beec..0a81e01c 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 @@ -102,8 +102,8 @@ public StreamApi( this.api.trickle(sessionId, rtcConfiguration); } }, - (s,s2)->{ - this.api.setNewOfferOnReconfigure(s,s2); + (s, s2) -> { + this.api.setNewOfferOnReconfigure(s, s2); } ); 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 2e651d8b..568e382f 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 @@ -11,7 +11,8 @@ */ public class TrackFactory { private final PeerConnectionFactory factory; - TrackFactory(PeerConnectionManager pcManager){ + + TrackFactory(PeerConnectionManager pcManager) { factory = pcManager.pcFactory; } @@ -22,7 +23,7 @@ public class TrackFactory { * {@code false} for a regular camera * @return a new {@link VideoSource} instance */ - public VideoSource createVideoSource(boolean isScreenCast){ + public VideoSource createVideoSource(boolean isScreenCast) { return factory.createVideoSource(isScreenCast); } @@ -39,8 +40,8 @@ public VideoSource createVideoSource(boolean isScreenCast){ * upon arrival at the returned video source * @return a new {@link VideoSource} instance */ - public VideoSource createVideoSource(boolean isScreenCast, boolean alignTimestamps){ - return factory.createVideoSource(isScreenCast,alignTimestamps); + public VideoSource createVideoSource(boolean isScreenCast, boolean alignTimestamps) { + return factory.createVideoSource(isScreenCast, alignTimestamps); } /** @@ -51,22 +52,22 @@ public VideoSource createVideoSource(boolean isScreenCast, boolean alignTimestam * * @return a new {@link AudioSource} instance */ - public AudioSource createAudioSource(){ + 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 - ){ - return factory.createVideoTrack(id,videoSource); + ) { + return factory.createVideoTrack(id, videoSource); } /** @@ -74,14 +75,13 @@ public VideoTrack createVideoTrack( * * @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 - ){ - return factory.createAudioTrack(id,audioSource); + ) { + return factory.createAudioTrack(id, audioSource); } } \ No newline at end of file From 949b7a58f61c1f0b3f50135976b7bfeb90b7185d Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 17 Apr 2026 15:30:22 +0200 Subject: [PATCH 56/58] docs: fix policies param description for StreamApi.updateStreamRoom method --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 3 +-- 1 file changed, 1 insertion(+), 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 0a81e01c..87a0ccfc 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 @@ -147,8 +147,7 @@ public String createStreamRoom( * @param version current version of the updated StreamRoom * @param force force update (without checking version) * @param forceGenerateNewKey force to regenerate the encryption key for the StreamRoom - * @param policies additional container access policies, or {@code null} to keep - * current/defaults + * @param policies additional container access policies, or {@code null} to restore defaults */ public void updateStreamRoom( String streamRoomId, From 888b272730752f2f4e3446a7edc5f6223e87c1bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominika=20=C5=9Alu=C5=BCy=C5=84ska?= <101605588+Doominika@users.noreply.github.com> Date: Mon, 20 Apr 2026 13:02:14 +0200 Subject: [PATCH 57/58] refactor(privmx-endpoint-streams/android): change access modifiers to package for internal classes (#142) --- .../privmx_endpoint/modules/stream/JanusConnection.java | 4 ++-- .../privmx_endpoint/modules/stream/JanusPublisher.java | 9 +++------ .../privmx_endpoint/modules/stream/JanusSubscriber.java | 6 ++---- .../java/privmx_endpoint/modules/stream/PcObserver.java | 4 ++-- .../privmx_endpoint/modules/stream/RoomJanusSession.java | 4 ++-- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java index 697ebe7e..29eddb06 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusConnection.java @@ -15,7 +15,7 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; -public class JanusConnection { +class JanusConnection { protected final PeerConnection peerConnection; protected final PeerConnectionFactory peerConnectionFactory; protected PmxKeyStore keyStore; @@ -23,7 +23,7 @@ public class JanusConnection { private long sessionId = -1L; private final PcObserver pcObserver; - public JanusConnection( + JanusConnection( PeerConnectionFactory pcFactory, PmxKeyStore keyStore, ConnectionType connectionType, diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java index 2b8a353b..2bfca9c5 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusPublisher.java @@ -1,11 +1,9 @@ package com.simplito.java.privmx_endpoint.modules.stream; -import androidx.annotation.Nullable; - import com.simplito.java.privmx_endpoint.model.AudioTrackInfo; import com.simplito.java.privmx_endpoint.model.ConnectionType; -import com.simplito.java.privmx_endpoint.model.stream.SdpWithTypeModel; import com.simplito.java.privmx_endpoint.model.VideoTrackInfo; +import com.simplito.java.privmx_endpoint.model.stream.SdpWithTypeModel; import org.webrtc.MediaConstraints; import org.webrtc.PeerConnection; @@ -15,7 +13,6 @@ import org.webrtc.PmxKeyStore; import org.webrtc.RtpSender; import org.webrtc.SessionDescription; -import org.webrtc.VideoCapturer; import java.util.HashMap; import java.util.Map; @@ -25,13 +22,13 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; -public class JanusPublisher extends JanusConnection{ +class JanusPublisher extends JanusConnection { private final Map audioTracks = new HashMap<>(); private final Map videoTracks = new HashMap<>(); private final BiConsumer setNewOfferOnReconfigure; private final ExecutorService executorService = Executors.newSingleThreadExecutor(); - public JanusPublisher( + JanusPublisher( PeerConnectionFactory pcFactory, PmxKeyStore keyStore, TrackObserver observer, diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusSubscriber.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusSubscriber.java index 1a02683b..de712fd2 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusSubscriber.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/JanusSubscriber.java @@ -3,17 +3,15 @@ import com.simplito.java.privmx_endpoint.model.ConnectionType; import org.webrtc.MediaConstraints; -import org.webrtc.PeerConnection; import org.webrtc.PeerConnectionFactory; import org.webrtc.PmxKeyStore; import org.webrtc.SessionDescription; -import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; -public class JanusSubscriber extends JanusConnection { - public JanusSubscriber( +class JanusSubscriber extends JanusConnection { + JanusSubscriber( PeerConnectionFactory pcFactory, PmxKeyStore keyStore, TrackObserver observer, diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PcObserver.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PcObserver.java index 8cd5fc88..ba901782 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PcObserver.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/PcObserver.java @@ -22,7 +22,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -public class PcObserver implements PeerConnection.Observer { +class PcObserver implements PeerConnection.Observer { private final Map frameCryptorMap = new HashMap<>(); private final PmxKeyStore keyStore; private final PeerConnectionFactory peerConnectionFactory; @@ -31,7 +31,7 @@ public class PcObserver implements PeerConnection.Observer { private final Runnable onRenegotiationNeeded; private final Consumer onIceConnectionChange; - public PcObserver( + PcObserver( PeerConnectionFactory peerConnectionFactory, PmxKeyStore store, TrackObserver observer, diff --git a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java index a4df35ed..bc5b38d4 100644 --- a/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java +++ b/privmx-endpoint-streams/android/src/main/java/com/simplito/java/privmx_endpoint/modules/stream/RoomJanusSession.java @@ -24,7 +24,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; -public class RoomJanusSession { +class RoomJanusSession { @NonNull public final String roomID; @NonNull @@ -42,7 +42,7 @@ public class RoomJanusSession { private final BiConsumer setNewOfferOnReconfigure; //TODO: Add error listener for catch errors from webrtcInterface - public RoomJanusSession( + RoomJanusSession( @NonNull String roomId, @NonNull PeerConnectionFactory pcFactory, BiConsumer onTrickle, From de36ed8c32655f781b10de29d0c7963da5bddab6 Mon Sep 17 00:00:00 2001 From: Doominika Date: Fri, 24 Apr 2026 15:36:08 +0200 Subject: [PATCH 58/58] feat: update subscribeToRemoteStreams method description --- .../java/privmx_endpoint/modules/stream/StreamApi.java | 3 +-- 1 file changed, 1 insertion(+), 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 b9bde34f..5f95cca4 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 @@ -495,8 +495,7 @@ public void unpublishStream(@NonNull StreamHandle streamHandle) { } /** - * Subscribes to selected remote streams in a StreamRoom. - * Individual tracks within a stream can also be selected for subscription. + * Subscribes to selected remote streams or tracks in a StreamRoom. * {@link #joinStreamRoom(String)} must be called before this method. * * @param streamRoomId ID of the StreamRoom