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;
18
19
20public class FileBackend {
21
22 private static int IMAGE_SIZE = 1920;
23
24 private Context context;
25
26 public FileBackend(Context context) {
27 this.context = context;
28 }
29
30
31 public File copyImageToPrivateStorage(Conversation conversation, Uri image) {
32 try {
33 InputStream is = context.getContentResolver().openInputStream(image);
34 String prefix = context.getFilesDir().getAbsolutePath();
35 String path = prefix+"/"+conversation.getAccount().getJid()+"/"+conversation.getContactJid();
36 String filename =new BigInteger(""+System.currentTimeMillis()).toString(32) + ".webp";
37 File file = new File(path+"/"+filename);
38 file.getParentFile().mkdirs();
39 file.createNewFile();
40 OutputStream os = new FileOutputStream(file);
41 Bitmap originalBitmap = BitmapFactory.decodeStream(is);
42 is.close();
43 int w = originalBitmap.getWidth();
44 int h = originalBitmap.getHeight();
45 boolean success;
46 if (Math.max(w, h) > IMAGE_SIZE) {
47 int scalledW;
48 int scalledH;
49 if (w<=h) {
50 scalledW = (int) (w / ((double) h/IMAGE_SIZE));
51 scalledH = IMAGE_SIZE;
52 } else {
53 scalledW = IMAGE_SIZE;
54 scalledH = (int) (h / ((double) w/IMAGE_SIZE));
55 }
56 Bitmap scalledBitmap = Bitmap.createScaledBitmap(originalBitmap, scalledW,scalledH, true);
57 success = scalledBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
58 } else {
59 success = originalBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
60 }
61 if (!success) {
62 Log.d("xmppService","couldnt compress");
63 }
64 os.close();
65 return file;
66 } catch (FileNotFoundException e) {
67 // TODO Auto-generated catch block
68 e.printStackTrace();
69 } catch (IOException e) {
70 // TODO Auto-generated catch block
71 e.printStackTrace();
72 }
73
74 return null;
75 }
76}