Skip to content

Commit

Permalink
Emoji classes are now parcelable.
Browse files Browse the repository at this point in the history
  • Loading branch information
vanniktech committed May 5, 2022
1 parent 84070d1 commit 913a7e0
Show file tree
Hide file tree
Showing 15 changed files with 71 additions and 57 deletions.
3 changes: 2 additions & 1 deletion emoji-facebook/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'

android {
compileSdkVersion rootProject.ext.compileSdkVersion as int
Expand All @@ -26,4 +27,4 @@ apply plugin: "com.vanniktech.maven.publish.base"

mavenPublishing {
configure(new AndroidSingleVariantLibrary("release"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,23 @@ import android.graphics.BitmapFactory
import android.graphics.Point
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Parcelable
import android.util.LruCache
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize
import java.lang.ref.SoftReference

internal data class FacebookEmoji internal constructor(
@Parcelize internal data class FacebookEmoji internal constructor(
override val unicode: String,
override val shortcodes: List<String>,
private val x: Int,
private val y: Int,
override val isDuplicate: Boolean,
override val variants: List<FacebookEmoji> = emptyList(),
private var parent: FacebookEmoji? = null,
) : Emoji {
override val base by lazy(LazyThreadSafetyMode.NONE) {
) : Emoji, Parcelable {
@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand Down
3 changes: 2 additions & 1 deletion emoji-google-compat/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'

android {
compileSdkVersion rootProject.ext.compileSdkVersion as int
Expand All @@ -27,4 +28,4 @@ apply plugin: "com.vanniktech.maven.publish.base"

mavenPublishing {
configure(new AndroidSingleVariantLibrary("release"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,19 @@ package com.vanniktech.emoji.googlecompat

import android.content.Context
import android.graphics.drawable.Drawable
import android.os.Parcelable
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize

internal data class GoogleCompatEmoji internal constructor(
@Parcelize internal data class GoogleCompatEmoji internal constructor(
override val unicode: String,
override val shortcodes: List<String>,
override val isDuplicate: Boolean,
override val variants: List<GoogleCompatEmoji> = emptyList(),
private var parent: GoogleCompatEmoji? = null,
) : Emoji {
override val base by lazy(LazyThreadSafetyMode.NONE) {
) : Emoji, Parcelable {
@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand Down
3 changes: 2 additions & 1 deletion emoji-google/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'

android {
compileSdkVersion rootProject.ext.compileSdkVersion as int
Expand All @@ -26,4 +27,4 @@ apply plugin: "com.vanniktech.maven.publish.base"

mavenPublishing {
configure(new AndroidSingleVariantLibrary("release"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,23 @@ import android.graphics.BitmapFactory
import android.graphics.Point
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Parcelable
import android.util.LruCache
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize
import java.lang.ref.SoftReference

internal data class GoogleEmoji internal constructor(
@Parcelize internal data class GoogleEmoji internal constructor(
override val unicode: String,
override val shortcodes: List<String>,
private val x: Int,
private val y: Int,
override val isDuplicate: Boolean,
override val variants: List<GoogleEmoji> = emptyList(),
private var parent: GoogleEmoji? = null,
) : Emoji {
override val base by lazy(LazyThreadSafetyMode.NONE) {
) : Emoji, Parcelable {
@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand Down
3 changes: 2 additions & 1 deletion emoji-ios/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'

android {
compileSdkVersion rootProject.ext.compileSdkVersion as int
Expand Down Expand Up @@ -30,4 +31,4 @@ apply plugin: "com.vanniktech.maven.publish.base"

mavenPublishing {
configure(new AndroidSingleVariantLibrary("release"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,23 @@ import android.graphics.BitmapFactory
import android.graphics.Point
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Parcelable
import android.util.LruCache
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize
import java.lang.ref.SoftReference

internal data class IosEmoji internal constructor(
@Parcelize internal data class IosEmoji internal constructor(
override val unicode: String,
override val shortcodes: List<String>,
private val x: Int,
private val y: Int,
override val isDuplicate: Boolean,
override val variants: List<IosEmoji> = emptyList(),
private var parent: IosEmoji? = null,
) : Emoji {
override val base by lazy(LazyThreadSafetyMode.NONE) {
) : Emoji, Parcelable {
@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand Down
3 changes: 2 additions & 1 deletion emoji-material/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'

android {
compileSdkVersion rootProject.ext.compileSdkVersion as int
Expand All @@ -27,4 +28,4 @@ apply plugin: "com.vanniktech.maven.publish.base"

mavenPublishing {
configure(new AndroidSingleVariantLibrary("release"))
}
}
3 changes: 2 additions & 1 deletion emoji-twitter/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'

android {
compileSdkVersion rootProject.ext.compileSdkVersion as int
Expand All @@ -26,4 +27,4 @@ apply plugin: "com.vanniktech.maven.publish.base"

mavenPublishing {
configure(new AndroidSingleVariantLibrary("release"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,23 @@ import android.graphics.BitmapFactory
import android.graphics.Point
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Parcelable
import android.util.LruCache
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize
import java.lang.ref.SoftReference

internal data class TwitterEmoji internal constructor(
@Parcelize internal data class TwitterEmoji internal constructor(
override val unicode: String,
override val shortcodes: List<String>,
private val x: Int,
private val y: Int,
override val isDuplicate: Boolean,
override val variants: List<TwitterEmoji> = emptyList(),
private var parent: TwitterEmoji? = null,
) : Emoji {
override val base by lazy(LazyThreadSafetyMode.NONE) {
) : Emoji, Parcelable {
@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand Down
3 changes: 2 additions & 1 deletion emoji/src/main/kotlin/com/vanniktech/emoji/emoji/Emoji.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ package com.vanniktech.emoji.emoji

import android.content.Context
import android.graphics.drawable.Drawable
import android.os.Parcelable

interface Emoji {
interface Emoji : Parcelable {
val base: Emoji
val unicode: String
val shortcodes: List<String>
Expand Down
44 changes: 15 additions & 29 deletions emoji/src/test/kotlin/com/vanniktech/emoji/TestEmoji.kt
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
package com.vanniktech.emoji

import android.content.Context
import android.os.Parcelable
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize

class TestEmoji(
codePoints: IntArray,
@Parcelize data class TestEmoji(
override val unicode: String,
override val shortcodes: List<String>,
override val isDuplicate: Boolean,
override val variants: List<TestEmoji> = emptyList(),
) : Emoji {
override val unicode: String = String(codePoints, 0, codePoints.size)

private var parent: TestEmoji? = null

override val base by lazy(LazyThreadSafetyMode.NONE) {
private var parent: TestEmoji? = null,
) : Emoji, Parcelable {
constructor(
codePoints: IntArray,
shortcodes: List<String>,
isDuplicate: Boolean,
variants: List<TestEmoji> = emptyList(),
) : this(String(codePoints, 0, codePoints.size), shortcodes, isDuplicate, variants)

@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand All @@ -28,27 +35,6 @@ class TestEmoji(
}
}

override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
if (other == null || javaClass != other.javaClass) {
return false
}
val emoji = other as TestEmoji
return (
unicode == emoji.unicode && shortcodes == emoji.shortcodes &&
variants == emoji.variants
)
}

override fun hashCode(): Int {
var result = unicode.hashCode()
result = 31 * result + shortcodes.hashCode()
result = 31 * result + variants.hashCode()
return result
}

override fun getDrawable(context: Context) = error("Not available from tests")
override fun destroy() = Unit
}
9 changes: 6 additions & 3 deletions generator/template/Emoji.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,23 @@ import android.graphics.BitmapFactory
import android.graphics.Point
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Parcelable
import android.util.LruCache
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize
import java.lang.ref.SoftReference

internal data class <%= name %> internal constructor(
@Parcelize internal data class <%= name %> internal constructor(
override val unicode: String,
override val shortcodes: List<String>,
private val x: Int,
private val y: Int,
override val isDuplicate: Boolean,
override val variants: List<<%= name %>> = emptyList(),
private var parent: <%= name %>? = null,
) : Emoji {
override val base by lazy(LazyThreadSafetyMode.NONE) {
) : Emoji, Parcelable {
@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand Down
9 changes: 6 additions & 3 deletions generator/template/EmojiCompat.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,19 @@ package com.vanniktech.emoji.<%= package %>

import android.content.Context
import android.graphics.drawable.Drawable
import android.os.Parcelable
import com.vanniktech.emoji.emoji.Emoji
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize

internal data class <%= name %> internal constructor(
@Parcelize internal data class <%= name %> internal constructor(
override val unicode: String,
override val shortcodes: List<String>,
override val isDuplicate: Boolean,
override val variants: List<<%= name %>> = emptyList(),
private var parent: <%= name %>? = null,
) : Emoji {
override val base by lazy(LazyThreadSafetyMode.NONE) {
) : Emoji, Parcelable {
@IgnoredOnParcel override val base by lazy(LazyThreadSafetyMode.NONE) {
var result = this
while (result.parent != null) {
result = result.parent!!
Expand Down

0 comments on commit 913a7e0

Please sign in to comment.