Authentication-Results: mail-b.sr.ht; dkim=pass header.d=helene.moe header.i=@helene.moe Received: from out0.migadu.com (out0.migadu.com [94.23.1.103]) by mail-b.sr.ht (Postfix) with ESMTPS id 3C42F11F019 for <~captainepoch/husky-devel@lists.sr.ht>; Thu, 9 Jun 2022 11:45:21 +0000 (UTC) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=helene.moe; s=key1; t=1654775120; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=abLQpFJvECGo4fENdvyTm5i1o9lNk6CzGdiGGBR32WE=; b=NQNfislwODijX9e7Xc0DB5Bm3A7+bTxGv2JZlAMF//MwwpRyPLlzjJKkiJtmjiuS6RhkMn yiGkWMoNI2zo+T6iWij7y3tTRVCcaXut6rmDAu9p6vz5BKcJjcbFoOkUoEMfMaJx8QIiPC xPohFm5lnK1EXLIG8p8cdkUGpLjPOwHPH4B+rCk0QbePnM0CEhcxDyu85b8CD3wg+i7eh0 uk/XrSd+yEz595F3WCOhNt4ZFESnd3GI3oUzguw1EB0I3VsVhB0n7HCBJ1TOOtGkLcxQgN OufQlRm3TB8ijuuw1evjUFk10cBF11yUSZuP5dMKqvr2HPqCP8Rj+lyt5dSDOg== From: helene@helene.moe To: ~captainepoch/husky-devel@lists.sr.ht Cc: =?UTF-8?q?H=C3=A9l=C3=A8ne?= Subject: [PATCH husky 2/2] EmojiReactionsAdapter: implement custom emoji reactions on messages Date: Thu, 9 Jun 2022 15:45:05 +0200 Message-Id: <20220609134505.8864-2-helene@helene.moe> In-Reply-To: <20220609134505.8864-1-helene@helene.moe> References: <20220609134505.8864-1-helene@helene.moe> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Migadu-Auth-User: helene.moe From: Hélène Signed-off-by: Hélène --- .../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(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) : 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