From 9458810640c00c00f87c32a199d3d62d18b5f5b8 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 30 May 2025 18:00:21 +0200 Subject: [PATCH] try to limit full size avatars to under minimum file auto accept size at that resolution it should rarely go over anyway --- .../java/eu/siacs/conversations/Config.java | 9 ++---- .../ui/PublishProfilePictureActivity.java | 4 +-- .../xmpp/manager/AvatarManager.java | 32 ++++++++++++++----- .../android/xmpp/model/upload/Request.java | 8 ++--- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 388abd1e36ed7f184254ce92f8b17e4ebe7f1a92..637f5e7ea58366844fc133601c5d011d41b785aa 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -75,12 +75,9 @@ public final class Config { public static final int CONNECT_DISCO_TIMEOUT = 20; public static final int MINI_GRACE_PERIOD = 750; - // media file formats. Homogenous Android or Conversations only deployments can switch to opus - // and webp - public static final int AVATAR_SIZE = 192; - public static final Bitmap.CompressFormat AVATAR_FORMAT = Bitmap.CompressFormat.JPEG; - public static final int AVATAR_FULL_SIZE = 1024; - public static final int AVATAR_CHAR_LIMIT = 9400; + public static final int AVATAR_THUMBNAIL_SIZE = 192; + public static final int AVATAR_THUMBNAIL_CHAR_LIMIT = 9400; + public static final int AVATAR_FULL_SIZE = 1280; public static final int IMAGE_SIZE = 1920; public static final Bitmap.CompressFormat IMAGE_FORMAT = Bitmap.CompressFormat.JPEG; diff --git a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java index 276bedc5095549bd4b8914a58b5dfab09730d52a..139c13379943957b8c5a08dab2dc8c1f5699b3a6 100644 --- a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java @@ -192,8 +192,8 @@ public class PublishProfilePictureActivity extends XmppActivity cropImageOptions.fixAspectRatio = true; cropImageOptions.outputCompressFormat = Bitmap.CompressFormat.PNG; cropImageOptions.imageSourceIncludeCamera = false; - cropImageOptions.minCropResultHeight = Config.AVATAR_SIZE; - cropImageOptions.minCropResultWidth = Config.AVATAR_SIZE; + cropImageOptions.minCropResultHeight = Config.AVATAR_THUMBNAIL_SIZE; + cropImageOptions.minCropResultWidth = Config.AVATAR_THUMBNAIL_SIZE; return cropImageOptions; } diff --git a/src/main/java/eu/siacs/conversations/xmpp/manager/AvatarManager.java b/src/main/java/eu/siacs/conversations/xmpp/manager/AvatarManager.java index bc51da396b0d39f7ff9d42627cbdbdd27cdedb57..55f5b02fd90f0e22d4852355b8cc4a8109f7dffe 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/manager/AvatarManager.java +++ b/src/main/java/eu/siacs/conversations/xmpp/manager/AvatarManager.java @@ -24,6 +24,7 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import eu.siacs.conversations.AppSettings; import eu.siacs.conversations.Config; +import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Conversational; @@ -544,19 +545,30 @@ public class AvatarManager extends AbstractManager { final ListenableFuture avatarFuture; if (hasAlphaChannel) { avatarThumbnailFuture = - resizeAndStoreAvatarAsync(image, Config.AVATAR_SIZE / 2, ImageFormat.PNG); + resizeAndStoreAvatarAsync( + image, Config.AVATAR_THUMBNAIL_SIZE / 2, ImageFormat.PNG); avatarFuture = resizeAndStoreAvatarAsync(image, Config.AVATAR_FULL_SIZE / 2, ImageFormat.PNG); } else { + final int autoAcceptFileSize = + context.getResources().getInteger(R.integer.auto_accept_filesize); avatarThumbnailFuture = resizeAndStoreAvatarAsync( - image, Config.AVATAR_SIZE, ImageFormat.JPEG, Config.AVATAR_CHAR_LIMIT); + image, + Config.AVATAR_THUMBNAIL_SIZE, + ImageFormat.JPEG, + Config.AVATAR_THUMBNAIL_CHAR_LIMIT); avatarFuture = - resizeAndStoreAvatarAsync(image, Config.AVATAR_FULL_SIZE, ImageFormat.JPEG); + resizeAndStoreAvatarAsync( + image, Config.AVATAR_FULL_SIZE, ImageFormat.JPEG, autoAcceptFileSize); if (Compatibility.twentyEight() && !PhoneHelper.isEmulator()) { final var avatarHeifFuture = - resizeAndStoreAvatarAsync(image, Config.AVATAR_FULL_SIZE, ImageFormat.HEIF); + resizeAndStoreAvatarAsync( + image, + Config.AVATAR_FULL_SIZE, + ImageFormat.HEIF, + autoAcceptFileSize); final var avatarHeifWithUrlFuture = Futures.transformAsync( avatarHeifFuture, this::upload, MoreExecutors.directExecutor()); @@ -564,7 +576,11 @@ public class AvatarManager extends AbstractManager { } if (Compatibility.thirtyFour() && !PhoneHelper.isEmulator()) { final var avatarAvifFuture = - resizeAndStoreAvatarAsync(image, Config.AVATAR_FULL_SIZE, ImageFormat.AVIF); + resizeAndStoreAvatarAsync( + image, + Config.AVATAR_FULL_SIZE, + ImageFormat.AVIF, + autoAcceptFileSize); final var avatarAvifWithUrlFuture = Futures.transformAsync( avatarAvifFuture, this::upload, MoreExecutors.directExecutor()); @@ -653,13 +669,13 @@ public class AvatarManager extends AbstractManager { hasAlphaChannel -> { if (hasAlphaChannel) { return resizeAndStoreAvatarAsync( - image, Config.AVATAR_SIZE / 2, ImageFormat.PNG); + image, Config.AVATAR_THUMBNAIL_SIZE / 2, ImageFormat.PNG); } else { return resizeAndStoreAvatarAsync( image, - Config.AVATAR_SIZE, + Config.AVATAR_THUMBNAIL_SIZE, ImageFormat.JPEG, - Config.AVATAR_CHAR_LIMIT); + Config.AVATAR_THUMBNAIL_CHAR_LIMIT); } }, MoreExecutors.directExecutor()); diff --git a/src/main/java/im/conversations/android/xmpp/model/upload/Request.java b/src/main/java/im/conversations/android/xmpp/model/upload/Request.java index bbf8a98c1632aca15b6f39015448b1b3a611777d..be70aa33260ee90391b13f9024147138b6d01966 100644 --- a/src/main/java/im/conversations/android/xmpp/model/upload/Request.java +++ b/src/main/java/im/conversations/android/xmpp/model/upload/Request.java @@ -10,15 +10,15 @@ public class Request extends Extension { super(Request.class); } - public void setFilename(String filename) { + public void setFilename(final String filename) { this.setAttribute("filename", filename); } - public void setSize(long size) { + public void setSize(final long size) { this.setAttribute("size", size); } - public void setContentType(String type) { - this.setAttribute("content-ype", type); + public void setContentType(final String type) { + this.setAttribute("content-type", type); } }