mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Turn AttachmentReader into a proper class
and inject it where needed
This commit is contained in:
@@ -49,6 +49,7 @@ import org.briarproject.briar.api.forum.ForumManager;
|
||||
import org.briarproject.briar.api.forum.ForumSharingManager;
|
||||
import org.briarproject.briar.api.identity.AuthorManager;
|
||||
import org.briarproject.briar.api.introduction.IntroductionManager;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||
import org.briarproject.briar.api.messaging.PrivateMessageFactory;
|
||||
import org.briarproject.briar.api.privategroup.GroupMessageFactory;
|
||||
@@ -95,6 +96,8 @@ public interface AndroidComponent
|
||||
|
||||
IdentityManager identityManager();
|
||||
|
||||
AttachmentReader attachmentReader();
|
||||
|
||||
AuthorManager authorManager();
|
||||
|
||||
PluginManager pluginManager();
|
||||
|
||||
@@ -35,7 +35,7 @@ import static org.briarproject.bramble.util.IoUtils.tryToClose;
|
||||
import static org.briarproject.bramble.util.LogUtils.logDuration;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.bramble.util.LogUtils.now;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_IMAGE_SIZE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_IMAGE_SIZE;
|
||||
|
||||
@NotNullByDefault
|
||||
class AttachmentCreationTask {
|
||||
|
||||
@@ -36,7 +36,7 @@ import static java.util.logging.Logger.getLogger;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.briar.android.attachment.AttachmentItem.State.ERROR;
|
||||
import static org.briarproject.briar.android.util.UiUtils.observeForeverOnce;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_IMAGE_SIZE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_IMAGE_SIZE;
|
||||
|
||||
@NotNullByDefault
|
||||
class AttachmentCreatorImpl implements AttachmentCreator {
|
||||
|
||||
@@ -8,7 +8,7 @@ import org.briarproject.bramble.api.sync.MessageId;
|
||||
import org.briarproject.briar.android.attachment.AttachmentItem.State;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
@@ -43,7 +43,7 @@ class AttachmentRetrieverImpl implements AttachmentRetriever {
|
||||
|
||||
@DatabaseExecutor
|
||||
private final Executor dbExecutor;
|
||||
private final MessagingManager messagingManager;
|
||||
private final AttachmentReader attachmentReader;
|
||||
private final ImageHelper imageHelper;
|
||||
private final ImageSizeCalculator imageSizeCalculator;
|
||||
private final int defaultSize;
|
||||
@@ -57,11 +57,10 @@ class AttachmentRetrieverImpl implements AttachmentRetriever {
|
||||
|
||||
@Inject
|
||||
AttachmentRetrieverImpl(@DatabaseExecutor Executor dbExecutor,
|
||||
MessagingManager messagingManager,
|
||||
AttachmentDimensions dimensions, ImageHelper imageHelper,
|
||||
ImageSizeCalculator imageSizeCalculator) {
|
||||
AttachmentReader attachmentReader, AttachmentDimensions dimensions,
|
||||
ImageHelper imageHelper, ImageSizeCalculator imageSizeCalculator) {
|
||||
this.dbExecutor = dbExecutor;
|
||||
this.messagingManager = messagingManager;
|
||||
this.attachmentReader = attachmentReader;
|
||||
this.imageHelper = imageHelper;
|
||||
this.imageSizeCalculator = imageSizeCalculator;
|
||||
defaultSize = dimensions.defaultSize;
|
||||
@@ -75,7 +74,7 @@ class AttachmentRetrieverImpl implements AttachmentRetriever {
|
||||
@DatabaseExecutor
|
||||
public Attachment getMessageAttachment(AttachmentHeader h)
|
||||
throws DbException {
|
||||
return messagingManager.getAttachment(h);
|
||||
return attachmentReader.getAttachment(h);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -86,13 +85,11 @@ class AttachmentRetrieverImpl implements AttachmentRetriever {
|
||||
boolean needsSize = headers.size() == 1;
|
||||
for (AttachmentHeader h : headers) {
|
||||
// try cache for existing item live data
|
||||
MutableLiveData<AttachmentItem> liveData;
|
||||
if (needsSize) liveData = itemsWithSize.get(h.getMessageId());
|
||||
else {
|
||||
// try items with size first, as they work as well
|
||||
liveData = itemsWithSize.get(h.getMessageId());
|
||||
if (liveData == null)
|
||||
liveData = itemsWithoutSize.get(h.getMessageId());
|
||||
MutableLiveData<AttachmentItem> liveData =
|
||||
itemsWithSize.get(h.getMessageId());
|
||||
if (!needsSize && liveData == null) {
|
||||
// check cache for items that don't need the size
|
||||
liveData = itemsWithoutSize.get(h.getMessageId());
|
||||
}
|
||||
|
||||
// create new live data with LOADING item if cache miss
|
||||
@@ -131,7 +128,7 @@ class AttachmentRetrieverImpl implements AttachmentRetriever {
|
||||
// If a live data is already cached we don't need to do anything
|
||||
if (itemsWithSize.containsKey(h.getMessageId())) return;
|
||||
try {
|
||||
Attachment a = messagingManager.getAttachment(h);
|
||||
Attachment a = attachmentReader.getAttachment(h);
|
||||
AttachmentItem item = createAttachmentItem(a, true);
|
||||
MutableLiveData<AttachmentItem> liveData =
|
||||
new MutableLiveData<>(item);
|
||||
@@ -173,7 +170,7 @@ class AttachmentRetrieverImpl implements AttachmentRetriever {
|
||||
Attachment a;
|
||||
AttachmentItem item;
|
||||
try {
|
||||
a = messagingManager.getAttachment(h);
|
||||
a = attachmentReader.getAttachment(h);
|
||||
item = createAttachmentItem(a, needsSize);
|
||||
} catch (NoSuchMessageException e) {
|
||||
LOG.info("Attachment not received yet");
|
||||
|
||||
@@ -21,7 +21,7 @@ import org.briarproject.briar.android.viewmodel.DbViewModel;
|
||||
import org.briarproject.briar.android.viewmodel.LiveEvent;
|
||||
import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
import org.briarproject.briar.api.messaging.event.AttachmentReceivedEvent;
|
||||
|
||||
import java.io.File;
|
||||
@@ -56,7 +56,7 @@ public class ImageViewModel extends DbViewModel implements EventListener {
|
||||
|
||||
private static final Logger LOG = getLogger(ImageViewModel.class.getName());
|
||||
|
||||
private final MessagingManager messagingManager;
|
||||
private final AttachmentReader attachmentReader;
|
||||
private final EventBus eventBus;
|
||||
@IoExecutor
|
||||
private final Executor ioExecutor;
|
||||
@@ -75,16 +75,13 @@ public class ImageViewModel extends DbViewModel implements EventListener {
|
||||
private int toolbarTop, toolbarBottom;
|
||||
|
||||
@Inject
|
||||
ImageViewModel(Application application,
|
||||
MessagingManager messagingManager,
|
||||
EventBus eventBus,
|
||||
@DatabaseExecutor Executor dbExecutor,
|
||||
LifecycleManager lifecycleManager,
|
||||
ImageViewModel(Application application, AttachmentReader attachmentReader,
|
||||
EventBus eventBus, @DatabaseExecutor Executor dbExecutor,LifecycleManager lifecycleManager,
|
||||
TransactionManager db,
|
||||
AndroidExecutor androidExecutor,
|
||||
@IoExecutor Executor ioExecutor) {
|
||||
super(application, dbExecutor, lifecycleManager, db, androidExecutor);
|
||||
this.messagingManager = messagingManager;
|
||||
this.attachmentReader = attachmentReader;
|
||||
this.eventBus = eventBus;
|
||||
this.ioExecutor = ioExecutor;
|
||||
|
||||
@@ -202,7 +199,7 @@ public class ImageViewModel extends DbViewModel implements EventListener {
|
||||
runOnDbThread(() -> {
|
||||
try {
|
||||
Attachment a =
|
||||
messagingManager.getAttachment(attachment.getHeader());
|
||||
attachmentReader.getAttachment(attachment.getHeader());
|
||||
copyImageFromDb(a, osp, afterCopy);
|
||||
} catch (DbException e) {
|
||||
logException(LOG, WARNING, e);
|
||||
|
||||
@@ -4,13 +4,12 @@ import com.bumptech.glide.Priority;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.data.DataFetcher;
|
||||
|
||||
import org.briarproject.bramble.api.client.ClientHelper;
|
||||
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.briar.android.attachment.AttachmentItem;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.media.AttachmentReader;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.Executor;
|
||||
@@ -31,7 +30,7 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
|
||||
private final static Logger LOG =
|
||||
getLogger(BriarDataFetcher.class.getName());
|
||||
|
||||
private final ClientHelper clientHelper;
|
||||
private final AttachmentReader attachmentReader;
|
||||
@DatabaseExecutor
|
||||
private final Executor dbExecutor;
|
||||
private final AttachmentItem attachment;
|
||||
@@ -41,9 +40,9 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
|
||||
private volatile boolean cancel = false;
|
||||
|
||||
@Inject
|
||||
BriarDataFetcher(ClientHelper clientHelper,
|
||||
BriarDataFetcher(AttachmentReader attachmentReader,
|
||||
@DatabaseExecutor Executor dbExecutor, AttachmentItem attachment) {
|
||||
this.clientHelper = clientHelper;
|
||||
this.attachmentReader = attachmentReader;
|
||||
this.dbExecutor = dbExecutor;
|
||||
this.attachment = attachment;
|
||||
}
|
||||
@@ -54,8 +53,8 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
|
||||
dbExecutor.execute(() -> {
|
||||
if (cancel) return;
|
||||
try {
|
||||
Attachment a = AttachmentReader
|
||||
.getAttachment(clientHelper, attachment.getHeader());
|
||||
Attachment a =
|
||||
attachmentReader.getAttachment(attachment.getHeader());
|
||||
inputStream = a.getStream();
|
||||
callback.onDataReady(inputStream);
|
||||
} catch (DbException e) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package org.briarproject.briar.android.conversation.glide;
|
||||
|
||||
import org.briarproject.bramble.api.client.ClientHelper;
|
||||
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.briar.android.attachment.AttachmentItem;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
@@ -12,19 +12,19 @@ import javax.inject.Inject;
|
||||
@NotNullByDefault
|
||||
public class BriarDataFetcherFactory {
|
||||
|
||||
private final ClientHelper clientHelper;
|
||||
private final AttachmentReader attachmentReader;
|
||||
@DatabaseExecutor
|
||||
private final Executor dbExecutor;
|
||||
|
||||
@Inject
|
||||
public BriarDataFetcherFactory(ClientHelper clientHelper,
|
||||
public BriarDataFetcherFactory(AttachmentReader attachmentReader,
|
||||
@DatabaseExecutor Executor dbExecutor) {
|
||||
this.clientHelper = clientHelper;
|
||||
this.attachmentReader = attachmentReader;
|
||||
this.dbExecutor = dbExecutor;
|
||||
}
|
||||
|
||||
BriarDataFetcher createBriarDataFetcher(AttachmentItem model) {
|
||||
return new BriarDataFetcher(clientHelper, dbExecutor, model);
|
||||
return new BriarDataFetcher(attachmentReader, dbExecutor, model);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||
import org.briarproject.bramble.test.ImmediateExecutor;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
import org.jmock.Expectations;
|
||||
import org.jmock.lib.legacy.ClassImposteriser;
|
||||
import org.junit.Test;
|
||||
@@ -32,11 +32,11 @@ public class AttachmentRetrieverTest extends BrambleMockTestCase {
|
||||
|
||||
public AttachmentRetrieverTest() {
|
||||
context.setImposteriser(ClassImposteriser.INSTANCE);
|
||||
MessagingManager messagingManager =
|
||||
context.mock(MessagingManager.class);
|
||||
AttachmentReader attachmentReader =
|
||||
context.mock(AttachmentReader.class);
|
||||
imageSizeCalculator = context.mock(ImageSizeCalculator.class);
|
||||
Executor dbExecutor = new ImmediateExecutor();
|
||||
retriever = new AttachmentRetrieverImpl(dbExecutor, messagingManager,
|
||||
retriever = new AttachmentRetrieverImpl(dbExecutor, attachmentReader,
|
||||
dimensions, imageHelper, imageSizeCalculator);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.db.Transaction;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.bramble.api.sync.ClientId;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -51,9 +50,4 @@ public interface AvatarManager {
|
||||
*/
|
||||
@Nullable
|
||||
AttachmentHeader getMyAvatarHeader(Transaction txn) throws DbException;
|
||||
|
||||
/**
|
||||
* Returns the profile image attachment for the given header.
|
||||
*/
|
||||
Attachment getAvatar(AttachmentHeader h) throws DbException;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.briarproject.briar.api.media;
|
||||
|
||||
import org.briarproject.bramble.api.db.DbException;
|
||||
|
||||
public interface AttachmentReader {
|
||||
|
||||
/**
|
||||
* Returns the attachment with the given attachment header.
|
||||
*
|
||||
* @throws InvalidAttachmentException If the header refers to a message
|
||||
* that is not an attachment, or to an attachment that does not have the
|
||||
* expected content type
|
||||
*/
|
||||
Attachment getAttachment(AttachmentHeader h) throws DbException;
|
||||
|
||||
}
|
||||
@@ -11,4 +11,11 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
*/
|
||||
@NotNullByDefault
|
||||
public class InvalidAttachmentException extends DbException {
|
||||
public InvalidAttachmentException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public InvalidAttachmentException(Throwable t) {
|
||||
super(t);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.briarproject.briar.api.media;
|
||||
|
||||
import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_LENGTH;
|
||||
|
||||
public interface MediaConstants {
|
||||
|
||||
// Metadata keys for messages
|
||||
String MSG_KEY_CONTENT_TYPE = "contentType";
|
||||
String MSG_KEY_DESCRIPTOR_LENGTH = "descriptorLength";
|
||||
|
||||
/**
|
||||
* The maximum length of an attachment's content type in UTF-8 bytes.
|
||||
*/
|
||||
int MAX_CONTENT_TYPE_BYTES = 50;
|
||||
|
||||
/**
|
||||
* The maximum allowed size of image attachments.
|
||||
* TODO: Different limit for GIFs?
|
||||
*/
|
||||
int MAX_IMAGE_SIZE = MAX_MESSAGE_BODY_LENGTH - 100; // 6 * 1024 * 1024;
|
||||
}
|
||||
@@ -14,15 +14,4 @@ public interface MessagingConstants {
|
||||
*/
|
||||
int MAX_ATTACHMENTS_PER_MESSAGE = 10;
|
||||
|
||||
/**
|
||||
* The maximum length of an attachment's content type in UTF-8 bytes.
|
||||
*/
|
||||
int MAX_CONTENT_TYPE_BYTES = 50;
|
||||
|
||||
/**
|
||||
* The maximum allowed size of image attachments.
|
||||
* TODO: Different limit for GIFs?
|
||||
*/
|
||||
int MAX_IMAGE_SIZE = MAX_MESSAGE_BODY_LENGTH - 100; // 6 * 1024 * 1024;
|
||||
|
||||
}
|
||||
|
||||
@@ -8,10 +8,8 @@ import org.briarproject.bramble.api.sync.ClientId;
|
||||
import org.briarproject.bramble.api.sync.GroupId;
|
||||
import org.briarproject.bramble.api.sync.MessageId;
|
||||
import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
import org.briarproject.briar.api.media.FileTooBigException;
|
||||
import org.briarproject.briar.api.media.InvalidAttachmentException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -71,15 +69,6 @@ public interface MessagingManager extends ConversationClient {
|
||||
@Nullable
|
||||
String getMessageText(MessageId m) throws DbException;
|
||||
|
||||
/**
|
||||
* Returns the attachment with the given attachment header.
|
||||
*
|
||||
* @throws InvalidAttachmentException If the header refers to a message
|
||||
* that is not an attachment, or to an attachment that does not have the
|
||||
* expected content type
|
||||
*/
|
||||
Attachment getAttachment(AttachmentHeader h) throws DbException;
|
||||
|
||||
/**
|
||||
* Returns true if the contact with the given {@link ContactId} does support
|
||||
* image attachments.
|
||||
|
||||
@@ -9,7 +9,7 @@ import static org.briarproject.bramble.test.TestUtils.getRandomId;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.briar.api.identity.AuthorInfo.Status.NONE;
|
||||
import static org.briarproject.briar.api.identity.AuthorInfo.Status.VERIFIED;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.briarproject.briar.feed.FeedModule;
|
||||
import org.briarproject.briar.forum.ForumModule;
|
||||
import org.briarproject.briar.identity.IdentityModule;
|
||||
import org.briarproject.briar.introduction.IntroductionModule;
|
||||
import org.briarproject.briar.media.MediaModule;
|
||||
import org.briarproject.briar.messaging.MessagingModule;
|
||||
import org.briarproject.briar.privategroup.PrivateGroupModule;
|
||||
import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
|
||||
@@ -26,6 +27,7 @@ import dagger.Module;
|
||||
GroupInvitationModule.class,
|
||||
IdentityModule.class,
|
||||
IntroductionModule.class,
|
||||
MediaModule.class,
|
||||
MessagingModule.class,
|
||||
PrivateGroupModule.class,
|
||||
SharingModule.class,
|
||||
|
||||
@@ -30,10 +30,8 @@ import org.briarproject.bramble.api.versioning.ClientVersioningManager;
|
||||
import org.briarproject.bramble.api.versioning.ClientVersioningManager.ClientVersioningHook;
|
||||
import org.briarproject.briar.api.avatar.AvatarManager;
|
||||
import org.briarproject.briar.api.avatar.event.AvatarUpdatedEvent;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
import org.briarproject.briar.api.media.FileTooBigException;
|
||||
import org.briarproject.briar.media.AttachmentReader;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
@@ -49,8 +47,8 @@ import static org.briarproject.bramble.util.IoUtils.copyAndClose;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.GROUP_KEY_CONTACT_ID;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
@@ -249,11 +247,6 @@ class AvatarManagerImpl implements AvatarManager, OpenDatabaseHook, ContactHook,
|
||||
return new AttachmentHeader(latest.messageId, latest.contentType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Attachment getAvatar(AttachmentHeader h) throws DbException {
|
||||
return AttachmentReader.getAttachment(clientHelper, h);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private LatestUpdate findLatest(Transaction txn, GroupId g)
|
||||
throws DbException, FormatException {
|
||||
|
||||
@@ -26,11 +26,11 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_L
|
||||
import static org.briarproject.bramble.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
|
||||
import static org.briarproject.bramble.util.ValidationUtils.checkLength;
|
||||
import static org.briarproject.bramble.util.ValidationUtils.checkSize;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
|
||||
@@ -7,18 +7,28 @@ import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.sync.MessageId;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
import org.briarproject.briar.api.media.InvalidAttachmentException;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class AttachmentReader {
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
|
||||
public static Attachment getAttachment(ClientHelper clientHelper,
|
||||
AttachmentHeader h) throws DbException {
|
||||
public class AttachmentReaderImpl implements AttachmentReader {
|
||||
|
||||
private final ClientHelper clientHelper;
|
||||
|
||||
@Inject
|
||||
public AttachmentReaderImpl(ClientHelper clientHelper) {
|
||||
this.clientHelper = clientHelper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Attachment getAttachment(AttachmentHeader h) throws DbException {
|
||||
// TODO: Support large messages
|
||||
MessageId m = h.getMessageId();
|
||||
byte[] body = clientHelper.getMessage(m).getBody();
|
||||
@@ -27,17 +37,12 @@ public class AttachmentReader {
|
||||
String contentType = meta.getString(MSG_KEY_CONTENT_TYPE);
|
||||
if (!contentType.equals(h.getContentType()))
|
||||
throw new InvalidAttachmentException();
|
||||
int offset;
|
||||
try {
|
||||
offset = meta.getLong(MSG_KEY_DESCRIPTOR_LENGTH).intValue();
|
||||
} catch (FormatException e) {
|
||||
throw new InvalidAttachmentException();
|
||||
}
|
||||
int offset = meta.getLong(MSG_KEY_DESCRIPTOR_LENGTH).intValue();
|
||||
InputStream stream = new ByteArrayInputStream(body, offset,
|
||||
body.length - offset);
|
||||
return new Attachment(h, stream);
|
||||
} catch (FormatException e) {
|
||||
throw new DbException(e);
|
||||
throw new InvalidAttachmentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
package org.briarproject.briar.media;
|
||||
|
||||
public interface MediaConstants {
|
||||
|
||||
// Metadata keys for messages
|
||||
String MSG_KEY_CONTENT_TYPE = "contentType";
|
||||
String MSG_KEY_DESCRIPTOR_LENGTH = "descriptorLength";
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.briarproject.briar.media;
|
||||
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@Module
|
||||
public class MediaModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
AttachmentReader provideAttachmentReader(
|
||||
AttachmentReaderImpl attachmentReader) {
|
||||
return attachmentReader;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -32,7 +32,6 @@ import org.briarproject.briar.api.client.MessageTracker.GroupCount;
|
||||
import org.briarproject.briar.api.conversation.ConversationManager.ConversationClient;
|
||||
import org.briarproject.briar.api.conversation.ConversationMessageHeader;
|
||||
import org.briarproject.briar.api.conversation.DeletionResult;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
import org.briarproject.briar.api.media.FileTooBigException;
|
||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||
@@ -40,7 +39,6 @@ import org.briarproject.briar.api.messaging.PrivateMessage;
|
||||
import org.briarproject.briar.api.messaging.PrivateMessageHeader;
|
||||
import org.briarproject.briar.api.messaging.event.AttachmentReceivedEvent;
|
||||
import org.briarproject.briar.api.messaging.event.PrivateMessageReceivedEvent;
|
||||
import org.briarproject.briar.media.AttachmentReader;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
@@ -60,8 +58,8 @@ import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_BODY_L
|
||||
import static org.briarproject.bramble.api.sync.validation.MessageState.DELIVERED;
|
||||
import static org.briarproject.bramble.util.IoUtils.copyAndClose;
|
||||
import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.messaging.MessageTypes.ATTACHMENT;
|
||||
import static org.briarproject.briar.messaging.MessageTypes.PRIVATE_MESSAGE;
|
||||
import static org.briarproject.briar.messaging.MessagingConstants.GROUP_KEY_CONTACT_ID;
|
||||
@@ -399,11 +397,6 @@ class MessagingManagerImpl implements MessagingManager, IncomingMessageHook,
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Attachment getAttachment(AttachmentHeader h) throws DbException {
|
||||
return AttachmentReader.getAttachment(clientHelper, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contactSupportsImages(Transaction txn, ContactId c)
|
||||
throws DbException {
|
||||
|
||||
@@ -29,11 +29,11 @@ import static org.briarproject.bramble.api.transport.TransportConstants.MAX_CLOC
|
||||
import static org.briarproject.bramble.util.ValidationUtils.checkLength;
|
||||
import static org.briarproject.bramble.util.ValidationUtils.checkSize;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
|
||||
import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.messaging.MessageTypes.ATTACHMENT;
|
||||
import static org.briarproject.briar.messaging.MessageTypes.PRIVATE_MESSAGE;
|
||||
import static org.briarproject.briar.messaging.MessagingConstants.MSG_KEY_ATTACHMENT_HEADERS;
|
||||
|
||||
@@ -53,12 +53,12 @@ import static org.briarproject.bramble.test.TestUtils.getRandomId;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.briar.api.avatar.AvatarManager.CLIENT_ID;
|
||||
import static org.briarproject.briar.api.avatar.AvatarManager.MAJOR_VERSION;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.GROUP_KEY_CONTACT_ID;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import org.briarproject.bramble.test.TestDatabaseConfigModule;
|
||||
import org.briarproject.briar.api.avatar.AvatarManager;
|
||||
import org.briarproject.briar.api.media.Attachment;
|
||||
import org.briarproject.briar.api.media.AttachmentHeader;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
import org.briarproject.briar.test.BriarIntegrationTest;
|
||||
import org.briarproject.briar.test.BriarIntegrationTestComponent;
|
||||
import org.briarproject.briar.test.DaggerBriarIntegrationTestComponent;
|
||||
@@ -17,7 +18,7 @@ import java.io.InputStream;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
|
||||
import static org.briarproject.bramble.util.IoUtils.copyAndClose;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
@@ -27,6 +28,7 @@ public class AvatarManagerIntegrationTest
|
||||
extends BriarIntegrationTest<BriarIntegrationTestComponent> {
|
||||
|
||||
private AvatarManager avatarManager0, avatarManager1;
|
||||
private AttachmentReader attachmentReader0, attachmentReader1;
|
||||
|
||||
private final String contentType = getRandomString(MAX_CONTENT_TYPE_BYTES);
|
||||
|
||||
@@ -36,6 +38,8 @@ public class AvatarManagerIntegrationTest
|
||||
super.setUp();
|
||||
avatarManager0 = c0.getAvatarManager();
|
||||
avatarManager1 = c1.getAvatarManager();
|
||||
attachmentReader0 = c0.getAttachmentReader();
|
||||
attachmentReader1 = c1.getAttachmentReader();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -90,7 +94,7 @@ public class AvatarManagerIntegrationTest
|
||||
assertNotNull(header0.getMessageId());
|
||||
|
||||
// 0 can retrieve their own avatar
|
||||
Attachment attachment0 = avatarManager0.getAvatar(header0);
|
||||
Attachment attachment0 = attachmentReader0.getAttachment(header0);
|
||||
assertEquals(contentType, attachment0.getHeader().getContentType());
|
||||
assertStreamMatches(avatar0bytes, attachment0.getStream());
|
||||
|
||||
@@ -105,7 +109,8 @@ public class AvatarManagerIntegrationTest
|
||||
assertNotNull(header0From1.getMessageId());
|
||||
|
||||
// 1 can retrieve 0's avatar
|
||||
Attachment attachment0From1 = avatarManager1.getAvatar(header0From1);
|
||||
Attachment attachment0From1 =
|
||||
attachmentReader1.getAttachment(header0From1);
|
||||
assertEquals(contentType,
|
||||
attachment0From1.getHeader().getContentType());
|
||||
assertStreamMatches(avatar0bytes, attachment0From1.getStream());
|
||||
@@ -127,7 +132,8 @@ public class AvatarManagerIntegrationTest
|
||||
assertNotNull(header1From0.getMessageId());
|
||||
|
||||
// 0 can retrieve 1's avatar
|
||||
Attachment attachment1From0 = avatarManager0.getAvatar(header1From0);
|
||||
Attachment attachment1From0 =
|
||||
attachmentReader0.getAttachment(header1From0);
|
||||
assertEquals(contentType1,
|
||||
attachment1From0.getHeader().getContentType());
|
||||
assertStreamMatches(avatar1bytes, attachment1From0.getStream());
|
||||
@@ -144,7 +150,7 @@ public class AvatarManagerIntegrationTest
|
||||
AttachmentHeader header0 = db0.transactionWithResult(true,
|
||||
txn -> avatarManager0.getMyAvatarHeader(txn));
|
||||
assertNotNull(header0);
|
||||
Attachment attachment0 = avatarManager0.getAvatar(header0);
|
||||
Attachment attachment0 = attachmentReader0.getAttachment(header0);
|
||||
assertStreamMatches(avatar0bytes, attachment0.getStream());
|
||||
|
||||
// send the avatar from 0 to 1
|
||||
@@ -154,7 +160,8 @@ public class AvatarManagerIntegrationTest
|
||||
AttachmentHeader header0From1 = db1.transactionWithNullableResult(true,
|
||||
txn -> avatarManager1.getAvatarHeader(txn, contact0From1));
|
||||
assertNotNull(header0From1);
|
||||
Attachment attachment0From1 = avatarManager1.getAvatar(header0From1);
|
||||
Attachment attachment0From1 =
|
||||
attachmentReader1.getAttachment(header0From1);
|
||||
assertStreamMatches(avatar0bytes, attachment0From1.getStream());
|
||||
|
||||
// 0 adds a new avatar
|
||||
@@ -167,7 +174,7 @@ public class AvatarManagerIntegrationTest
|
||||
header0 = db0.transactionWithResult(true,
|
||||
txn -> avatarManager0.getMyAvatarHeader(txn));
|
||||
assertNotNull(header0);
|
||||
attachment0 = avatarManager0.getAvatar(header0);
|
||||
attachment0 = attachmentReader0.getAttachment(header0);
|
||||
assertStreamMatches(avatar0bytes2, attachment0.getStream());
|
||||
|
||||
// send the new avatar from 0 to 1
|
||||
@@ -177,7 +184,7 @@ public class AvatarManagerIntegrationTest
|
||||
header0From1 = db1.transactionWithNullableResult(true,
|
||||
txn -> avatarManager1.getAvatarHeader(txn, contact0From1));
|
||||
assertNotNull(header0From1);
|
||||
attachment0From1 = avatarManager1.getAvatar(header0From1);
|
||||
attachment0From1 = attachmentReader1.getAttachment(header0From1);
|
||||
assertStreamMatches(avatar0bytes2, attachment0From1.getStream());
|
||||
}
|
||||
|
||||
|
||||
@@ -23,11 +23,11 @@ import static org.briarproject.bramble.test.TestUtils.getClientId;
|
||||
import static org.briarproject.bramble.test.TestUtils.getGroup;
|
||||
import static org.briarproject.bramble.test.TestUtils.getMessage;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_KEY_VERSION;
|
||||
import static org.briarproject.briar.avatar.AvatarConstants.MSG_TYPE_UPDATE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class AvatarValidatorTest extends BrambleMockTestCase {
|
||||
|
||||
@@ -30,7 +30,7 @@ import static org.briarproject.briar.api.identity.AuthorInfo.Status.OURSELVES;
|
||||
import static org.briarproject.briar.api.identity.AuthorInfo.Status.UNKNOWN;
|
||||
import static org.briarproject.briar.api.identity.AuthorInfo.Status.UNVERIFIED;
|
||||
import static org.briarproject.briar.api.identity.AuthorInfo.Status.VERIFIED;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.briarproject.briar.blog.BlogModule;
|
||||
import org.briarproject.briar.client.BriarClientModule;
|
||||
import org.briarproject.briar.forum.ForumModule;
|
||||
import org.briarproject.briar.identity.IdentityModule;
|
||||
import org.briarproject.briar.media.MediaModule;
|
||||
import org.briarproject.briar.messaging.MessagingModule;
|
||||
import org.briarproject.briar.privategroup.PrivateGroupModule;
|
||||
import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
|
||||
@@ -28,6 +29,7 @@ import dagger.Component;
|
||||
GroupInvitationModule.class,
|
||||
IdentityModule.class,
|
||||
IntroductionModule.class,
|
||||
MediaModule.class,
|
||||
MessagingModule.class,
|
||||
PrivateGroupModule.class,
|
||||
SharingModule.class
|
||||
|
||||
@@ -26,7 +26,7 @@ import static org.briarproject.bramble.test.TestUtils.getRandomId;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.briar.api.forum.ForumConstants.MAX_FORUM_POST_TEXT_LENGTH;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
|
||||
@@ -28,11 +28,11 @@ import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomId;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_ATTACHMENTS_PER_MESSAGE;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MAX_CONTENT_TYPE_BYTES;
|
||||
import static org.briarproject.briar.api.messaging.MessagingConstants.MAX_PRIVATE_MESSAGE_TEXT_LENGTH;
|
||||
import static org.briarproject.briar.client.MessageTrackerConstants.MSG_KEY_READ;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_CONTENT_TYPE;
|
||||
import static org.briarproject.briar.api.media.MediaConstants.MSG_KEY_DESCRIPTOR_LENGTH;
|
||||
import static org.briarproject.briar.messaging.MessageTypes.ATTACHMENT;
|
||||
import static org.briarproject.briar.messaging.MessageTypes.PRIVATE_MESSAGE;
|
||||
import static org.briarproject.briar.messaging.MessagingConstants.MSG_KEY_ATTACHMENT_HEADERS;
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.briarproject.briar.api.conversation.ConversationManager;
|
||||
import org.briarproject.briar.api.forum.ForumManager;
|
||||
import org.briarproject.briar.api.forum.ForumSharingManager;
|
||||
import org.briarproject.briar.api.introduction.IntroductionManager;
|
||||
import org.briarproject.briar.api.media.AttachmentReader;
|
||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||
import org.briarproject.briar.api.messaging.PrivateMessageFactory;
|
||||
import org.briarproject.briar.api.privategroup.PrivateGroupManager;
|
||||
@@ -31,6 +32,7 @@ import org.briarproject.briar.client.BriarClientModule;
|
||||
import org.briarproject.briar.forum.ForumModule;
|
||||
import org.briarproject.briar.identity.IdentityModule;
|
||||
import org.briarproject.briar.introduction.IntroductionModule;
|
||||
import org.briarproject.briar.media.MediaModule;
|
||||
import org.briarproject.briar.messaging.MessagingModule;
|
||||
import org.briarproject.briar.privategroup.PrivateGroupModule;
|
||||
import org.briarproject.briar.privategroup.invitation.GroupInvitationModule;
|
||||
@@ -51,6 +53,7 @@ import dagger.Component;
|
||||
GroupInvitationModule.class,
|
||||
IdentityModule.class,
|
||||
IntroductionModule.class,
|
||||
MediaModule.class,
|
||||
MessagingModule.class,
|
||||
PrivateGroupModule.class,
|
||||
SharingModule.class
|
||||
@@ -84,6 +87,8 @@ public interface BriarIntegrationTestComponent
|
||||
|
||||
IdentityManager getIdentityManager();
|
||||
|
||||
AttachmentReader getAttachmentReader();
|
||||
|
||||
AvatarManager getAvatarManager();
|
||||
|
||||
ClientHelper getClientHelper();
|
||||
|
||||
Reference in New Issue
Block a user