From 6b938a20d8e37519f13b8e1627d53b452d8687cc Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 7 Aug 2023 16:09:44 -0500 Subject: [PATCH] Allow publishing SVG avatar --- .../conversations/persistance/FileBackend.java | 17 +++++++++++++---- .../PublishGroupChatProfilePictureActivity.java | 3 ++- .../ui/PublishProfilePictureActivity.java | 3 ++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index ce6a62b1d8e526fa90d2b349ab3540e3e871dc71..cee0739834c09025dcd5a09db42949818efcb509 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -1537,7 +1537,12 @@ public class FileBackend { return new Pair(getPepAvatar(bitmap, Bitmap.CompressFormat.PNG, 100), false); } } catch (Exception e) { - return null; + try { + final SVG svg = SVG.getFromInputStream(mXmppConnectionService.getContentResolver().openInputStream(uri)); + return new Pair(getPepAvatar(uri, (int) svg.getDocumentWidth(), (int) svg.getDocumentHeight(), "image/svg+xml"), true); + } catch (Exception e2) { + return null; + } } } @@ -1758,7 +1763,7 @@ public class FileBackend { decoder.setCrop(new Rect(left, top, left + newSize, top + newSize)); }); } catch (final IOException e) { - return null; + return getSVGSquare(image, size); } } else { Bitmap bitmap = cropCenterSquare(image, size); @@ -2125,7 +2130,7 @@ public class FileBackend { Canvas canvas = new Canvas(output); svg.renderToCanvas(canvas, target); - return new BitmapDrawable(output); + return new SVGDrawable(output); } catch (final IOException | SVGParseException e) { return null; } @@ -2146,7 +2151,7 @@ public class FileBackend { Canvas canvas = new Canvas(output); svg.renderToCanvas(canvas); - return new BitmapDrawable(output); + return new SVGDrawable(output); } catch (final IOException | SVGParseException e) { return null; } @@ -2198,4 +2203,8 @@ public class FileBackend { return resId; } } + + public static class SVGDrawable extends BitmapDrawable { + public SVGDrawable(Bitmap bm) { super(bm); } + } } diff --git a/src/main/java/eu/siacs/conversations/ui/PublishGroupChatProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishGroupChatProfilePictureActivity.java index 9dd273412b26a70dbdbb59d999ccbbc5606a795c..c21f789e6cc11616f39feef9328f16da74c41f11 100644 --- a/src/main/java/eu/siacs/conversations/ui/PublishGroupChatProfilePictureActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/PublishGroupChatProfilePictureActivity.java @@ -48,6 +48,7 @@ import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.databinding.ActivityPublishProfilePictureBinding; import eu.siacs.conversations.entities.Conversation; +import eu.siacs.conversations.persistance.FileBackend; import eu.siacs.conversations.ui.interfaces.OnAvatarPublication; import eu.siacs.conversations.ui.util.PendingItem; @@ -145,7 +146,7 @@ public class PublishGroupChatProfilePictureActivity extends XmppActivity impleme if (Build.VERSION.SDK_INT >= 28) { this.uri = uri; reloadAvatar(); - if (this.binding.accountImage.getDrawable() instanceof AnimatedImageDrawable) { + if (this.binding.accountImage.getDrawable() instanceof AnimatedImageDrawable || this.binding.accountImage.getDrawable() instanceof FileBackend.SVGDrawable) { return; } } diff --git a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java index 11bc3c09ec4c1a85cab5c5171e97264a79fbfe23..a11bff80320cffd0a530bd17529b53bb32eaca2f 100644 --- a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java @@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.persistance.FileBackend; import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.ui.interfaces.OnAvatarPublication; import eu.siacs.conversations.utils.PhoneHelper; @@ -241,7 +242,7 @@ public class PublishProfilePictureActivity extends XmppActivity implements XmppC public void cropUri(final Uri uri) { if (Build.VERSION.SDK_INT >= 28) { loadImageIntoPreview(uri); - if (this.avatar.getDrawable() instanceof AnimatedImageDrawable) { + if (this.avatar.getDrawable() instanceof AnimatedImageDrawable || this.avatar.getDrawable() instanceof FileBackend.SVGDrawable) { this.avatarUri = uri; return; }