diff --git a/app/src/main/java/eu/faircode/email/FragmentIdentity.java b/app/src/main/java/eu/faircode/email/FragmentIdentity.java index 28d7032774..308b75c8d2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentIdentity.java @@ -19,6 +19,7 @@ package eu.faircode.email; Copyright 2018-2019 by Marcel Bokhorst (M66B) */ +import android.app.Dialog; import android.app.NotificationManager; import android.content.Context; import android.content.DialogInterface; @@ -53,7 +54,10 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.constraintlayout.widget.Group; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.google.android.material.snackbar.Snackbar; @@ -71,6 +75,7 @@ import java.util.Properties; import javax.mail.Session; import javax.mail.Transport; +import static android.app.Activity.RESULT_CANCELED; import static android.app.Activity.RESULT_OK; import static com.google.android.material.textfield.TextInputLayout.END_ICON_NONE; import static com.google.android.material.textfield.TextInputLayout.END_ICON_PASSWORD_TOGGLE; @@ -134,6 +139,7 @@ public class FragmentIdentity extends FragmentBase { private static final int REQUEST_COLOR = 1; private static final int REQUEST_SAVE = 2; private static final int REQUEST_DELETE = 3; + private static final int REQUEST_HTML = 4; @Override public void onCreate(Bundle savedInstanceState) { @@ -300,29 +306,13 @@ public class FragmentIdentity extends FragmentBase { btnHtml.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_signature, null); - final EditText etHtml = dview.findViewById(R.id.etHtml); - etHtml.setText((String) etSignature.getTag()); - - new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner()) - .setTitle(R.string.title_edit_html) - .setView(dview) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String html = etHtml.getText().toString(); - etSignature.setText(HtmlHelper.fromHtml(html)); - etSignature.setTag(html); - } - }) - .show(); + Bundle args = new Bundle(); + args.putString("html", (String) etSignature.getTag()); - new Handler().post(new Runnable() { - @Override - public void run() { - etHtml.requestFocus(); - } - }); + FragmentDialogHtml fragment = new FragmentDialogHtml(); + fragment.setArguments(args); + fragment.setTargetFragment(FragmentIdentity.this, REQUEST_HTML); + fragment.show(getFragmentManager(), "identity:html"); } }); @@ -812,6 +802,7 @@ public class FragmentIdentity extends FragmentBase { outState.putString("fair:password", tilPassword.getEditText().getText().toString()); outState.putInt("fair:advanced", grpAdvanced.getVisibility()); outState.putInt("fair:color", color); + outState.putString("fair:html", (String) etSignature.getTag()); super.onSaveInstanceState(outState); } @@ -885,6 +876,7 @@ public class FragmentIdentity extends FragmentBase { tilPassword.getEditText().setText(savedInstanceState.getString("fair:password")); grpAdvanced.setVisibility(savedInstanceState.getInt("fair:advanced")); color = savedInstanceState.getInt("fair:color"); + etSignature.setTag(savedInstanceState.getString("fair:html")); } Helper.setViewsEnabled(view, true); @@ -1039,6 +1031,10 @@ public class FragmentIdentity extends FragmentBase { if (resultCode == RESULT_OK) onDelete(); break; + case REQUEST_HTML: + if (resultCode == RESULT_OK && data != null) + onHtml(data.getBundleExtra("args")); + break; } } @@ -1085,4 +1081,69 @@ public class FragmentIdentity extends FragmentBase { } }.execute(FragmentIdentity.this, args, "identity:delete"); } + + private void onHtml(Bundle args) { + String html = args.getString("html"); + etSignature.setText(HtmlHelper.fromHtml(html)); + etSignature.setTag(html); + } + + public static class FragmentDialogHtml extends DialogFragment { + private EditText etHtml; + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putString("fair:html", etHtml.getText().toString()); + super.onSaveInstanceState(outState); + } + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + String html; + if (savedInstanceState == null) + html = getArguments().getString("html"); + else + html = savedInstanceState.getString("fair:html"); + + View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_signature, null); + etHtml = dview.findViewById(R.id.etHtml); + etHtml.setText(html); + + new Handler().post(new Runnable() { + @Override + public void run() { + etHtml.requestFocus(); + } + }); + + return new AlertDialog.Builder(getContext()) + .setTitle(R.string.title_edit_html) + .setView(dview) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String html = etHtml.getText().toString(); + getArguments().putString("html", html); + sendResult(RESULT_OK); + } + }) + .setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialogInterface) { + sendResult(RESULT_CANCELED); + } + }) + .create(); + } + + private void sendResult(int result) { + Fragment target = getTargetFragment(); + if (target != null) { + Intent data = new Intent(); + data.putExtra("args", getArguments()); + target.onActivityResult(getTargetRequestCode(), result, data); + } + } + } }