Merge branch 'fix/2448_draft-body-lost-when-not-available-locally-in-offline-mode' into 'develop'

Do not allow editing drafts locally if their remote body can't be fetched

See merge request android/mail/proton-mail-android!783
This commit is contained in:
Marino Meneghel 2021-11-03 08:42:08 +00:00
commit a77909e941
3 changed files with 7 additions and 34 deletions

View File

@ -433,25 +433,6 @@ public class ComposeMessageActivity
composeMessageViewModel.getDbIdWatcher().observe(ComposeMessageActivity.this, new SendMessageObserver());
composeMessageViewModel.getFetchMessageDetailsEvent().observe(this, messageBuilderDataEvent -> {
try {
binding.composerProgressLayout.setVisibility(View.GONE);
MessageBuilderData messageBuilderData = messageBuilderDataEvent.getContentIfNotHandled();
if (messageBuilderData != null) {
String mimeType = messageBuilderData.getMessage().getMimeType();
setMessageBodyInContainers(composeMessageViewModel.setMessageBody
(messageBuilderData.getDecryptedMessage(), false,
mimeType != null && mimeType.equals(Constants.MIME_TYPE_PLAIN_TEXT), getString(R.string.sender_name_address),
getString(R.string.original_message_divider),
getString(R.string.reply_prefix_on),
DateUtil.formatDetailedDateTime(this, composeMessageViewModel.getMessageDataResult().getMessageTimestamp())));
}
composeMessageViewModel.setBeforeSaveDraft(false, messageBodyEditText.getText().toString());
} catch (Exception exc) {
Timber.tag("588").e(exc, "Exception on fetch message details event");
}
});
composeMessageViewModel.getFetchKeyDetailsResult().observe(
this,
this::onFetchEmailKeysEvent
@ -1439,7 +1420,7 @@ public class ComposeMessageActivity
if (!isFinishing()) {
DialogUtils.Companion.showInfoDialog(ComposeMessageActivity.this, getString(R.string.app_name), getString(R.string.messages_load_failure),
unit -> {
onBackPressed();
finishActivity();
return unit;
});
}

View File

@ -67,8 +67,6 @@ import ch.protonmail.android.usecase.model.FetchPublicKeysResult
import ch.protonmail.android.utils.Event
import ch.protonmail.android.utils.MailToData
import ch.protonmail.android.utils.MessageUtils
import ch.protonmail.android.utils.ServerTime
import ch.protonmail.android.utils.ServerTimeProvider
import ch.protonmail.android.utils.UiUtil
import ch.protonmail.android.utils.resources.StringResourceResolver
import ch.protonmail.android.viewmodel.ConnectivityBaseViewModel
@ -140,7 +138,6 @@ class ComposeMessageViewModel @Inject constructor(
private val _openAttachmentsScreenResult: MutableLiveData<List<LocalAttachment>> = MutableLiveData()
private val _buildingMessageCompleted: MutableLiveData<Event<Message>> = MutableLiveData()
private val _dbIdWatcher: MutableLiveData<Long> = MutableLiveData()
private val _fetchMessageDetailsEvent: MutableLiveData<Event<MessageBuilderData>> = MutableLiveData()
private val fetchKeyDetailsTrigger = MutableLiveData<List<FetchPublicKeysRequest>>()
private val _androidContacts = java.util.ArrayList<MessageRecipient>()
@ -206,8 +203,6 @@ class ComposeMessageViewModel @Inject constructor(
get() = _buildingMessageCompleted
val dbIdWatcher: LiveData<Long>
get() = _dbIdWatcher
val fetchMessageDetailsEvent: LiveData<Event<MessageBuilderData>>
get() = _fetchMessageDetailsEvent
var androidContactsLoaded: Boolean
get() = _androidContactsLoaded
set(value) {

View File

@ -24,27 +24,24 @@ import ch.protonmail.android.core.Constants;
import ch.protonmail.android.data.local.model.Message;
import ch.protonmail.android.events.FetchDraftDetailEvent;
import ch.protonmail.android.utils.AppUtil;
import ch.protonmail.android.utils.Logger;
import timber.log.Timber;
public class FetchDraftDetailJob extends ProtonMailBaseJob {
private static final String TAG_FETCH_DRAFT_DETAIL_JOB = "FetchDraftDetailJob";
private final String mMessageId;
public FetchDraftDetailJob(final String messageId) {
super(new Params(Priority.LOW).requireNetwork().groupBy(Constants.JOB_GROUP_MESSAGE));
mMessageId = messageId;
if (!getQueueNetworkUtil().isConnected()) {
Timber.d("no network - cannot fetch draft detail");
AppUtil.postEventOnUi(new FetchDraftDetailEvent(false));
}
}
@Override
public void onRun() throws Throwable {
if (!getQueueNetworkUtil().isConnected()) {
Logger.doLog(TAG_FETCH_DRAFT_DETAIL_JOB, "no network - cannot fetch draft detail");
AppUtil.postEventOnUi(new FetchDraftDetailEvent(false));
return;
}
try {
final Message message = getApi().fetchMessageDetailsBlocking(mMessageId).getMessage();
Message savedMessage = getMessageDetailsRepository().findMessageByIdBlocking(message.getMessageId());