From bec562bfb22cfa53990604542f092251ab68fd68 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 17 Feb 2017 19:08:32 +0100 Subject: [PATCH] Linkify email-addresses. --- .../com/b44t/messenger/MessageObject.java | 142 ++---------------- .../main/java/com/b44t/messenger/TLRPC.java | 1 - .../com/b44t/ui/Cells/ChatMessageCell.java | 24 ++- .../main/java/com/b44t/ui/ChatActivity.java | 16 +- .../ui/Components/URLSpanNoUnderline.java | 39 ----- .../ui/Components/URLSpanReplacement.java | 32 ---- 6 files changed, 27 insertions(+), 227 deletions(-) delete mode 100644 MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanNoUnderline.java delete mode 100644 MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanReplacement.java diff --git a/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java b/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java index e79cbc557..7fa6c526a 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/MessageObject.java @@ -32,11 +32,9 @@ import android.text.TextPaint; import android.text.util.Linkify; import com.b44t.ui.ActionBar.Theme; -import com.b44t.ui.Components.URLSpanNoUnderline; import java.io.File; import java.util.ArrayList; -import java.util.regex.Matcher; import java.util.regex.Pattern; public class MessageObject { @@ -330,76 +328,6 @@ public class MessageObject { } } - /* - public CharSequence replaceWithLink(CharSequence source, String param, ArrayList uids, AbstractMap usersDict) { - int start = TextUtils.indexOf(source, param); - if (start >= 0) { - SpannableStringBuilder names = new SpannableStringBuilder(""); - for (int a = 0; a < uids.size(); a++) { - TLRPC.User user = null; - if (usersDict != null) { - user = usersDict.get(uids.get(a)); - } - if (user == null) { - user = MessagesController.getInstance().getUser(uids.get(a)); - } - if (user != null) { - String name = UserObject.getUserName(user); - start = names.length(); - if (names.length() != 0) { - names.append(", "); - } - names.append(name); - names.setSpan(new URLSpanNoUnderlineBold("" + user.id), start, start + name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - } - } - return TextUtils.replace(source, new String[]{param}, new CharSequence[]{names}); - } - return source; - } - - public CharSequence replaceWithLink(CharSequence source, String param, TLObject object) { - int start = TextUtils.indexOf(source, param); - if (start >= 0) { - String name; - int id; - if (object instanceof TLRPC.User) { - name = UserObject.getUserName((TLRPC.User) object); - id = ((TLRPC.User) object).id; - } else if (object instanceof TLRPC.Chat) { - name = ((TLRPC.Chat) object).title; - id = -((TLRPC.Chat) object).id; - } else { - name = ""; - id = 0; - } - SpannableStringBuilder builder = new SpannableStringBuilder(TextUtils.replace(source, new String[]{param}, new String[]{name})); - builder.setSpan(new URLSpanNoUnderlineBold("" + id), start, start + name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - return builder; - } - return source; - } - */ - - /* - public String getExtension() { - String fileName = getFileName(); - int idx = fileName.lastIndexOf('.'); - String ext = null; - if (idx != -1) { - ext = fileName.substring(idx + 1); - } - if (ext == null || ext.length() == 0) { - ext = messageOwner.media.document.mime_type; - } - if (ext == null) { - ext = ""; - } - ext = ext.toUpperCase(); - return ext; - } - */ - public String getFileName() { if (messageOwner.media instanceof TLRPC.TL_messageMediaDocument) { return FileLoader.getAttachFileName(messageOwner.media.document); @@ -498,16 +426,16 @@ public class MessageObject { caption = Emoji.replaceEmoji(messageOwner.media.caption, textPaint.getFontMetricsInt(), AndroidUtilities.dp(20), false); if (containsUrls(caption)) { try { - Linkify.addLinks((Spannable) caption, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS); + Linkify.addLinks((Spannable) caption, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS | Linkify.EMAIL_ADDRESSES); } catch (Exception e) { FileLog.e("messenger", e); } - addUsernamesAndHashtags(caption); + //addUsernamesAndHashtags(caption); } } } - private static void addUsernamesAndHashtags(CharSequence charSequence) { + /*private static void addUsernamesAndHashtags(CharSequence charSequence) { try { if (urlPattern == null) { urlPattern = Pattern.compile("(^|\\s)/[a-zA-Z@\\d_]{1,255}|(^|\\s)@[a-zA-Z\\d_]{1,32}|(^|\\s)#[\\w\\.]+"); @@ -532,24 +460,24 @@ public class MessageObject { } catch (Exception e) { FileLog.e("messenger", e); } - } + }*/ private static void addLinks(CharSequence messageText) { if (messageText instanceof Spannable && containsUrls(messageText)) { - if (messageText.length() < 200) { + //if (messageText.length() < 200) { try { - Linkify.addLinks((Spannable) messageText, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS); + Linkify.addLinks((Spannable) messageText, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS | Linkify.EMAIL_ADDRESSES); } catch (Exception e) { FileLog.e("messenger", e); } - } else { + /*} else { try { Linkify.addLinks((Spannable) messageText, Linkify.WEB_URLS); } catch (Exception e) { FileLog.e("messenger", e); } - } - addUsernamesAndHashtags(messageText); + }*/ + //addUsernamesAndHashtags(messageText); } } @@ -802,62 +730,12 @@ public class MessageObject { return messageOwner.media_unread; } - public void setIsRead() { - messageOwner.unread = false; - } - - /* - public static int getUnreadFlags(TLRPC.Message message) { - int flags = 0; - if (!message.unread) { - flags |= 1; - } - if (!message.media_unread) { - flags |= 2; - } - return flags; - } - */ - - public void setContentIsRead() { - messageOwner.media_unread = false; - } - public int getId() { return messageOwner.id; } - public boolean isSecretPhoto() { - return false; - } - - public boolean isSecretMedia() { - return false; - } - - public static boolean isOut(TLRPC.Message message) { - return message.out; - } - public long getDialogId() { - return getDialogId(messageOwner); - } - - public static long getDialogId(TLRPC.Message message) { - if (message.dialog_id == 0 && message.to_id != null) { - if (message.to_id.chat_id != 0) { - /*if (message.to_id.chat_id < 0) { - message.dialog_id = AndroidUtilities.makeBroadcastId(message.to_id.chat_id); - } else*/ { - message.dialog_id = -message.to_id.chat_id; - } - } else if (isOut(message)) { - message.dialog_id = message.to_id.user_id; - } else { - message.dialog_id = message.from_id; - } - } - return message.dialog_id; + return messageOwner.dialog_id; } public boolean isSending() { diff --git a/MessengerProj/src/main/java/com/b44t/messenger/TLRPC.java b/MessengerProj/src/main/java/com/b44t/messenger/TLRPC.java index 8cd05464d..179086bb0 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/TLRPC.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/TLRPC.java @@ -448,7 +448,6 @@ public class TLRPC { public Peer to_id; public int date; public int reply_to_msg_id; - public long reply_to_random_id; public String message; public MessageMedia media; public int flags; diff --git a/MessengerProj/src/main/java/com/b44t/ui/Cells/ChatMessageCell.java b/MessengerProj/src/main/java/com/b44t/ui/Cells/ChatMessageCell.java index bbcd221bf..67dfc5ff6 100644 --- a/MessengerProj/src/main/java/com/b44t/ui/Cells/ChatMessageCell.java +++ b/MessengerProj/src/main/java/com/b44t/ui/Cells/ChatMessageCell.java @@ -47,7 +47,6 @@ import android.view.ViewStructure; import com.b44t.messenger.AndroidUtilities; import com.b44t.messenger.ContactsController; -import com.b44t.messenger.Emoji; import com.b44t.messenger.ImageLoader; import com.b44t.messenger.ImageReceiver; import com.b44t.messenger.LocaleController; @@ -70,7 +69,6 @@ import com.b44t.ui.Components.SeekBar; import com.b44t.ui.Components.SeekBarWaveform; import com.b44t.ui.Components.StaticLayoutEx; import com.b44t.ui.ActionBar.Theme; -import com.b44t.ui.Components.URLSpanNoUnderline; import com.b44t.ui.PhotoViewer; import java.io.File; @@ -942,11 +940,11 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate if (event.getAction() == MotionEvent.ACTION_UP) { forwardNamePressed = false; playSoundEffect(SoundEffectConstants.CLICK); - if (delegate != null) { - /*if (currentForwardUser != null) { + /*if (delegate != null) { + if (currentForwardUser != null) { delegate.didPressedUserAvatar(this, currentForwardUser); - }*/ - } + } + }*/ } else if (event.getAction() == MotionEvent.ACTION_CANCEL) { forwardNamePressed = false; } else if (event.getAction() == MotionEvent.ACTION_MOVE) { @@ -1305,13 +1303,13 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate @Override protected void onLongPress() { - if (pressedLink instanceof URLSpanNoUnderline) { + /*if (pressedLink instanceof URLSpanNoUnderline) { URLSpanNoUnderline url = (URLSpanNoUnderline) pressedLink; if (url.getURL().startsWith("/")) { delegate.didPressedUrl(currentMessageObject, pressedLink, true); return; } - } else if (pressedLink instanceof URLSpan) { + } else */ if (pressedLink instanceof URLSpan) { delegate.didPressedUrl(currentMessageObject, pressedLink, true); return; } @@ -2207,7 +2205,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate photoImage.setAllowStartAnimation(messageObject.audioProgress == 0); - photoImage.setForcePreview(messageObject.isSecretPhoto()); + photoImage.setForcePreview(false); if (messageObject.type == 9) { if (isTablet()) { backgroundWidth = Math.min(getMinTabletSide() - dp(isChat && messageObject.isFromUser() && !messageObject.isOutOwner() ? 102 : 50), dp(270)); @@ -2950,7 +2948,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate Theme.docMenuDrawable[3].draw(canvas); } - if (infoLayout != null && (buttonState == 1 || buttonState == 0 || buttonState == 3 || currentMessageObject.isSecretPhoto())) { + if (infoLayout != null && (buttonState == 1 || buttonState == 0 || buttonState == 3)) { infoPaint.setColor(Theme.MSG_MEDIA_INFO_TEXT_COLOR); setDrawableBounds(Theme.timeBackgroundDrawable, photoImage.getImageX() + dp(4), photoImage.getImageY() + dp(4), infoWidth + dp(8), dp(16.5f)); Theme.timeBackgroundDrawable.draw(canvas); @@ -3734,9 +3732,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate CharSequence stringFinalName = null; CharSequence stringFinalText = null; - if (messageObject.replyMessageObject != null) { + /*if (messageObject.replyMessageObject != null) { TLRPC.PhotoSize photoSize = FileLoader.getClosestPhotoSizeWithSize(messageObject.replyMessageObject.photoThumbs, 80); - if (photoSize == null || messageObject.replyMessageObject.type == 13 || messageObject.type == 13 && !isTablet() || messageObject.replyMessageObject.isSecretMedia()) { + if (photoSize == null || messageObject.replyMessageObject.type == 13 || messageObject.type == 13 && !isTablet()) { replyImageReceiver.setImageBitmap((Drawable) null); needReplyImage = false; } else { @@ -3776,7 +3774,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate stringFinalText = Emoji.replaceEmoji(mess, replyTextPaint.getFontMetricsInt(), dp(14), false); stringFinalText = TextUtils.ellipsize(stringFinalText, replyTextPaint, maxWidth, TextUtils.TruncateAt.END); } - } + }*/ if (stringFinalName == null) { stringFinalName = LocaleController.getString("Loading", R.string.Loading); } diff --git a/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java b/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java index 5e1b18aa8..0cc7b71a2 100644 --- a/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java +++ b/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java @@ -103,8 +103,6 @@ import com.b44t.ui.Components.NumberTextView; import com.b44t.ui.Components.RecyclerListView; import com.b44t.ui.Components.SizeNotifierFrameLayout; import com.b44t.ui.ActionBar.Theme; -import com.b44t.ui.Components.URLSpanNoUnderline; -import com.b44t.ui.Components.URLSpanReplacement; import java.io.File; import java.net.URLDecoder; @@ -2812,7 +2810,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } - public void showOpenUrlAlert(final String url) { + /*public void showOpenUrlAlert(final String url) { if (Browser.isInternalUrl(url)) { Browser.openUrl(getParentActivity(), url); } else { @@ -2827,7 +2825,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); showDialog(builder.create()); } - } + }*/ public class ChatActivityAdapter extends RecyclerView.Adapter { @@ -2938,8 +2936,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (url == null) { return; } - if (url instanceof URLSpanNoUnderline) { - /* + /*if (url instanceof URLSpanNoUnderline) { String str = ((URLSpanNoUnderline) url).getURL(); if (str.startsWith("@")) { MessagesController.openByUserName(str.substring(1), ChatActivity.this, 0); @@ -2948,8 +2945,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not fragment.setSearchString(str); presentFragment(fragment); } - */ - } else { + } else*/ { final String urlFinal = ((URLSpan) url).getURL(); if (longPress) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); @@ -2965,9 +2961,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not }); showDialog(builder.create()); } else { - if (url instanceof URLSpanReplacement) { + /*if (url instanceof URLSpanReplacement) { showOpenUrlAlert(((URLSpanReplacement) url).getURL()); - } else if (url instanceof URLSpan) { + } else*/ if (url instanceof URLSpan) { Browser.openUrl(getParentActivity(), urlFinal); } else { url.onClick(fragmentView); diff --git a/MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanNoUnderline.java b/MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanNoUnderline.java deleted file mode 100644 index b495c88b0..000000000 --- a/MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanNoUnderline.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * - * Messenger Android Frontend - * (C) 2013-2016 Nikolai Kudashov - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************/ - - -package com.b44t.ui.Components; - -import android.text.TextPaint; -import android.text.style.URLSpan; - -public class URLSpanNoUnderline extends URLSpan { - public URLSpanNoUnderline(String url) { - super(url); - } - - @Override - public void updateDrawState(TextPaint ds) { - super.updateDrawState(ds); - ds.setUnderlineText(false); - } -} diff --git a/MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanReplacement.java b/MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanReplacement.java deleted file mode 100644 index 9e9fb21b3..000000000 --- a/MessengerProj/src/main/java/com/b44t/ui/Components/URLSpanReplacement.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * - * Messenger Android Frontend - * (C) 2013-2016 Nikolai Kudashov - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************/ - -package com.b44t.ui.Components; - -import android.text.style.URLSpan; - -public class URLSpanReplacement extends URLSpan { - - public URLSpanReplacement(String url) { - super(url); - } -}