@@ -40,6 +40,9 @@ import androidx.core.content.FileProvider;
 import androidx.documentfile.provider.DocumentFile;
 import androidx.exifinterface.media.ExifInterface;
 
+import com.caverock.androidsvg.SVG;
+import com.caverock.androidsvg.SVGParseException;
+
 import com.cheogram.android.BobTransfer;
 
 import com.google.common.base.Strings;
@@ -1219,7 +1222,9 @@ public class FileBackend {
                     return thumbnail;
                 }
                 final String mime = file.getMimeType();
-                if ("application/pdf".equals(mime)) {
+                if ("image/svg+xml".equals(mime)) {
+                    thumbnail = getSVG(file, size);
+                } else if ("application/pdf".equals(mime)) {
                     thumbnail = new BitmapDrawable(res, getPdfDocumentPreview(file, size));
                 } else if (mime.startsWith("video/")) {
                     thumbnail = new BitmapDrawable(res, getVideoPreview(file, size));
@@ -1934,6 +1939,9 @@ public class FileBackend {
                         dimensions = getVideoDimensions(file);
                     } else if (pdf) {
                         dimensions = getPdfDocumentDimensions(file);
+                    } else if ("image/svg+xml".equals(mime)) {
+                        SVG svg = SVG.getFromInputStream(new FileInputStream(file));
+                        dimensions = new Dimensions((int) svg.getDocumentHeight(), (int) svg.getDocumentWidth());
                     } else {
                         dimensions = getImageDimensions(file);
                     }
@@ -1941,7 +1949,7 @@ public class FileBackend {
                         fileParams.width = dimensions.width;
                         fileParams.height = dimensions.height;
                     }
-                } catch (final IOException | NotAVideoFile notAVideoFile) {
+                } catch (final IOException | SVGParseException | NotAVideoFile notAVideoFile) {
                     Log.d(
                             Config.LOGTAG,
                             "file with mime type " + file.getMimeType() + " was not a video file");
@@ -2089,7 +2097,7 @@ public class FileBackend {
                     decoder.setCrop(new Rect(left, top, left + newSize, top + newSize));
                 });
             } catch (final IOException e) {
-                return null;
+                return getSVGSquare(getAvatarUri(avatar), size);
             }
         } else {
             Bitmap bm = cropCenter(getAvatarUri(avatar), size, size);
@@ -2097,6 +2105,53 @@ public class FileBackend {
         }
     }
 
+    public Drawable getSVGSquare(Uri uri, int size) {
+        try {
+            SVG svg = SVG.getFromInputStream(mXmppConnectionService.getContentResolver().openInputStream(uri));
+            svg.setDocumentPreserveAspectRatio(com.caverock.androidsvg.PreserveAspectRatio.FULLSCREEN);
+            svg.setDocumentWidth("100%");
+            svg.setDocumentHeight("100%");
+
+            float w = svg.getDocumentWidth();
+            float h = svg.getDocumentHeight();
+            float scale = Math.max((float) size / h, (float) size / w);
+            float outWidth = scale * w;
+            float outHeight = scale * h;
+            float left = (size - outWidth) / 2;
+            float top = (size - outHeight) / 2;
+            RectF target = new RectF(left, top, left + outWidth, top + outHeight);
+
+            Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
+            Canvas canvas = new Canvas(output);
+            svg.renderToCanvas(canvas, target);
+
+            return new BitmapDrawable(output);
+        } catch (final IOException | SVGParseException e) {
+            return null;
+        }
+    }
+
+    public Drawable getSVG(File file, int size) {
+        try {
+            SVG svg = SVG.getFromInputStream(new FileInputStream(file));
+            svg.setDocumentPreserveAspectRatio(com.caverock.androidsvg.PreserveAspectRatio.TOP);
+
+            float w = svg.getDocumentWidth();
+            float h = svg.getDocumentHeight();
+            Rect r = rectForSize((int) w, (int) h, size);
+            svg.setDocumentWidth("100%");
+            svg.setDocumentHeight("100%");
+
+            Bitmap output = Bitmap.createBitmap(r.width(), r.height(), Bitmap.Config.ARGB_8888);
+            Canvas canvas = new Canvas(output);
+            svg.renderToCanvas(canvas);
+
+            return new BitmapDrawable(output);
+        } catch (final IOException | SVGParseException e) {
+            return null;
+        }
+    }
+
     private static class Dimensions {
         public final int width;
         public final int height;