|
|
@ -1786,6 +1786,8 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
|
|
|
|
|
|
|
|
private void onAction(int action) {
|
|
|
|
private void onAction(int action) {
|
|
|
|
EntityIdentity identity = (EntityIdentity) spIdentity.getSelectedItem();
|
|
|
|
EntityIdentity identity = (EntityIdentity) spIdentity.getSelectedItem();
|
|
|
|
|
|
|
|
if (identity == null)
|
|
|
|
|
|
|
|
throw new IllegalArgumentException(getString(R.string.title_from_missing));
|
|
|
|
|
|
|
|
|
|
|
|
// Workaround underlines left by Android
|
|
|
|
// Workaround underlines left by Android
|
|
|
|
etBody.clearComposingText();
|
|
|
|
etBody.clearComposingText();
|
|
|
@ -1984,9 +1986,9 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private SimpleTask<EntityMessage> draftLoader = new SimpleTask<EntityMessage>() {
|
|
|
|
private SimpleTask<DraftData> draftLoader = new SimpleTask<DraftData>() {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected EntityMessage onExecute(Context context, Bundle args) throws Throwable {
|
|
|
|
protected DraftData onExecute(Context context, Bundle args) throws Throwable {
|
|
|
|
String action = args.getString("action");
|
|
|
|
String action = args.getString("action");
|
|
|
|
long id = args.getLong("id", -1);
|
|
|
|
long id = args.getLong("id", -1);
|
|
|
|
long reference = args.getLong("reference", -1);
|
|
|
|
long reference = args.getLong("reference", -1);
|
|
|
@ -2354,21 +2356,41 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
db.endTransaction();
|
|
|
|
db.endTransaction();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return draft;
|
|
|
|
DraftData data = new DraftData();
|
|
|
|
|
|
|
|
data.draft = draft;
|
|
|
|
|
|
|
|
data.identities = db.identity().getComposableIdentities(null);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
protected void onExecuted(Bundle args, final EntityMessage draft) {
|
|
|
|
protected void onExecuted(Bundle args, final DraftData data) {
|
|
|
|
working = draft.id;
|
|
|
|
if (data.identities == null || data.identities.size() == 0)
|
|
|
|
|
|
|
|
throw new IllegalStateException(getString(R.string.title_no_identities));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
working = data.draft.id;
|
|
|
|
|
|
|
|
|
|
|
|
final String action = getArguments().getString("action");
|
|
|
|
final String action = getArguments().getString("action");
|
|
|
|
Log.i("Loaded draft id=" + draft.id + " action=" + action);
|
|
|
|
Log.i("Loaded draft id=" + data.draft.id + " action=" + action);
|
|
|
|
|
|
|
|
|
|
|
|
etExtra.setText(draft.extra);
|
|
|
|
// Show identities
|
|
|
|
etTo.setText(MessageHelper.formatAddressesCompose(draft.to));
|
|
|
|
IdentityAdapter iadapter = new IdentityAdapter(getContext(), data.identities);
|
|
|
|
etCc.setText(MessageHelper.formatAddressesCompose(draft.cc));
|
|
|
|
spIdentity.setAdapter(iadapter);
|
|
|
|
etBcc.setText(MessageHelper.formatAddressesCompose(draft.bcc));
|
|
|
|
|
|
|
|
etSubject.setText(draft.subject);
|
|
|
|
// Select identity
|
|
|
|
|
|
|
|
if (data.draft.identity != null)
|
|
|
|
|
|
|
|
for (int pos = 0; pos < data.identities.size(); pos++) {
|
|
|
|
|
|
|
|
if (data.identities.get(pos).id.equals(data.draft.identity)) {
|
|
|
|
|
|
|
|
spIdentity.setSelection(pos);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
etExtra.setText(data.draft.extra);
|
|
|
|
|
|
|
|
etTo.setText(MessageHelper.formatAddressesCompose(data.draft.to));
|
|
|
|
|
|
|
|
etCc.setText(MessageHelper.formatAddressesCompose(data.draft.cc));
|
|
|
|
|
|
|
|
etBcc.setText(MessageHelper.formatAddressesCompose(data.draft.bcc));
|
|
|
|
|
|
|
|
etSubject.setText(data.draft.subject);
|
|
|
|
|
|
|
|
|
|
|
|
long reference = args.getLong("reference", -1);
|
|
|
|
long reference = args.getLong("reference", -1);
|
|
|
|
etTo.setTag(reference < 0 ? "" : etTo.getText().toString());
|
|
|
|
etTo.setTag(reference < 0 ? "" : etTo.getText().toString());
|
|
|
@ -2378,54 +2400,21 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
grpAddresses.setVisibility("reply_all".equals(action) ? View.VISIBLE : View.GONE);
|
|
|
|
grpAddresses.setVisibility("reply_all".equals(action) ? View.VISIBLE : View.GONE);
|
|
|
|
ibCcBcc.setVisibility(View.VISIBLE);
|
|
|
|
ibCcBcc.setVisibility(View.VISIBLE);
|
|
|
|
|
|
|
|
|
|
|
|
bottom_navigation.getMenu().findItem(R.id.action_undo).setVisible(draft.revision != null && draft.revision > 1);
|
|
|
|
bottom_navigation.getMenu().findItem(R.id.action_undo).setVisible(
|
|
|
|
bottom_navigation.getMenu().findItem(R.id.action_redo).setVisible(draft.revision != null && !draft.revision.equals(draft.revisions));
|
|
|
|
data.draft.revision != null && data.draft.revision > 1);
|
|
|
|
|
|
|
|
bottom_navigation.getMenu().findItem(R.id.action_redo).setVisible(
|
|
|
|
|
|
|
|
data.draft.revision != null && !data.draft.revision.equals(data.draft.revisions));
|
|
|
|
|
|
|
|
|
|
|
|
plain_only = (draft.plain_only != null && draft.plain_only);
|
|
|
|
plain_only = (data.draft.plain_only != null && data.draft.plain_only);
|
|
|
|
encrypt = (draft.encrypt != null && draft.encrypt);
|
|
|
|
encrypt = (data.draft.encrypt != null && data.draft.encrypt);
|
|
|
|
getActivity().invalidateOptionsMenu();
|
|
|
|
getActivity().invalidateOptionsMenu();
|
|
|
|
|
|
|
|
|
|
|
|
if (args.getBoolean("incomplete"))
|
|
|
|
if (args.getBoolean("incomplete"))
|
|
|
|
Snackbar.make(view, R.string.title_attachments_incomplete, Snackbar.LENGTH_LONG).show();
|
|
|
|
Snackbar.make(view, R.string.title_attachments_incomplete, Snackbar.LENGTH_LONG).show();
|
|
|
|
|
|
|
|
|
|
|
|
new SimpleTask<List<TupleIdentityEx>>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected List<TupleIdentityEx> onExecute(Context context, Bundle args) {
|
|
|
|
|
|
|
|
DB db = DB.getInstance(context);
|
|
|
|
|
|
|
|
List<TupleIdentityEx> identities = db.identity().getComposableIdentities(null);
|
|
|
|
|
|
|
|
if (identities == null)
|
|
|
|
|
|
|
|
identities = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return identities;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected void onExecuted(Bundle args, List<TupleIdentityEx> identities) {
|
|
|
|
|
|
|
|
Log.i("Set identities=" + identities.size());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Show identities
|
|
|
|
|
|
|
|
IdentityAdapter adapter = new IdentityAdapter(getContext(), identities);
|
|
|
|
|
|
|
|
spIdentity.setAdapter(adapter);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Select identity
|
|
|
|
|
|
|
|
if (draft.identity != null)
|
|
|
|
|
|
|
|
for (int pos = 0; pos < identities.size(); pos++) {
|
|
|
|
|
|
|
|
if (identities.get(pos).id.equals(draft.identity)) {
|
|
|
|
|
|
|
|
spIdentity.setSelection(pos);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected void onException(Bundle args, Throwable ex) {
|
|
|
|
|
|
|
|
Helper.unexpectedError(getFragmentManager(), ex);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}.execute(FragmentCompose.this, new Bundle(), "compose:identities");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DB db = DB.getInstance(getContext());
|
|
|
|
DB db = DB.getInstance(getContext());
|
|
|
|
|
|
|
|
|
|
|
|
db.attachment().liveAttachments(draft.id).observe(getViewLifecycleOwner(),
|
|
|
|
db.attachment().liveAttachments(data.draft.id).observe(getViewLifecycleOwner(),
|
|
|
|
new Observer<List<EntityAttachment>>() {
|
|
|
|
new Observer<List<EntityAttachment>>() {
|
|
|
|
private int last_available = 0;
|
|
|
|
private int last_available = 0;
|
|
|
|
|
|
|
|
|
|
|
@ -2462,7 +2451,7 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
db.message().liveMessage(draft.id).observe(getViewLifecycleOwner(), new Observer<EntityMessage>() {
|
|
|
|
db.message().liveMessage(data.draft.id).observe(getViewLifecycleOwner(), new Observer<EntityMessage>() {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onChanged(EntityMessage draft) {
|
|
|
|
public void onChanged(EntityMessage draft) {
|
|
|
|
// Draft was deleted
|
|
|
|
// Draft was deleted
|
|
|
@ -2491,7 +2480,17 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
handleFileShare();
|
|
|
|
handleFileShare();
|
|
|
|
else if (ex instanceof IllegalArgumentException)
|
|
|
|
else if (ex instanceof IllegalArgumentException)
|
|
|
|
Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show();
|
|
|
|
Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show();
|
|
|
|
else
|
|
|
|
else if (ex instanceof IllegalStateException) {
|
|
|
|
|
|
|
|
Snackbar snackbar = Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_INDEFINITE);
|
|
|
|
|
|
|
|
snackbar.setAction(R.string.title_fix, new View.OnClickListener() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void onClick(View view) {
|
|
|
|
|
|
|
|
startActivity(new Intent(getContext(), ActivitySetup.class));
|
|
|
|
|
|
|
|
getActivity().finish();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
snackbar.show();
|
|
|
|
|
|
|
|
} else
|
|
|
|
Helper.unexpectedError(getFragmentManager(), ex);
|
|
|
|
Helper.unexpectedError(getFragmentManager(), ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -3563,4 +3562,9 @@ public class FragmentCompose extends FragmentBase {
|
|
|
|
.create();
|
|
|
|
.create();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private class DraftData {
|
|
|
|
|
|
|
|
private EntityMessage draft;
|
|
|
|
|
|
|
|
private List<TupleIdentityEx> identities;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|