Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[i74] support async voice messages in Android XML #4828

Merged
merged 145 commits into from
Jul 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
145 commits
Select commit Hold shift + click to select a range
80031d3
Sketch of the UI
leandroBorgesFerreira Mar 20, 2023
876cf5f
Fixing hardcoded string
leandroBorgesFerreira Mar 20, 2023
9522ad2
Showing basic audio recording view
leandroBorgesFerreira Mar 20, 2023
aaf71cc
Parsing duration
leandroBorgesFerreira Mar 20, 2023
5adf796
Small fixes in the UI
leandroBorgesFerreira Mar 20, 2023
57312bb
Adding sketch of player
leandroBorgesFerreira Mar 20, 2023
3dc090c
Changing speed button visibility
leandroBorgesFerreira Mar 20, 2023
424caf7
Extracting code to StreamAudioPlayer
leandroBorgesFerreira Mar 21, 2023
0881364
Creating interface and adding RecordsPlayer to ChatClient. Progress a…
leandroBorgesFerreira Mar 21, 2023
74b6d93
Changing speed sketch
leandroBorgesFerreira Mar 23, 2023
d224302
Adding speed logic
leandroBorgesFerreira Mar 24, 2023
92c6eca
Updating only one audio message at a time
leandroBorgesFerreira Mar 24, 2023
c50df22
Changing audio when play button is clicked
leandroBorgesFerreira Mar 24, 2023
f87012e
Keeping speed when changing audios
leandroBorgesFerreira Mar 24, 2023
d391cc0
License
leandroBorgesFerreira Mar 24, 2023
8158659
API update
leandroBorgesFerreira Mar 26, 2023
9df619c
Fixing unit tests
leandroBorgesFerreira Mar 26, 2023
a09f5b7
Fixing pause state
leandroBorgesFerreira Mar 27, 2023
ce3a22c
Adding seek to music position
leandroBorgesFerreira Mar 27, 2023
2d1c5a7
Fixing changing speed after seeking
leandroBorgesFerreira Mar 27, 2023
f35f639
Adding AudioWavesSeekBar
leandroBorgesFerreira Mar 27, 2023
9fee3b6
Intercepting scroll
leandroBorgesFerreira Mar 27, 2023
caede7c
Adding seekTo
leandroBorgesFerreira Mar 27, 2023
2161cc9
Adding border to tracker
leandroBorgesFerreira Mar 27, 2023
fdd0f41
Adding a bar height ratio
leandroBorgesFerreira Mar 27, 2023
b4cecab
Making seekTo per audio
leandroBorgesFerreira Mar 27, 2023
7080d48
Adding licenses and API
leandroBorgesFerreira Mar 27, 2023
4ba274f
Drawing the background of audio playback
leandroBorgesFerreira Mar 28, 2023
9574b41
Changing StreamAudioPlayerName
leandroBorgesFerreira Mar 28, 2023
d445a03
Removing duplicated code
leandroBorgesFerreira Mar 28, 2023
d4f5295
Unbind audios
leandroBorgesFerreira Mar 28, 2023
ec1f193
Static analyses
leandroBorgesFerreira Mar 28, 2023
f7ef700
I hate detekt
leandroBorgesFerreira Mar 28, 2023
ffe2f56
Api Dump
leandroBorgesFerreira Mar 28, 2023
dc35bb8
Color fixes
leandroBorgesFerreira Mar 28, 2023
2703ab1
Adding elevation in speedButton
leandroBorgesFerreira Mar 28, 2023
9489f56
removing imports
leandroBorgesFerreira Mar 28, 2023
61e5ef9
Fixing icon
leandroBorgesFerreira Mar 28, 2023
bac8ed1
Adding documentation
leandroBorgesFerreira Mar 28, 2023
7bb976d
Using dispose
leandroBorgesFerreira Mar 28, 2023
fc87612
Documentation for AudioPlayer
leandroBorgesFerreira Mar 28, 2023
944916d
DurationParser kdocs
leandroBorgesFerreira Mar 28, 2023
097a71b
Documentation
leandroBorgesFerreira Mar 28, 2023
fc50669
Making AudioWavesSeekBar internal
leandroBorgesFerreira Mar 28, 2023
f75b71d
Fixing borders and colors
leandroBorgesFerreira Mar 28, 2023
c96db47
String translation
leandroBorgesFerreira Mar 28, 2023
abd2e06
Adding reply for audio message
leandroBorgesFerreira Mar 28, 2023
6091c21
Static analyses and api dump
leandroBorgesFerreira Mar 28, 2023
c0a71a0
Paying musics sequentially, but with wrong order
leandroBorgesFerreira Mar 29, 2023
3596aa8
Adding autoplay for audio in the same message
leandroBorgesFerreira Mar 29, 2023
945b77e
Allow multiple listeners per hash
leandroBorgesFerreira Mar 30, 2023
c1b429e
sketch of AudioRecordAttachmentPreviewFactory
leandroBorgesFerreira Mar 30, 2023
418a2d5
Adding AudioRecordAttachmentPreviewFactory to the API
leandroBorgesFerreira Mar 30, 2023
0199f8f
Static analyses fixes
leandroBorgesFerreira Mar 30, 2023
b02e584
Adding borders and remove button to audio preview
leandroBorgesFerreira Mar 30, 2023
4eea262
Playing audio inside MessageComposer
leandroBorgesFerreira Mar 31, 2023
0247b98
Adding dimen instead of hardcoded width
leandroBorgesFerreira Mar 31, 2023
cb0c1be
Adding unbing to api
leandroBorgesFerreira Mar 31, 2023
782f739
Adding place holder for audio recording
leandroBorgesFerreira Apr 1, 2023
feb8486
Showing audio player without behaviour
leandroBorgesFerreira Apr 2, 2023
87f272b
Playing audio without UI feedback
leandroBorgesFerreira Apr 2, 2023
41f1e8e
Adding feedback to the view
leandroBorgesFerreira Apr 2, 2023
d4db760
Allowing multiple audios
leandroBorgesFerreira Apr 2, 2023
35fbbb7
Playing all audio tracks of the same message
leandroBorgesFerreira Apr 2, 2023
dd6b56f
fix api dump
May 23, 2023
0e47bbe
- [4654] Implement a media recorder interface designed to abstract an…
MarinTolic Feb 2, 2023
f4aa6a2
- [4654] Create an implementation of `StreamMediaRecorder` in the sha…
MarinTolic Feb 3, 2023
820d3c4
- [4654] Generate detekt baseline
MarinTolic Feb 3, 2023
349d135
- [4654] Further evolve `StreamMediaRecorder` and create a preliminar…
MarinTolic Feb 6, 2023
83f210b
- [4654] Further evolve `StreamMediaRecorder` and create a preliminar…
MarinTolic Feb 6, 2023
6179f03
- [4654] Generate detekt baseline
MarinTolic Feb 6, 2023
a45e451
- [4654] Implement press to record
MarinTolic Feb 7, 2023
56add50
- [4654] Generate detekt baseline
MarinTolic Feb 7, 2023
f9d0c8b
- [4654] Add logging capabilities
MarinTolic Feb 7, 2023
ee84846
- [4654] Promote `StreamMediaRecorderStateHolder` into `StreamMediaRe…
MarinTolic Feb 7, 2023
f8910a7
- [4654] Promote `StreamMediaRecorderStateHolder` into `StreamMediaRe…
MarinTolic Feb 7, 2023
8702d16
- [4654] Generate detekt baseline
MarinTolic Feb 7, 2023
048f763
- [4654] Create a canvas base audio wave form visualizer called `Runn…
MarinTolic Feb 9, 2023
4dcd3dc
- [4654] Generate detekt baseline
MarinTolic Feb 9, 2023
16fca5f
- [4654] Remove `StreamMediaRecorder` from `ChatTheme` since it shoul…
MarinTolic Feb 10, 2023
22e54a5
- [4654] Implement the ability to track currently active recording du…
MarinTolic Feb 10, 2023
f59a299
- [4654] Eliminate a bug which wouldn't update permissions after they…
MarinTolic Feb 28, 2023
3d59a9d
- [4654] Implement `StreamMediaRecorder` hygiene in `MessagesActivity`
MarinTolic Feb 28, 2023
8829197
- [4654] Log the exception thrown in `pollMaxAmplitude()`
MarinTolic Feb 28, 2023
35167b1
Fix CheckStyle
JcMinarro May 5, 2023
648fb42
[4654] fix api dump
May 23, 2023
4794cfd
Remove `runBlocking` from our `FiniteStateMachine` implementation
JcMinarro May 22, 2023
b25f234
[i74] add waveform data extractor
Jun 5, 2023
bff9b48
[i74] add missing resources
Jun 5, 2023
946d242
[i74] align with iOS sdk
Jun 5, 2023
97a8b90
[i74] integrate recording UI
Jun 6, 2023
e9400d2
[i74] adapt UI to the new constraints
Jun 6, 2023
f7bc364
[i74] fix UI artefacts
Jun 7, 2023
0cd64a1
[i74] apply appropriate icons
Jun 7, 2023
57be0f4
[i74] pass container & mic btn
Jun 8, 2023
5b3defc
[i74] make recording btn adaptable to size
Jun 9, 2023
c6acbd9
[i74] ui chore
Jun 9, 2023
54fe9e2
[i74] check permissions & integrate audio recording
Jun 9, 2023
87141c4
[i74] implement waveform_view for recording
Jun 13, 2023
aad8724
[i74] implement proper recording state updates
Jun 15, 2023
b08def5
[i74] code clean up
Jun 15, 2023
c886196
[i74] change StreamMediaRecorder API
Jun 15, 2023
1a8f5b5
[i74] implement on-the-fly donwsampling
Jun 16, 2023
aae01bf
[i74] attach recording & send message
Jun 16, 2023
d86aef7
[i74] play recorded file
Jun 19, 2023
74e2c51
[i74] fix resume functionality
Jun 19, 2023
8539547
[i74] add slider support
Jun 20, 2023
15a4d30
[i74] support slider dragging
Jun 20, 2023
f5f95f8
[i74] fix slider jump after seekTo process
Jun 21, 2023
26d5f51
[i74] replace calculated duration with parsed one
Jun 21, 2023
087ebef
[i74] fix merge conflicts
Jul 4, 2023
4623320
[i74] show "hold to record" popup
Jul 4, 2023
07bbf10
[i74] vibrate on hold
Jul 4, 2023
3725bc2
[i74] draw preview recordings, fix duration
Jul 4, 2023
d83f00f
[i74] fix ui artefacts
Jul 5, 2023
8bee866
[i74] support recording file attachment
Jul 7, 2023
6484b68
[i74] spotless changes
Jul 7, 2023
12a2fba
[i74] api dump
Jul 7, 2023
57148a0
[i74] api dump
Jul 7, 2023
f6bada6
[i74] detekt baseline
Jul 7, 2023
99b69db
[i74] compile fixes
Jul 7, 2023
f18e81f
[i74] make guides compilable
Jul 7, 2023
07e894d
[i74] fix recording being missed from attachment
Jul 7, 2023
d1e30bf
[i74] fix guides & UT
Jul 10, 2023
44c0ec5
[i74] add ui style & validation of blocked upload formats
Jul 10, 2023
4da66fe
[i74] enable audio recording in sample app
Jul 10, 2023
ce1273d
[i74] fix night styling
Jul 10, 2023
88a0828
[i74] disable audio recording in compose
Jul 10, 2023
5a7f957
[i74] mark player as an internal api
Jul 10, 2023
b99a5e3
[i74] added changelog
Jul 11, 2023
1f4f3b0
[i74] rename AudioRecordsGroupView
Jul 11, 2023
aad9e54
[i74] spotless, detekt, api-dump
Jul 11, 2023
4ff297b
[i74] fix unit tests
Jul 11, 2023
4e780e4
Move Recording class to proper package
JcMinarro Jul 11, 2023
ff000e7
[i74] fix jumping layout size
Jul 11, 2023
967055e
[i74] keep showing lock icon after screen rotation
Jul 11, 2023
70d5eee
[i74] add ability to select between 1 or 2 buttons
Jul 11, 2023
07d3f2c
[i74] add kdocs
Jul 11, 2023
338330f
[i74] delete dead code
Jul 11, 2023
ba4b685
[i74] fix UT & add missing style attrs
Jul 11, 2023
252371d
[i74] add audio recording guide
Jul 11, 2023
5f0ffe5
Ignore docusaurus shared folder
JcMinarro Jul 12, 2023
768e120
Remove translations
JcMinarro Jul 12, 2023
79e6ce7
Fix javadoc
JcMinarro Jul 12, 2023
269bccf
Fix tests
JcMinarro Jul 12, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ lint/tmp/
docusaurus/docs/Android/Dokka
# Ignore Algolia credentials
docusaurus/.env
docusaurus/shared

.sign/keystore.properties
.sign/release.keystore
38 changes: 38 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
- Added `AttachmentsVerifier` to verify if the uploaded attachments are valid. [#4852](https://github.com/GetStream/stream-chat-android/pull/4852)
- Added `ChannelClient.fetchCurrentUser` to fetch current user from backend. [#4860](https://github.com/GetStream/stream-chat-android/pull/4860)
- Added `FetchCurrentUserListener` interface used to perform actions as side effects when the `ChatCliet.fetchCurrentUser()` method is used to fetch the current user from the backend. [#4860](https://github.com/GetStream/stream-chat-android/pull/4860)
- Added `AudioPlayer` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)

### ⚠️ Changed
- Changed `newMessageIntent` lambda's signature of `NotificationHandlerFactory.createNotificationHandler()`. It receives the whole `Message`/`Channel` entity to help you create a more complex navigation intent.
Expand Down Expand Up @@ -79,6 +80,8 @@

### ✅ Added
- Added `showDateSeparatorInEmptyThread: Boolean` to `MessageListController`. It is used to regulate whether date separators appear in empty threads. [#4742](https://github.com/GetStream/stream-chat-android/pull/4742)
- Added `StreamMediaRecorder` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- Added `AudioRecordingController` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)

### ⚠️ Changed

Expand All @@ -101,13 +104,45 @@
- Added Typing Users list to `ChannelItem`. [#4868](https://github.com/GetStream/stream-chat-android/pull/4868)
- Added typing indicator on `ChannelLitsView`. [#4868](https://github.com/GetStream/stream-chat-android/pull/4868)
- Added options visibility customization for each channel in a list. [#4870](https://github.com/GetStream/stream-chat-android/pull/4870)
- Added `AudioRecordAttachmentPreviewFactory` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- Added `DefaultMessageComposerOverlappingContent` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- Added new custom views (`AudioRecordPlayerView`, `AudioWavesSeekBar`, `WaveformView`) as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- Added `AudioRecordingAttachmentsGroupView` in addition to `MediaAttachmentsGroupView` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)

### ⚠️ Changed
- Replaced the method parameter `replyMessageId: String` with `replyTo: Message` inside `ReplyMessageClickListener.onReplyClick()`. The new parameter now contains the complete message to which the reply was made. [#4639](https://github.com/GetStream/stream-chat-android/pull/4639)
- Added the parameter `parentId: String?` to `AttachmentGalleryResultItem`. It is used to indicate when a message is belongs to a thread. Same has been added to the extension function `Attachment.toAttachmentGalleryResultItem()`. [#4639](https://github.com/GetStream/stream-chat-android/pull/4639)
- Added the parameter `parentMessageId: String?` to the class `MessageListViewModel.ShowMessage`. If the message you want to scroll to is a thread message, pass in its parent message ID, otherwise you can pass in `null`. [#4639](https://github.com/GetStream/stream-chat-android/pull/4639)
- 🚨 Breaking change: Removed `ChatUI.showThreadSeparatorInEmptyThread`. It has been replaced by `MessageListController.showDateSeparatorInEmptyThread`. If you are using our `ViewModel` factory, `MessageListViewModelFactory.showDateSeparatorInEmptyThread` will pass the parameter through to the `MessageListController` contained by `MessageListViewMode`. [#4742](https://github.com/GetStream/stream-chat-android/pull/4742)
- Create new `bind()` method on `BaseChannelListItemViewHolder` that takes as parameter `ChannelItem`. [#4868](https://github.com/GetStream/stream-chat-android/pull/4868)
- Added `MessageComposerView.setCenterOverlapContent` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- `FileAttachmentsView` supports new audio recording view type as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- Added audio recording style customization into `MessageComposerViewStyle` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
* `audioRecordingButtonVisible`
* `audioRecordingHoldToRecordText`
* `audioRecordingHoldToRecordTextColor`
* `audioRecordingHoldToRecordBackgroundDrawable`
* `audioRecordingHoldToRecordBackgroundDrawableTint`
* `audioRecordingSlideToCancelText`
* `audioRecordingMicIconDrawable`
* `audioRecordingMicIconDrawableTint`
* `audioRecordingLockIconDrawable`
* `audioRecordingLockIconDrawableTint`
* `audioRecordingLockedIconDrawable`
* `audioRecordingLockedIconDrawableTint`
- Added audio recording xml attrs for `MessageComposerView` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
* `streamUiMessageComposerAudioRecordingButtonVisible`
* `streamUiMessageComposerAudioRecordingHoldToRecordText`
* `streamUiMessageComposerAudioRecordingHoldToRecordTextColor`
* `streamUiMessageComposerAudioRecordingHoldToRecordBackgroundDrawable`
* `streamUiMessageComposerAudioRecordingHoldToRecordBackgroundDrawableTint`
* `streamUiMessageComposerAudioRecordingSlideToCancelText`
* `streamUiMessageComposerAudioRecordingMicIconDrawable`
* `streamUiMessageComposerAudioRecordingMicIconDrawableTint`
* `streamUiMessageComposerAudioRecordingLockIconDrawable`
* `streamUiMessageComposerAudioRecordingLockIconDrawableTint`
* `streamUiMessageComposerAudioRecordingLockedIconDrawable`
* `streamUiMessageComposerAudioRecordingLockedIconDrawableTint`

### ❌ Removed

Expand All @@ -127,6 +162,9 @@
- Add `ThreadMessagesStart` that allows to control if the stack of thread messages starts at the bottom or the top. [#4807](https://github.com/GetStream/stream-chat-android/pull/4807)
- Add `PickerMediaMode` that allows control if the camera recorder and/or take picture feature is allowed or not. [#4812](https://github.com/GetStream/stream-chat-android/pull/4812)
- Added `MessageTheme` to customize the message components into `ChatTheme`. [#4856](https://github.com/GetStream/stream-chat-android/pull/4856)
- Added `StatefulStreamMediaRecorder` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- Added `AudioRecordAttachmentFactory` as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)
- Added new components (`RunningWaveForm`, `AudioWaveVSeekbar`, `AudioRecordAttachmentContent`, `AudioRecordGroupContent`) as a part of `async-voice-messaging` feature. [#4828](https://github.com/GetStream/stream-chat-android/pull/4828)

### ⚠️ Changed
- 🚨 Breaking change: Renamed `onHeaderActionClick` to `onHeaderTitleClick` in `MessagesScreen`. Change made in order to better reflect the handler's behavior. [#4535](https://github.com/GetStream/stream-chat-android/pull/4535)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# Audio Recording Support

## Introduction


The UI Components Chat SDK provides the flexibility to customize the visual presentation of audio recording. You can personalize the way audio recording is displayed and make it more unique according to your preferences and requirements.

## Customization

`MessageComposerView` in Chat UI Components serves as the container where audio recording functionality is rendered. It provides the necessary components and elements to handle the recording process and display relevant user interface elements related to audio recording.

### Theming

We'll start changing it by replacing the stock play button in favor of a flatter, semi-transparent
design.

First, let's enable audio recording by setting `streamUiMessageComposerAudioRecordingButtonVisible`
to `true` in our `MessageComposerViewTheme`:

```xml

