2014-12-12 09:03:24 +00:00
|
|
|
package org.thoughtcrime.securesms.mms;
|
|
|
|
|
|
|
|
import android.content.ContentUris;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.UriMatcher;
|
|
|
|
import android.net.Uri;
|
|
|
|
|
|
|
|
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
|
|
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
|
|
|
import org.thoughtcrime.securesms.database.PartDatabase;
|
2015-06-08 18:07:46 +00:00
|
|
|
import org.thoughtcrime.securesms.providers.CaptureProvider;
|
2014-12-12 09:03:24 +00:00
|
|
|
import org.thoughtcrime.securesms.providers.PartProvider;
|
|
|
|
|
2014-12-30 09:36:51 +00:00
|
|
|
import java.io.IOException;
|
2014-12-12 09:03:24 +00:00
|
|
|
import java.io.InputStream;
|
|
|
|
|
|
|
|
public class PartAuthority {
|
|
|
|
|
2015-03-31 22:44:41 +00:00
|
|
|
private static final String PART_URI_STRING = "content://org.thoughtcrime.securesms/part";
|
|
|
|
private static final String THUMB_URI_STRING = "content://org.thoughtcrime.securesms/thumb";
|
2015-05-18 15:16:06 +00:00
|
|
|
private static final Uri PART_CONTENT_URI = Uri.parse(PART_URI_STRING);
|
|
|
|
private static final Uri THUMB_CONTENT_URI = Uri.parse(THUMB_URI_STRING);
|
2014-12-12 09:03:24 +00:00
|
|
|
|
2015-06-08 18:07:46 +00:00
|
|
|
private static final int PART_ROW = 1;
|
|
|
|
private static final int THUMB_ROW = 2;
|
|
|
|
private static final int CAPTURE_ROW = 3;
|
2014-12-12 09:03:24 +00:00
|
|
|
|
|
|
|
private static final UriMatcher uriMatcher;
|
|
|
|
|
|
|
|
static {
|
|
|
|
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
|
2015-05-18 15:16:06 +00:00
|
|
|
uriMatcher.addURI("org.thoughtcrime.securesms", "part/*/#", PART_ROW);
|
|
|
|
uriMatcher.addURI("org.thoughtcrime.securesms", "thumb/*/#", THUMB_ROW);
|
2015-06-08 18:07:46 +00:00
|
|
|
uriMatcher.addURI(CaptureProvider.AUTHORITY, CaptureProvider.EXPECTED_PATH, CAPTURE_ROW);
|
2014-12-12 09:03:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static InputStream getPartStream(Context context, MasterSecret masterSecret, Uri uri)
|
2014-12-30 09:36:51 +00:00
|
|
|
throws IOException
|
2014-12-12 09:03:24 +00:00
|
|
|
{
|
2015-06-08 18:07:46 +00:00
|
|
|
int match = uriMatcher.match(uri);
|
2015-01-13 19:47:32 +00:00
|
|
|
try {
|
|
|
|
switch (match) {
|
2015-05-18 15:16:06 +00:00
|
|
|
case PART_ROW:
|
2015-05-21 18:55:03 +00:00
|
|
|
PartUriParser partUri = new PartUriParser(uri);
|
2015-06-08 18:07:46 +00:00
|
|
|
return DatabaseFactory.getPartDatabase(context).getPartStream(masterSecret, partUri.getPartId());
|
2015-05-18 15:16:06 +00:00
|
|
|
case THUMB_ROW:
|
2015-05-21 18:55:03 +00:00
|
|
|
partUri = new PartUriParser(uri);
|
2015-06-08 18:07:46 +00:00
|
|
|
return DatabaseFactory.getPartDatabase(context).getThumbnailStream(masterSecret, partUri.getPartId());
|
|
|
|
case CAPTURE_ROW:
|
|
|
|
return CaptureProvider.getInstance(context).getStream(masterSecret, ContentUris.parseId(uri));
|
2015-05-18 15:16:06 +00:00
|
|
|
default:
|
2015-06-08 18:07:46 +00:00
|
|
|
return context.getContentResolver().openInputStream(uri);
|
2015-01-13 19:47:32 +00:00
|
|
|
}
|
|
|
|
} catch (SecurityException se) {
|
|
|
|
throw new IOException(se);
|
2014-12-12 09:03:24 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Uri getPublicPartUri(Uri uri) {
|
2015-05-21 18:55:03 +00:00
|
|
|
PartUriParser partUri = new PartUriParser(uri);
|
|
|
|
return PartProvider.getContentUri(partUri.getPartId());
|
2014-12-12 09:03:24 +00:00
|
|
|
}
|
2015-03-31 22:44:41 +00:00
|
|
|
|
2015-05-21 18:55:03 +00:00
|
|
|
public static Uri getPartUri(PartDatabase.PartId partId) {
|
|
|
|
Uri uri = Uri.withAppendedPath(PART_CONTENT_URI, String.valueOf(partId.getUniqueId()));
|
|
|
|
return ContentUris.withAppendedId(uri, partId.getRowId());
|
2015-05-18 15:16:06 +00:00
|
|
|
}
|
|
|
|
|
2015-05-21 18:55:03 +00:00
|
|
|
public static Uri getThumbnailUri(PartDatabase.PartId partId) {
|
|
|
|
Uri uri = Uri.withAppendedPath(THUMB_CONTENT_URI, String.valueOf(partId.getUniqueId()));
|
|
|
|
return ContentUris.withAppendedId(uri, partId.getRowId());
|
2015-03-31 22:44:41 +00:00
|
|
|
}
|
2014-12-12 09:03:24 +00:00
|
|
|
}
|