make jids appear as monospace in dialogs

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java        | 16 
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java    |  3 
src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java | 14 
src/main/java/eu/siacs/conversations/ui/util/JidDialog.java            | 23 
4 files changed, 36 insertions(+), 20 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java 🔗

@@ -1,6 +1,7 @@
 package eu.siacs.conversations.ui;
 
 import android.databinding.DataBindingUtil;
+import android.support.annotation.StringRes;
 import android.support.v7.app.AlertDialog;
 import android.text.SpannableString;
 import android.text.Spanned;
@@ -12,6 +13,7 @@ import eu.siacs.conversations.R;
 import eu.siacs.conversations.databinding.DialogBlockContactBinding;
 import eu.siacs.conversations.entities.Blockable;
 import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.ui.util.JidDialog;
 import rocks.xmpp.addr.Jid;
 
 public final class BlockContactDialog {
@@ -24,23 +26,19 @@ public final class BlockContactDialog {
 		binding.reportSpam.setVisibility(!isBlocked && reporting ? View.VISIBLE : View.GONE);
 		builder.setView(binding.getRoot());
 
-		String value;
-		SpannableString spannable;
+		final String value;
+		@StringRes int res;
 		if (blockable.getJid().getLocal() == null || blockable.getAccount().isBlocked(Jid.ofDomain(blockable.getJid().getDomain()))) {
 			builder.setTitle(isBlocked ? R.string.action_unblock_domain : R.string.action_block_domain);
 			value = Jid.ofDomain(blockable.getJid().getDomain()).toString();
-			spannable = new SpannableString(xmppActivity.getString(isBlocked ? R.string.unblock_domain_text : R.string.block_domain_text, value));
+			res = isBlocked ? R.string.unblock_domain_text : R.string.block_domain_text;
 		} else {
 			int resBlockAction = blockable instanceof Conversation && ((Conversation) blockable).isWithStranger() ? R.string.block_stranger : R.string.action_block_contact;
 			builder.setTitle(isBlocked ? R.string.action_unblock_contact : resBlockAction);
 			value = blockable.getJid().asBareJid().toString();
-			spannable = new SpannableString(xmppActivity.getString(isBlocked ? R.string.unblock_contact_text : R.string.block_contact_text, value));
+			res = isBlocked ? R.string.unblock_contact_text : R.string.block_contact_text;
 		}
-		int start = spannable.toString().indexOf(value);
-		if (start >= 0) {
-			spannable.setSpan(new TypefaceSpan("monospace"), start, start + value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-		}
-		binding.text.setText(spannable);
+		binding.text.setText(JidDialog.style(xmppActivity, res, value));
 		builder.setPositiveButton(isBlocked ? R.string.unblock : R.string.block, (dialog, which) -> {
 			if (isBlocked) {
 				xmppActivity.xmppConnectionService.sendUnblockRequest(blockable);

src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java 🔗

@@ -44,6 +44,7 @@ import eu.siacs.conversations.ui.adapter.MediaAdapter;
 import eu.siacs.conversations.ui.interfaces.OnMediaLoaded;
 import eu.siacs.conversations.ui.util.Attachment;
 import eu.siacs.conversations.ui.util.GridManager;
+import eu.siacs.conversations.ui.util.JidDialog;
 import eu.siacs.conversations.ui.util.MenuDoubleTabUtil;
 import eu.siacs.conversations.utils.Compatibility;
 import eu.siacs.conversations.utils.IrregularUnicodeDetector;
@@ -241,7 +242,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp
                 break;
             case R.id.action_delete_contact:
                 builder.setTitle(getString(R.string.action_delete_contact))
-                        .setMessage(getString(R.string.remove_contact_text, contact.getJid().toString()))
+                        .setMessage(JidDialog.style(this, R.string.remove_contact_text, contact.getJid().toEscapedString()))
                         .setPositiveButton(getString(R.string.delete),
                                 removeFromRoster).create().show();
                 break;

src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java 🔗

@@ -71,6 +71,7 @@ import eu.siacs.conversations.services.XmppConnectionService.OnRosterUpdate;
 import eu.siacs.conversations.ui.adapter.ListItemAdapter;
 import eu.siacs.conversations.ui.interfaces.OnBackendConnected;
 import eu.siacs.conversations.ui.service.EmojiService;
+import eu.siacs.conversations.ui.util.JidDialog;
 import eu.siacs.conversations.ui.util.MenuDoubleTabUtil;
 import eu.siacs.conversations.ui.util.PendingItem;
 import eu.siacs.conversations.ui.util.SoftKeyboardUtils;
@@ -427,7 +428,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
 		final AlertDialog.Builder builder = new AlertDialog.Builder(this);
 		builder.setNegativeButton(R.string.cancel, null);
 		builder.setTitle(R.string.action_delete_contact);
-		builder.setMessage(getString(R.string.remove_contact_text, contact.getJid()));
+		builder.setMessage(JidDialog.style(this, R.string.remove_contact_text, contact.getJid().toEscapedString()));
 		builder.setPositiveButton(R.string.delete, (dialog, which) -> {
 			xmppConnectionService.deleteContactOnServer(contact);
 			filter(mSearchEditText.getText().toString());
@@ -442,8 +443,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
 		AlertDialog.Builder builder = new AlertDialog.Builder(this);
 		builder.setNegativeButton(R.string.cancel, null);
 		builder.setTitle(R.string.delete_bookmark);
-		builder.setMessage(getString(R.string.remove_bookmark_text,
-				bookmark.getJid()));
+		builder.setMessage(JidDialog.style(this, R.string.remove_bookmark_text, bookmark.getJid().toEscapedString()));
 		builder.setPositiveButton(R.string.delete, (dialog, which) -> {
 			bookmark.setConversation(null);
 			Account account = bookmark.getAccount();
@@ -821,13 +821,7 @@ public class StartConversationActivity extends XmppActivity implements XmppConne
 		View view = getLayoutInflater().inflate(R.layout.dialog_verify_fingerprints, null);
 		final CheckBox isTrustedSource = view.findViewById(R.id.trusted_source);
 		TextView warning = view.findViewById(R.id.warning);
-		String jid = contact.getJid().asBareJid().toString();
-		SpannableString spannable = new SpannableString(getString(R.string.verifying_omemo_keys_trusted_source, jid, contact.getDisplayName()));
-		int start = spannable.toString().indexOf(jid);
-		if (start >= 0) {
-			spannable.setSpan(new TypefaceSpan("monospace"), start, start + jid.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-		}
-		warning.setText(spannable);
+		warning.setText(JidDialog.style(this, R.string.verifying_omemo_keys_trusted_source, contact.getJid().asBareJid().toEscapedString(), contact.getDisplayName()));
 		builder.setView(view);
 		builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
 			if (isTrustedSource.isChecked() && invite.hasFingerprints()) {

src/main/java/eu/siacs/conversations/ui/util/JidDialog.java 🔗

@@ -0,0 +1,23 @@
+package eu.siacs.conversations.ui.util;
+
+import android.content.Context;
+import android.support.annotation.StringRes;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.style.TypefaceSpan;
+
+
+public class JidDialog {
+
+    public static SpannableString style(Context context, @StringRes int res, String... args) {
+        SpannableString spannable = new SpannableString(context.getString(res, (Object[]) args));
+        if (args.length >= 1) {
+            final String value = args[0];
+            int start = spannable.toString().indexOf(value);
+            if (start >= 0) {
+                spannable.setSpan(new TypefaceSpan("monospace"), start, start + value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+            }
+        }
+        return spannable;
+    }
+}