package com.fsck.k9.ui.message;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread;
import timber.log.Timber;
import com.fsck.k9.K9;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mailstore.LocalMessage;
import com.fsck.k9.mailstore.MessageViewInfoExtractor;
import com.fsck.k9.mailstore.MessageViewInfo;
import com.fsck.k9.ui.crypto.MessageCryptoAnnotations;
public class LocalMessageExtractorLoader extends AsyncTaskLoader<MessageViewInfo> {
private static final MessageViewInfoExtractor messageViewInfoExtractor = MessageViewInfoExtractor.getInstance();
private final Message message;
private MessageViewInfo messageViewInfo;
@Nullable
private MessageCryptoAnnotations annotations;
public LocalMessageExtractorLoader(
Context context, Message message, @Nullable MessageCryptoAnnotations annotations) {
super(context);
this.message = message;
this.annotations = annotations;
}
@Override
protected void onStartLoading() {
if (messageViewInfo != null) {
super.deliverResult(messageViewInfo);
}
if (takeContentChanged() || messageViewInfo == null) {
forceLoad();
}
}
@Override
public void deliverResult(MessageViewInfo messageViewInfo) {
this.messageViewInfo = messageViewInfo;
super.deliverResult(messageViewInfo);
}
@Override
@WorkerThread
public MessageViewInfo loadInBackground() {
try {
return messageViewInfoExtractor.extractMessageForView(message, annotations);
} catch (Exception e) {
Timber.e(e, "Error while decoding message");
return null;
}
}
public boolean isCreatedFor(LocalMessage localMessage, MessageCryptoAnnotations messageCryptoAnnotations) {
return annotations == messageCryptoAnnotations && message.equals(localMessage);
}
}