package org.joinmastodon.android.model.viewmodel; import android.text.Spannable; import android.text.SpannableStringBuilder; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.AccountField; import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.text.LinkSpan; import org.joinmastodon.android.ui.utils.CustomEmojiHelper; import java.util.Collections; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest; import me.grishka.appkit.utils.V; public class AccountViewModel{ public final Account account; public final ImageLoaderRequest avaRequest; public final CustomEmojiHelper emojiHelper; public final CharSequence parsedName, parsedBio; public final String verifiedLink; public AccountViewModel(Account account, String accountID){ this(account, accountID, true); } public AccountViewModel(Account account, String accountID, boolean needBio){ this.account=account; avaRequest=new UrlImageLoaderRequest(GlobalUserPreferences.playGifs ? account.avatar : account.avatarStatic, V.dp(50), V.dp(50)); emojiHelper=new CustomEmojiHelper(); if(AccountSessionManager.get(accountID).getLocalPreferences().customEmojiInNames) parsedName=HtmlParser.parseCustomEmoji(account.displayName, account.emojis); else parsedName=account.displayName; SpannableStringBuilder ssb=new SpannableStringBuilder(parsedName); if(needBio){ parsedBio=HtmlParser.parse(account.note, account.emojis, Collections.emptyList(), Collections.emptyList(), accountID, account); ssb.append(parsedBio); }else{ parsedBio=null; } emojiHelper.setText(ssb); String verifiedLink=null; for(AccountField fld:account.fields){ if(fld.verifiedAt!=null){ verifiedLink=HtmlParser.stripAndRemoveInvisibleSpans(fld.value); break; } } this.verifiedLink=verifiedLink; } public AccountViewModel stripLinksFromBio(){ if(parsedBio instanceof Spannable spannable){ for(LinkSpan span:spannable.getSpans(0, spannable.length(), LinkSpan.class)){ spannable.removeSpan(span); } } return this; } }