diff --git a/CHANGELOG.md b/CHANGELOG.md index cbd936c27cd..24843d81a64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ ### 🐞 Fixed ### ⬆️ Improved +- Improved UI customization for Audio Recording feature. [#4906](https://github.com/GetStream/stream-chat-android/pull/4906) ### ✅ Added diff --git a/docusaurus/docs/Android/04-ui/06-guides/04-enabling-audio-recording.mdx b/docusaurus/docs/Android/04-ui/06-guides/04-enabling-audio-recording.mdx index cf7f8a6324f..896164a2170 100644 --- a/docusaurus/docs/Android/04-ui/06-guides/04-enabling-audio-recording.mdx +++ b/docusaurus/docs/Android/04-ui/06-guides/04-enabling-audio-recording.mdx @@ -17,13 +17,14 @@ The UI Components Chat SDK provides the flexibility to customize the visual pres 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`: +First, let's display enabled audio recording button by setting `streamUiMessageComposerAudioRecordingButtonVisible` +and `streamUiMessageComposerAudioRecordingButtonEnabled` to `true` in our `MessageComposerViewTheme`: ```xml ``` @@ -38,13 +39,15 @@ something typed in the composer. ``` :::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) +the source code [here](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml#L199-L202) +and [here](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml#L132) . ::: @@ -76,13 +79,15 @@ The same result can be achieved by using XML attributes directly on the `Message android:layout_width="match_parent" android:layout_height="wrap_content" app:streamUiMessageComposerAudioRecordingButtonVisible="true" + app:streamUiMessageComposerAudioRecordingButtonEnabled="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) +the source code [here](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml#L199-L202) +and [here](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml#L132) . ::: @@ -98,6 +103,7 @@ functionality: TransformStyle.messageComposerStyleTransformer = StyleTransformer { defaultStyle -> defaultStyle.copy( audioRecordingButtonVisible = true, + audioRecordingButtonEnabled = true, audioRecordingButtonPreferred = true, ) } @@ -119,6 +125,7 @@ TransformStyle.setMessageComposerStyleTransformer(source -> { :::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) +the source code [here](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle.kt#L222-L225) +and [here](https://github.com/GetStream/stream-chat-android/blob/main/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle.kt#L185-L200) . ::: \ No newline at end of file diff --git a/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api b/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api index 524deb3d92d..d0116ae5570 100644 --- a/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api +++ b/stream-chat-android-ui-components/api/stream-chat-android-ui-components.api @@ -910,7 +910,7 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/Messag public final class io/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle { public static final field Companion Lio/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle$Companion; - public fun (ILjava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ILandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ZZLio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZZILjava/lang/String;IZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/Integer;FFIIIIZZLjava/lang/String;ILandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZLandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle;)V + public fun (ILjava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ILandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ZZLio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZZILjava/lang/String;IZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/Integer;FFIIIILjava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZLandroid/graphics/drawable/Drawable;ZZZLandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle;)V public final fun component1 ()I public final fun component10 ()Lio/getstream/chat/android/ui/font/TextStyle; public final fun component11 ()I @@ -940,21 +940,21 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/Messag public final fun component33 ()I public final fun component34 ()I public final fun component35 ()I - public final fun component36 ()Z - public final fun component37 ()Z - public final fun component38 ()Ljava/lang/String; - public final fun component39 ()I + public final fun component36 ()Ljava/lang/String; + public final fun component37 ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun component38 ()Landroid/graphics/drawable/Drawable; + public final fun component39 ()Ljava/lang/Integer; public final fun component4 ()Ljava/lang/String; - public final fun component40 ()Landroid/graphics/drawable/Drawable; - public final fun component41 ()Ljava/lang/Integer; - public final fun component42 ()Ljava/lang/String; - public final fun component43 ()Landroid/graphics/drawable/Drawable; - public final fun component44 ()Ljava/lang/Integer; - public final fun component45 ()Landroid/graphics/drawable/Drawable; - public final fun component46 ()Ljava/lang/Integer; - public final fun component47 ()Landroid/graphics/drawable/Drawable; - public final fun component48 ()Ljava/lang/Integer; - public final fun component49 ()Z + public final fun component40 ()Ljava/lang/String; + public final fun component41 ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun component42 ()Landroid/graphics/drawable/Drawable; + public final fun component43 ()Ljava/lang/Integer; + public final fun component44 ()Landroid/graphics/drawable/Drawable; + public final fun component45 ()Ljava/lang/Integer; + public final fun component46 ()Landroid/graphics/drawable/Drawable; + public final fun component47 ()Ljava/lang/Integer; + public final fun component48 ()Landroid/graphics/drawable/Drawable; + public final fun component49 ()Ljava/lang/Integer; public final fun component5 ()Lio/getstream/chat/android/ui/font/TextStyle; public final fun component50 ()Landroid/graphics/drawable/Drawable; public final fun component51 ()Ljava/lang/Integer; @@ -963,31 +963,38 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/Messag public final fun component54 ()Ljava/lang/Integer; public final fun component55 ()Z public final fun component56 ()Landroid/graphics/drawable/Drawable; - public final fun component57 ()Ljava/lang/String; - public final fun component58 ()Lio/getstream/chat/android/ui/font/TextStyle; - public final fun component59 ()Ljava/lang/String; + public final fun component57 ()Ljava/lang/Integer; + public final fun component58 ()Z + public final fun component59 ()Landroid/graphics/drawable/Drawable; public final fun component6 ()Landroid/graphics/drawable/Drawable; - public final fun component60 ()Landroid/graphics/drawable/Drawable; - public final fun component61 ()Ljava/lang/String; - public final fun component62 ()Landroid/graphics/drawable/Drawable; + public final fun component60 ()Ljava/lang/String; + public final fun component61 ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun component62 ()Ljava/lang/String; public final fun component63 ()Landroid/graphics/drawable/Drawable; - public final fun component64 ()Z + public final fun component64 ()Ljava/lang/String; public final fun component65 ()Landroid/graphics/drawable/Drawable; - public final fun component66 ()Lio/getstream/chat/android/ui/font/TextStyle; - public final fun component67 ()Landroid/graphics/drawable/Drawable; - public final fun component68 ()I - public final fun component69 ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun component66 ()Landroid/graphics/drawable/Drawable; + public final fun component67 ()Z + public final fun component68 ()Landroid/graphics/drawable/Drawable; + public final fun component69 ()Z public final fun component7 ()I - public final fun component70 ()I - public final fun component71 ()F - public final fun component72 ()Lio/getstream/chat/android/ui/font/TextStyle; - public final fun component73 ()I - public final fun component74 ()F - public final fun component75 ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle; + public final fun component70 ()Z + public final fun component71 ()Z + public final fun component72 ()Landroid/graphics/drawable/Drawable; + public final fun component73 ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun component74 ()Landroid/graphics/drawable/Drawable; + public final fun component75 ()I + public final fun component76 ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun component77 ()I + public final fun component78 ()F + public final fun component79 ()Lio/getstream/chat/android/ui/font/TextStyle; public final fun component8 ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun component80 ()I + public final fun component81 ()F + public final fun component82 ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle; public final fun component9 ()Ljava/lang/String; - public final fun copy (ILjava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ILandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ZZLio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZZILjava/lang/String;IZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/Integer;FFIIIIZZLjava/lang/String;ILandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZLandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle;)Lio/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle; - public static synthetic fun copy$default (Lio/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle;ILjava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ILandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ZZLio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZZILjava/lang/String;IZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/Integer;FFIIIIZZLjava/lang/String;ILandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZLandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle;IIILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle; + public final fun copy (ILjava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ILandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ZZLio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZZILjava/lang/String;IZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/Integer;FFIIIILjava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZLandroid/graphics/drawable/Drawable;ZZZLandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle;)Lio/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle; + public static synthetic fun copy$default (Lio/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle;ILjava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ILandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;ZZLio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZZILjava/lang/String;IZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/Integer;FFIIIILjava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/Integer;ZLandroid/graphics/drawable/Drawable;Ljava/lang/String;Lio/getstream/chat/android/ui/font/TextStyle;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;ZLandroid/graphics/drawable/Drawable;ZZZLandroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;ILio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/font/TextStyle;IFLio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle;IIILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle; public fun equals (Ljava/lang/Object;)Z public final fun getAlsoSendToChannelCheckboxDrawable ()Landroid/graphics/drawable/Drawable; public final fun getAlsoSendToChannelCheckboxText ()Ljava/lang/String; @@ -997,19 +1004,26 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/Messag public final fun getAttachmentsButtonRippleColor ()Ljava/lang/Integer; public final fun getAttachmentsButtonVisible ()Z public final fun getAttachmentsPickerDialogStyle ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/AttachmentsPickerDialogStyle; + public final fun getAudioRecordingButtonEnabled ()Z + public final fun getAudioRecordingButtonIconDrawable ()Landroid/graphics/drawable/Drawable; public final fun getAudioRecordingButtonPreferred ()Z public final fun getAudioRecordingButtonVisible ()Z + public final fun getAudioRecordingFloatingButtonBackgroundDrawable ()Landroid/graphics/drawable/Drawable; + public final fun getAudioRecordingFloatingButtonBackgroundDrawableTint ()Ljava/lang/Integer; + public final fun getAudioRecordingFloatingButtonIconDrawable ()Landroid/graphics/drawable/Drawable; + public final fun getAudioRecordingFloatingButtonIconDrawableTint ()Ljava/lang/Integer; + public final fun getAudioRecordingFloatingLockIconDrawable ()Landroid/graphics/drawable/Drawable; + public final fun getAudioRecordingFloatingLockIconDrawableTint ()Ljava/lang/Integer; + public final fun getAudioRecordingFloatingLockedIconDrawable ()Landroid/graphics/drawable/Drawable; + public final fun getAudioRecordingFloatingLockedIconDrawableTint ()Ljava/lang/Integer; public final fun getAudioRecordingHoldToRecordBackgroundDrawable ()Landroid/graphics/drawable/Drawable; public final fun getAudioRecordingHoldToRecordBackgroundDrawableTint ()Ljava/lang/Integer; public final fun getAudioRecordingHoldToRecordText ()Ljava/lang/String; - public final fun getAudioRecordingHoldToRecordTextColor ()I - public final fun getAudioRecordingLockIconDrawable ()Landroid/graphics/drawable/Drawable; - public final fun getAudioRecordingLockIconDrawableTint ()Ljava/lang/Integer; - public final fun getAudioRecordingLockedIconDrawable ()Landroid/graphics/drawable/Drawable; - public final fun getAudioRecordingLockedIconDrawableTint ()Ljava/lang/Integer; - public final fun getAudioRecordingMicIconDrawable ()Landroid/graphics/drawable/Drawable; - public final fun getAudioRecordingMicIconDrawableTint ()Ljava/lang/Integer; + public final fun getAudioRecordingHoldToRecordTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle; + public final fun getAudioRecordingSlideToCancelStartDrawable ()Landroid/graphics/drawable/Drawable; + public final fun getAudioRecordingSlideToCancelStartDrawableTint ()Ljava/lang/Integer; public final fun getAudioRecordingSlideToCancelText ()Ljava/lang/String; + public final fun getAudioRecordingSlideToCancelTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle; public final fun getBackgroundColor ()I public final fun getButtonIconDrawableTintColor ()Ljava/lang/Integer; public final fun getCommandSuggestionItemCommandDescriptionText ()Ljava/lang/String; diff --git a/stream-chat-android-ui-components/detekt-baseline.xml b/stream-chat-android-ui-components/detekt-baseline.xml index 11964737ff3..8b5fd50f2e7 100644 --- a/stream-chat-android-ui-components/detekt-baseline.xml +++ b/stream-chat-android-ui-components/detekt-baseline.xml @@ -12,8 +12,6 @@ ComplexMethod:AttachmentDestination.kt$AttachmentDestination$public fun showAttachment(message: Message, attachment: Attachment) ComplexMethod:DefaultMessageComposerCenterOverlapContent.kt$DefaultMessageComposerOverlappingContent$@SuppressLint("ClickableViewAccessibility") override fun onTouchEvent(event: MotionEvent): Boolean ComplexMethod:DefaultMessageComposerTrailingContent.kt$DefaultMessageComposerTrailingContent$override fun renderState(state: MessageComposerState) - ComplexMethod:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$internal operator fun invoke(context: Context, attrs: AttributeSet?): MessageComposerViewStyle - ComplexMethod:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$private fun createAttachmentPickerDialogStyle(context: Context, a: TypedArray): AttachmentsPickerDialogStyle ComplexMethod:MessageListItemDiffCallback.kt$MessageListItemDiffCallback$override fun areContentsTheSame(oldItem: MessageListItem, newItem: MessageListItem): Boolean ComplexMethod:MessageListItemViewHolderFactory.kt$MessageListItemViewHolderFactory$public open fun createViewHolder( parentView: ViewGroup, viewType: Int, ): BaseMessageItemViewHolder<out MessageListItem> ComplexMethod:MessageOptionItemsFactory.kt$DefaultMessageOptionItemsFactory$override fun createMessageOptionItems( selectedMessage: Message, currentUser: User?, isInThread: Boolean, ownCapabilities: Set<String>, style: MessageListViewStyle, ): List<MessageOptionItem> @@ -35,8 +33,6 @@ LongMethod:GiphyViewHolderStyle.kt$GiphyViewHolderStyle.Companion$operator fun invoke(context: Context, attributes: TypedArray): GiphyViewHolderStyle LongMethod:MediaAttachmentGridViewStyle.kt$MediaAttachmentGridViewStyle.Companion$operator fun invoke(context: Context, it: TypedArray): MediaAttachmentGridViewStyle LongMethod:MentionListViewStyle.kt$MentionListViewStyle.Companion$operator fun invoke(context: Context, attrs: AttributeSet?): MentionListViewStyle - LongMethod:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$internal operator fun invoke(context: Context, attrs: AttributeSet?): MessageComposerViewStyle - LongMethod:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$private fun createAttachmentPickerDialogStyle(context: Context, a: TypedArray): AttachmentsPickerDialogStyle LongMethod:MessageListHeaderViewStyle.kt$MessageListHeaderViewStyle.Companion$operator fun invoke(context: Context, attrs: AttributeSet?): MessageListHeaderViewStyle LongMethod:MessageListItemStyle.kt$MessageListItemStyle.Builder$fun build(): MessageListItemStyle LongMethod:MessageListViewModelBinding.kt$@JvmName("bind") public fun MessageListViewModel.bindView( view: MessageListView, lifecycleOwner: LifecycleOwner, ) @@ -113,53 +109,6 @@ MaxLineLength:MediaAttachmentDialogFragment.kt$MediaAttachmentDialogFragment$viewModel.attachmentGalleryItemsLiveData.observe(viewLifecycleOwner, mediaAttachmentGridView::setAttachments) MaxLineLength:MessageBackgroundFactoryImpl.kt$MessageBackgroundFactoryImpl$// however, if a user has specified a background color attribute, we use it for _all_ message backgrounds. MaxLineLength:MessageComposerViewModel.kt$MessageComposerViewModel$* - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerAllowAccessButtonTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerAttachmentTabToggleButtonStateList - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemCheckboxDeselectedDrawable - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemCheckboxSelectedDrawable - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemCheckboxTextColor - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemNameTextColor - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemNameTextFont - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemNameTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemNameTextSize - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemNameTextStyle - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemSizeTextColor - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemSizeTextFont - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemSizeTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemSizeTextSize - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentItemSizeTextStyle - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentsNoFilesTextColor - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentsNoFilesTextFont - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentsNoFilesTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentsNoFilesTextSize - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerFileAttachmentsNoFilesTextStyle - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerMediaAttachmentNoMediaTextColor - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerMediaAttachmentNoMediaTextFont - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerMediaAttachmentNoMediaTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerMediaAttachmentNoMediaTextSize - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerMediaAttachmentNoMediaTextStyle - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerSubmitAttachmentsButtonIconDrawable - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordBackgroundDrawableTint - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandDescriptionTextColor - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandDescriptionTextFont - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandDescriptionTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandDescriptionTextSize - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandDescriptionTextStyle - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandNameTextColor - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandNameTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerCommandSuggestionItemCommandNameTextStyle - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerMentionSuggestionItemMentionTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerMentionSuggestionItemUsernameTextFontAssets - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawablePadding - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawablePaddingBottom - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawablePaddingEnd - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawablePaddingStart - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawablePaddingTop - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$a.getColorOrNull(R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerVideoIconDrawableTint) - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$a.getColorOrNull(R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconBackgroundColor) - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$a.getColorOrNull(R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawableTint) - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$a.getDrawable(R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawable) - MaxLineLength:MessageComposerViewStyle.kt$MessageComposerViewStyle.Companion$messageInputVideoAttachmentIconDrawablePaddingBottom MaxLineLength:MessageListHeaderViewStyle.kt$MessageListHeaderViewStyle$* MaxLineLength:MessageListItemDecoratorProvider.kt$MessageListItemDecoratorProvider$* MaxLineLength:MessageListItemDiffCallback.kt$MessageListItemDiffCallback$is MessageListItem.DateSeparatorItem -> oldItem.date == (newItem as? MessageListItem.DateSeparatorItem)?.date diff --git a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle.kt b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle.kt index cdc9e49f7a4..2cdb8982db5 100644 --- a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle.kt +++ b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/MessageComposerViewStyle.kt @@ -88,6 +88,35 @@ import io.getstream.chat.android.ui.utils.extensions.use * @param messageInputVideoAttachmentIconDrawablePaddingEnd Sets the end padding between the video attachment drawable * and its parent card. * @param audioRecordingButtonVisible If the button to record audio is displayed. + * @param audioRecordingButtonEnabled If the button to record audio is enabled. + * @param audioRecordingButtonPreferred If the button to record audio is displayed over send button while input is + * empty. + * @param audioRecordingHoldToRecordText The info text that will be shown if touch event on audio button was too short. + * @param audioRecordingHoldToRecordTextStyle The text style that will be used for the "hold to record" text. + * @param audioRecordingHoldToRecordBackgroundDrawable The drawable will be used as a background for the "hold to + * record" text. + * @param audioRecordingHoldToRecordBackgroundDrawableTint The tint color will be used for background drawable of + * the "hold to record" text. + * @param audioRecordingSlideToCancelText The info text that will be shown while holding mic button. + * @param audioRecordingSlideToCancelTextStyle The text style that will be used for the "slide to cancel" text. + * @param audioRecordingSlideToCancelStartDrawable The icon that will be displayed in front of the + * "slide to cancel" text. + * @param audioRecordingSlideToCancelStartDrawableTint The tint color that will be used for the icon in front of the + * "slide to cancel" text. + * @param audioRecordingFloatingButtonIconDrawable The icon that will be displayed in inside the floating draggable + * button while recording. + * @param audioRecordingFloatingButtonIconDrawableTint The tint color that will be used for the the mic icon inside + * the floating draggable button. + * @param audioRecordingFloatingButtonBackgroundDrawable The background drawable that will be applied to the floating + * draggable button while recording. + * @param audioRecordingFloatingButtonBackgroundDrawableTint The tint color that will be used for the background + * drawable in the floating draggable button. + * @param audioRecordingFloatingLockIconDrawable The floating icon that will be displayed above floating button + * while unlocked. + * @param audioRecordingFloatingLockIconDrawableTint The tint color that will be used for the the lock icon. + * @param audioRecordingFloatingLockedIconDrawable The floating icon that will be displayed above recording view + * when locked. + * @param audioRecordingFloatingLockedIconDrawableTint The tint color that will be used for the the locked icon. * @param attachmentsButtonVisible If the button to pick attachments is displayed. * @param attachmentsButtonIconDrawable The icon for the attachments button. * @param attachmentsButtonRippleColor Ripple color of the attachments button. @@ -164,19 +193,22 @@ public data class MessageComposerViewStyle( public val messageInputVideoAttachmentIconDrawablePaddingStart: Int, public val messageInputVideoAttachmentIconDrawablePaddingEnd: Int, // Center overlap content - public val audioRecordingButtonVisible: Boolean, - public val audioRecordingButtonPreferred: Boolean, public val audioRecordingHoldToRecordText: String, - @ColorInt public val audioRecordingHoldToRecordTextColor: Int, + public val audioRecordingHoldToRecordTextStyle: TextStyle, public val audioRecordingHoldToRecordBackgroundDrawable: Drawable, @ColorInt public val audioRecordingHoldToRecordBackgroundDrawableTint: Int?, public val audioRecordingSlideToCancelText: String, - public val audioRecordingMicIconDrawable: Drawable, - @ColorInt public val audioRecordingMicIconDrawableTint: Int?, - public val audioRecordingLockIconDrawable: Drawable, - @ColorInt public val audioRecordingLockIconDrawableTint: Int?, - public val audioRecordingLockedIconDrawable: Drawable, - @ColorInt public val audioRecordingLockedIconDrawableTint: Int?, + public val audioRecordingSlideToCancelTextStyle: TextStyle, + public val audioRecordingSlideToCancelStartDrawable: Drawable, + @ColorInt public val audioRecordingSlideToCancelStartDrawableTint: Int?, + public val audioRecordingFloatingButtonIconDrawable: Drawable, + @ColorInt public val audioRecordingFloatingButtonIconDrawableTint: Int?, + public val audioRecordingFloatingButtonBackgroundDrawable: Drawable, + @ColorInt public val audioRecordingFloatingButtonBackgroundDrawableTint: Int?, + public val audioRecordingFloatingLockIconDrawable: Drawable, + @ColorInt public val audioRecordingFloatingLockIconDrawableTint: Int?, + public val audioRecordingFloatingLockedIconDrawable: Drawable, + @ColorInt public val audioRecordingFloatingLockedIconDrawableTint: Int?, // Leading content public val attachmentsButtonVisible: Boolean, public val attachmentsButtonIconDrawable: Drawable, @@ -198,6 +230,10 @@ public data class MessageComposerViewStyle( // Trailing content public val sendMessageButtonEnabled: Boolean, public val sendMessageButtonIconDrawable: Drawable, + public val audioRecordingButtonVisible: Boolean, + public val audioRecordingButtonEnabled: Boolean, + public val audioRecordingButtonPreferred: Boolean, + public val audioRecordingButtonIconDrawable: Drawable, public val cooldownTimerTextStyle: TextStyle, public val cooldownTimerBackgroundDrawable: Drawable, // Message reply customization, by default belongs to center content as well @@ -232,6 +268,8 @@ public data class MessageComposerViewStyle( ) public companion object { + + @Suppress("MaxLineLength", "ComplexMethod", "LongMethod") internal operator fun invoke(context: Context, attrs: AttributeSet?): MessageComposerViewStyle { context.obtainStyledAttributes( attrs, @@ -351,7 +389,8 @@ public data class MessageComposerViewStyle( context.getColorCompat(R.color.stream_ui_text_color_primary) ) .font( - R.styleable.MessageComposerView_streamUiMessageComposerMentionSuggestionItemUsernameTextFontAssets, + R.styleable + .MessageComposerView_streamUiMessageComposerMentionSuggestionItemUsernameTextFontAssets, R.styleable.MessageComposerView_streamUiMessageComposerMentionSuggestionItemUsernameTextFont ) .style( @@ -452,21 +491,27 @@ public data class MessageComposerViewStyle( /** * Center overlap content */ - val audioRecordingButtonVisible = a.getBoolean( - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingButtonVisible, - false - ) - val audioRecordingButtonPreferred = a.getBoolean( - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingButtonPreferred, - false - ) val audioRecordingHoldToRecordText = a.getString( R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordText ) ?: context.getString(R.string.stream_ui_message_composer_hold_to_record) - val audioRecordingHoldToRecordTextColor = a.getColor( - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordTextColor, - context.getColorCompat(R.color.stream_ui_white_snow) - ) + val audioRecordingHoldToRecordTextStyle = TextStyle.Builder(a) + .size( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordTextSize, + context.getDimension(R.dimen.stream_ui_text_medium) + ) + .color( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordTextColor, + context.getColorCompat(R.color.stream_ui_white_snow) + ) + .font( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordTextFontAssets, + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordTextFont + ) + .style( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordTextStyle, + Typeface.BOLD + ) + .build() val audioRecordingHoldToRecordBackgroundDrawable = a.getDrawableCompat( context, R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingHoldToRecordBackgroundDrawable, @@ -479,29 +524,62 @@ public data class MessageComposerViewStyle( val audioRecordingSlideToCancelText = a.getString( R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelText ) ?: context.getString(R.string.stream_ui_message_composer_slide_to_cancel) + val audioRecordingSlideToCancelTextStyle = TextStyle.Builder(a) + .size( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelTextSize, + context.getDimension(R.dimen.stream_ui_text_medium) + ) + .color( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelTextColor, + context.getColorCompat(R.color.stream_ui_text_color_secondary) + ) + .font( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelTextFontAssets, + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelTextFont + ) + .style( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelTextStyle, + Typeface.NORMAL + ) + .build() + val audioRecordingSlideToCancelStartDrawable = a.getDrawableCompat( + context, + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelStartDrawable, + ) ?: context.getDrawableCompat(R.drawable.stream_ui_arrow_left)!! - val audioRecordingMicIconDrawable = a.getDrawableCompat( + val audioRecordingSlideToCancelStartDrawableTint = a.getColorOrNull( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingSlideToCancelStartDrawableTint + ) + val audioRecordingFloatingButtonIconDrawable = a.getDrawableCompat( context, - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingMicIconDrawable + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingButtonIconDrawable ) ?: context.getDrawableCompat(R.drawable.stream_ui_ic_mic)!! - val audioRecordingMicIconDrawableTint = a.getColorOrNull( - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingMicIconDrawableTint + val audioRecordingFloatingButtonIconDrawableTint = a.getColorOrNull( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingButtonIconDrawableTint + ) + + val audioRecordingFloatingButtonBackgroundDrawable = a.getDrawableCompat( + context, + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingButtonBackgroundDrawable + ) ?: context.getDrawableCompat(R.drawable.stream_ui_message_composer_audio_record_mic_background)!! + val audioRecordingFloatingButtonBackgroundDrawableTint = a.getColorOrNull( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingButtonBackgroundDrawableTint ) - val audioRecordingLockIconDrawable = a.getDrawableCompat( + val audioRecordingFloatingLockIconDrawable = a.getDrawableCompat( context, - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingLockIconDrawable + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingLockIconDrawable ) ?: context.getDrawableCompat(R.drawable.stream_ui_ic_mic_lock)!! - val audioRecordingLockIconDrawableTint = a.getColorOrNull( - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingLockIconDrawableTint + val audioRecordingFloatingLockIconDrawableTint = a.getColorOrNull( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingLockIconDrawableTint ) - val audioRecordingLockedIconDrawable = a.getDrawableCompat( + val audioRecordingFloatingLockedIconDrawable = a.getDrawableCompat( context, - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingLockedIconDrawable + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingLockedIconDrawable ) ?: context.getDrawableCompat(R.drawable.stream_ui_ic_mic_locked)!! - val audioRecordingLockedIconDrawableTint = a.getColorOrNull( - R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingLockedIconDrawableTint + val audioRecordingFloatingLockedIconDrawableTint = a.getColorOrNull( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingFloatingLockedIconDrawableTint ) /** @@ -606,6 +684,23 @@ public data class MessageComposerViewStyle( R.styleable.MessageComposerView_streamUiMessageComposerSendMessageButtonIconDrawable ) ?: context.getDrawableCompat(R.drawable.stream_ui_ic_send_message)!! + val audioRecordingButtonEnabled = a.getBoolean( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingButtonEnabled, + true + ) + val audioRecordingButtonVisible = a.getBoolean( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingButtonVisible, + false + ) + val audioRecordingButtonPreferred = a.getBoolean( + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingButtonPreferred, + false + ) + val audioRecordingButtonIconDrawable = a.getDrawableCompat( + context, + R.styleable.MessageComposerView_streamUiMessageComposerAudioRecordingButtonIconDrawable + ) ?: context.getDrawableCompat(R.drawable.stream_ui_ic_mic)!! + val cooldownTimerTextStyle = TextStyle.Builder(a) .size( R.styleable.MessageComposerView_streamUiMessageComposerCooldownTimerTextSize, @@ -641,7 +736,9 @@ public data class MessageComposerViewStyle( ) val messageInputVideoAttachmentIconDrawable = - a.getDrawable(R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawable) + a.getDrawable( + R.styleable.MessageComposerView_streamUiMessageComposerMessageInputVideoAttachmentIconDrawable + ) ?: ContextCompat.getDrawable(context, R.drawable.stream_ui_ic_play)!! val messageInputVideoAttachmentIconDrawableTint = @@ -807,19 +904,22 @@ public data class MessageComposerViewStyle( messageInputVideoAttachmentIconDrawablePaddingEnd = messageInputVideoAttachmentIconDrawablePadding ?: messageInputVideoAttachmentIconDrawablePaddingEnd, // Center overlap content - audioRecordingButtonVisible = audioRecordingButtonVisible, - audioRecordingButtonPreferred = audioRecordingButtonPreferred, audioRecordingHoldToRecordText = audioRecordingHoldToRecordText, - audioRecordingHoldToRecordTextColor = audioRecordingHoldToRecordTextColor, + audioRecordingHoldToRecordTextStyle = audioRecordingHoldToRecordTextStyle, audioRecordingHoldToRecordBackgroundDrawable = audioRecordingHoldToRecordBackgroundDrawable, audioRecordingHoldToRecordBackgroundDrawableTint = audioRecordingHoldToRecordBackgroundDrawableTint, audioRecordingSlideToCancelText = audioRecordingSlideToCancelText, - audioRecordingMicIconDrawable = audioRecordingMicIconDrawable, - audioRecordingMicIconDrawableTint = audioRecordingMicIconDrawableTint, - audioRecordingLockIconDrawable = audioRecordingLockIconDrawable, - audioRecordingLockIconDrawableTint = audioRecordingLockIconDrawableTint, - audioRecordingLockedIconDrawable = audioRecordingLockedIconDrawable, - audioRecordingLockedIconDrawableTint = audioRecordingLockedIconDrawableTint, + audioRecordingSlideToCancelTextStyle = audioRecordingSlideToCancelTextStyle, + audioRecordingSlideToCancelStartDrawable = audioRecordingSlideToCancelStartDrawable, + audioRecordingSlideToCancelStartDrawableTint = audioRecordingSlideToCancelStartDrawableTint, + audioRecordingFloatingButtonIconDrawable = audioRecordingFloatingButtonIconDrawable, + audioRecordingFloatingButtonIconDrawableTint = audioRecordingFloatingButtonIconDrawableTint, + audioRecordingFloatingButtonBackgroundDrawable = audioRecordingFloatingButtonBackgroundDrawable, + audioRecordingFloatingButtonBackgroundDrawableTint = audioRecordingFloatingButtonBackgroundDrawableTint, + audioRecordingFloatingLockIconDrawable = audioRecordingFloatingLockIconDrawable, + audioRecordingFloatingLockIconDrawableTint = audioRecordingFloatingLockIconDrawableTint, + audioRecordingFloatingLockedIconDrawable = audioRecordingFloatingLockedIconDrawable, + audioRecordingFloatingLockedIconDrawableTint = audioRecordingFloatingLockedIconDrawableTint, // Leading content attachmentsButtonVisible = attachmentsButtonVisible, attachmentsButtonIconDrawable = attachmentsButtonIconDrawable, @@ -841,6 +941,10 @@ public data class MessageComposerViewStyle( // Trailing content sendMessageButtonEnabled = sendMessageButtonEnabled, sendMessageButtonIconDrawable = sendMessageButtonIconDrawable, + audioRecordingButtonEnabled = audioRecordingButtonEnabled, + audioRecordingButtonVisible = audioRecordingButtonVisible, + audioRecordingButtonPreferred = audioRecordingButtonPreferred, + audioRecordingButtonIconDrawable = audioRecordingButtonIconDrawable, cooldownTimerTextStyle = cooldownTimerTextStyle, cooldownTimerBackgroundDrawable = cooldownTimerBackgroundDrawable, messageReplyBackgroundColor = messageReplyBackgroundColor, @@ -855,6 +959,7 @@ public data class MessageComposerViewStyle( } } + @Suppress("MaxLineLength", "LongMethod", "ComplexMethod") private fun createAttachmentPickerDialogStyle(context: Context, a: TypedArray): AttachmentsPickerDialogStyle { val attachmentsPickerBackgroundColor = a.getColor( R.styleable.MessageComposerView_streamUiMessageComposerAttachmentsPickerBackgroundColor, diff --git a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerCenterOverlapContent.kt b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerCenterOverlapContent.kt index fe120ad4c48..1c3b754c7a2 100644 --- a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerCenterOverlapContent.kt +++ b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerCenterOverlapContent.kt @@ -55,11 +55,13 @@ import io.getstream.chat.android.ui.databinding.StreamUiMessageComposerDefaultCe import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerContext import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerView import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerViewStyle +import io.getstream.chat.android.ui.font.setTextStyle import io.getstream.chat.android.ui.utils.PermissionChecker import io.getstream.chat.android.ui.utils.extensions.applyTint import io.getstream.chat.android.ui.utils.extensions.displayMetrics import io.getstream.chat.android.ui.utils.extensions.dpToPx import io.getstream.chat.android.ui.utils.extensions.getDimension +import io.getstream.chat.android.ui.utils.extensions.setStartDrawable import io.getstream.log.taggedLogger private const val TAG = "OverlappingContent" @@ -191,6 +193,12 @@ public class DefaultMessageComposerOverlappingContent : ConstraintLayout, Messag style = messageComposerContext.style binding.recordingSlider.text = style.audioRecordingSlideToCancelText + binding.recordingSlider.setTextStyle(style.audioRecordingSlideToCancelTextStyle) + binding.recordingSlider.setStartDrawable( + style.audioRecordingSlideToCancelStartDrawable.applyTint( + style.audioRecordingSlideToCancelStartDrawableTint + ) + ) } override fun renderState(state: MessageComposerState) { @@ -485,7 +493,18 @@ public class DefaultMessageComposerOverlappingContent : ConstraintLayout, Messag logger.d { "[showMicPopup] micOrigRect: $micOrigRect" } val micContent = LayoutInflater.from(context).inflate( R.layout.stream_ui_message_composer_default_center_overlap_floating_mic, this, false - ) + ).also { imageView -> + (imageView as ImageView).apply { + val iconDrawable = style.audioRecordingFloatingButtonIconDrawable.applyTint( + style.audioRecordingFloatingButtonIconDrawableTint + ) + setImageDrawable(iconDrawable) + val bgDrawable = style.audioRecordingFloatingButtonBackgroundDrawable.applyTint( + style.audioRecordingFloatingButtonBackgroundDrawableTint + ) + background = bgDrawable + } + } val widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) val heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) @@ -526,8 +545,8 @@ public class DefaultMessageComposerOverlappingContent : ConstraintLayout, Messag R.layout.stream_ui_message_composer_default_center_overlap_floating_lock, this, false ).also { imageView -> (imageView as ImageView).apply { - val iconDrawable = style.audioRecordingLockIconDrawable.applyTint( - style.audioRecordingLockIconDrawableTint + val iconDrawable = style.audioRecordingFloatingLockIconDrawable.applyTint( + style.audioRecordingFloatingLockIconDrawableTint ) setImageDrawable(iconDrawable) } @@ -574,8 +593,8 @@ public class DefaultMessageComposerOverlappingContent : ConstraintLayout, Messag R.layout.stream_ui_message_composer_default_center_overlap_floating_locked, this, false ).also { imageView -> (imageView as ImageView).apply { - val iconDrawable = style.audioRecordingLockedIconDrawable.applyTint( - style.audioRecordingLockedIconDrawableTint + val iconDrawable = style.audioRecordingFloatingLockedIconDrawable.applyTint( + style.audioRecordingFloatingLockedIconDrawableTint ) setImageDrawable(iconDrawable) } @@ -606,7 +625,7 @@ public class DefaultMessageComposerOverlappingContent : ConstraintLayout, Messag ).also { it.findViewById(R.id.holdToRecordText).apply { text = style.audioRecordingHoldToRecordText - setTextColor(style.audioRecordingHoldToRecordTextColor) + setTextStyle(style.audioRecordingHoldToRecordTextStyle) background = style.audioRecordingHoldToRecordBackgroundDrawable.applyTint( style.audioRecordingHoldToRecordBackgroundDrawableTint ) diff --git a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerTrailingContent.kt b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerTrailingContent.kt index 7f22d32c8a7..d7a9a28ea58 100644 --- a/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerTrailingContent.kt +++ b/stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/content/DefaultMessageComposerTrailingContent.kt @@ -104,6 +104,14 @@ public class DefaultMessageComposerTrailingContent : FrameLayout, MessageCompose disabledColor = context.getColorCompat(R.color.stream_ui_grey_gainsboro), ) } + binding.recordAudioButton.setImageDrawable(style.audioRecordingButtonIconDrawable) + style.buttonIconDrawableTintColor?.let { tintColor -> + binding.recordAudioButton.imageTintList = getColorList( + normalColor = tintColor, + selectedColor = tintColor, + disabledColor = context.getColorCompat(R.color.stream_ui_grey_gainsboro), + ) + } binding.cooldownBadgeTextView.setTextStyle(style.cooldownTimerTextStyle) binding.cooldownBadgeTextView.background = style.cooldownTimerBackgroundDrawable @@ -145,6 +153,10 @@ public class DefaultMessageComposerTrailingContent : FrameLayout, MessageCompose else -> true } sendMessageButton.isEnabled = style.sendMessageButtonEnabled && canSendMessage && hasValidContent + recordAudioButton.isEnabled = style.sendMessageButtonEnabled && + canSendMessage && + canUploadRecording && + canUploadFile recordAudioButton.isVisible = when (style.audioRecordingButtonVisible) { true -> when (style.audioRecordingButtonPreferred) { true -> canUploadFile && canUploadRecording && canSendMessage && !isInEditMode && !hasTextInput diff --git a/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_content.xml b/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_content.xml index e340a3d3ede..ab3d4a253d5 100644 --- a/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_content.xml +++ b/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_content.xml @@ -72,6 +72,7 @@ android:layout_marginEnd="96dp" android:gravity="center" android:text="@string/stream_ui_message_composer_slide_to_cancel" + android:textColor="@color/stream_ui_text_color_secondary" app:drawableStartCompat="@drawable/stream_ui_arrow_left" app:layout_constraintBottom_toBottomOf="@id/recordingPlayback" app:layout_constraintEnd_toEndOf="parent" diff --git a/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_floating_hold.xml b/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_floating_hold.xml index c24fae72b58..7e4f1edff59 100644 --- a/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_floating_hold.xml +++ b/stream-chat-android-ui-components/src/main/res/layout/stream_ui_message_composer_default_center_overlap_floating_hold.xml @@ -16,11 +16,9 @@ --> diff --git a/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml b/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml index e729209e65f..2b6c5ac7e87 100644 --- a/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml +++ b/stream-chat-android-ui-components/src/main/res/values/attrs_message_composer_view.xml @@ -130,19 +130,38 @@ - - + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + @@ -177,6 +196,10 @@ + + + + diff --git a/stream-chat-android-ui-components/src/main/res/values/dimens.xml b/stream-chat-android-ui-components/src/main/res/values/dimens.xml index f16696a8c3a..6ec9bab9a84 100644 --- a/stream-chat-android-ui-components/src/main/res/values/dimens.xml +++ b/stream-chat-android-ui-components/src/main/res/values/dimens.xml @@ -193,5 +193,6 @@ 52dp 52dp 48dp + 8dp diff --git a/stream-chat-android-ui-components/src/main/res/values/styles.xml b/stream-chat-android-ui-components/src/main/res/values/styles.xml index 8b282dcd84c..d2a63c39f8c 100644 --- a/stream-chat-android-ui-components/src/main/res/values/styles.xml +++ b/stream-chat-android-ui-components/src/main/res/values/styles.xml @@ -1044,19 +1044,26 @@ 2dp - false - false @string/stream_ui_message_composer_hold_to_record + @dimen/stream_ui_text_medium @color/stream_ui_white_snow + bold + @font/stream_roboto_medium @drawable/stream_ui_message_composer_audio_record_hold_background @null @string/stream_ui_message_composer_slide_to_cancel - @drawable/stream_ui_ic_mic - @null - @drawable/stream_ui_ic_mic_lock - @null - @drawable/stream_ui_ic_mic_locked - @null + @dimen/stream_ui_text_medium + @color/stream_ui_text_color_secondary + normal + @font/stream_roboto_medium + @drawable/stream_ui_ic_mic + @color/stream_ui_accent_blue + @drawable/stream_ui_message_composer_audio_record_mic_background + @null + @drawable/stream_ui_ic_mic_lock + @null + @drawable/stream_ui_ic_mic_locked + @null true @@ -1083,6 +1090,10 @@ true @drawable/stream_ui_ic_send_message + false + true + false + @drawable/stream_ui_ic_mic @dimen/stream_ui_text_large @color/stream_ui_literal_white @drawable/stream_ui_cooldown_badge_background