diff --git a/app/build.gradle b/app/build.gradle index 16c751e11..c437ba094 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -230,7 +230,7 @@ dependencies { implementation 'com.google.android.flexbox:flexbox:3.0.0' // https://github.com/coil-kt/coil/blob/main/LICENSE.txt Apache v2.0 - def coil_version = "2.4.0" + def coil_version = "2.5.0" implementation("io.coil-kt:coil:$coil_version") implementation("io.coil-kt:coil-gif:$coil_version") implementation("io.coil-kt:coil-svg:$coil_version") diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index e7bd08092..00c9ed413 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -44,6 +44,7 @@ import coil.dispose import coil.load import coil.request.CachePolicy import coil.request.videoFrameMillis +import coil.size.Dimension import coil.transform.CircleCropTransformation import com.google.android.material.switchmaterial.SwitchMaterial import kotlinx.coroutines.* @@ -353,11 +354,39 @@ fun loadRoundImageWithCoil(imageView: ImageView, path: String?) { } } +@BindingAdapter("coilBubble") +fun loadImageInChatBubbleWithCoil(imageView: ImageView, path: String?) { + val height = Dimension( + imageView.resources.getDimension( + R.dimen.chat_message_bubble_image_height_big + ).toInt() + ) + val width = Dimension.Undefined + + loadImageWithCoil(imageView, path, width, height) +} + +@BindingAdapter("coilGrid") +fun loadImageInChatGridBubbleWithCoil(imageView: ImageView, path: String?) { + val size = Dimension( + imageView.resources.getDimension( + R.dimen.chat_message_bubble_file_size + ).toInt() + ) + + loadImageWithCoil(imageView, path, size, size) +} + @BindingAdapter("coil") fun loadImageWithCoil(imageView: ImageView, path: String?) { + loadImageWithCoil(imageView, path, Dimension.Undefined, Dimension.Undefined) +} + +fun loadImageWithCoil(imageView: ImageView, path: String?, width: Dimension, height: Dimension) { if (!path.isNullOrEmpty() && FileUtils.isExtensionImage(path)) { if (corePreferences.vfsEnabled && path.startsWith(corePreferences.vfsCachePath)) { imageView.load(path) { + size(width, height) diskCachePolicy(CachePolicy.DISABLED) listener( onError = { _, result -> @@ -369,6 +398,7 @@ fun loadImageWithCoil(imageView: ImageView, path: String?) { } } else { imageView.load(path) { + size(width, height) listener( onError = { _, result -> Log.e("[Data Binding] [Coil] Error loading [$path]: ${result.throwable}") diff --git a/app/src/main/res/layout/chat_message_image_content_cell.xml b/app/src/main/res/layout/chat_message_image_content_cell.xml index aa47d9402..d31e4fa74 100644 --- a/app/src/main/res/layout/chat_message_image_content_cell.xml +++ b/app/src/main/res/layout/chat_message_image_content_cell.xml @@ -31,9 +31,19 @@ android:layout_height="wrap_content" app:layout_constraintHeight_max="@dimen/chat_message_bubble_image_height_big" app:layout_constraintHeight_min="@dimen/chat_message_bubble_image_height_small" - android:layout_size="@{data.alone ? 0f : @dimen/chat_message_bubble_file_size}" - coil="@{data.filePath}" - android:scaleType="@{data.alone ? ScaleType.FIT_CENTER : ScaleType.CENTER_CROP}" + coilBubble="@{data.filePath}" + android:visibility="@{data.alone ? View.VISIBLE : View.GONE}" + android:scaleType="fitCenter" + android:adjustViewBounds="true" + tools:ignore="MissingConstraints" /> + +