~captainepoch/husky-devel

husky: entity/Emoji: match MastoAPI docs on custom emoji reacts v2 PROPOSED

: 3
 entity/Emoji: match MastoAPI docs on custom emoji reacts
 EmojiReactionsAdapter: implement custom emoji reactions on messages
 EmojiReactionsAdapter: respect custom emoji animation setting

 16 files changed, 67 insertions(+), 16 deletions(-)
#778339 stable.yml failed
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~captainepoch/husky-devel/patches/32912/mbox | git am -3
Learn more about email & git

[PATCH husky v2 1/3] entity/Emoji: match MastoAPI docs on custom emoji reacts Export this patch

From: Hélène <pleroma-dev@helene.moe>

Signed-off-by: Hélène <pleroma-dev@helene.moe>
---
Fixed to address a1ba's report on static_url being nullable.

 husky/app/src/main/java/com/keylesspalace/tusky/entity/Emoji.kt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/entity/Emoji.kt b/husky/app/src/main/java/com/keylesspalace/tusky/entity/Emoji.kt
index 029b392..281a2c2 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/entity/Emoji.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/entity/Emoji.kt
@@ -32,5 +32,7 @@ data class EmojiReaction(
        val name: String,
        val count: Int,
        val me: Boolean,
        val url: String?,
        @SerializedName("static_url") val staticUrl: String?,
        val accounts: List<Account>? // only for emoji_reactions_by
)
-- 
2.36.1
husky/patches/stable.yml: FAILED in 36m53s

[entity/Emoji: match MastoAPI docs on custom emoji reacts][0] v2 from [][1]

[0]: https://lists.sr.ht/~captainepoch/husky-devel/patches/32912
[1]: mailto:helene@helene.moe

✗ #778339 FAILED husky/patches/stable.yml https://builds.sr.ht/~captainepoch/job/778339
Patch applied at commit 508b6314.

Thanks!

[PATCH husky v2 2/3] EmojiReactionsAdapter: implement custom emoji reactions on messages Export this patch

From: Hélène <pleroma-dev@helene.moe>

Signed-off-by: Hélène <pleroma-dev@helene.moe>
---
 .../tusky/adapter/EmojiReactionsAdapter.java  | 41 ++++++++++++++++---
 .../tusky/util/CustomEmojiHelper.kt           |  4 +-
 2 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java
index c8491ad..81e884c 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java
@@ -4,11 +4,14 @@ import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.TextView.BufferType;
import android.widget.Toast;
import android.util.Log;

@@ -16,15 +19,22 @@ import androidx.annotation.Nullable;
import androidx.emoji.widget.EmojiAppCompatButton;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.github.penfeizhou.animation.glide.AnimationDecoderOption;
import com.keylesspalace.tusky.R;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.entity.EmojiReaction;
import com.keylesspalace.tusky.interfaces.StatusActionListener;
import com.keylesspalace.tusky.util.CardViewMode;
import com.keylesspalace.tusky.util.CustomEmojiHelper;
import com.keylesspalace.tusky.util.LinkHelper;
import com.keylesspalace.tusky.util.MIME;
import com.keylesspalace.tusky.util.StatusDisplayOptions;
import com.keylesspalace.tusky.util.SmallEmojiSpan;
import com.keylesspalace.tusky.viewdata.StatusViewData;

