diff --git a/feature/media-send/src/main/java/org/signal/mediasend/PreviewMediaConstraints.kt b/feature/media-send/src/main/java/org/signal/mediasend/PreviewMediaConstraints.kt
index 6a2b5da3b5..b561fa798a 100644
--- a/feature/media-send/src/main/java/org/signal/mediasend/PreviewMediaConstraints.kt
+++ b/feature/media-send/src/main/java/org/signal/mediasend/PreviewMediaConstraints.kt
@@ -7,6 +7,7 @@ package org.signal.mediasend
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
+import org.signal.mediasend.edit.image.BrushWidths
import org.thoughtcrime.securesms.video.TranscodingConfig
import kotlin.time.Duration.Companion.seconds
@@ -37,6 +38,7 @@ internal fun rememberPreviewState() = remember {
MediaSendState(
mediaConstraints = PreviewMediaConstraints,
storyMaxVideoDuration = 30.seconds,
- storiesEnabled = true
+ storiesEnabled = true,
+ brushWidths = BrushWidths(0f, 0f, 0f)
)
}
diff --git a/feature/media-send/src/main/java/org/signal/mediasend/edit/MediaEditScreen.kt b/feature/media-send/src/main/java/org/signal/mediasend/edit/MediaEditScreen.kt
index 5b89a476c2..1bb8519105 100644
--- a/feature/media-send/src/main/java/org/signal/mediasend/edit/MediaEditScreen.kt
+++ b/feature/media-send/src/main/java/org/signal/mediasend/edit/MediaEditScreen.kt
@@ -56,8 +56,7 @@ import org.signal.mediasend.edit.document.DocumentPage
import org.signal.mediasend.edit.image.BrushWidthBar
import org.signal.mediasend.edit.image.BrushWidthPreview
import org.signal.mediasend.edit.image.BrushWidthsState
-import org.signal.mediasend.edit.image.ColorBarOrientation
-import org.signal.mediasend.edit.image.HSVColorBar
+import org.signal.mediasend.edit.image.DrawModeColorBar
import org.signal.mediasend.edit.image.ImageEditor
import org.signal.mediasend.edit.image.ImageEditorToolbar
import org.signal.mediasend.edit.image.RotationDial
@@ -260,11 +259,7 @@ fun MediaEditScreen(
}
if (controller.isUserDrawing) {
- HSVColorBar(
- state = controller.drawColorBarState,
- onColorChanged = controller::setDrawColor,
- orientation = ColorBarOrientation.HORIZONTAL
- )
+ DrawModeColorBar(imageEditorController = controller)
}
if (isSmallWindowBreakpoint) {
diff --git a/feature/media-send/src/main/java/org/signal/mediasend/edit/image/DrawModeColorBar.kt b/feature/media-send/src/main/java/org/signal/mediasend/edit/image/DrawModeColorBar.kt
new file mode 100644
index 0000000000..4f6481f0ba
--- /dev/null
+++ b/feature/media-send/src/main/java/org/signal/mediasend/edit/image/DrawModeColorBar.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2026 Signal Messenger, LLC
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+package org.signal.mediasend.edit.image
+
+import androidx.compose.foundation.layout.Row
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import org.signal.core.ui.compose.DayNightPreviews
+import org.signal.core.ui.compose.IconButtons
+import org.signal.core.ui.compose.Previews
+import org.signal.core.ui.compose.SignalIcons
+import org.signal.core.ui.compose.theme.SignalTheme
+import org.signal.imageeditor.core.model.EditorModel
+import org.signal.mediasend.R
+import org.signal.mediasend.edit.ImageController
+
+/**
+ * Color bar that allows the user to change between highlighter and brush.
+ */
+@Composable
+internal fun DrawModeColorBar(
+ imageEditorController: ImageController
+) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ HSVColorBar(
+ state = imageEditorController.drawColorBarState,
+ onColorChanged = imageEditorController::setDrawColor,
+ orientation = ColorBarOrientation.HORIZONTAL
+ )
+
+ IconButtons.IconButton(
+ onClick = {
+ if (imageEditorController.mode == ImageController.Mode.DRAW) {
+ imageEditorController.enterHighlightMode()
+ } else {
+ imageEditorController.enterDrawMode()
+ }
+ },
+ colors = IconButtons.iconButtonColors(
+ containerColor = SignalTheme.colors.colorSurface5
+ ),
+ size = 40.dp
+ ) {
+ Icon(
+ imageVector = if (imageEditorController.mode == ImageController.Mode.DRAW) {
+ SignalIcons.BrushHighlighter.imageVector
+ } else {
+ SignalIcons.Draw.imageVector
+ },
+ contentDescription = stringResource(
+ if (imageEditorController.mode == ImageController.Mode.DRAW) {
+ R.string.DrawModeColorBar__highlighter
+ } else {
+ R.string.DrawModeColorBar__brush
+ }
+ )
+ )
+ }
+ }
+}
+
+@DayNightPreviews
+@Composable
+private fun DrawModeColorBarPreview() {
+ Previews.Preview {
+ DrawModeColorBar(
+ imageEditorController = remember {
+ ImageController(
+ editorModel = EditorModel.create(0),
+ brushWidths = BrushWidthsState()
+ )
+ }
+ )
+ }
+}
diff --git a/feature/media-send/src/main/res/values/strings.xml b/feature/media-send/src/main/res/values/strings.xml
index 40d004e73c..8a834bb72e 100644
--- a/feature/media-send/src/main/res/values/strings.xml
+++ b/feature/media-send/src/main/res/values/strings.xml
@@ -46,6 +46,11 @@
Unnamed file
+
+ Highlighter
+
+ Brush
+
Play video