Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Emoji#resource. #741

Merged
merged 1 commit into from
May 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal class FacebookEmoji internal constructor(
private val y: Int,
isDuplicate: Boolean,
vararg variants: Emoji,
) : Emoji(codePoints, shortcodes, -1, isDuplicate, *variants) {
) : Emoji(codePoints, shortcodes, isDuplicate, *variants) {
override fun getDrawable(context: Context): Drawable {
val key = Point(x, y)
val bitmap = BITMAP_CACHE[key]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ internal class GoogleCompatEmoji internal constructor(
shortcodes: Array<String>,
isDuplicate: Boolean,
vararg emojis: Emoji,
) : Emoji(ints, shortcodes, -1, isDuplicate, *emojis) {
) : Emoji(ints, shortcodes, isDuplicate, *emojis) {
override fun getDrawable(context: Context): Drawable = GoogleCompatEmojiDrawable(unicode)
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal class GoogleEmoji internal constructor(
private val y: Int,
isDuplicate: Boolean,
vararg variants: Emoji,
) : Emoji(codePoints, shortcodes, -1, isDuplicate, *variants) {
) : Emoji(codePoints, shortcodes, isDuplicate, *variants) {
override fun getDrawable(context: Context): Drawable {
val key = Point(x, y)
val bitmap = BITMAP_CACHE[key]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal class IosEmoji internal constructor(
private val y: Int,
isDuplicate: Boolean,
vararg variants: Emoji,
) : Emoji(codePoints, shortcodes, -1, isDuplicate, *variants) {
) : Emoji(codePoints, shortcodes, isDuplicate, *variants) {
override fun getDrawable(context: Context): Drawable {
val key = Point(x, y)
val bitmap = BITMAP_CACHE[key]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal class TwitterEmoji internal constructor(
private val y: Int,
isDuplicate: Boolean,
vararg variants: Emoji,
) : Emoji(codePoints, shortcodes, -1, isDuplicate, *variants) {
) : Emoji(codePoints, shortcodes, isDuplicate, *variants) {
override fun getDrawable(context: Context): Drawable {
val key = Point(x, y)
val bitmap = BITMAP_CACHE[key]
Expand Down
14 changes: 2 additions & 12 deletions emoji/src/main/kotlin/com/vanniktech/emoji/emoji/Emoji.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,11 @@ package com.vanniktech.emoji.emoji

import android.content.Context
import android.graphics.drawable.Drawable
import androidx.annotation.DrawableRes
import androidx.appcompat.content.res.AppCompatResources
import java.io.Serializable

open class Emoji(
codePoints: IntArray,
val shortcodes: Array<String>,
@Deprecated("""Please migrate to getDrawable(). May return -1 in the future for providers that don't use resources.""")
@DrawableRes val resource: Int,
val isDuplicate: Boolean,
vararg val variants: Emoji,
) : Serializable {
Expand All @@ -49,10 +45,7 @@ open class Emoji(
}
}

open fun getDrawable(context: Context): Drawable {
@Suppress("DEPRECATION")
return AppCompatResources.getDrawable(context, resource)!!
}
open fun getDrawable(context: Context): Drawable = error("Needs to be overridden")

val length: Int
get() = unicode.length
Expand All @@ -73,18 +66,15 @@ open class Emoji(
return false
}
val emoji = other as Emoji
@Suppress("DEPRECATION")
return (
resource == emoji.resource && unicode == emoji.unicode && shortcodes.contentEquals(emoji.shortcodes) &&
unicode == emoji.unicode && shortcodes.contentEquals(emoji.shortcodes) &&
variants.contentEquals(emoji.variants)
)
}

override fun hashCode(): Int {
var result = unicode.hashCode()
result = 31 * result + shortcodes.contentHashCode()
@Suppress("DEPRECATION")
result = 31 * result + resource
result = 31 * result + variants.hashCode()
return result
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class EmojiInformationTest {
val emptyList: List<EmojiRange> = emptyList()
empty = EmojiInformation(false, emptyList)
empty2 = EmojiInformation(false, emptyList)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), false)
one = EmojiInformation(false, listOf(EmojiRange(0, 1, emoji)))
one2 = EmojiInformation(false, listOf(EmojiRange(0, 1, emoji)))
}
Expand Down
16 changes: 8 additions & 8 deletions emoji/src/test/kotlin/com/vanniktech/emoji/EmojiManagerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ class EmojiManagerTest {

@Before
fun setUp() {
val emoji1 = Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji2 = Emoji(intArrayOf(0x4321), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji3 = Emoji(intArrayOf(0x5678), arrayOf("test"), R.drawable.emoji_backspace, false)
val emoji4 = Emoji(intArrayOf(0x1234, 0x4321, 0x9999), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji1 = Emoji(intArrayOf(0x1234), arrayOf("test"), false)
val emoji2 = Emoji(intArrayOf(0x4321), arrayOf("test"), false)
val emoji3 = Emoji(intArrayOf(0x5678), arrayOf("test"), false)
val emoji4 = Emoji(intArrayOf(0x1234, 0x4321, 0x9999), arrayOf("test"), false)
provider = TestEmojiProvider.from(emoji1, emoji2, emoji3, emoji4)
}

Expand Down Expand Up @@ -73,7 +73,7 @@ class EmojiManagerTest {
@Test fun installNormalEmoji() {
EmojiManager.install(provider)
assertEquals(
Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1234), arrayOf("test"), false),
EmojiManager.findEmoji(String(intArrayOf(0x1234), 0, 1)),
)
}
Expand All @@ -96,7 +96,7 @@ class EmojiManagerTest {
@Test fun findEmojiNormal() {
EmojiManager.install(provider)
assertEquals(
Emoji(intArrayOf(0x5678), arrayOf("test"), R.drawable.emoji_backspace, false),
Emoji(intArrayOf(0x5678), arrayOf("test"), false),
EmojiManager.findEmoji(String(intArrayOf(0x5678), 0, 1)),
)
}
Expand All @@ -112,8 +112,8 @@ class EmojiManagerTest {
"te" + String(intArrayOf(0x5678), 0, 1) +
"st" + String(intArrayOf(0x1234), 0, 1)
)
val firstExpectedRange = EmojiRange(2, 3, Emoji(intArrayOf(0x5678), arrayOf("test"), R.drawable.emoji_backspace, false))
val secondExpectedRange = EmojiRange(5, 6, Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_recent, false))
val firstExpectedRange = EmojiRange(2, 3, Emoji(intArrayOf(0x5678), arrayOf("test"), false))
val secondExpectedRange = EmojiRange(5, 6, Emoji(intArrayOf(0x1234), arrayOf("test"), false))
assertEquals(
listOf(
firstExpectedRange,
Expand Down
4 changes: 2 additions & 2 deletions emoji/src/test/kotlin/com/vanniktech/emoji/EmojiRangeTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ class EmojiRangeTest {
private lateinit var emoji2: Emoji

@Before fun setUp() {
emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_recent, false)
emoji2 = Emoji(intArrayOf(0x5678), arrayOf("test"), R.drawable.emoji_backspace, false)
emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), false)
emoji2 = Emoji(intArrayOf(0x5678), arrayOf("test"), false)
}

@Test fun equality() {
Expand Down
4 changes: 2 additions & 2 deletions emoji/src/test/kotlin/com/vanniktech/emoji/EmojiUtilsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ import org.robolectric.annotation.Config

@Config(manifest = Config.NONE) @RunWith(RobolectricTestRunner::class) class EmojiUtilsTest {
@Before fun setUp() {
val emoji1 = Emoji(intArrayOf(CODE_POINT_1), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji2 = Emoji(intArrayOf(CODE_POINT_2), arrayOf("test"), R.drawable.emoji_backspace, false)
val emoji1 = Emoji(intArrayOf(CODE_POINT_1), arrayOf("test"), false)
val emoji2 = Emoji(intArrayOf(CODE_POINT_2), arrayOf("test"), false)
EmojiManager.install(from(emoji1, emoji2))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import org.junit.Test
class NoRecentEmojiTest {
@Test fun alwaysEmpty() {
assertEquals(emptyList<Emoji>(), NoRecentEmoji.getRecentEmojis())
NoRecentEmoji.addEmoji(Emoji(intArrayOf(0x1f55a), arrayOf("test"), R.drawable.emoji_recent, false))
NoRecentEmoji.addEmoji(Emoji(intArrayOf(0x1f55a), arrayOf("test"), false))
NoRecentEmoji.persist()
assertEquals(emptyList<Emoji>(), NoRecentEmoji.getRecentEmojis())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,59 +38,59 @@ import org.robolectric.annotation.Config
}

@Test fun addEmoji() {
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f437), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f43d), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f437), arrayOf("test"), false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f43d), arrayOf("test"), false))
assertEquals(
listOf(
Emoji(intArrayOf(0x1f43d), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1f437), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1f43d), arrayOf("test"), false),
Emoji(intArrayOf(0x1f437), arrayOf("test"), false),
),
recentEmojiManager.getRecentEmojis(),
)
}

@Test fun persist() {
val firstEmoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), R.drawable.emoji_recent, false)
val firstEmoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), false)
recentEmojiManager.addEmoji(firstEmoji)
val secondEmoji = Emoji(intArrayOf(0x1f43d), arrayOf("test"), R.drawable.emoji_recent, false)
val secondEmoji = Emoji(intArrayOf(0x1f43d), arrayOf("test"), false)
recentEmojiManager.addEmoji(secondEmoji)
recentEmojiManager.persist()
assertEquals(listOf(secondEmoji, firstEmoji), recentEmojiManager.getRecentEmojis())
}

@Test fun duplicateEmojis() {
val emoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), false)
recentEmojiManager.addEmoji(emoji)
recentEmojiManager.addEmoji(emoji)
recentEmojiManager.persist()
assertEquals(listOf(emoji), recentEmojiManager.getRecentEmojis())
}

