Allow editing replied/forwarded reformatted text

pull/162/head
M66B 6 years ago
parent 1be08618e9
commit a0f9c40dc6

@ -90,6 +90,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu;
import androidx.constraintlayout.widget.Group; import androidx.constraintlayout.widget.Group;
import androidx.core.content.FileProvider; import androidx.core.content.FileProvider;
import androidx.cursoradapter.widget.SimpleCursorAdapter; import androidx.cursoradapter.widget.SimpleCursorAdapter;
@ -223,12 +224,11 @@ public class FragmentCompose extends FragmentBase {
private static final int REQUEST_ENCRYPT = 8; private static final int REQUEST_ENCRYPT = 8;
private static final int REQUEST_COLOR = 9; private static final int REQUEST_COLOR = 9;
private static final int REQUEST_REF_DELETE = 10; private static final int REQUEST_REF_DELETE = 10;
private static final int REQUEST_REF_EDIT = 11; private static final int REQUEST_CONTACT_GROUP = 11;
private static final int REQUEST_CONTACT_GROUP = 12; private static final int REQUEST_ANSWER = 12;
private static final int REQUEST_ANSWER = 13; private static final int REQUEST_LINK = 13;
private static final int REQUEST_LINK = 14; private static final int REQUEST_DISCARD = 14;
private static final int REQUEST_DISCARD = 15; private static final int REQUEST_SEND = 15;
private static final int REQUEST_SEND = 16;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@ -680,86 +680,98 @@ public class FragmentCompose extends FragmentBase {
} }
private void onReferenceEdit() { private void onReferenceEdit() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(getContext(), getViewLifecycleOwner(), ibReferenceEdit);
if (prefs.getBoolean("edit_ref_confirmed", false)) {
onReferenceEditConfirmed();
return;
}
Bundle args = new Bundle(); popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_plain_text, 1, R.string.title_edit_plain_text);
args.putString("question", getString(R.string.title_ask_edit_ref)); popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_formatted_text, 2, R.string.title_edit_formatted_text);
args.putString("notagain", "edit_ref_confirmed");
FragmentDialogAsk fragment = new FragmentDialogAsk(); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
fragment.setArguments(args); @Override
fragment.setTargetFragment(this, REQUEST_REF_EDIT); public boolean onMenuItemClick(MenuItem item) {
fragment.show(getFragmentManager(), "compose:refedit"); switch (item.getItemId()) {
} case R.string.title_edit_plain_text:
convertRef(true);
return true;
private void onReferenceEditConfirmed() { case R.string.title_edit_formatted_text:
Bundle args = new Bundle(); convertRef(false);
args.putLong("id", working); return true;
args.putString("body", HtmlHelper.toHtml(etBody.getText()));
new SimpleTask<EntityMessage>() { default:
@Override return false;
protected void onPreExecute(Bundle args) { }
ibReferenceDelete.setEnabled(false);
ibReferenceEdit.setEnabled(false);
} }
@Override private void convertRef(boolean plain) {
protected void onPostExecute(Bundle args) { Bundle args = new Bundle();
ibReferenceDelete.setEnabled(true); args.putLong("id", working);
ibReferenceEdit.setEnabled(true); args.putString("body", HtmlHelper.toHtml(etBody.getText()));
}
@Override new SimpleTask<EntityMessage>() {
protected EntityMessage onExecute(Context context, Bundle args) throws Throwable { @Override
long id = args.getLong("id"); protected void onPreExecute(Bundle args) {
String body = args.getString("body"); ibReferenceDelete.setEnabled(false);
ibReferenceEdit.setEnabled(false);
}
DB db = DB.getInstance(context); @Override
EntityMessage draft = db.message().getMessage(id); protected void onPostExecute(Bundle args) {
if (draft == null || !draft.content) ibReferenceDelete.setEnabled(true);
throw new IllegalArgumentException(context.getString(R.string.title_no_body)); ibReferenceEdit.setEnabled(true);
}
File file = draft.getFile(context); @Override
File refFile = draft.getRefFile(context); protected EntityMessage onExecute(Context context, Bundle args) throws Throwable {
long id = args.getLong("id");
String body = args.getString("body");
String ref = Helper.readText(refFile); DB db = DB.getInstance(context);
String plain = HtmlHelper.getText(ref); EntityMessage draft = db.message().getMessage(id);
String html = "<p>" + plain.replaceAll("\\r?\\n", "<br>") + "</p>"; if (draft == null || !draft.content)
throw new IllegalArgumentException(context.getString(R.string.title_no_body));
try (BufferedWriter out = new BufferedWriter(new FileWriter(file))) {
out.write(body);
out.write(html);
}
refFile.delete(); File file = draft.getFile(context);
File refFile = draft.getRefFile(context);
String html;
String ref = Helper.readText(refFile);
if (plain) {
String plain = HtmlHelper.getText(ref);
html = "<p>" + plain.replaceAll("\\r?\\n", "<br>") + "</p>";
} else
html = HtmlHelper.sanitize(context, ref, true);
try (BufferedWriter out = new BufferedWriter(new FileWriter(file))) {
out.write(body);
out.write(html);
}
draft.plain_only = true; refFile.delete();
draft.revision = null;
draft.revisions = null;
db.message().setMessagePlainOnly(draft.id, true); draft.revision = null;
db.message().setMessageRevision(draft.id, null); draft.revisions = null;
db.message().setMessageRevisions(draft.id, null);
return draft; db.message().setMessageRevision(draft.id, null);
} db.message().setMessageRevisions(draft.id, null);
@Override return draft;
protected void onExecuted(Bundle args, EntityMessage draft) { }
getActivity().invalidateOptionsMenu();
showDraft(draft);
}
@Override @Override
protected void onException(Bundle args, Throwable ex) { protected void onExecuted(Bundle args, EntityMessage draft) {
Helper.unexpectedError(getFragmentManager(), ex); showDraft(draft);
}
@Override
protected void onException(Bundle args, Throwable ex) {
Helper.unexpectedError(getFragmentManager(), ex);
}
}.execute(FragmentCompose.this, args, "compose:convert");
} }
}.execute(this, args, "compose:refedit"); });
popupMenu.show();
} }
private void onReferenceImages() { private void onReferenceImages() {
@ -1255,10 +1267,6 @@ public class FragmentCompose extends FragmentBase {
if (resultCode == RESULT_OK) if (resultCode == RESULT_OK)
onReferenceDeleteConfirmed(); onReferenceDeleteConfirmed();
break; break;
case REQUEST_REF_EDIT:
if (resultCode == RESULT_OK)
onReferenceEditConfirmed();
break;
case REQUEST_CONTACT_GROUP: case REQUEST_CONTACT_GROUP:
if (resultCode == RESULT_OK && data != null) if (resultCode == RESULT_OK && data != null)
onContactGroupSelected(data.getBundleExtra("args")); onContactGroupSelected(data.getBundleExtra("args"));

@ -616,6 +616,8 @@
<string name="title_media_toolbar">Media toolbar</string> <string name="title_media_toolbar">Media toolbar</string>
<string name="title_insert_contact_group">Insert contact group</string> <string name="title_insert_contact_group">Insert contact group</string>
<string name="title_insert_template">Insert template</string> <string name="title_insert_template">Insert template</string>
<string name="title_edit_plain_text">Edit as plain text</string>
<string name="title_edit_formatted_text">Edit as reformatted text</string>
<string name="title_send_plain_text">Plain text only</string> <string name="title_send_plain_text">Plain text only</string>
<string name="title_send_receipt">Request delivery/read receipt</string> <string name="title_send_receipt">Request delivery/read receipt</string>
<string name="title_send_receipt_remark">Most providers and email clients ignore receipt requests</string> <string name="title_send_receipt_remark">Most providers and email clients ignore receipt requests</string>

Loading…
Cancel
Save