From 694834ade90c3da6d34eb4937ebc049c106df189 Mon Sep 17 00:00:00 2001 From: Grzegorz Orczykowski Date: Wed, 24 Jun 2026 11:35:49 +0200 Subject: [PATCH 1/2] Use consistent image answer view in summary and widget --- .../collect/android/widgets/WidgetAnswer.kt | 20 +------------------ .../widgets/image/ImageWidgetAnswer.kt | 9 +++++++-- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/widgets/WidgetAnswer.kt b/collect_app/src/main/java/org/odk/collect/android/widgets/WidgetAnswer.kt index 4a36a8ca54a..e714e5bf577 100644 --- a/collect_app/src/main/java/org/odk/collect/android/widgets/WidgetAnswer.kt +++ b/collect_app/src/main/java/org/odk/collect/android/widgets/WidgetAnswer.kt @@ -1,20 +1,14 @@ package org.odk.collect.android.widgets import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.AttachFile import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource -import androidx.compose.ui.unit.dp import org.javarosa.core.model.Constants import org.javarosa.form.api.FormEntryPrompt import org.odk.collect.android.widgets.image.ImageWidgetAnswer @@ -57,19 +51,7 @@ fun WidgetAnswer( ) } } - Constants.CONTROL_IMAGE_CHOOSE -> ImageWidgetAnswer( - if (compact) { - modifier - .height(200.dp) - .wrapContentWidth(Alignment.Start) - } else { - modifier.fillMaxWidth() - }, - answer, - if (compact) ContentScale.Fit else ContentScale.FillWidth, - mediaWidgetAnswerViewModel, - onLongClick - ) + Constants.CONTROL_IMAGE_CHOOSE -> ImageWidgetAnswer(modifier, answer, mediaWidgetAnswerViewModel, onLongClick) Constants.CONTROL_VIDEO_CAPTURE -> VideoWidgetAnswer(modifier, answer, mediaWidgetAnswerViewModel, onLongClick) Constants.CONTROL_FILE_CAPTURE -> { val context = LocalContext.current diff --git a/collect_app/src/main/java/org/odk/collect/android/widgets/image/ImageWidgetAnswer.kt b/collect_app/src/main/java/org/odk/collect/android/widgets/image/ImageWidgetAnswer.kt index 8d0a1ec6445..63ea5fd366a 100644 --- a/collect_app/src/main/java/org/odk/collect/android/widgets/image/ImageWidgetAnswer.kt +++ b/collect_app/src/main/java/org/odk/collect/android/widgets/image/ImageWidgetAnswer.kt @@ -1,6 +1,8 @@ package org.odk.collect.android.widgets.image import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -8,11 +10,13 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage import org.odk.collect.android.widgets.MediaWidgetAnswerViewModel import org.odk.collect.androidshared.system.ContextExt.getActivity @@ -22,7 +26,6 @@ import org.odk.collect.androidshared.ui.multiclicksafe.MultiClickGuard fun ImageWidgetAnswer( modifier: Modifier, answer: String, - contentScale: ContentScale, mediaWidgetAnswerViewModel: MediaWidgetAnswerViewModel, onLongClick: () -> Unit ) { @@ -41,10 +44,12 @@ fun ImageWidgetAnswer( } else { AsyncImage( model = it, - contentScale = contentScale, + contentScale = ContentScale.Fit, contentDescription = null, onError = { isError = true }, modifier = modifier + .height(200.dp) + .wrapContentWidth(Alignment.Start) .clip(MaterialTheme.shapes.large) .combinedClickable( onClick = { From 54342e21dbdc63b3dc4a5dd53c130f4083a33e68 Mon Sep 17 00:00:00 2001 From: Grzegorz Orczykowski Date: Wed, 24 Jun 2026 12:15:49 +0200 Subject: [PATCH 2/2] Match image appearance in not-yet-refactored image widgets to basic image widget --- collect_app/src/main/res/layout/annotate_widget.xml | 9 ++++++--- collect_app/src/main/res/layout/draw_widget.xml | 9 ++++++--- collect_app/src/main/res/layout/signature_widget.xml | 9 ++++++--- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/collect_app/src/main/res/layout/annotate_widget.xml b/collect_app/src/main/res/layout/annotate_widget.xml index 6d7fc825649..4f2653281b4 100644 --- a/collect_app/src/main/res/layout/annotate_widget.xml +++ b/collect_app/src/main/res/layout/annotate_widget.xml @@ -53,15 +53,18 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/annotate_button" /> - \ No newline at end of file diff --git a/collect_app/src/main/res/layout/draw_widget.xml b/collect_app/src/main/res/layout/draw_widget.xml index 4c4b73e014d..5a1a5984cf7 100644 --- a/collect_app/src/main/res/layout/draw_widget.xml +++ b/collect_app/src/main/res/layout/draw_widget.xml @@ -27,15 +27,18 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/draw_button" /> - \ No newline at end of file diff --git a/collect_app/src/main/res/layout/signature_widget.xml b/collect_app/src/main/res/layout/signature_widget.xml index da9eed9cfad..8d288554199 100644 --- a/collect_app/src/main/res/layout/signature_widget.xml +++ b/collect_app/src/main/res/layout/signature_widget.xml @@ -27,15 +27,18 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/sign_button" /> - \ No newline at end of file