aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations/persistance/FileBackend.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/eu/siacs/conversations/persistance/FileBackend.java')
-rw-r--r--src/eu/siacs/conversations/persistance/FileBackend.java76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/eu/siacs/conversations/persistance/FileBackend.java b/src/eu/siacs/conversations/persistance/FileBackend.java
new file mode 100644
index 000000000..05c505308
--- /dev/null
+++ b/src/eu/siacs/conversations/persistance/FileBackend.java
@@ -0,0 +1,76 @@
+package eu.siacs.conversations.persistance;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigInteger;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.util.Log;
+
+import eu.siacs.conversations.entities.Conversation;
+
+
+public class FileBackend {
+
+ private static int IMAGE_SIZE = 1920;
+
+ private Context context;
+
+ public FileBackend(Context context) {
+ this.context = context;
+ }
+
+
+ public File copyImageToPrivateStorage(Conversation conversation, Uri image) {
+ try {
+ InputStream is = context.getContentResolver().openInputStream(image);
+ String prefix = context.getFilesDir().getAbsolutePath();
+ String path = prefix+"/"+conversation.getAccount().getJid()+"/"+conversation.getContactJid();
+ String filename =new BigInteger(""+System.currentTimeMillis()).toString(32) + ".webp";
+ File file = new File(path+"/"+filename);
+ file.getParentFile().mkdirs();
+ file.createNewFile();
+ OutputStream os = new FileOutputStream(file);
+ Bitmap originalBitmap = BitmapFactory.decodeStream(is);
+ is.close();
+ int w = originalBitmap.getWidth();
+ int h = originalBitmap.getHeight();
+ boolean success;
+ if (Math.max(w, h) > IMAGE_SIZE) {
+ int scalledW;
+ int scalledH;
+ if (w<=h) {
+ scalledW = (int) (w / ((double) h/IMAGE_SIZE));
+ scalledH = IMAGE_SIZE;
+ } else {
+ scalledW = IMAGE_SIZE;
+ scalledH = (int) (h / ((double) w/IMAGE_SIZE));
+ }
+ Bitmap scalledBitmap = Bitmap.createScaledBitmap(originalBitmap, scalledW,scalledH, true);
+ success = scalledBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
+ } else {
+ success = originalBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
+ }
+ if (!success) {
+ Log.d("xmppService","couldnt compress");
+ }
+ os.close();
+ return file;
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+}