@Test fun inOrder() {
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f55a), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f561), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f4e2), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f562), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0xe535), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f563), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f55a), arrayOf("test"), false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f561), arrayOf("test"), false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f4e2), arrayOf("test"), false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f562), arrayOf("test"), false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0xe535), arrayOf("test"), false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(0x1f563), arrayOf("test"), false))
recentEmojiManager.persist()
val recentEmojis = recentEmojiManager.getRecentEmojis()
assertEquals(
listOf(
Emoji(intArrayOf(0x1f563), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0xe535), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1f562), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1f4e2), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1f561), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1f55a), arrayOf("test"), R.drawable.emoji_recent, false),
Emoji(intArrayOf(0x1f563), arrayOf("test"), false),
Emoji(intArrayOf(0xe535), arrayOf("test"), false),
Emoji(intArrayOf(0x1f562), arrayOf("test"), false),
Emoji(intArrayOf(0x1f4e2), arrayOf("test"), false),
Emoji(intArrayOf(0x1f561), arrayOf("test"), false),
Emoji(intArrayOf(0x1f55a), arrayOf("test"), false),
),
recentEmojis,
)
}

@Test fun newShouldReplaceOld() {
val first = Emoji(intArrayOf(0x2764), arrayOf("test"), R.drawable.emoji_recent, false)
val second = Emoji(intArrayOf(0x1f577), arrayOf("test"), R.drawable.emoji_recent, false)
val first = Emoji(intArrayOf(0x2764), arrayOf("test"), false)
val second = Emoji(intArrayOf(0x1f577), arrayOf("test"), false)
recentEmojiManager.addEmoji(first)
assertEquals(listOf(first), recentEmojiManager.getRecentEmojis())
recentEmojiManager.addEmoji(second)
Expand All @@ -100,10 +100,10 @@ import org.robolectric.annotation.Config
}