<style name="MessageComposerViewTheme" parent="StreamUi.MessageComposerView">
<item name="streamUiMessageComposerAudioRecordingButtonVisible">true</item>
</style>
```

This will show the microphone button in the `MessageComposerView` next to the send button.

If you want to show the send button only when there's text in the input, you can do that by
setting `streamUiMessageComposerAudioRecordingButtonPreferred` to true in
the `MessageComposerViewTheme`. This way, the send button will only be visible when there's
something typed in the composer.

```xml

<style name="MessageComposerViewTheme" parent="StreamUi.MessageComposerView">
<item name="streamUiMessageComposerAudioRecordingButtonVisible">true</item>
<item name="streamUiMessageComposerAudioRecordingButtonPreferred">true</item>
</style>
```

:::note
Only certain attributes were used here, you can find the rest in
the [source file](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml#L132)
.
:::

Next, add it to your Stream theme:

```xml

<style name="StreamTheme" parent="@style/StreamUiTheme">
<item name="streamUiMessageComposerViewStyle">@style/MessageComposerViewTheme</item>
</style>
```

And finally, override `streamUiTheme`:

```xml

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="streamUiTheme">@style/StreamTheme</item>
</style>
```

### XML Attributes

The same result can be achieved by using XML attributes directly on the `MessageComposerView`:

```xml {5-7}
<io.getstream.chat.android.ui.feature.messages.composer.MessageComposerView
android:id="@+id/messageComposerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:streamUiMessageComposerAudioRecordingButtonVisible="true"
app:streamUiMessageComposerAudioRecordingButtonPreferred="true"
/>
```

:::note
Only certain attributes were used here, you can find the rest in
the [source file](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml#L132)
.
:::

### TransformStyle

The last but not least option is to use `TransformStyle` to modify the audio recording
functionality:

<Tabs>
<TabItem value="kotlin" label="Kotlin">

```kotlin
TransformStyle.messageComposerStyleTransformer = StyleTransformer { defaultStyle ->
defaultStyle.copy(
audioRecordingButtonVisible = true,
audioRecordingButtonPreferred = true,
)
}
```

</TabItem>

<TabItem value="java" label="Java">

```java
TransformStyle.setMessageComposerStyleTransformer(source -> {
// Customize the style
return source;
});
```

</TabItem>
</Tabs>

:::note
Only certain attributes were used here, you can find the rest in
the [source file](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml#L132)
.
:::
1 change: 0 additions & 1 deletion docusaurus/shared

This file was deleted.

44 changes: 44 additions & 0 deletions stream-chat-android-client/api/stream-chat-android-client.api
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,45 @@ public final class io/getstream/chat/android/client/api/models/WatchChannelReque
public fun withWatchers (II)Lio/getstream/chat/android/client/api/models/WatchChannelRequest;
}

public final class io/getstream/chat/android/client/audio/AudioState : java/lang/Enum {
public static final field IDLE Lio/getstream/chat/android/client/audio/AudioState;
public static final field LOADING Lio/getstream/chat/android/client/audio/AudioState;
public static final field PAUSE Lio/getstream/chat/android/client/audio/AudioState;
public static final field PLAYING Lio/getstream/chat/android/client/audio/AudioState;
public static final field UNSET Lio/getstream/chat/android/client/audio/AudioState;
public static fun valueOf (Ljava/lang/String;)Lio/getstream/chat/android/client/audio/AudioState;
public static fun values ()[Lio/getstream/chat/android/client/audio/AudioState;
}

public final class io/getstream/chat/android/client/audio/PlayerState : java/lang/Enum {
public static final field IDLE Lio/getstream/chat/android/client/audio/PlayerState;
public static final field LOADING Lio/getstream/chat/android/client/audio/PlayerState;
public static final field PAUSE Lio/getstream/chat/android/client/audio/PlayerState;
public static final field PLAYING Lio/getstream/chat/android/client/audio/PlayerState;
public static final field UNSET Lio/getstream/chat/android/client/audio/PlayerState;
public static fun valueOf (Ljava/lang/String;)Lio/getstream/chat/android/client/audio/PlayerState;
public static fun values ()[Lio/getstream/chat/android/client/audio/PlayerState;
}

public final class io/getstream/chat/android/client/audio/ProgressData {
public fun <init> (IFI)V
public final fun component1 ()I
public final fun component2 ()F
public final fun component3 ()I
public final fun copy (IFI)Lio/getstream/chat/android/client/audio/ProgressData;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/audio/ProgressData;IFIILjava/lang/Object;)Lio/getstream/chat/android/client/audio/ProgressData;
public fun equals (Ljava/lang/Object;)Z
public final fun getCurrentPosition ()I
public final fun getDuration ()I
public final fun getProgress ()F
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/getstream/chat/android/client/audio/WaveformExtractorKt {
public static final fun isEof (Landroid/media/MediaCodec$BufferInfo;)Z
}

public final class io/getstream/chat/android/client/channel/ChannelClient {
public final fun acceptInvite (Ljava/lang/String;)Lio/getstream/result/call/Call;
public final fun addMembers (Ljava/util/List;Lio/getstream/chat/android/models/Message;Ljava/lang/Boolean;)Lio/getstream/result/call/Call;
Expand Down Expand Up @@ -1889,8 +1928,12 @@ public final class io/getstream/chat/android/client/events/UserUpdatedEvent : io
}

public final class io/getstream/chat/android/client/extensions/AttachmentExtensionsKt {
public static final fun getDuration (Lio/getstream/chat/android/models/Attachment;)Ljava/lang/Float;
public static final fun getUploadId (Lio/getstream/chat/android/models/Attachment;)Ljava/lang/String;
public static final fun getWaveformData (Lio/getstream/chat/android/models/Attachment;)Ljava/util/List;
public static final fun setDuration (Lio/getstream/chat/android/models/Attachment;Ljava/lang/Float;)V
public static final fun setUploadId (Lio/getstream/chat/android/models/Attachment;Ljava/lang/String;)V
public static final fun setWaveformData (Lio/getstream/chat/android/models/Attachment;Ljava/util/List;)V
}

public final class io/getstream/chat/android/client/extensions/ChannelExtensionKt {
Expand Down Expand Up @@ -2499,6 +2542,7 @@ public final class io/getstream/chat/android/client/utils/UserUtilsKt {

public final class io/getstream/chat/android/client/utils/attachment/AttachmentUtilsKt {
public static final fun isAudio (Lio/getstream/chat/android/models/Attachment;)Z
public static final fun isAudioRecording (Lio/getstream/chat/android/models/Attachment;)Z
public static final fun isFile (Lio/getstream/chat/android/models/Attachment;)Z
public static final fun isGiphy (Lio/getstream/chat/android/models/Attachment;)Z
public static final fun isImage (Lio/getstream/chat/android/models/Attachment;)Z
Expand Down
17 changes: 17 additions & 0 deletions stream-chat-android-client/detekt-baseline.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,30 @@
<CurrentIssues>
<ID>ForbiddenComment:MessageUtils.kt$// TODO: type should be a sealed/class or enum at the client level</ID>
<ID>FunctionOnlyReturningConstant:StringExtensionsKtTest.kt$StringExtensionsKtTest.Companion$fun createStreamCdnImageLinkWithoutDimensionParameters()</ID>
<ID>LongMethod:ChatClientDebuggerTest.kt$ChatClientDebuggerTest$@BeforeEach fun setUp()</ID>
<ID>LongParameterList:BaseChatModule.kt$BaseChatModule$( private val appContext: Context, private val clientScope: ClientScope, private val userScope: UserScope, private val config: ChatClientConfig, private val notificationsHandler: NotificationHandler, private val notificationConfig: NotificationConfig, private val fileUploader: FileUploader? = null, private val tokenManager: TokenManager = TokenManagerImpl(), private val customOkHttpClient: OkHttpClient? = null, private val lifecycle: Lifecycle, private val httpClientConfig: (OkHttpClient.Builder) -> OkHttpClient.Builder = { it }, )</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$127f</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$16</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$1_000_000f</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$24</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$2_147_483_648f</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$32767f</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$4</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor$8</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor.&lt;no name provided>$16</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor.&lt;no name provided>$32</ID>
<ID>MagicNumber:WaveformExtractor.kt$WaveformExtractor.&lt;no name provided>$8</ID>
<ID>MaxLineLength:BaseChatModule.kt$BaseChatModule$NetworkStateProvider(userScope, appContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager)</ID>
<ID>MaxLineLength:Message.kt$*</ID>
<ID>MaxLineLength:Reaction.kt$*</ID>
<ID>MaxLineLength:StreamAudioPlayer.kt$StreamMediaPlayer$logger.v { "[pollProgress] #3; finalPosition: $finalPosition($currentPosition), prevPosition: $prevPosition" }</ID>
<ID>MaxLineLength:StringExtensionsKtTest.kt$StringExtensionsKtTest.Companion$"https://us-east.stream-io-cdn.com/1/images/IMAGE_NAME.jpg?Key-Pair-Id=SODHGWNRLG&amp;Policy=akIjUneI9Kmbds2&amp;Signature=dsnIjJ8-gfdgihih8-GkhdfgfdGFG32--KHJDFj349sfsdf~SFDf2~Fsdfgrg3~kjnooi23Jig-Kjoih34iW~k7Jbe2~Jnk33j-Fsiniiz2~Sfj23iJihn-Jinfnsiw2kS"</ID>
<ID>MaxLineLength:StringExtensionsKtTest.kt$StringExtensionsKtTest.Companion$"https://us-east.stream-io-cdn.com/1/images/IMAGE_NAME.jpg?Key-Pair-Id=SODHGWNRLG&amp;Policy=akIjUneI9Kmbds2&amp;Signature=dsnIjJ8-gfdgihih8-GkhdfgfdGFG32--KHJDFj349sfsdf~SFDf2~Fsdfgrg3~kjnooi23Jig-Kjoih34iW~k7Jbe2~Jnk33j-Fsiniiz2~Sfj23iJihn-Jinfnsiw2kS&amp;oh=$originalHeight&amp;ow=$originalWidth"</ID>
<ID>MaxLineLength:WaveformExtractor.kt$WaveformExtractor$logger.v { "[handle16bit] this.totalSamples: $totalSamples, sampleRate: $sampleRate, duration: $durationInSeconds" }</ID>
<ID>ReturnCount:Channel.kt$@InternalStreamChatApi public fun Channel.addMember(member: Member?): Channel</ID>
<ID>SwallowedException:WaveformExtractor.kt$WaveformExtractor$e: Exception</ID>
<ID>TooGenericExceptionCaught:WaveformExtractor.kt$WaveformExtractor$e: Exception</ID>
<ID>UnusedPrivateMember:BaseChatModule.kt$BaseChatModule$private val clientScope: ClientScope</ID>
<ID>UnusedPrivateMember:StreamAudioPlayer.kt$StreamMediaPlayer$private fun normalize(uri: String): String</ID>
</CurrentIssues>
</SmellBaseline>
Loading
Loading