refactor direct capture

Closes #3516
// FREEBIE
This commit is contained in:
Jake McGinty
2015-06-08 11:07:46 -07:00
committed by Moxie Marlinspike
parent c4a37e38ab
commit 54a37cc658
33 changed files with 1720 additions and 1540 deletions

View File

@@ -0,0 +1,62 @@
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");
}
}