From 945cea7ce5d7102d35c255e2f09d27ac14fb1620 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 11 Nov 2016 22:56:28 +0100 Subject: show button on "xmpp:" uris --- .../java/de/pixart/messenger/entities/Message.java | 7 +++++++ .../messenger/ui/adapter/MessageAdapter.java | 24 ++++++++++++++++++++++ .../java/de/pixart/messenger/utils/UIHelper.java | 6 ++++++ .../java/de/pixart/messenger/utils/XmppUri.java | 5 +++++ src/main/res/values/strings.xml | 3 +++ 5 files changed, 45 insertions(+) diff --git a/src/main/java/de/pixart/messenger/entities/Message.java b/src/main/java/de/pixart/messenger/entities/Message.java index 7bd61c5b9..e3dc68ce9 100644 --- a/src/main/java/de/pixart/messenger/entities/Message.java +++ b/src/main/java/de/pixart/messenger/entities/Message.java @@ -13,6 +13,7 @@ import de.pixart.messenger.utils.CryptoHelper; import de.pixart.messenger.utils.GeoHelper; import de.pixart.messenger.utils.MimeUtils; import de.pixart.messenger.utils.UIHelper; +import de.pixart.messenger.utils.XmppUri; import de.pixart.messenger.xmpp.jid.InvalidJidException; import de.pixart.messenger.xmpp.jid.Jid; @@ -492,6 +493,8 @@ public class Message extends AbstractEntity { !this.getBody().startsWith(ME_COMMAND) && !this.bodyIsHeart() && !message.bodyIsHeart() && + !this.bodyIsXmpp() && + !message.bodyIsXmpp() && this.isTrusted() == message.isTrusted() ); } @@ -680,6 +683,10 @@ public class Message extends AbstractEntity { return body != null && UIHelper.HEARTS.contains(body.trim()); } + public boolean bodyIsXmpp() { + return body != null && XmppUri.isXmppUri(body.trim()); + } + public FileParams getFileParams() { FileParams params = getLegacyFileParams(); if (params != null) { diff --git a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java index 1914df278..3cfc4cfa7 100644 --- a/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java +++ b/src/main/java/de/pixart/messenger/ui/adapter/MessageAdapter.java @@ -313,6 +313,28 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie viewHolder.messageBody.setText(span); } + private void displayXmppMessage(final ViewHolder viewHolder, final String body) { + String contact = body.toLowerCase(); + contact = contact.split(":")[1]; + contact = contact.split("\\?")[0]; + String add_contact = activity.getString(R.string.add_to_contact_list) + " (" + contact + ")"; + viewHolder.aw_player.setVisibility(View.GONE); + viewHolder.download_button.setVisibility(View.VISIBLE); + viewHolder.download_button.setText(add_contact); + viewHolder.download_button.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(body)); + activity.startActivity(intent); + } + }); + viewHolder.image.setVisibility(View.GONE); + viewHolder.messageBody.setVisibility(View.GONE); + + } + private void displayTextMessage(final ViewHolder viewHolder, final Message message, boolean darkBackground) { if (viewHolder.download_button != null) { viewHolder.download_button.setVisibility(View.GONE); @@ -740,6 +762,8 @@ public class MessageAdapter extends ArrayAdapter implements CopyTextVie displayLocationMessage(viewHolder,message); } else if (message.bodyIsHeart()) { displayHeartMessage(viewHolder, message.getBody().trim()); + } else if (message.bodyIsXmpp()) { + displayXmppMessage(viewHolder, message.getBody().trim()); } else if (message.treatAsDownloadable() == Message.Decision.MUST || message.treatAsDownloadable() == Message.Decision.SHOULD) { try { diff --git a/src/main/java/de/pixart/messenger/utils/UIHelper.java b/src/main/java/de/pixart/messenger/utils/UIHelper.java index fbd41fa0a..100eff4ea 100644 --- a/src/main/java/de/pixart/messenger/utils/UIHelper.java +++ b/src/main/java/de/pixart/messenger/utils/UIHelper.java @@ -192,6 +192,12 @@ public class UIHelper { } else { return new Pair<>(context.getString(R.string.location), true); } + } else if (message.bodyIsXmpp()) { + if (message.getStatus() == Message.STATUS_RECEIVED) { + return new Pair<>(context.getString(R.string.received_contact), true); + } else { + return new Pair<>(context.getString(R.string.contact), true); + } } else if (message.treatAsDownloadable() == Message.Decision.MUST) { return new Pair<>(context.getString(R.string.x_file_offered_for_download, getFileDescriptionString(context,message)),true); diff --git a/src/main/java/de/pixart/messenger/utils/XmppUri.java b/src/main/java/de/pixart/messenger/utils/XmppUri.java index 07f85503e..832b4018f 100644 --- a/src/main/java/de/pixart/messenger/utils/XmppUri.java +++ b/src/main/java/de/pixart/messenger/utils/XmppUri.java @@ -31,6 +31,11 @@ public class XmppUri { parse(uri); } + public static boolean isXmppUri(String uri) { + String scheme = Uri.parse(uri).getScheme(); + return "xmpp".equalsIgnoreCase(scheme); + } + protected void parse(Uri uri) { String scheme = uri.getScheme(); String host = uri.getHost(); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 50e076b6e..5c81f5529 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -722,4 +722,7 @@ Your operating system is restricting Pix-Art Messenger from accessing the Internet when in background. To receive notifications of new messages you should allow Pix-Art Messenger unrestricted access when Data saver is on.\\nPix-Art Messenger will still make an effort to save data when possible. Your device does not supporting disabling Data saver for Pix-Art Messenger. Navigate to location + Add to contact list + Received contact + Contact -- cgit v1.2.3