Signal-Android/src/org/thoughtcrime/securesms/providers/CaptureProvider.java

63 lines
2.1 KiB
Java
Raw Normal View History

package org.thoughtcrime.securesms.providers;
import android.content.ContentUris;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.net.Uri;
import org.thoughtcrime.securesms.crypto.DecryptingPartInputStream;
import org.thoughtcrime.securesms.crypto.EncryptingPartOutputStream;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class CaptureProvider {
private static final String TAG = CaptureProvider.class.getSimpleName();
private static final String URI_STRING = "content://org.thoughtcrime.securesms/capture";
public static final Uri CONTENT_URI = Uri.parse(URI_STRING);
public static final String AUTHORITY = "org.thoughtcrime.securesms";
public static final String EXPECTED_PATH = "capture/#";
private static volatile CaptureProvider instance;
public static CaptureProvider getInstance(Context context) {
if (instance == null) {
synchronized (CaptureProvider.class) {
if (instance == null) {
instance = new CaptureProvider(context);
}
}
}
return instance;
}
private final Context context;
private CaptureProvider(Context context) {
this.context = context.getApplicationContext();
}
public Uri create(MasterSecret masterSecret, Bitmap bitmap) throws IOException {
long id = System.currentTimeMillis();
OutputStream output = new EncryptingPartOutputStream(getFile(id), masterSecret);
bitmap.compress(CompressFormat.JPEG, 100, output);
output.close();
return ContentUris.withAppendedId(CONTENT_URI, id);
}
public boolean delete(Uri uri) {
return getFile(ContentUris.parseId(uri)).delete();
}
public InputStream getStream(MasterSecret masterSecret, long id) throws IOException {
return new DecryptingPartInputStream(getFile(id), masterSecret);
}
private File getFile(long id) {
return new File(context.getDir("captures", Context.MODE_PRIVATE), id + ".capture");
}
}