import java.lang.ref.WeakReference;
import java.text.DateFormat;
import java.util.List;
import java.util.Date;
@@ -51,12 +61,33 @@ public class EmojiReactionsAdapter extends RecyclerView.Adapter<SingleViewHolder
    @Override
    public void onBindViewHolder(SingleViewHolder holder, int position) {
        EmojiReaction reaction = reactions.get(position);
        String str = reaction.getName() + " " + reaction.getCount();
        
        // no custom emoji yet!
        SpannableStringBuilder builder = new SpannableStringBuilder(
                reaction.getName() + " " + reaction.getCount());

        EmojiAppCompatButton btn = (EmojiAppCompatButton)holder.itemView;
        
        btn.setText(str);

        var url = reaction.getUrl();
        if (url != null) {
            var animate = true;
            var span = new SmallEmojiSpan(new WeakReference<View>(btn));

            builder.setSpan(span, 0, reaction.getName().length(),
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            var glideRequest = Glide.with(btn).load(url)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_GIF_DECODER, !animate)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_WEBP_DECODER, !animate)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_APNG_DECODER, !animate);
            var mimetype = CustomEmojiHelper.getMimeType(url);
            if(mimetype == MIME.SVG) {
                glideRequest = glideRequest
                        .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
                        .override(512, 512);
            }
            glideRequest.into(span.getTarget(animate));
        }

        btn.setText(builder, BufferType.SPANNABLE);
        btn.setActivated(reaction.getMe());
        btn.setOnClickListener(v -> {
            listener.onEmojiReactMenu(v, reaction, statusId);
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt b/husky/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt
index df5ccc6..a6b7ede 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/util/CustomEmojiHelper.kt
@@ -210,7 +210,7 @@ class SmallEmojiSpan(viewWeakReference: WeakReference<View>) : EmojiSpan(viewWea
 *
 * @return MIME - The Mimetype.
 */
private fun getMimeType(url: String?): MIME {
public fun getMimeType(url: String?): MIME {
    var type: String? = null
    val extension = MimeTypeMap.getFileExtensionFromUrl(url)
    if(extension != null) {
@@ -219,7 +219,7 @@ private fun getMimeType(url: String?): MIME {
    return MIME.getMime(type)
}

private enum class MIME(private val mimetype: String) {
public enum class MIME(private val mimetype: String) {

    NONE(""),
    SVG("image/svg+xml");
-- 
2.36.1

[PATCH husky v2 3/3] EmojiReactionsAdapter: respect custom emoji animation setting Export this patch

From: Hélène <pleroma-dev@helene.moe>

This required many changes as this required adding a field in
StatusDisplayOptions, cascading into "update all code using this class".
There probably is a better way...

Signed-off-by: Hélène <pleroma-dev@helene.moe>
---
 .../tusky/adapter/EmojiReactionsAdapter.java       | 14 ++++++++------
 .../tusky/adapter/NotificationsAdapter.java        |  1 +
 .../tusky/adapter/StatusBaseViewHolder.java        | 10 +++++++---
 .../tusky/adapter/TimelineAdapter.java             |  1 +
 .../conversation/ConversationsFragment.kt          |  1 +
 .../report/fragments/ReportStatusesFragment.kt     |  1 +
 .../search/fragments/SearchStatusesFragment.kt     |  1 +
 .../keylesspalace/tusky/fragment/ChatsFragment.kt  |  1 +
 .../tusky/fragment/NotificationsFragment.java      |  1 +
 .../tusky/fragment/TimelineFragment.java           |  1 +
 .../tusky/fragment/ViewThreadFragment.java         |  1 +
 .../tusky/util/StatusDisplayOptions.kt             |  2 ++
 .../com/keylesspalace/tusky/view/StatusView.kt     |  1 +
 13 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java
index 81e884c..46144bd 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/EmojiReactionsAdapter.java
@@ -44,11 +44,14 @@ public class EmojiReactionsAdapter extends RecyclerView.Adapter<SingleViewHolder
    private final List<EmojiReaction> reactions;
    private final StatusActionListener listener;
    private final String statusId;
    private final boolean animateEmojis;

    EmojiReactionsAdapter(final List<EmojiReaction> reactions, final StatusActionListener listener, final String statusId) {
    EmojiReactionsAdapter(final List<EmojiReaction> reactions, final StatusActionListener listener,
                          final String statusId, final boolean animateEmojis) {
        this.reactions = reactions;
        this.listener  = listener;
        this.statusId = statusId;
        this.animateEmojis = animateEmojis;
    }
        
    @Override
@@ -68,23 +71,22 @@ public class EmojiReactionsAdapter extends RecyclerView.Adapter<SingleViewHolder

        var url = reaction.getUrl();
        if (url != null) {
            var animate = true;
            var span = new SmallEmojiSpan(new WeakReference<View>(btn));

            builder.setSpan(span, 0, reaction.getName().length(),
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

            var glideRequest = Glide.with(btn).load(url)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_GIF_DECODER, !animate)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_WEBP_DECODER, !animate)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_APNG_DECODER, !animate);
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_GIF_DECODER, !animateEmojis)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_WEBP_DECODER, !animateEmojis)
                    .set(AnimationDecoderOption.DISABLE_ANIMATION_APNG_DECODER, !animateEmojis);
            var mimetype = CustomEmojiHelper.getMimeType(url);
            if(mimetype == MIME.SVG) {
                glideRequest = glideRequest
                        .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
                        .override(512, 512);
            }
            glideRequest.into(span.getTarget(animate));
            glideRequest.into(span.getTarget(animateEmojis));
        }

        btn.setText(builder, BufferType.SPANNABLE);
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java
index 51fb5e1..af0ac40 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/NotificationsAdapter.java
@@ -275,6 +275,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter {
    public void setMediaPreviewEnabled(boolean mediaPreviewEnabled) {
        this.statusDisplayOptions = statusDisplayOptions.copy(
                statusDisplayOptions.animateAvatars(),
                statusDisplayOptions.animateEmojiReacts(),
                mediaPreviewEnabled,
                statusDisplayOptions.useAbsoluteTime(),
                statusDisplayOptions.showBotOverlay(),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java
index 16460ca..81d2b6b 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java
@@ -734,7 +734,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
                .show();
    }
    
    private void setEmojiReactions(@Nullable List<EmojiReaction> reactions, final StatusActionListener listener, final String statusId) {
    private void setEmojiReactions(@Nullable List<EmojiReaction> reactions,
                                   final StatusActionListener listener, final String statusId,
                                   StatusDisplayOptions statusDisplayOptions) {
        if(reactButton != null) {
            reactButton.setOnClickListener(v -> {
                EmojiKeyboard.show(reactButton.getContext(), statusId, EmojiKeyboard.UNICODE_MODE, (id, emoji) -> {
@@ -748,7 +750,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
                emojiReactionsView.setVisibility(View.VISIBLE);
                FlexboxLayoutManager lm = new FlexboxLayoutManager(emojiReactionsView.getContext());
                emojiReactionsView.setLayoutManager(lm);
                emojiReactionsView.setAdapter(new EmojiReactionsAdapter(reactions, listener, statusId));
                emojiReactionsView.setAdapter(new EmojiReactionsAdapter(
                        reactions, listener, statusId,
                        statusDisplayOptions.animateEmojiReacts()));
                emojiReactionsView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
@@ -822,7 +826,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {

            setDescriptionForStatus(status, statusDisplayOptions);
            
            setEmojiReactions(status.getEmojiReactions(), listener, status.getId());
            setEmojiReactions(status.getEmojiReactions(), listener, status.getId(), statusDisplayOptions);

            // Workaround for RecyclerView 1.0.0 / androidx.core 1.0.0
            // RecyclerView tries to set AccessibilityDelegateCompat to null
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java
index f5ab042..75fc200 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/adapter/TimelineAdapter.java
@@ -61,6 +61,7 @@ public final class TimelineAdapter extends RecyclerView.Adapter {
    public void setMediaPreviewEnabled(boolean mediaPreviewEnabled) {
        this.statusDisplayOptions = statusDisplayOptions.copy(
                statusDisplayOptions.animateAvatars(),
                statusDisplayOptions.animateEmojiReacts(),
                mediaPreviewEnabled,
                statusDisplayOptions.useAbsoluteTime(),
                statusDisplayOptions.showBotOverlay(),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt b/husky/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt
index 48926a6..775ec98 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt
@@ -60,6 +60,7 @@ class ConversationsFragment : SFragment(), StatusActionListener, Injectable, Res

        val statusDisplayOptions = StatusDisplayOptions(
                animateAvatars = preferences.getBoolean("animateGifAvatars", false),
                animateEmojiReacts = preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                mediaPreviewEnabled = accountManager.activeAccount?.mediaPreviewEnabled ?: true,
                useAbsoluteTime = preferences.getBoolean("absoluteTimeView", false),
                showBotOverlay = preferences.getBoolean("showBotOverlay", true),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt b/husky/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt
index ad4b6ce..f4d6db8 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt
@@ -104,6 +104,7 @@ class ReportStatusesFragment : Fragment(R.layout.fragment_report_statuses), Inje
        val preferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
        val statusDisplayOptions = StatusDisplayOptions(
                animateAvatars = false,
                animateEmojiReacts = preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                mediaPreviewEnabled = accountManager.activeAccount?.mediaPreviewEnabled ?: true,
                useAbsoluteTime = preferences.getBoolean("absoluteTimeView", false),
                showBotOverlay = false,
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt b/husky/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt
index 8f6a449..14bdca3 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt
@@ -83,6 +83,7 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
        val preferences = PreferenceManager.getDefaultSharedPreferences(searchRecyclerView.context)
        val statusDisplayOptions = StatusDisplayOptions(
                animateAvatars = preferences.getBoolean("animateGifAvatars", false),
                animateEmojiReacts = preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                mediaPreviewEnabled = viewModel.mediaPreviewEnabled,
                useAbsoluteTime = preferences.getBoolean("absoluteTimeView", false),
                showBotOverlay = preferences.getBoolean("showBotOverlay", true),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ChatsFragment.kt b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ChatsFragment.kt
index a51cbad..602877f 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ChatsFragment.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ChatsFragment.kt
@@ -163,6 +163,7 @@ class ChatsFragment : BaseFragment(), Injectable, RefreshableFragment, Reselecta

        val statusDisplayOptions = StatusDisplayOptions(
                animateAvatars = preferences.getBoolean(PrefKeys.ANIMATE_GIF_AVATARS, false),
                animateEmojiReacts = preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                mediaPreviewEnabled = accountManager.activeAccount!!.mediaPreviewEnabled,
                useAbsoluteTime = preferences.getBoolean(PrefKeys.ABSOLUTE_TIME_VIEW, false),
                showBotOverlay = preferences.getBoolean(PrefKeys.SHOW_BOT_OVERLAY, true),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java
index fb765cb..2233340 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java
@@ -245,6 +245,7 @@ public class NotificationsFragment extends SFragment implements

        StatusDisplayOptions statusDisplayOptions = new StatusDisplayOptions(
                preferences.getBoolean("animateGifAvatars", false),
                preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                accountManager.getActiveAccount().getMediaPreviewEnabled(),
                preferences.getBoolean("absoluteTimeView", false),
                preferences.getBoolean("showBotOverlay", true),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java
index 71836d1..c95cc8f 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java
@@ -244,6 +244,7 @@ public class TimelineFragment extends SFragment implements
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
        StatusDisplayOptions statusDisplayOptions = new StatusDisplayOptions(
                preferences.getBoolean("animateGifAvatars", false),
                preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                accountManager.getActiveAccount().getMediaPreviewEnabled(),
                preferences.getBoolean("absoluteTimeView", false),
                preferences.getBoolean("showBotOverlay", true),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java
index 0dcc931..4fd1239 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java
@@ -121,6 +121,7 @@ public final class ViewThreadFragment extends SFragment implements

        StatusDisplayOptions statusDisplayOptions = new StatusDisplayOptions(
                preferences.getBoolean("animateGifAvatars", false),
                preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                accountManager.getActiveAccount().getMediaPreviewEnabled(),
                preferences.getBoolean("absoluteTimeView", false),
                preferences.getBoolean("showBotOverlay", true),
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/util/StatusDisplayOptions.kt b/husky/app/src/main/java/com/keylesspalace/tusky/util/StatusDisplayOptions.kt
index 7321605..e1c5d01 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/util/StatusDisplayOptions.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/util/StatusDisplayOptions.kt
@@ -3,6 +3,8 @@ package com.keylesspalace.tusky.util
data class StatusDisplayOptions(
        @get:JvmName("animateAvatars")
        val animateAvatars: Boolean,
        @get:JvmName("animateEmojiReacts")
        val animateEmojiReacts: Boolean,
        @get:JvmName("mediaPreviewEnabled")
        val mediaPreviewEnabled: Boolean,
        @get:JvmName("useAbsoluteTime")
diff --git a/husky/app/src/main/java/com/keylesspalace/tusky/view/StatusView.kt b/husky/app/src/main/java/com/keylesspalace/tusky/view/StatusView.kt
index 0b3d1a4..ee37f2c 100644
--- a/husky/app/src/main/java/com/keylesspalace/tusky/view/StatusView.kt
+++ b/husky/app/src/main/java/com/keylesspalace/tusky/view/StatusView.kt
@@ -36,6 +36,7 @@ class StatusView @JvmOverloads constructor(
        val preferences = PreferenceManager.getDefaultSharedPreferences(context)
        statusDisplayOptions = StatusDisplayOptions(
                animateAvatars = preferences.getBoolean("animateGifAvatars", false),
                animateEmojiReacts = preferences.getBoolean(PrefKeys.ANIMATE_CUSTOM_EMOJIS, false),
                mediaPreviewEnabled = true,
                useAbsoluteTime = preferences.getBoolean("absoluteTimeView", false),
                showBotOverlay = false,
-- 
2.36.1