1package eu.siacs.conversations.persistance;
2
3import java.io.File;
4import java.io.FileNotFoundException;
5import java.io.FileOutputStream;
6import java.io.IOException;
7import java.io.InputStream;
8import java.io.OutputStream;
9import java.math.BigInteger;
10
11import android.content.Context;
12import android.graphics.Bitmap;
13import android.graphics.BitmapFactory;
14import android.net.Uri;
15import android.util.Log;
16
17import eu.siacs.conversations.entities.Conversation;
18import eu.siacs.conversations.entities.Message;
19
20
21public class FileBackend {
22
23 private static int IMAGE_SIZE = 1920;
24
25 private Context context;
26
27 public FileBackend(Context context) {
28 this.context = context;
29 }
30
31 private File getImageFile(Message message) {
32 Conversation conversation = message.getConversation();
33 String prefix = context.getFilesDir().getAbsolutePath();
34 String path = prefix+"/"+conversation.getAccount().getJid()+"/"+conversation.getContactJid();
35 String filename = message.getUuid() + ".webp";
36 return new File(path+"/"+filename);
37 }
38
39 public File copyImageToPrivateStorage(Message message, Uri image) {
40 try {
41 InputStream is = context.getContentResolver().openInputStream(image);
42 File file = getImageFile(message);
43 file.getParentFile().mkdirs();
44 file.createNewFile();
45 OutputStream os = new FileOutputStream(file);
46 Bitmap originalBitmap = BitmapFactory.decodeStream(is);
47 is.close();
48 int w = originalBitmap.getWidth();
49 int h = originalBitmap.getHeight();
50 boolean success;
51 if (Math.max(w, h) > IMAGE_SIZE) {
52 int scalledW;
53 int scalledH;
54 if (w<=h) {
55 scalledW = (int) (w / ((double) h/IMAGE_SIZE));
56 scalledH = IMAGE_SIZE;
57 } else {
58 scalledW = IMAGE_SIZE;
59 scalledH = (int) (h / ((double) w/IMAGE_SIZE));
60 }
61 Bitmap scalledBitmap = Bitmap.createScaledBitmap(originalBitmap, scalledW,scalledH, true);
62 success = scalledBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
63 } else {
64 success = originalBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
65 }
66 if (!success) {
67 Log.d("xmppService","couldnt compress");
68 }
69 os.close();
70 return file;
71 } catch (FileNotFoundException e) {
72 // TODO Auto-generated catch block
73 e.printStackTrace();
74 } catch (IOException e) {
75 // TODO Auto-generated catch block
76 e.printStackTrace();
77 }
78
79 return null;
80 }
81
82
83 public Bitmap getImageFromMessage(Message message) {
84 return BitmapFactory.decodeFile(getImageFile(message).getAbsolutePath());
85 }
86}