Skip to content

Commit e132d5c

Browse files
authored
Merge pull request #583 from GetStream/develop
Develop commits against the main branch
2 parents 255b5e1 + f67950f commit e132d5c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+25925
-3633
lines changed

README.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,37 +66,44 @@ Video roadmap and changelog is available [here](https://github.com/GetStream/pro
6666

6767
### 0.2.0 milestone
6868

69-
- [ ] bug: screensharing is broken. android doesn’t receive/render (not sure) the screenshare. video shows up as the gray avatar (Thierry)
70-
- [ ] bug: screenshare is not removed after it stops when a participant leaves the call (Thierry) (probably just dont update the state when the participant leaves)
71-
- [ ] Livestream tutorial
7269
- [ ] Deeplink support for video call demo & dogfooding app (skip auth for the video demo, keep it for dogfooding)
7370
- [ ] Chat Integration
7471
- [ ] XML version of VideoRenderer
7572
- [ ] Call Analytics stateflow
7673
- [ ] Automatically handle pagination and sorting on > 6 participants
74+
- [ ] Make it easy to test ringing support
75+
- [ ] publish app on play store
76+
- [ ] report version number of SDK on all API calls
77+
- [ ] bug: screensharing is broken. android doesn’t receive/render (not sure) the screenshare. video shows up as the gray avatar
7778
- [X] Reactions
79+
- [X] bug: screenshare is not removed after it stops when a participant leaves the call (Thierry) (probably just dont update the state when the participant leaves)
7880

7981
### 0.3.0 milestone
8082

81-
- [ ] H264 workaround on S23 (see https://github.com/livekit/client-sdk-android/blob/main/livekit-android-sdk/src/main/java/io/livekit/android/webrtc/SimulcastVideoEncoderFactoryWrapper.kt#L34 and
83+
- [ ] Setting to default to speakerphone or earpiece
84+
- [ ] Button to switch speakerphone/earpiece
85+
- [ ] Livestream tutorial (depends on RTMP support)
86+
- [ ] H264 workaround on Samsung 23 (see https://github.com/livekit/client-sdk-android/blob/main/livekit-android-sdk/src/main/java/io/livekit/android/webrtc/SimulcastVideoEncoderFactoryWrapper.kt#L34 and
8287
- https://github.com/react-native-webrtc/react-native-webrtc/issues/983#issuecomment-975624906)
8388
- [ ] Bluetooth reliability
8489
- [ ] Dynascale 2.0 (codecs, f resolution switches, resolution webrtc handling)
8590
- [ ] Test coverage
8691
- [ ] Testing on more devices
8792
- [ ] Speaking while muted stateflow
88-
- [ ] Cleanup the retry behaviour in the RtcSession (see the TODO)
89-
- [ ] Android SDK development.md cleanup
93+
- [X] Cleanup the retry behaviour in the RtcSession
94+
- [ ] Android SDK development.md cleanup (Daniel)
9095
- [X] SDK development guide for all teams
9196

9297
### 0.4.0 milestone
9398

99+
- [ ] Pagination on query members & query channels
94100
- [ ] Analytics integration
95101
- [ ] Screensharing from mobile
96102
- [ ] Tap to focus
97103
- [ ] Camera controls
98104
- [ ] Audio & Video filters
99105
- [ ] Picture of the video stream at highest resolution
106+
- [ ] Review foreground service vs backend for some things like screensharing etc
100107

101108
## 💼 We are hiring!
102109

development.md

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Typically for development you want to fail fast and loud. For production you wan
123123
### RTC offer/answer cycle
124124

125125
* sessionId is created locally as a random UUID
126-
* create the peer connections
126+
* create two peer connections (publisher and subscriber)
127127
* capture audio and video (if we're not doing so already, in many apps it should already be on for the preview screen)
128128
* execute the join request
129129
* add the audio/video tracks which triggers onNegotiationNeeded
@@ -207,18 +207,6 @@ With the second approach everything is easy to understand and customize.
207207
* Clicking accept or reject fires triggers the accept/reject API endpoints
208208
* Call members have an accepted_at, rejected_at field
209209

210-
Ringing state on a call has the following options
211-
212-
```kotlin
213-
sealed class RingingState() {
214-
object Incoming : RingingState()
215-
object Outgoing : RingingState()
216-
object Active : RingingState()
217-
object RejectedByAll : RingingState()
218-
object TimeoutNoAnswer : RingingState()
219-
}
220-
```
221-
222210
### Media Manager
223211

224212
The media manager should support capturing local video with or without joining a call

docusaurus/docs/Android/02-tutorials/02-audio-room.mdx

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ class MainActivity : ComponentActivity() {
9797
"description" to "Talk about how easy compose makes it to reuse and combine UI"
9898
)
9999
))
100-
result.getOrThrow()
100+
result.onError {
101+
Toast.makeText(this, it.message, Toast.LENGTH_SHORT).show()
102+
}
101103
}
102104

103105
setContent {
@@ -199,13 +201,14 @@ Now when you run the sample app it will connect successfully and you will see a
199201
In this next step we're going to:
200202

201203
1. Request Android Runtime permissions (audio)
204+
2. Mute and Unmute microphone toggle button
202205
2. Create a list of participants
203206
3. An indicator for who's speaking
204207

205208
#### A. Requesting Android Runtime Permissions
206209

207210
To capture the microphone output we need to request [Android runtime permissions](https://source.android.com/docs/core/permissions/runtime_perms).
208-
In `MainActivity.kt` just below setContent add the line `LaunchMicrophonePermissions(call = call)`
211+
In `MainActivity.kt` just below `setContent` add the line `LaunchMicrophonePermissions(call = call)`
209212

210213
```kotlin
211214
setContent {
@@ -217,7 +220,23 @@ setContent {
217220
The launch call permissions will request permissions when you open the call.
218221
Review the [permissions docs](../05-ui-cookbook/08-permissions-request.mdx) to learn more about how you can easily request permissions.
219222

220-
#### B. Create a list of participants
223+
#### B. Add a toggle button to mute/unmute microphone
224+
225+
Next, let's create a toggle button to mute and unmute a microphone.
226+
227+
You can simply connect the state of a microphone toggle button with the call's device manager with using `ToggleMicrophoneAction` and `call.microphone`:
228+
229+
```kotlin
230+
val isMicrophoneEnabled by call.microphone.isEnabled.collectAsState()
231+
232+
ToggleMicrophoneAction(
233+
modifier = Modifier.size(52.dp),
234+
isMicrophoneEnabled = isMicrophoneEnabled,
235+
onCallAction = { call.microphone.setEnabled(it.isEnabled) }
236+
)
237+
```
238+
239+
#### C. Create a list of participants
221240

222241
Let's create a component for the active speaker and the list of participants.
223242

@@ -230,9 +249,9 @@ fun ParticipantAvatar(participant : ParticipantState) {
230249
}
231250
```
232251

233-
#### B. An indicator for who's speaking
252+
#### D. An indicator for who's speaking
234253

235-
We'll use the basic `ParticipantAvatar` to build an audio room
254+
We'll use the basic `ParticipantAvatar` to build an audio room:
236255

237256
```kotlin
238257
setContent {
@@ -278,6 +297,13 @@ setContent {
278297
}
279298
}
280299

300+
val isMicrophoneEnabled by call.microphone.isEnabled.collectAsState()
301+
ToggleMicrophoneAction(
302+
modifier = Modifier.size(52.dp),
303+
isMicrophoneEnabled = isMicrophoneEnabled,
304+
onCallAction = { call.microphone.setEnabled(it.isEnabled) }
305+
)
306+
281307
Button(
282308
onClick = {
283309
lifecycleScope.launch {

docusaurus/docs/Android/03-guides/05-call-types.mdx

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ title: Call Types
33
description: How Call Types control features and permissions
44
---
55

6+
import CallTypesPage from "../../../shared/video/_call-types.md";
7+
68
### Call Types
79

810
When you create a call like this
11+
912
```kotlin
1013
val call = client.call("default", "123")
1114
```
@@ -14,18 +17,4 @@ You create a call of the type `default` with id `123`.
1417

1518
There are 4 built-in call types and you can also create your own.
1619

17-
### Default call types
18-
19-
* `development`: Everything is allowed, no permission checks. Great for development, bad for production usage.
20-
* `default`: Good defaults for 1 on 1 or group calls. This will work for most video calling apps.
21-
* `audio_room`: Default for audio rooms. Calls start out in backstage mode by default and you can go live when you want.
22-
* `livestream`: Default for livestreams.
23-
24-
### Features & Settings
25-
26-
The following features and settings are controlled by the call types
27-
28-
TODO
29-
30-
31-
https://www.notion.so/stream-wiki/Call-Types-9741753a0d77428fb4ff51dc1328314e
20+
<CallTypesPage />

dogfooding/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ android {
3939
minSdk = Configuration.minSdk
4040
targetSdk = Configuration.targetSdk
4141
versionCode = 1
42-
versionName = "1.0"
42+
versionName = "1.0.0"
4343
vectorDrawables {
4444
useSupportLibrary = true
4545
}

0 commit comments

Comments
 (0)