2019-09-03 16:08:13 +02:00
|
|
|
package net.accelf.yuito;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.text.Spanned;
|
|
|
|
import android.view.View;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
2020-01-11 16:18:11 +01:00
|
|
|
import androidx.annotation.Px;
|
|
|
|
|
2020-01-11 14:46:31 +01:00
|
|
|
import com.google.android.material.button.MaterialButton;
|
2019-09-03 16:08:13 +02:00
|
|
|
import com.keylesspalace.tusky.R;
|
|
|
|
import com.keylesspalace.tusky.entity.Account;
|
|
|
|
import com.keylesspalace.tusky.entity.Emoji;
|
|
|
|
import com.keylesspalace.tusky.entity.Status;
|
|
|
|
import com.keylesspalace.tusky.interfaces.LinkListener;
|
|
|
|
import com.keylesspalace.tusky.util.CustomEmojiHelper;
|
2020-01-11 16:18:11 +01:00
|
|
|
import com.keylesspalace.tusky.util.ImageLoadingHelper;
|
2019-09-03 16:08:13 +02:00
|
|
|
import com.keylesspalace.tusky.util.LinkHelper;
|
2020-01-11 16:18:11 +01:00
|
|
|
import com.keylesspalace.tusky.util.StatusDisplayOptions;
|
2019-09-03 16:08:13 +02:00
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
public class QuoteInlineHelper {
|
|
|
|
private Status quoteStatus;
|
|
|
|
|
|
|
|
private View quoteContainer;
|
|
|
|
private ImageView quoteAvatar;
|
|
|
|
private TextView quoteDisplayName;
|
|
|
|
private TextView quoteUsername;
|
|
|
|
private TextView quoteContentWarningDescription;
|
2020-01-11 14:46:31 +01:00
|
|
|
private MaterialButton quoteContentWarningButton;
|
2019-09-03 16:08:13 +02:00
|
|
|
private TextView quoteContent;
|
|
|
|
private TextView quoteMedia;
|
|
|
|
|
|
|
|
private LinkListener listener;
|
2020-01-11 16:18:11 +01:00
|
|
|
@Px
|
|
|
|
private int avatarRadius24dp;
|
|
|
|
private StatusDisplayOptions statusDisplayOptions;
|
2019-09-03 16:08:13 +02:00
|
|
|
|
2020-01-11 16:18:11 +01:00
|
|
|
public QuoteInlineHelper(Status status, View container, LinkListener listener,
|
|
|
|
@Px int avatarRadius24dp, StatusDisplayOptions statusDisplayOptions) {
|
2019-09-03 16:08:13 +02:00
|
|
|
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;
|
2020-01-11 16:18:11 +01:00
|
|
|
this.avatarRadius24dp = avatarRadius24dp;
|
|
|
|
this.statusDisplayOptions = statusDisplayOptions;
|
2019-09-03 16:08:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private void setDisplayName(String name, List<Emoji> customEmojis) {
|
2020-05-16 11:01:15 +02:00
|
|
|
CharSequence emojifiedName = CustomEmojiHelper.emojify(name, customEmojis, quoteDisplayName);
|
2019-09-03 16:08:13 +02:00
|
|
|
quoteDisplayName.setText(emojifiedName);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void setUsername(String name) {
|
|
|
|
Context context = quoteUsername.getContext();
|
|
|
|
String format = context.getString(R.string.status_username_format);
|
|
|
|
String usernameText = String.format(format, name);
|
|
|
|
quoteUsername.setText(usernameText);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void setContent(Spanned content, Status.Mention[] mentions, List<Emoji> emojis,
|
|
|
|
LinkListener listener) {
|
|
|
|
Spanned singleLineText = SpannedTextHelper.replaceSpanned(content);
|
2020-05-16 11:01:15 +02:00
|
|
|
CharSequence emojifiedText = CustomEmojiHelper.emojify(singleLineText, emojis, quoteContent);
|
2021-01-10 05:40:02 +01:00
|
|
|
LinkHelper.setClickableText(quoteContent, emojifiedText, mentions, listener);
|
2019-09-03 16:08:13 +02:00
|
|
|
}
|
|
|
|
|
2020-01-11 16:18:11 +01:00
|
|
|
private void setAvatar(String url, @Px int avatarRadius24dp, StatusDisplayOptions statusDisplayOptions) {
|
|
|
|
ImageLoadingHelper.loadAvatar(url, quoteAvatar, avatarRadius24dp, statusDisplayOptions.animateAvatars());
|
2019-09-03 16:08:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private void setSpoilerText(String spoilerText, List<Emoji> emojis) {
|
|
|
|
CharSequence emojiSpoiler =
|
2020-05-16 11:01:15 +02:00
|
|
|
CustomEmojiHelper.emojify(spoilerText, emojis, quoteContentWarningDescription);
|
2019-09-03 16:08:13 +02:00
|
|
|
quoteContentWarningDescription.setText(emojiSpoiler);
|
|
|
|
quoteContentWarningDescription.setVisibility(View.VISIBLE);
|
|
|
|
quoteContentWarningButton.setVisibility(View.VISIBLE);
|
2020-01-11 14:46:31 +01:00
|
|
|
quoteContentWarningButton.setOnClickListener(v
|
|
|
|
-> setContentVisibility(!(quoteContent.getVisibility() == View.VISIBLE)));
|
|
|
|
setContentVisibility(false);
|
|
|
|
}
|
2019-09-03 16:08:13 +02:00
|
|
|
|
2020-01-11 14:46:31 +01:00
|
|
|
private void setContentVisibility(boolean show) {
|
|
|
|
if (show) {
|
|
|
|
quoteContent.setVisibility(View.VISIBLE);
|
|
|
|
quoteContentWarningButton.setText(R.string.status_content_warning_show_less);
|
|
|
|
} else {
|
|
|
|
quoteContent.setVisibility(View.GONE);
|
|
|
|
quoteContentWarningButton.setText(R.string.status_content_warning_show_more);
|
|
|
|
}
|
2019-09-03 16:08:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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));
|
2018-09-08 13:03:28 +02:00
|
|
|
quoteContent.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl));
|
|
|
|
quoteMedia.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl));
|
|
|
|
quoteContainer.setOnClickListener(view -> listener.onViewUrl(statusUrl, statusUrl));
|
2019-09-03 16:08:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public void setupQuoteContainer() {
|
|
|
|
Account account = quoteStatus.getAccount();
|
|
|
|
setDisplayName(account.getDisplayName().equals("") ? account.getLocalUsername() : account.getDisplayName(), account.getEmojis());
|
|
|
|
setUsername(account.getUsername());
|
|
|
|
setContent(quoteStatus.getContent(), quoteStatus.getMentions(),
|
|
|
|
quoteStatus.getEmojis(), listener);
|
2020-01-11 16:18:11 +01:00
|
|
|
setAvatar(account.getAvatar(), avatarRadius24dp, statusDisplayOptions);
|
2019-09-03 16:08:13 +02:00
|
|
|
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()));
|
|
|
|
}
|
|
|
|
}
|
2021-01-10 05:40:02 +01:00
|
|
|
}
|