@Test fun addSkinTone() {
val variant1 = Emoji(intArrayOf(0x1f55b), arrayOf("test"), R.drawable.emoji_recent, false)
val variant2 = Emoji(intArrayOf(0x1f55c), arrayOf("test"), R.drawable.emoji_recent, false)
val variant3 = Emoji(intArrayOf(0x1f55d), arrayOf("test"), R.drawable.emoji_recent, false)
val base = Emoji(intArrayOf(0x1f55a), arrayOf("test"), R.drawable.emoji_recent, false, variant1, variant2, variant3)
val variant1 = Emoji(intArrayOf(0x1f55b), arrayOf("test"), false)
val variant2 = Emoji(intArrayOf(0x1f55c), arrayOf("test"), false)
val variant3 = Emoji(intArrayOf(0x1f55d), arrayOf("test"), false)
val base = Emoji(intArrayOf(0x1f55a), arrayOf("test"), false, variant1, variant2, variant3)
recentEmojiManager.addEmoji(base)
recentEmojiManager.addEmoji(variant1)
assertEquals(listOf(variant1), recentEmojiManager.getRecentEmojis())
Expand All @@ -115,7 +115,7 @@ import org.robolectric.annotation.Config

@Test fun maxRecents() {
for (i in 0..499) {
recentEmojiManager.addEmoji(Emoji(intArrayOf(i), arrayOf("test"), R.drawable.emoji_recent, false))
recentEmojiManager.addEmoji(Emoji(intArrayOf(i), arrayOf("test"), false))
}
assertEquals(40, recentEmojiManager.getRecentEmojis().size)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import org.junit.Assert.fail
import org.junit.Test

class SearchEmojiResultTest {
private val emoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), R.drawable.emoji_recent, false)
private val emoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), false)

