151 lines
6.5 KiB
Java
151 lines
6.5 KiB
Java
package net.accelf.yuito;
|
|
|
|
import android.content.Context;
|
|
import android.text.Spanned;
|
|
import android.view.View;
|
|
import android.widget.ImageView;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.annotation.Px;
|
|
|
|
import com.google.android.material.button.MaterialButton;
|
|
import com.keylesspalace.tusky.R;
|
|
import com.keylesspalace.tusky.entity.Emoji;
|
|
import com.keylesspalace.tusky.entity.HashTag;
|
|
import com.keylesspalace.tusky.entity.Status;
|
|
import com.keylesspalace.tusky.entity.TimelineAccount;
|
|
import com.keylesspalace.tusky.interfaces.LinkListener;
|
|
import com.keylesspalace.tusky.util.CustomEmojiHelper;
|
|
import com.keylesspalace.tusky.util.ImageLoadingHelper;
|
|
import com.keylesspalace.tusky.util.LinkHelper;
|
|
import com.keylesspalace.tusky.util.StatusDisplayOptions;
|
|
|
|
import java.util.List;
|
|
|
|
public class QuoteInlineHelper {
|
|
private final Status quoteStatus;
|
|
|
|
private final View quoteContainer;
|
|
private final ImageView quoteAvatar;
|
|
private final TextView quoteDisplayName;
|
|
private final TextView quoteUsername;
|
|
private final TextView quoteContentWarningDescription;
|
|
private final MaterialButton quoteContentWarningButton;
|
|
private final TextView quoteContent;
|
|
private final TextView quoteMedia;
|
|
|
|
private final LinkListener listener;
|
|
@Px
|
|
private final int avatarRadius24dp;
|
|
private final StatusDisplayOptions statusDisplayOptions;
|
|
|
|
public QuoteInlineHelper(Status status, View container, LinkListener listener,
|
|
@Px int avatarRadius24dp, StatusDisplayOptions statusDisplayOptions) {
|
|
quoteStatus = status;
|
|
quoteContainer = container;
|
|
quoteAvatar = container.findViewById(R.id.status_quote_inline_avatar);
|
|
quoteDisplayName = container.findViewById(R.id.status_quote_inline_display_name);
|
|
quoteUsername = container.findViewById(R.id.status_quote_inline_username);
|
|
quoteContentWarningDescription = container.findViewById(R.id.status_quote_inline_content_warning_description);
|
|
quoteContentWarningButton = container.findViewById(R.id.status_quote_inline_content_warning_button);
|
|
quoteContent = container.findViewById(R.id.status_quote_inline_content);
|
|
quoteMedia = container.findViewById(R.id.status_quote_inline_media);
|
|
this.listener = listener;
|
|
this.avatarRadius24dp = avatarRadius24dp;
|
|
this.statusDisplayOptions = statusDisplayOptions;
|
|
}
|
|
|
|
private void setDisplayName(String name, List<Emoji> customEmojis) {
|
|
CharSequence emojifiedName = CustomEmojiHelper.emojify(name, customEmojis, quoteDisplayName, statusDisplayOptions.animateEmojis());
|
|
quoteDisplayName.setText(emojifiedName);
|
|
}
|
|
|
|
private void setUsername(String name) {
|
|
Context context = quoteUsername.getContext();
|
|
String format = context.getString(R.string.post_username_format);
|
|
String usernameText = String.format(format, name);
|
|
quoteUsername.setText(usernameText);
|
|
}
|
|
|
|
private void setContent(
|
|
Spanned content,
|
|
List<Status.Mention> mentions,
|
|
List<HashTag> tags,
|
|
List<Emoji> emojis,
|
|
LinkListener listener
|
|
) {
|
|
Spanned singleLineText = SpannedTextHelper.replaceSpanned(content);
|
|
CharSequence emojifiedText = CustomEmojiHelper.emojify(singleLineText, emojis, quoteContent, statusDisplayOptions.animateEmojis());
|
|
LinkHelper.setClickableText(quoteContent, emojifiedText, mentions, tags, listener);
|
|
}
|
|
|
|
private void setAvatar(String url, @Px int avatarRadius24dp, StatusDisplayOptions statusDisplayOptions) {
|
|
ImageLoadingHelper.loadAvatar(url, quoteAvatar, avatarRadius24dp, statusDisplayOptions.animateAvatars());
|
|
}
|
|
|
|
private void setSpoilerText(String spoilerText, List<Emoji> emojis) {
|
|
CharSequence emojiSpoiler =
|
|
CustomEmojiHelper.emojify(spoilerText, emojis, quoteContentWarningDescription, statusDisplayOptions.animateEmojis());
|
|
quoteContentWarningDescription.setText(emojiSpoiler);
|
|
quoteContentWarningDescription.setVisibility(View.VISIBLE);
|
|
quoteContentWarningButton.setVisibility(View.VISIBLE);
|
|
quoteContentWarningButton.setOnClickListener(v
|
|
-> setContentVisibility(!(quoteContent.getVisibility() == View.VISIBLE)));
|
|
setContentVisibility(false);
|
|
}
|
|
|
|
private void setContentVisibility(boolean show) {
|
|
if (show) {
|
|
quoteContent.setVisibility(View.VISIBLE);
|
|
quoteContentWarningButton.setText(R.string.post_content_warning_show_less);
|
|
} else {
|
|
quoteContent.setVisibility(View.GONE);
|
|
quoteContentWarningButton.setText(R.string.post_content_warning_show_more);
|
|
}
|
|
}
|
|
|
|
private void hideSpoilerText() {
|
|
quoteContentWarningDescription.setVisibility(View.GONE);
|
|
quoteContentWarningButton.setVisibility(View.GONE);
|
|
quoteContent.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
private void setOnClickListener(String accountId, String statusUrl) {
|
|
quoteAvatar.setOnClickListener(view -> listener.onViewAccount(accountId));
|
|
quoteDisplayName.setOnClickListener(view -> listener.onViewAccount(accountId));
|
|
quoteUsername.setOnClickListener(view -> listener.onViewAccount(accountId));
|
|
quoteContent.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl));
|
|
quoteMedia.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl));
|
|
quoteContainer.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl));
|
|
}
|
|
|
|
public void setupQuoteContainer() {
|
|
TimelineAccount account = quoteStatus.getAccount();
|
|
setDisplayName(account.getName(), account.getEmojis());
|
|
setUsername(account.getUsername());
|
|
setContent(
|
|
quoteStatus.getContent(),
|
|
quoteStatus.getMentions(),
|
|
quoteStatus.getTags(),
|
|
quoteStatus.getEmojis(),
|
|
listener
|
|
);
|
|
setAvatar(account.getAvatar(), avatarRadius24dp, statusDisplayOptions);
|
|
setOnClickListener(account.getId(), quoteStatus.getUrl());
|
|
|
|
if (quoteStatus.getSpoilerText().isEmpty()) {
|
|
hideSpoilerText();
|
|
} else {
|
|
setSpoilerText(quoteStatus.getSpoilerText(), quoteStatus.getEmojis());
|
|
}
|
|
|
|
if (quoteStatus.getAttachments().size() == 0) {
|
|
quoteMedia.setVisibility(View.GONE);
|
|
} else {
|
|
quoteMedia.setVisibility(View.VISIBLE);
|
|
quoteMedia.setText(quoteContainer.getContext().getString(R.string.status_quote_media,
|
|
quoteStatus.getAttachments().size()));
|
|
}
|
|
}
|
|
}
|