package im.actor; import android.graphics.Color; import android.graphics.Paint; import android.text.Spannable; import android.text.SpannableString; import android.text.Spanned; import android.text.TextPaint; import android.text.TextUtils; import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.view.View; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import im.actor.core.entity.GroupMember; import im.actor.core.entity.Message; import im.actor.core.entity.Peer; import im.actor.core.viewmodel.UserVM; import im.actor.sdk.ActorSDK; import im.actor.sdk.controllers.conversation.messages.MessagesAdapter; import im.actor.sdk.controllers.conversation.messages.content.TextHolder; import im.actor.sdk.controllers.conversation.view.MentionSpan; import im.actor.sdk.view.BaseUrlSpan; import static im.actor.sdk.util.ActorSDKMessenger.users; public class CensoredTextHolderEx extends TextHolder { public CensoredTextHolderEx(MessagesAdapter adapter, View itemView, Peer peer) { super(adapter, itemView, peer); } private static ArrayList<String> badWords; static { badWords = new ArrayList<>(); badWords.add("fuck"); badWords.add("poke"); badWords.add("poké"); } @Override public void bindRawText(CharSequence rawText, long readDate, long receiveDate, Spannable reactions, Message message, boolean isItalic) { Spannable res = new SpannableString(rawText); for (String s : badWords) { // rawText = rawText.toString().replaceAll("/*(?i)" + s + "/*", new String(new char[s.length()]).replace('\0', '*')); Pattern p = Pattern.compile("/*(?i)" + s + "/*"); Matcher m = p.matcher(rawText.toString()); while (m.find()) { CensorSpan span = new CensorSpan(); res.setSpan(span, m.start(), m.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } super.bindRawText(res, readDate, receiveDate, reactions, message, isItalic); } private class CensorSpan extends ClickableSpan { @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(Color.BLACK); ds.bgColor = Color.BLACK; ds.setUnderlineText(false); } @Override public void onClick(View view) { } } }