@Test fun valid() {
val validRanges = listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ import org.robolectric.annotation.Config
@Before fun setUp() {
application = RuntimeEnvironment.application
variantEmojiManager = VariantEmojiManager(application)
emoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), R.drawable.emoji_recent, false)
variant1 = Emoji(intArrayOf(0x1f55b), arrayOf("test"), R.drawable.emoji_recent, false)
variant2 = Emoji(intArrayOf(0x1f55c), arrayOf("test"), R.drawable.emoji_recent, false)
variant3 = Emoji(intArrayOf(0x1f55d), arrayOf("test"), R.drawable.emoji_recent, false)
base = Emoji(intArrayOf(0x1f55a), arrayOf("test"), R.drawable.emoji_recent, false, variant1, variant2, variant3)
emoji = Emoji(intArrayOf(0x1f437), arrayOf("test"), false)
variant1 = Emoji(intArrayOf(0x1f55b), arrayOf("test"), false)
variant2 = Emoji(intArrayOf(0x1f55c), arrayOf("test"), false)
variant3 = Emoji(intArrayOf(0x1f55d), arrayOf("test"), false)
base = Emoji(intArrayOf(0x1f55a), arrayOf("test"), false, variant1, variant2, variant3)
}

@Test fun variantDefault() {
Expand Down
34 changes: 14 additions & 20 deletions emoji/src/test/kotlin/com/vanniktech/emoji/emoji/EmojiTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,56 +16,50 @@

package com.vanniktech.emoji.emoji

import com.vanniktech.emoji.R
import org.junit.Assert.assertEquals
import org.junit.Test

class EmojiTest {
@Test fun multipleCodePoints() {
val emoji = Emoji(intArrayOf(0x1234, 0x5678), arrayOf("test"), R.drawable.emoji_backspace, false)
val emoji = Emoji(intArrayOf(0x1234, 0x5678), arrayOf("test"), false)
assertEquals(2, emoji.unicode.length)
assertEquals(String(intArrayOf(0x1234, 0x5678), 0, 2), emoji.unicode)
}

@Test fun baseWithoutVariant() {
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_backspace, false)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), false)
assertEquals(emoji, emoji.base)
}

