mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 06:39:54 +01:00
[android] Use DataFetcherFactory to create data fetchers and allow cancelling loads
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
package org.briarproject.briar.android.conversation;
|
||||||
|
|
||||||
|
import org.briarproject.briar.android.activity.ActivityScope;
|
||||||
|
import org.briarproject.briar.android.conversation.glide.BriarDataFetcherFactory;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
@Module
|
||||||
|
public class ConversationModule {
|
||||||
|
|
||||||
|
@ActivityScope
|
||||||
|
@Provides
|
||||||
|
BriarDataFetcherFactory provideBriarDataFetcherFactory(
|
||||||
|
BriarDataFetcherFactory dataFetcherFactory) {
|
||||||
|
return dataFetcherFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -35,17 +35,18 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
|
|||||||
private final MessagingManager messagingManager;
|
private final MessagingManager messagingManager;
|
||||||
@DatabaseExecutor
|
@DatabaseExecutor
|
||||||
private final Executor dbExecutor;
|
private final Executor dbExecutor;
|
||||||
|
private final AttachmentItem attachment;
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private AttachmentItem attachment;
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private volatile InputStream inputStream;
|
private volatile InputStream inputStream;
|
||||||
|
private volatile boolean cancel = false;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public BriarDataFetcher(MessagingManager messagingManager,
|
public BriarDataFetcher(MessagingManager messagingManager,
|
||||||
@DatabaseExecutor Executor dbExecutor) {
|
@DatabaseExecutor Executor dbExecutor, AttachmentItem attachment) {
|
||||||
this.messagingManager = messagingManager;
|
this.messagingManager = messagingManager;
|
||||||
this.dbExecutor = dbExecutor;
|
this.dbExecutor = dbExecutor;
|
||||||
|
this.attachment = attachment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -53,6 +54,7 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
|
|||||||
DataCallback<? super InputStream> callback) {
|
DataCallback<? super InputStream> callback) {
|
||||||
MessageId id = requireNonNull(attachment).getMessageId();
|
MessageId id = requireNonNull(attachment).getMessageId();
|
||||||
dbExecutor.execute(() -> {
|
dbExecutor.execute(() -> {
|
||||||
|
if (cancel) return;
|
||||||
try {
|
try {
|
||||||
inputStream = messagingManager.getAttachment(id).getStream();
|
inputStream = messagingManager.getAttachment(id).getStream();
|
||||||
callback.onDataReady(inputStream);
|
callback.onDataReady(inputStream);
|
||||||
@@ -76,7 +78,7 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
// does it make sense to cancel a database load?
|
cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -89,8 +91,4 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
|
|||||||
return LOCAL;
|
return LOCAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAttachment(AttachmentItem attachment) {
|
|
||||||
this.attachment = attachment;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package org.briarproject.briar.android.conversation.glide;
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||||
|
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||||
|
import org.briarproject.briar.android.conversation.AttachmentItem;
|
||||||
|
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
@NotNullByDefault
|
||||||
|
public class BriarDataFetcherFactory {
|
||||||
|
|
||||||
|
private final MessagingManager messagingManager;
|
||||||
|
@DatabaseExecutor
|
||||||
|
private final Executor dbExecutor;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public BriarDataFetcherFactory(MessagingManager messagingManager,
|
||||||
|
@DatabaseExecutor Executor dbExecutor) {
|
||||||
|
this.messagingManager = messagingManager;
|
||||||
|
this.dbExecutor = dbExecutor;
|
||||||
|
}
|
||||||
|
|
||||||
|
BriarDataFetcher createBriarDataFetcher(AttachmentItem model) {
|
||||||
|
return new BriarDataFetcher(messagingManager, dbExecutor, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,21 +19,19 @@ import javax.inject.Inject;
|
|||||||
public final class BriarModelLoader
|
public final class BriarModelLoader
|
||||||
implements ModelLoader<AttachmentItem, InputStream> {
|
implements ModelLoader<AttachmentItem, InputStream> {
|
||||||
|
|
||||||
private final BriarApplication app;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
BriarDataFetcher dataFetcher;
|
BriarDataFetcherFactory dataFetcherFactory;
|
||||||
|
|
||||||
public BriarModelLoader(BriarApplication app) {
|
public BriarModelLoader(BriarApplication app) {
|
||||||
this.app = app;
|
app.getApplicationComponent().inject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoadData<InputStream> buildLoadData(AttachmentItem model, int width,
|
public LoadData<InputStream> buildLoadData(AttachmentItem model, int width,
|
||||||
int height, Options options) {
|
int height, Options options) {
|
||||||
app.getApplicationComponent().inject(this);
|
|
||||||
ObjectKey key = new ObjectKey(model.getMessageId());
|
ObjectKey key = new ObjectKey(model.getMessageId());
|
||||||
dataFetcher.setAttachment(model);
|
BriarDataFetcher dataFetcher =
|
||||||
|
dataFetcherFactory.createBriarDataFetcher(model);
|
||||||
return new LoadData<>(key, dataFetcher);
|
return new LoadData<>(key, dataFetcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user