FileBackend.java

 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}