diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index e9254414ee720943d1b042bcdb5042988fef6c4b..fb3e54728a119fe6fb6cd03ad118792521edb7e7 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -86,7 +86,7 @@ public final class Config { public static final int AVATAR_SIZE = 192; public static final Bitmap.CompressFormat AVATAR_FORMAT = Bitmap.CompressFormat.JPEG; - public static final int AVATAR_CHAR_LIMIT = 100000; + public static final int AVATAR_CHAR_LIMIT = 9400; 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/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 479e16b28a0b71fe3cda9e298347c187a223a108..c403626902d65f7aadbca9a00ce01a23e4f990af 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -30,6 +30,7 @@ import android.system.StructStat; import android.util.Base64; import android.util.Base64OutputStream; import android.util.DisplayMetrics; +import android.util.Pair; import android.util.Log; import android.util.LruCache; @@ -1479,16 +1480,16 @@ public class FileBackend { public Avatar getPepAvatar(Uri image, int size, Bitmap.CompressFormat format) { - final Avatar uncompressAvatar = getUncompressedAvatar(image); - if (uncompressAvatar != null - && uncompressAvatar.image.length() <= Config.AVATAR_CHAR_LIMIT) { - return uncompressAvatar; + final Pair uncompressAvatar = getUncompressedAvatar(image); + if (uncompressAvatar != null && uncompressAvatar.first != null && + (uncompressAvatar.first.image.length() <= Config.AVATAR_CHAR_LIMIT || uncompressAvatar.second)) { + return uncompressAvatar.first; } - if (uncompressAvatar != null) { + if (uncompressAvatar != null && uncompressAvatar.first != null) { Log.d( Config.LOGTAG, "uncompressed avatar exceeded char limit by " - + (uncompressAvatar.image.length() - Config.AVATAR_CHAR_LIMIT)); + + (uncompressAvatar.first.image.length() - Config.AVATAR_CHAR_LIMIT)); } Bitmap bm = cropCenterSquare(image, size); @@ -1504,7 +1505,7 @@ public class FileBackend { return getPepAvatar(bm, format, 100); } - private Avatar getUncompressedAvatar(Uri uri) { + private Pair getUncompressedAvatar(Uri uri) { try { if (android.os.Build.VERSION.SDK_INT >= 28) { ImageDecoder.Source source = ImageDecoder.createSource(mXmppConnectionService.getContentResolver(), uri); @@ -1520,15 +1521,15 @@ public class FileBackend { if (animated[0]) { Avatar avatar = getPepAvatar(uri, size[0], size[1], mimeType[0]); - if (avatar != null) return avatar; + if (avatar != null) return new Pair(avatar, true); } - return getPepAvatar(drawDrawable(drawable), Bitmap.CompressFormat.PNG, 100); + return new Pair(getPepAvatar(drawDrawable(drawable), Bitmap.CompressFormat.PNG, 100), false); } else { Bitmap bitmap = BitmapFactory.decodeStream( mXmppConnectionService.getContentResolver().openInputStream(uri)); - return getPepAvatar(bitmap, Bitmap.CompressFormat.PNG, 100); + return new Pair(getPepAvatar(bitmap, Bitmap.CompressFormat.PNG, 100), false); } } catch (Exception e) { return null; @@ -1537,7 +1538,7 @@ public class FileBackend { private Avatar getPepAvatar(Uri uri, int width, int height, final String mimeType) throws IOException, NoSuchAlgorithmException { AssetFileDescriptor fd = mXmppConnectionService.getContentResolver().openAssetFileDescriptor(uri, "r"); - if (fd.getLength() > Config.AVATAR_CHAR_LIMIT) return null; // Too big to use raw file + if (fd.getLength() > 100000) return null; // Too big to use raw file ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream(); Base64OutputStream mBase64OutputStream =