// See also https://android.googlesource.com/platform/frameworks/support/+/android-cts-9.0_r5/emoji/bundled/src/main/java/androidx/emoji/bundled/BundledEmojiCompatConfig.java class TwemojiConfig(ctx: Context) : EmojiCompat.Config(BundledMetadataLoader(ctx)) { class BundledMetadataLoader(ctx: Context) : EmojiCompat.MetadataRepoLoader { private val mContext = ctx.applicationContext override fun load(cb: EmojiCompat.MetadataRepoLoaderCallback) { val runnable = InitRunnable(mContext, cb) val thread = Thread(runnable) thread.isDaemon = false thread.start() } } class InitRunnable(ctx: Context, cb: EmojiCompat.MetadataRepoLoaderCallback) : Runnable { val mContext = ctx val mLoaderCallback = cb override fun run() { try { val assetManager = mContext.assets val resourceIndex = MetadataRepo.create(assetManager, "TwemojiCompat.ttf") mLoaderCallback.onLoaded(resourceIndex) } catch (t: Throwable) { mLoaderCallback.onFailed(t) } } } }