|
|
@ -97,6 +97,7 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
|
|
|
|
|
|
|
|
private AdapterAttachment adapter;
|
|
|
|
private AdapterAttachment adapter;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private boolean autosave = true;
|
|
|
|
private EntityMessage draft = null;
|
|
|
|
private EntityMessage draft = null;
|
|
|
|
|
|
|
|
|
|
|
|
private static final int ATTACHMENT_BUFFER_SIZE = 8192; // bytes
|
|
|
|
private static final int ATTACHMENT_BUFFER_SIZE = 8192; // bytes
|
|
|
@ -256,12 +257,20 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
args.putLong("account", getArguments().getLong("account", -1));
|
|
|
|
args.putLong("account", getArguments().getLong("account", -1));
|
|
|
|
args.putLong("reference", getArguments().getLong("reference", -1));
|
|
|
|
args.putLong("reference", getArguments().getLong("reference", -1));
|
|
|
|
draftLoader.load(FragmentCompose.this, args);
|
|
|
|
draftLoader.load(FragmentCompose.this, args);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
Bundle args = new Bundle();
|
|
|
|
|
|
|
|
args.putString("action", "edit");
|
|
|
|
|
|
|
|
args.putLong("id", draft.id);
|
|
|
|
|
|
|
|
args.putLong("account", draft.account);
|
|
|
|
|
|
|
|
args.putLong("reference", -1);
|
|
|
|
|
|
|
|
draftLoader.load(FragmentCompose.this, args);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onPause() {
|
|
|
|
public void onPause() {
|
|
|
|
onAction(R.id.action_save);
|
|
|
|
if (autosave)
|
|
|
|
|
|
|
|
onAction(R.id.action_save);
|
|
|
|
super.onPause();
|
|
|
|
super.onPause();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -385,9 +394,10 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
db.beginTransaction();
|
|
|
|
db.beginTransaction();
|
|
|
|
|
|
|
|
|
|
|
|
EntityMessage draft = db.message().getMessageByMsgId(msgid);
|
|
|
|
EntityMessage draft = db.message().getMessageByMsgId(msgid);
|
|
|
|
|
|
|
|
Log.i(Helper.TAG, "Attaching to id=" + draft.id);
|
|
|
|
|
|
|
|
|
|
|
|
attachment.message = draft.id;
|
|
|
|
attachment.message = draft.id;
|
|
|
|
attachment.sequence = db.attachment().getAttachmentCount(draft.id);
|
|
|
|
attachment.sequence = db.attachment().getAttachmentCount(draft.id) + 1;
|
|
|
|
attachment.name = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
|
|
|
|
attachment.name = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
|
|
|
|
|
|
|
|
|
|
|
|
String extension = MimeTypeMap.getFileExtensionFromUrl(attachment.name.toLowerCase());
|
|
|
|
String extension = MimeTypeMap.getFileExtensionFromUrl(attachment.name.toLowerCase());
|
|
|
@ -402,6 +412,7 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
attachment.progress = 0;
|
|
|
|
attachment.progress = 0;
|
|
|
|
|
|
|
|
|
|
|
|
attachment.id = db.attachment().insertAttachment(attachment);
|
|
|
|
attachment.id = db.attachment().insertAttachment(attachment);
|
|
|
|
|
|
|
|
Log.i(Helper.TAG, "Created attachment seq=" + attachment.sequence + " name=" + attachment.name);
|
|
|
|
|
|
|
|
|
|
|
|
db.setTransactionSuccessful();
|
|
|
|
db.setTransactionSuccessful();
|
|
|
|
} finally {
|
|
|
|
} finally {
|
|
|
@ -593,6 +604,19 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
// New working copy
|
|
|
|
// New working copy
|
|
|
|
FragmentCompose.this.draft = draft;
|
|
|
|
FragmentCompose.this.draft = draft;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DB db = DB.getInstance(getContext());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
db.attachment().liveAttachments(draft.id).removeObservers(getViewLifecycleOwner());
|
|
|
|
|
|
|
|
db.attachment().liveAttachments(draft.id).observe(getViewLifecycleOwner(),
|
|
|
|
|
|
|
|
new Observer<List<TupleAttachment>>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onChanged(@Nullable List<TupleAttachment> attachments) {
|
|
|
|
|
|
|
|
if (attachments != null)
|
|
|
|
|
|
|
|
adapter.set(attachments);
|
|
|
|
|
|
|
|
grpAttachments.setVisibility(attachments != null && attachments.size() > 0 ? View.VISIBLE : View.GONE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// Set controls only once
|
|
|
|
// Set controls only once
|
|
|
|
if (observed)
|
|
|
|
if (observed)
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -634,8 +658,6 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
|
|
|
|
|
|
|
|
bottom_navigation.getMenu().setGroupEnabled(0, true);
|
|
|
|
bottom_navigation.getMenu().setGroupEnabled(0, true);
|
|
|
|
|
|
|
|
|
|
|
|
DB db = DB.getInstance(getContext());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
db.identity().liveIdentities(true).removeObservers(getViewLifecycleOwner());
|
|
|
|
db.identity().liveIdentities(true).removeObservers(getViewLifecycleOwner());
|
|
|
|
db.identity().liveIdentities(true).observe(getViewLifecycleOwner(), new Observer<List<EntityIdentity>>() {
|
|
|
|
db.identity().liveIdentities(true).observe(getViewLifecycleOwner(), new Observer<List<EntityIdentity>>() {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
@ -695,18 +717,6 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
db.attachment().liveAttachments(draft.id).removeObservers(getViewLifecycleOwner());
|
|
|
|
|
|
|
|
db.attachment().liveAttachments(draft.id).observe(getViewLifecycleOwner(),
|
|
|
|
|
|
|
|
new Observer<List<TupleAttachment>>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onChanged(@Nullable List<TupleAttachment> attachments) {
|
|
|
|
|
|
|
|
if (attachments != null)
|
|
|
|
|
|
|
|
adapter.set(attachments);
|
|
|
|
|
|
|
|
grpAttachments.setVisibility(attachments != null && attachments.size() > 0 ? View.VISIBLE : View.GONE);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -730,12 +740,14 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
String subject = args.getString("subject");
|
|
|
|
String subject = args.getString("subject");
|
|
|
|
String body = args.getString("body");
|
|
|
|
String body = args.getString("body");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EntityMessage draft;
|
|
|
|
|
|
|
|
|
|
|
|
// Get draft & selected identity
|
|
|
|
// Get draft & selected identity
|
|
|
|
DB db = DB.getInstance(context);
|
|
|
|
DB db = DB.getInstance(context);
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
db.beginTransaction();
|
|
|
|
db.beginTransaction();
|
|
|
|
|
|
|
|
|
|
|
|
EntityMessage draft = db.message().getMessageByMsgId(id);
|
|
|
|
draft = db.message().getMessageByMsgId(id);
|
|
|
|
EntityIdentity identity = db.identity().getIdentity(iid);
|
|
|
|
EntityIdentity identity = db.identity().getIdentity(iid);
|
|
|
|
|
|
|
|
|
|
|
|
// Draft deleted by server
|
|
|
|
// Draft deleted by server
|
|
|
@ -799,6 +811,7 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
|
|
|
|
|
|
|
|
// Restore attachments
|
|
|
|
// Restore attachments
|
|
|
|
for (EntityAttachment attachment : attachments) {
|
|
|
|
for (EntityAttachment attachment : attachments) {
|
|
|
|
|
|
|
|
attachment.id = null;
|
|
|
|
attachment.message = draft.id;
|
|
|
|
attachment.message = draft.id;
|
|
|
|
db.attachment().insertAttachment(attachment);
|
|
|
|
db.attachment().insertAttachment(attachment);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -841,6 +854,7 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
|
|
|
|
|
|
|
|
// Restore attachments
|
|
|
|
// Restore attachments
|
|
|
|
for (EntityAttachment attachment : attachments) {
|
|
|
|
for (EntityAttachment attachment : attachments) {
|
|
|
|
|
|
|
|
attachment.id = null;
|
|
|
|
attachment.message = draft.id;
|
|
|
|
attachment.message = draft.id;
|
|
|
|
db.attachment().insertAttachment(attachment);
|
|
|
|
db.attachment().insertAttachment(attachment);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -869,11 +883,13 @@ public class FragmentCompose extends FragmentEx {
|
|
|
|
bottom_navigation.getMenu().setGroupEnabled(0, true);
|
|
|
|
bottom_navigation.getMenu().setGroupEnabled(0, true);
|
|
|
|
|
|
|
|
|
|
|
|
if (action == R.id.action_trash) {
|
|
|
|
if (action == R.id.action_trash) {
|
|
|
|
|
|
|
|
autosave = false;
|
|
|
|
getFragmentManager().popBackStack();
|
|
|
|
getFragmentManager().popBackStack();
|
|
|
|
Toast.makeText(getContext(), R.string.title_draft_trashed, Toast.LENGTH_LONG).show();
|
|
|
|
Toast.makeText(getContext(), R.string.title_draft_trashed, Toast.LENGTH_LONG).show();
|
|
|
|
} else if (action == R.id.action_save)
|
|
|
|
} else if (action == R.id.action_save)
|
|
|
|
Toast.makeText(getContext(), R.string.title_draft_saved, Toast.LENGTH_LONG).show();
|
|
|
|
Toast.makeText(getContext(), R.string.title_draft_saved, Toast.LENGTH_LONG).show();
|
|
|
|
else if (action == R.id.action_send) {
|
|
|
|
else if (action == R.id.action_send) {
|
|
|
|
|
|
|
|
autosave = false;
|
|
|
|
getFragmentManager().popBackStack();
|
|
|
|
getFragmentManager().popBackStack();
|
|
|
|
Toast.makeText(getContext(), R.string.title_queued, Toast.LENGTH_LONG).show();
|
|
|
|
Toast.makeText(getContext(), R.string.title_queued, Toast.LENGTH_LONG).show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|