Skip to content

Sync the latest develop changes into develop-v2 - #1854

Merged
PratimMallick merged 134 commits into
develop-v2from
chore/sync-develop-into-develop-v2
Sep 30, 2026
Merged

PratimMallick merged 134 commits into
develop-v2from
chore/sync-develop-into-develop-v2

Conversation

@PratimMallick

@PratimMallick PratimMallick commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Goal

Bring develop onto develop-v2 from the history #1790 already contained, and keep the v2 toolchain.

Linear: AND-1592

Implementation

  • Recorded develop 0233a926 (the tip inside squash-merged chore: merge develop into develop-v2 #1790) so later syncs do not restart at Chore(deps): Bump the stream-conventions group and update dependabot config #1692, then merged current origin/develop.
  • Kept Kotlin 2.2, AGP 8.10.1, StreamClient, design-token Compose, StreamAudioSwitch, and repackaged WebRTC 145.19.0-SNAPSHOT (io.getstream.webrtc).
  • Took develop behavior since that point: E2EE, music mode, ring-state polling, per-track mute, BLUETOOTH_CONNECT, SFU pin, FCM logout, and demo target SDK 36.
  • Demo passphrase UI stays on the v2 lobby and share screens (StreamDialog / StreamTextField). The share URL appends encryption_key when E2EE is on.
  • Demo depends on published stream-video-android-noise-cancellation 3.0.0, which implements createNative(long) for the repackaged namespace.

Testing

  • :stream-video-android-core:compileDebugKotlin
  • :stream-video-android-ui-compose:compileDebugKotlin
  • :demo-app:compileDevelopmentDebugKotlin
  • :stream-video-android-core:testDebugUnitTest
  • :stream-video-android-ui-compose:testDebugUnitTest
  • Spotless + apiCheck
  • CI on this PR

PratimMallick and others added 30 commits May 26, 2026 16:18
* upgrade to m145 webrtc and noise-cancellation

* Update to webrtc m145 and corresponding noiseCancellation lib

* Remove the snapshot repo resolution
…ng (#1699)

* feat(core): pick up SFU DegradationPreference and add WebRTC mapper

Regenerate SFU protos to pick up the new DegradationPreference enum and
its degradation_preference fields on PublishOption and VideoSender (plus
TrackInfo.self_sub_audio_video), and refresh the public API dump.

Add toRtcDegradationPreference() converting the SFU enum to
org.webrtc.RtpParameters.DegradationPreference, returning null for
UNSPECIFIED so callers can keep the current value. Includes unit tests
covering every enum variant.

Co-authored-by: Cursor <cursoragent@cursor.com>

* publisher changes for applying degradation preferences

* Remove duplicate handling of ChangePublishQualityEvent from callState. This event directly gets handled by RtcSession handleEvent method

* Added test for the two call sites where degradation Preference is getting set to test for the case where sfu sends the same degrdation preference which is already set in the transcevier sender param

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
* demo: Add logic to add custom user

* chore(demo-app): gate add user dialog to development flavor

Hide the new add-user button and popup outside the development flavor
so the production demo app doesn't expose internal user injection.

---------

Co-authored-by: Aleksandar Apostolov <apostolov.alexandar@gmail.com>
When toggling a single track (e.g. muting the mic while the camera stays
on, or turning the camera off while the mic stays on), RtcSession sent the
full declarative mute-state map for all track types. Re-asserting an
unchanged track as un-muted made the SFU re-emit a redundant
TrackPublishedEvent for that track. That event carries a potentially stale
published_tracks snapshot which re-enabled the just-disabled track, freezing
the local self-view on the last frame / showing the avatar while no frames
arrive.

Send only the mute state of the track that actually changed, matching the
web SDK. On SFU (re)connect/migration each enabled track is re-signalled
individually via listenToMediaChanges, so the full state is still restored.

Co-authored-by: Cursor <cursoragent@cursor.com>
…1705)

deleteDevice previously only purged the cached Device on API success. When
DELETE /devices returned 404 or the network failed, the stale token sat in
deviceTokenStorage. The next createDevice for a different user short-circuited
on token equality (when autoRegisterPushDevice=true) and returned Success
without calling POST /devices, silently leaving the new user without a device
row server-side and breaking incoming-call push.

Local cleanup now runs unconditionally and is guarded so a storage failure
doesn't mask the API outcome. CancellationException is re-thrown to preserve
structured concurrency.

Three regression tests added.

AND-1214
… device registration (#1703)

Guest user setup runs asynchronously: StreamVideoBuilder.build returns immediately
while setupGuestUser kicks off a background createGuest call to fetch the JWT.
Any authenticated request that fires in that window goes out with stream-auth-type
"anonymous" and no Authorization header, so the backend silently registers it
against the wrong identity. The customer-visible effect is push device
registration succeeding under !anon and incoming-call pushes never reaching
the guest user.

apiCall now awaits guestUserJob before invoking the request block, with a
self-job guard so createGuestUser — which also goes through apiCall — does not
await its own enclosing job and deadlock.

Adds two regression tests: one for the wait, one for the deadlock guard.

AND-1202

Co-authored-by: Rahul Kumar Lohra <tgunix@gmail.com>
* fix(core): adopt response.user from createGuest to keep guest identity in sync

The createGuest endpoint returns the server-resolved user (which may differ
from what was passed in — e.g. normalized id). The SDK previously kept only
the access token and left its in-memory user as the builder's input, so the
WS auth payload and the JWT user_id claim could disagree.

setupGuestUser now also updates client.user from response.user (matching the
JS SDK's connectUser(response.user, response.access_token) semantics).
userId becomes a computed property so every existing reader of client.userId
picks up the new identity automatically. CoordinatorSocketConnection.user
turns into a var so its onCreated() auth payload reads the latest user.

Adds three regression tests: userId reactivity, the var update inside the
socket connection's connect path, and a full setupGuestUser flow with the
api mocked to return a different user id than the input.

AND-1202

* fix(core): mirror adopted guest user into ClientState.user

ClientState._user was snapshotted from the integrator-supplied user at
construction, so observers of state.user kept the old id after
setupGuestUser adopted the server-issued one. Propagate the adopted
user via a new internal ClientState.setUser.
* refactor(core): introduce UserRepository as single source of truth for SDK user

Replaces the parallel `var user` fields in `StreamVideoClient` and
`CoordinatorSocketConnection` (and the `_user` mirror in `ClientState`) with
a single `UserRepository`:

- `UserRepository` — public, read-only access via `user` / `userFlow`.
- `WritableUserRepository` — internal sub-interface with `setUser`. Only
  `StreamVideoClient` holds a write reference, so identity updates go through
  one path.
- `StreamUserRepositoryImpl` — in-memory impl backed by a `MutableStateFlow`.

`StreamVideoBuilder` constructs one instance and shares it between the client
(writer) and the coordinator socket / `ClientState` (readers). `setupGuestUser`
writes the adopted user to the repo once; readers pick it up automatically
without any local copy to keep in sync. `connect()`/`reconnect()` no longer
mutate a snapshot of the user on the socket — they only forward the call to
`internalSocket`, and `onCreated()` reads from the repository when building
the WS auth payload.

* test(core): add direct unit tests for StreamUserRepositoryImpl

Covers seed-from-constructor, user/userFlow reads, setUser write, emission
to active StateFlow collectors, and replacement semantics. Lifts coverage
on the new repository from indirect-only (via StreamVideoClient tests) to
full coverage of the impl.

* Auto-connect and register push device for guest users (#1707)

* feat(core): auto-connect and register push device for guest users

StreamVideoBuilder previously only ran the auto-register-push and
auto-connect block for UserType.Authenticated. Guest users fell through,
forcing every Guest integrator to write the same boilerplate (manual
registerPushDevice + connect after build) — boilerplate the iOS and JS
SDKs don't require.

Widen the gate to include UserType.Guest. registerPushDevice() and
connectAsync() inside StreamVideoClient already await guestUserJob, so
both are safe to fire from the builder block before /video/guest
completes. Anonymous users still don't have an identity to register a
device against, so they remain excluded.

AND-1202

* fix(core): wait for guestUserJob before registering push device

StreamNotificationManager.createDevice() goes straight to api.createDevice()
without the apiCall {} wrapper, so the guestUserJob await guard added in #1703
doesn't cover it. registerPushDevice() now waits for guest setup itself before
delegating, so the push generator can't fire createDevice() before the
coordinator's auth headers flip from anonymous to JWT.
* fix: include internal audio switch to fix concurrency issue

* fix: include aar
The KDoc claimed `logOut` clears internal user state, removes push
notification devices, and clears call state. The actual implementation
only writes null to the local DeviceTokenStorage — no `DELETE /devices`,
no socket disconnect, no in-memory clear.

The name and the historical doc invite a customer to ship broken
user-switching: anyone reading the API surface would reasonably assume a
clean slate. Surfaced while diagnosing a customer integration where push
delivery silently failed across user transitions.

Annotate the interface declaration and the StreamVideoClient override
with `@Deprecated`. Update the KDoc to describe current behavior
accurately. Point `ReplaceWith` at `StreamVideo.removeClient()`, which
triggers a real `cleanup()` and uninstalls the singleton. Customers who
need to remove the server-side device row should call `deleteDevice()`
before `removeClient()`.

No binary signature change — `@Deprecated` is annotation-only, so the
public `.api` file is unchanged.

AND-1217

Co-authored-by: Rahul Kumar Lohra <tgunix@gmail.com>
…ce (#1711)

Assign the DataStore.updateData() result to a local in
DeviceTokenStorage.updateUserDevice so the suspend function is compiled
as a state machine that returns Unit. Without it the compiler
tail-call-optimizes the call and propagates the DevicePreferences result
up the updateDevice suspend chain, which can surface as
"DevicePreferences cannot be cast to kotlin.Unit" at the caller once R8
inlines the chain.

Co-authored-by: Cursor <cursoragent@cursor.com>
…unt (#1712)

Post-join, the SFU healthcheck delivers the authoritative participant count.
Coordinator session events (participant_joined/left, counts_updated, anything
carrying a CallSessionResponse) carry a smaller, stale snapshot that disagrees
at scale. The previous guard checked only !is RealtimeConnection.Joined — a
transient state immediately replaced by Connected — so every coordinator
session event re-wrote the count, producing wild swings during livestreams
(e.g. 25k -> 32k -> 42k -> 28k in seconds).

Broaden the guard to cover the entire in-call lifetime (Joined, Connected,
Reconnecting, Migrating). Pre-join, the session-derived path now uses
max(byRoleCount, participants.size) for monotonicity during fast joins,
matching the stream-video-js SDK.

AND-926
)

* fix(core): prevent "MediaSource has been disposed" crash on leave

Guards the lazy audio/video source and track creation/disposal in
MediaManagerImpl with a single reentrant lock, and adds a terminal
`released` flag so the mic/camera mute paths no-op after cleanup instead
of lazily resurrecting native objects.

The crash occurred when a call was left while the first AudioSwitch setup
was still in flight: cleanup() disposed the audio source on one thread
while the deferred mic-disable callback recreated the audio track from
that disposed source on stream-audio-thread.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(core): stub runOnAudioTrackIfAvailable in MicrophoneManager tests

enable()/disable() now route the track toggle through
mediaManager.runOnAudioTrackIfAvailable instead of the audioTrack getter,
so the test helper stubs the new helper to invoke its block with the mock
track. Fixes the 5 failing MicrophoneManagerTest verifications.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
…elease of 1.26.0 (#1719)

* Revert " Include internal audio switch to fix concurrency issue (#1710)"

This reverts commit 9a8da36.

* chore(release): reset version to 1.25.0 to allow re-release of 1.26.0

The 1.26.0 Maven publish failed due to the local AAR introduced in #1710.
Resetting gradle.properties to 1.25.0 so the release workflow can re-tag
and publish 1.26.0 cleanly from the reverted develop state.
The "setting up call" foreground-service notification was built without a
small icon for any non-incoming trigger (outgoing/ongoing/livestream). The
non-deprecated getSettingUpCallNotification(trigger, callId) delegated its
else branch to the deprecated no-arg overload, which never called
setSmallIcon. A small icon is mandatory for foreground-service
notifications, so Android 13+ rejected it with
CannotPostForegroundServiceNotificationException ("Bad notification for
startForeground") when the call foreground service started.

Extract a non-deprecated buildSettingUpCallNotification() helper that always
sets setSmallIcon(R.drawable.stream_video_ic_call), and have both the
non-deprecated else branch and the deprecated overload delegate to it. Add a
regression test covering the non-incoming (outgoing) trigger path.

Co-authored-by: Cursor <cursoragent@cursor.com>
* update open api generated models

* update code gen script
* update open api generated models

* update code gen script

* fix: self cancelling coroutine code

* fix: fix self cancelling coroutine code
…e call (3/4) (#1715)

* update open api generated models

* update code gen script

* fix: self cancelling coroutine code

* internal: add call leave reason

* internal: update Call Leave Reason LLC

* fix: fix unit tests

* 📝 CodeRabbit Chat: Implement requested code changes

* Update stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/CallLeaveReason.kt

* chore: send correct leave reason from StreamCallActivity.kt

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Aleksandar Apostolov <apostolov.alexandar@gmail.com>
aleksandar-apostolov and others added 10 commits September 22, 2026 15:21
…1845)

defaultRingWindowMs only applies before a call's ring settings arrive,
which is a state an integrator can neither observe nor reason about, so
there is no way to choose a value for it deliberately. It is now an
internal constant, leaving the public config at the two timings the JS
client also exposes.

Trimmed before the first release that carries it, so nothing depends on
the wider surface.
…ypes (#1837)

CallParticipantsInfoMenu lost its only call site in June 2023, when the
participant invitation flow was removed from CallContainer and
CallViewModel. Nothing in the SDK or the demo app has opened it since,
and the debug preview is its only remaining reference. The same applies
to the public CallParticipantInfoMode interface and to the
ParticipantInfoAction hierarchy, which no UI emits anymore.

Mark all three public declarations as deprecated with a warning so
integrators get one release of notice before v2 removes them. The
annotations do not change the API dump. The internal mode objects and the
files themselves suppress the deprecation warnings they now trigger on
their own supertypes.

Only the files that v2 deletes are touched, so the later develop to
develop-v2 merge resolves each of them by keeping the deletion.

AND-1527

Co-authored-by: Aleksandar Apostolov <apostolov.alexandar@gmail.com>
Bumps the stream-conventions group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [GetStream/stream-build-conventions-android/.github/workflows/pr-clean-stale.yaml](https://github.com/getstream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [GetStream/stream-build-conventions-android/.github/workflows/pr-quality.yml](https://github.com/getstream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [GetStream/stream-build-conventions-android/.github/workflows/release.yml](https://github.com/getstream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [GetStream/stream-build-conventions-android/.github/workflows/sdk-size-checks.yml](https://github.com/getstream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [GetStream/stream-build-conventions-android/.github/workflows/sdk-size-updates.yml](https://github.com/getstream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |


Updates `GetStream/stream-build-conventions-android/.github/workflows/pr-clean-stale.yaml` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/getstream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `GetStream/stream-build-conventions-android/.github/workflows/pr-quality.yml` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/getstream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `GetStream/stream-build-conventions-android/.github/workflows/release.yml` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/getstream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `GetStream/stream-build-conventions-android/.github/workflows/sdk-size-checks.yml` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/getstream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `GetStream/stream-build-conventions-android/.github/workflows/sdk-size-updates.yml` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/getstream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@8b36d37...9ea4d20)

---
updated-dependencies:
- dependency-name: GetStream/stream-build-conventions-android/.github/workflows/pr-clean-stale.yaml
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: GetStream/stream-build-conventions-android/.github/workflows/pr-quality.yml
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: GetStream/stream-build-conventions-android/.github/workflows/release.yml
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: GetStream/stream-build-conventions-android/.github/workflows/sdk-size-checks.yml
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: GetStream/stream-build-conventions-android/.github/workflows/sdk-size-updates.yml
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Keep empty collection defaults in generated models

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Rename the generator opt to legacy-defaults

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* Bump target sdk to 36

* chore: update agp to 8.9.1 and gradle to 8.11 to support targetSdk 36

* chore: fix paparazzi

* chore: scope API 36 to demo-app only

Keep the SDK modules on compileSdk/targetSdk 35 and raise only demo-app,
which is the artifact published to the Play Store. This also removes the
need for the ui-compose Paparazzi compileSdk override.

---------

Co-authored-by: Aleksandar Apostolov <apostolov.alexandar@gmail.com>
Co-authored-by: Aleksandar Apostolov <apostolov.alexandar@gmail.com>
Bumps the stream-conventions group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [io.getstream.project](https://github.com/GetStream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [io.getstream.android.application](https://github.com/GetStream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [io.getstream.android.library](https://github.com/GetStream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [io.getstream.android.test](https://github.com/GetStream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [io.getstream.java.library](https://github.com/GetStream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |
| [io.getstream.java.platform](https://github.com/GetStream/stream-build-conventions-android) | `0.14.0` | `0.14.1` |


Updates `io.getstream.project` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.android.application` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.android.library` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.android.test` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.java.library` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.java.platform` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.android.application` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.android.library` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.android.test` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.java.library` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

Updates `io.getstream.java.platform` from 0.14.0 to 0.14.1
- [Release notes](https://github.com/GetStream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@v0.14.0...v0.14.1)

---
updated-dependencies:
- dependency-name: io.getstream.project
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.android.application
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.android.library
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.android.test
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.java.library
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.java.platform
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.android.application
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.android.library
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.android.test
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.java.library
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
- dependency-name: io.getstream.java.platform
  dependency-version: 0.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: stream-conventions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…workflows/android-ci.yml (#1853)

Bumps the stream-conventions group with 1 update: [GetStream/stream-build-conventions-android/.github/workflows/android-ci.yml](https://github.com/getstream/stream-build-conventions-android).


Updates `GetStream/stream-build-conventions-android/.github/workflows/android-ci.yml` from 68c8917934383ebba59a263c1050531033fd9f75 to 9ea4d20d64f99a1a05dd8c8f56504e5e2aa39ed7
- [Release notes](https://github.com/getstream/stream-build-conventions-android/releases)
- [Commits](GetStream/stream-build-conventions-android@68c8917...9ea4d20)

---
updated-dependencies:
- dependency-name: GetStream/stream-build-conventions-android/.github/workflows/android-ci.yml
  dependency-version: 9ea4d20d64f99a1a05dd8c8f56504e5e2aa39ed7
  dependency-type: direct:production
  dependency-group: stream-conventions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@PratimMallick PratimMallick added the pr:internal Internal or infra-only changes label Sep 28, 2026
@PratimMallick
PratimMallick marked this pull request as ready for review September 29, 2026 08:29
@PratimMallick
PratimMallick requested a review from a team as a code owner September 29, 2026 08:29
rahul-lohra and others added 3 commits September 29, 2026 10:41
* use getstream audio-switch

* use getstream audioswitch

* use getstream audioswitch 1.0.0
@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

PR checklist ✅

All required conditions are satisfied:

  • Title length is OK (or ignored by label).
  • At least one pr: label exists.
  • Sections ### Goal, ### Implementation, and ### Testing are filled, or the PR is bot-authored.
  • An issue is linked (Linear ticket or GitHub issue), or the PR is bot-authored.

🎉 Great job! This PR is ready for review.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

SDK Size Comparison 📏

SDK Before After Difference Status
stream-video-android-core 12.38 MB 12.68 MB 0.30 MB 🟡
stream-video-android-ui-xml 5.66 MB 5.72 MB 0.06 MB 🟢
stream-video-android-ui-compose 6.19 MB 3.16 MB -3.03 MB 🚀

PratimMallick and others added 2 commits September 29, 2026 17:50
#1790 was squash-merged, so Git still treats #1692 as the merge base and
re-resolves the whole v1/v2 divergence. This commit adds that develop tip as
a parent without changing the tree.
Record the develop tip already contained by #1790, then take the commits
since that point. Keep the v2 toolchain, StreamClient, design tokens, and
the repackaged WebRTC namespace.

Co-authored-by: Cursor <cursoragent@cursor.com>
@PratimMallick
PratimMallick force-pushed the chore/sync-develop-into-develop-v2 branch from 6e424c7 to d30c613 Compare September 29, 2026 12:34

@andremion andremion left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for redoing the merge. One thing still blocks it (noise cancellation, inline), and one note for the merge itself.

This repo only allows squash merge. If this PR is squashed, develop-v2 loses the develop history again, and the next sync needs another recording commit (at 9adb790 this time). Could we merge this one with a merge commit instead? We could allow it just for this PR, or fast-forward develop-v2 to the PR head once checks pass. Then the next git merge origin/develop only sees new commits.

Also, the description still says WebRTC 137 and E2EE left out.

Comment thread gradle/libs.versions.toml Outdated
#1811 requests BLUETOOTH_CONNECT for calls, so the system dialog covers
the call screen in E2E. Restores the grant #1591 removed; the file now
matches develop.
@andremion andremion changed the title Sync develop into develop-v2 Sync the latest develop changes into develop-v2 Sep 29, 2026
The published 3.0.0 build implements the repackaged WebRTC 145 createNative(long) API, so default calls no longer hit AbstractMethodError.

Co-authored-by: Cursor <cursoragent@cursor.com>
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
64.5% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@andremion andremion left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

@PratimMallick
PratimMallick merged commit 35d055c into develop-v2 Sep 30, 2026
19 of 22 checks passed
@PratimMallick
PratimMallick deleted the chore/sync-develop-into-develop-v2 branch September 30, 2026 12:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr:internal Internal or infra-only changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants