Fix missing cases of using StatusDisplayOptions (#1614)

main
Ivan Kupalov 5 years ago committed by Konrad Pozniak
parent 5f55168864
commit fd5ec8cf97
  1. 56
      app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java
  2. 7
      app/src/main/java/com/keylesspalace/tusky/adapter/StatusDetailedViewHolder.java
  3. 6
      app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationViewHolder.java

@ -87,7 +87,6 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
private PollAdapter pollAdapter; private PollAdapter pollAdapter;
private boolean useAbsoluteTime;
private SimpleDateFormat shortSdf; private SimpleDateFormat shortSdf;
private SimpleDateFormat longSdf; private SimpleDateFormat longSdf;
@ -145,7 +144,6 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
pollOptions.setLayoutManager(new LinearLayoutManager(pollOptions.getContext())); pollOptions.setLayoutManager(new LinearLayoutManager(pollOptions.getContext()));
((DefaultItemAnimator) pollOptions.getItemAnimator()).setSupportsChangeAnimations(false); ((DefaultItemAnimator) pollOptions.getItemAnimator()).setSupportsChangeAnimations(false);
this.useAbsoluteTime = useAbsoluteTime;
this.shortSdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); this.shortSdf = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
this.longSdf = new SimpleDateFormat("MM/dd HH:mm:ss", Locale.getDefault()); this.longSdf = new SimpleDateFormat("MM/dd HH:mm:ss", Locale.getDefault());
@ -182,11 +180,12 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
@Nullable Status.Mention[] mentions, @Nullable Status.Mention[] mentions,
@NonNull List<Emoji> emojis, @NonNull List<Emoji> emojis,
@Nullable PollViewData poll, @Nullable PollViewData poll,
@NonNull StatusDisplayOptions statusDisplayOptions,
final StatusActionListener listener) { final StatusActionListener listener) {
if (TextUtils.isEmpty(spoilerText)) { if (TextUtils.isEmpty(spoilerText)) {
contentWarningDescription.setVisibility(View.GONE); contentWarningDescription.setVisibility(View.GONE);
contentWarningButton.setVisibility(View.GONE); contentWarningButton.setVisibility(View.GONE);
this.setTextVisible(true, content, mentions, emojis, poll, listener); this.setTextVisible(true, content, mentions, emojis, poll, statusDisplayOptions, listener);
} else { } else {
CharSequence emojiSpoiler = CustomEmojiHelper.emojifyString(spoilerText, emojis, contentWarningDescription); CharSequence emojiSpoiler = CustomEmojiHelper.emojifyString(spoilerText, emojis, contentWarningDescription);
contentWarningDescription.setText(emojiSpoiler); contentWarningDescription.setText(emojiSpoiler);
@ -198,9 +197,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
if (getAdapterPosition() != RecyclerView.NO_POSITION) { if (getAdapterPosition() != RecyclerView.NO_POSITION) {
listener.onExpandedChange(isChecked, getAdapterPosition()); listener.onExpandedChange(isChecked, getAdapterPosition());
} }
this.setTextVisible(isChecked, content, mentions, emojis, poll, listener); this.setTextVisible(isChecked, content, mentions, emojis, poll, statusDisplayOptions, listener);
}); });
this.setTextVisible(expanded, content, mentions, emojis, poll, listener); this.setTextVisible(expanded, content, mentions, emojis, poll, statusDisplayOptions, listener);
} }
} }
@ -209,12 +208,13 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
Status.Mention[] mentions, Status.Mention[] mentions,
List<Emoji> emojis, List<Emoji> emojis,
@Nullable PollViewData poll, @Nullable PollViewData poll,
StatusDisplayOptions statusDisplayOptions,
final StatusActionListener listener) { final StatusActionListener listener) {
if (expanded) { if (expanded) {
Spanned emojifiedText = CustomEmojiHelper.emojifyText(content, emojis, this.content); Spanned emojifiedText = CustomEmojiHelper.emojifyText(content, emojis, this.content);
LinkHelper.setClickableText(this.content, emojifiedText, mentions, listener); LinkHelper.setClickableText(this.content, emojifiedText, mentions, listener);
if (poll != null) { if (poll != null) {
setupPoll(poll, emojis, listener); setupPoll(poll, emojis, statusDisplayOptions, listener);
} else { } else {
hidePoll(); hidePoll();
} }
@ -274,8 +274,8 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
} }
protected void setCreatedAt(Date createdAt) { protected void setCreatedAt(Date createdAt, StatusDisplayOptions statusDisplayOptions) {
if (useAbsoluteTime) { if (statusDisplayOptions.useAbsoluteTime()) {
timestampInfo.setText(getAbsoluteTime(createdAt)); timestampInfo.setText(getAbsoluteTime(createdAt));
} else { } else {
if (createdAt == null) { if (createdAt == null) {
@ -300,8 +300,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
} }
} }
private CharSequence getCreatedAtDescription(Date createdAt) { private CharSequence getCreatedAtDescription(Date createdAt,
if (useAbsoluteTime) { StatusDisplayOptions statusDisplayOptions) {
if (statusDisplayOptions.useAbsoluteTime()) {
return getAbsoluteTime(createdAt); return getAbsoluteTime(createdAt);
} else { } else {
/* This one is for screen-readers. Frequently, they would mispronounce timestamps like "17m" /* This one is for screen-readers. Frequently, they would mispronounce timestamps like "17m"
@ -646,7 +647,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
if (payloads == null) { if (payloads == null) {
setDisplayName(status.getUserFullName(), status.getAccountEmojis()); setDisplayName(status.getUserFullName(), status.getAccountEmojis());
setUsername(status.getNickname()); setUsername(status.getNickname());
setCreatedAt(status.getCreatedAt()); setCreatedAt(status.getCreatedAt(), statusDisplayOptions);
setIsReply(status.getInReplyToId() != null); setIsReply(status.getInReplyToId() != null);
setAvatar(status.getAvatar(), status.getRebloggedAvatar(), status.isBot(), statusDisplayOptions); setAvatar(status.getAvatar(), status.getRebloggedAvatar(), status.isBot(), statusDisplayOptions);
setReblogged(status.isReblogged()); setReblogged(status.isReblogged());
@ -677,9 +678,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
setupButtons(listener, status.getSenderId()); setupButtons(listener, status.getSenderId());
setRebloggingEnabled(status.getRebloggingEnabled(), status.getVisibility()); setRebloggingEnabled(status.getRebloggingEnabled(), status.getVisibility());
setSpoilerAndContent(status.isExpanded(), status.getContent(), status.getSpoilerText(), status.getMentions(), status.getStatusEmojis(), status.getPoll(), listener); setSpoilerAndContent(status.isExpanded(), status.getContent(), status.getSpoilerText(), status.getMentions(), status.getStatusEmojis(), status.getPoll(), statusDisplayOptions, listener);
setDescriptionForStatus(status); setDescriptionForStatus(status, statusDisplayOptions);
// Workaround for RecyclerView 1.0.0 / androidx.core 1.0.0 // Workaround for RecyclerView 1.0.0 / androidx.core 1.0.0
// RecyclerView tries to set AccessibilityDelegateCompat to null // RecyclerView tries to set AccessibilityDelegateCompat to null
@ -691,7 +692,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
if (payloads instanceof List) if (payloads instanceof List)
for (Object item : (List) payloads) { for (Object item : (List) payloads) {
if (Key.KEY_CREATED.equals(item)) { if (Key.KEY_CREATED.equals(item)) {
setCreatedAt(status.getCreatedAt()); setCreatedAt(status.getCreatedAt(), statusDisplayOptions);
} }
} }
@ -707,14 +708,15 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
return false; return false;
} }
private void setDescriptionForStatus(@NonNull StatusViewData.Concrete status) { private void setDescriptionForStatus(@NonNull StatusViewData.Concrete status,
StatusDisplayOptions statusDisplayOptions) {
Context context = itemView.getContext(); Context context = itemView.getContext();
String description = context.getString(R.string.description_status, String description = context.getString(R.string.description_status,
status.getUserFullName(), status.getUserFullName(),
getContentWarningDescription(context, status), getContentWarningDescription(context, status),
(TextUtils.isEmpty(status.getSpoilerText()) || !status.isSensitive() || status.isExpanded() ? status.getContent() : ""), (TextUtils.isEmpty(status.getSpoilerText()) || !status.isSensitive() || status.isExpanded() ? status.getContent() : ""),
getCreatedAtDescription(status.getCreatedAt()), getCreatedAtDescription(status.getCreatedAt(), statusDisplayOptions),
getReblogDescription(context, status), getReblogDescription(context, status),
status.getNickname(), status.getNickname(),
status.isReblogged() ? context.getString(R.string.description_status_reblogged) : "", status.isReblogged() ? context.getString(R.string.description_status_reblogged) : "",
@ -724,7 +726,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
getVisibilityDescription(context, status.getVisibility()), getVisibilityDescription(context, status.getVisibility()),
getFavsText(context, status.getFavouritesCount()), getFavsText(context, status.getFavouritesCount()),
getReblogsText(context, status.getReblogsCount()), getReblogsText(context, status.getReblogsCount()),
getPollDescription(context, status) getPollDescription(status, context, statusDisplayOptions)
); );
itemView.setContentDescription(description); itemView.setContentDescription(description);
} }
@ -796,8 +798,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
return context.getString(resource); return context.getString(resource);
} }
private CharSequence getPollDescription(Context context, private CharSequence getPollDescription(@NonNull StatusViewData.Concrete status,
@NonNull StatusViewData.Concrete status) { Context context,
StatusDisplayOptions statusDisplayOptions) {
PollViewData poll = status.getPoll(); PollViewData poll = status.getPoll();
if (poll == null) { if (poll == null) {
return ""; return "";
@ -812,7 +815,8 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
args[i] = ""; args[i] = "";
} }
} }
args[4] = getPollInfoText(System.currentTimeMillis(), poll, context); args[4] = getPollInfoText(System.currentTimeMillis(), poll, statusDisplayOptions,
context);
return context.getString(R.string.description_poll, args); return context.getString(R.string.description_poll, args);
} }
} }
@ -835,7 +839,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
} }
} }
private void setupPoll(PollViewData poll, List<Emoji> emojis, StatusActionListener listener) { private void setupPoll(PollViewData poll, List<Emoji> emojis,
StatusDisplayOptions statusDisplayOptions,
StatusActionListener listener) {
long timestamp = System.currentTimeMillis(); long timestamp = System.currentTimeMillis();
boolean expired = poll.getExpired() || (poll.getExpiresAt() != null && timestamp > poll.getExpiresAt().getTime()); boolean expired = poll.getExpired() || (poll.getExpiresAt() != null && timestamp > poll.getExpiresAt().getTime());
@ -872,10 +878,12 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
} }
pollDescription.setVisibility(View.VISIBLE); pollDescription.setVisibility(View.VISIBLE);
pollDescription.setText(getPollInfoText(timestamp, poll, context)); pollDescription.setText(getPollInfoText(timestamp, poll, statusDisplayOptions, context));
} }
private CharSequence getPollInfoText(long timestamp, PollViewData poll, Context context) { private CharSequence getPollInfoText(long timestamp, PollViewData poll,
StatusDisplayOptions statusDisplayOptions,
Context context) {
String votes = numberFormat.format(poll.getVotesCount()); String votes = numberFormat.format(poll.getVotesCount());
String votesText = context.getResources().getQuantityString(R.plurals.poll_info_votes, poll.getVotesCount(), votes); String votesText = context.getResources().getQuantityString(R.plurals.poll_info_votes, poll.getVotesCount(), votes);
CharSequence pollDurationInfo; CharSequence pollDurationInfo;
@ -884,7 +892,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
} else if (poll.getExpiresAt() == null) { } else if (poll.getExpiresAt() == null) {
return votesText; return votesText;
} else { } else {
if (useAbsoluteTime) { if (statusDisplayOptions.useAbsoluteTime()) {
pollDurationInfo = context.getString(R.string.poll_info_time_absolute, getAbsoluteTime(poll.getExpiresAt())); pollDurationInfo = context.getString(R.string.poll_info_time_absolute, getAbsoluteTime(poll.getExpiresAt()));
} else { } else {
String pollDuration = TimestampUtils.formatPollDuration(pollDescription.getContext(), poll.getExpiresAt().getTime(), timestamp); String pollDuration = TimestampUtils.formatPollDuration(pollDescription.getContext(), poll.getExpiresAt().getTime(), timestamp);

@ -4,11 +4,8 @@ import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
@ -26,7 +23,6 @@ import com.keylesspalace.tusky.R;
import com.keylesspalace.tusky.entity.Card; import com.keylesspalace.tusky.entity.Card;
import com.keylesspalace.tusky.entity.Status; import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.interfaces.StatusActionListener; import com.keylesspalace.tusky.interfaces.StatusActionListener;
import com.keylesspalace.tusky.util.CustomURLSpan;
import com.keylesspalace.tusky.util.LinkHelper; import com.keylesspalace.tusky.util.LinkHelper;
import com.keylesspalace.tusky.util.StatusDisplayOptions; import com.keylesspalace.tusky.util.StatusDisplayOptions;
import com.keylesspalace.tusky.viewdata.StatusViewData; import com.keylesspalace.tusky.viewdata.StatusViewData;
@ -66,7 +62,7 @@ class StatusDetailedViewHolder extends StatusBaseViewHolder {
} }
@Override @Override
protected void setCreatedAt(Date createdAt) { protected void setCreatedAt(Date createdAt, StatusDisplayOptions statusDisplayOptions) {
if (createdAt == null) { if (createdAt == null) {
timestampInfo.setText(""); timestampInfo.setText("");
} else { } else {
@ -199,7 +195,6 @@ class StatusDetailedViewHolder extends StatusBaseViewHolder {
} }
Glide.with(cardImage) Glide.with(cardImage)
.load(card.getImage()) .load(card.getImage())
.transform( .transform(

@ -77,7 +77,7 @@ public class ConversationViewHolder extends StatusBaseViewHolder {
setDisplayName(account.getDisplayName(), account.getEmojis()); setDisplayName(account.getDisplayName(), account.getEmojis());
setUsername(account.getUsername()); setUsername(account.getUsername());
setCreatedAt(status.getCreatedAt()); setCreatedAt(status.getCreatedAt(), statusDisplayOptions);
setIsReply(status.getInReplyToId() != null); setIsReply(status.getInReplyToId() != null);
setFavourited(status.getFavourited()); setFavourited(status.getFavourited());
setBookmarked(status.getBookmarked()); setBookmarked(status.getBookmarked());
@ -106,7 +106,9 @@ public class ConversationViewHolder extends StatusBaseViewHolder {
setupButtons(listener, account.getId()); setupButtons(listener, account.getId());
setSpoilerAndContent(status.getExpanded(), status.getContent(), status.getSpoilerText(), status.getMentions(), status.getEmojis(), PollViewDataKt.toViewData(status.getPoll()), listener); setSpoilerAndContent(status.getExpanded(), status.getContent(), status.getSpoilerText(),
status.getMentions(), status.getEmojis(),
PollViewDataKt.toViewData(status.getPoll()), statusDisplayOptions, listener);
setConversationName(conversation.getAccounts()); setConversationName(conversation.getAccounts());

Loading…
Cancel
Save