@Test fun baseWithVariant() {
val variant = Emoji(intArrayOf(0x4321), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_backspace, false, variant)
val variant = Emoji(intArrayOf(0x4321), arrayOf("test"), false)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), false, variant)
assertEquals(emoji, variant.base)
}

@Test fun baseWithMultipleVariants() {
val variant = Emoji(intArrayOf(0x4321), arrayOf("test"), R.drawable.emoji_recent, false)
val variant2 = Emoji(intArrayOf(0x5678), arrayOf("test"), R.drawable.emoji_recent, false)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_backspace, false, variant, variant2)
val variant = Emoji(intArrayOf(0x4321), arrayOf("test"), false)
val variant2 = Emoji(intArrayOf(0x5678), arrayOf("test"), false)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), false, variant, variant2)
assertEquals(emoji, variant.base)
assertEquals(emoji, variant2.base)
}

@Test fun baseWithRecursiveVariant() {
val variantOfVariant = Emoji(intArrayOf(0x4321), arrayOf("test"), R.drawable.emoji_recent, false)
val variant = Emoji(intArrayOf(0x5678), arrayOf("test"), R.drawable.emoji_recent, false, variantOfVariant)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_backspace, false, variant)
val variantOfVariant = Emoji(intArrayOf(0x4321), arrayOf("test"), false)
val variant = Emoji(intArrayOf(0x5678), arrayOf("test"), false, variantOfVariant)
val emoji = Emoji(intArrayOf(0x1234), arrayOf("test"), false, variant)
assertEquals(emoji, variantOfVariant.base)
assertEquals(emoji, variant.base)
}

@Test fun hasVariants() {
assertEquals(false, Emoji(intArrayOf(0x1234, 0x5678), arrayOf("test"), R.drawable.emoji_backspace, false).hasVariants())
assertEquals(true, Emoji(intArrayOf(0x1f3cb), arrayOf("test"), R.drawable.emoji_backspace, false, Emoji(intArrayOf(0x1f3cb, 0x1f3fb), arrayOf("test"), R.drawable.emoji_backspace, false)).hasVariants())
}

@Test fun resource() {
@Suppress("DEPRECATION")
assertEquals(R.drawable.emoji_backspace, Emoji(intArrayOf(0x1234, 0x5678), arrayOf("test"), R.drawable.emoji_backspace, false).resource)
assertEquals(false, Emoji(intArrayOf(0x1234, 0x5678), arrayOf("test"), false).hasVariants())
assertEquals(true, Emoji(intArrayOf(0x1f3cb), arrayOf("test"), false, Emoji(intArrayOf(0x1f3cb, 0x1f3fb), arrayOf("test"), false)).hasVariants())
}

@Test fun length() {
assertEquals(1, Emoji(intArrayOf(0x1234), arrayOf("test"), R.drawable.emoji_backspace, false).length)
assertEquals(2, Emoji(intArrayOf(0x1234, 0x5678), arrayOf("test"), R.drawable.emoji_backspace, false).length)
assertEquals(1, Emoji(intArrayOf(0x1234), arrayOf("test"), false).length)
assertEquals(2, Emoji(intArrayOf(0x1234, 0x5678), arrayOf("test"), false).length)
}
}
2 changes: 1 addition & 1 deletion generator/template/Emoji.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal class <%= name %> internal constructor(
private val y: Int,
isDuplicate: Boolean,
vararg variants: Emoji,
) : Emoji(codePoints, shortcodes, -1, isDuplicate, *variants) {
) : Emoji(codePoints, shortcodes, isDuplicate, *variants) {
override fun getDrawable(context: Context): Drawable {
val key = Point(x, y)
val bitmap = BITMAP_CACHE[key]
Expand Down