From 8980a0c63107d1d60b5e8e009cef10090f652635 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 6 Oct 2018 17:03:12 +0200 Subject: [PATCH] make jids appear as monospace in dialogs --- .../conversations/ui/BlockContactDialog.java | 16 ++++++------- .../ui/ContactDetailsActivity.java | 3 ++- .../ui/StartConversationActivity.java | 14 ++++------- .../conversations/ui/util/JidDialog.java | 23 +++++++++++++++++++ 4 files changed, 36 insertions(+), 20 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/ui/util/JidDialog.java diff --git a/src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java b/src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java index 9c462cba3..e951ff492 100644 --- a/src/main/java/eu/siacs/conversations/ui/BlockContactDialog.java +++ b/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); diff --git a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java index 92a0e297f..d405059ef 100644 --- a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/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; diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java index 9b148f131..4031e7bca 100644 --- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java +++ b/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()) { diff --git a/src/main/java/eu/siacs/conversations/ui/util/JidDialog.java b/src/main/java/eu/siacs/conversations/ui/util/JidDialog.java new file mode 100644 index 000000000..ae5401717 --- /dev/null +++ b/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; + } +}