1package eu.siacs.conversations.ui.service;
2
3import android.content.Context;
4import android.os.Build;
5import androidx.emoji.text.EmojiCompat;
6import androidx.emoji.text.FontRequestEmojiCompatConfig;
7import androidx.core.provider.FontRequest;
8import android.util.Log;
9
10import eu.siacs.conversations.Config;
11import eu.siacs.conversations.R;
12
13public class EmojiService {
14
15
16 private final EmojiCompat.InitCallback initCallback = new EmojiCompat.InitCallback() {
17 @Override
18 public void onInitialized() {
19 super.onInitialized();
20 Log.d(Config.LOGTAG, "EmojiService succeeded in loading fonts");
21
22 }
23
24 @Override
25 public void onFailed(Throwable throwable) {
26 super.onFailed(throwable);
27 Log.d(Config.LOGTAG, "EmojiService failed to load fonts", throwable);
28 }
29 };
30
31 private final Context context;
32
33 public EmojiService(Context context) {
34 this.context = context;
35 }
36
37 public void init() {
38 final FontRequest fontRequest = new FontRequest(
39 "com.google.android.gms.fonts",
40 "com.google.android.gms",
41 "Noto Color Emoji Compat",
42 R.array.font_certs);
43 FontRequestEmojiCompatConfig fontRequestEmojiCompatConfig = new FontRequestEmojiCompatConfig(context, fontRequest);
44 fontRequestEmojiCompatConfig.registerInitCallback(initCallback);
45 //On recent Androids we assume to have the latest emojis
46 //there are some annoying bugs with emoji compat that make it a safer choice not to use it when possible
47 // a) when using the ondemand emoji font (play store) flags don’t work
48 // b) the text preview has annoying glitches when the cut of text contains emojis (the emoji will be half visible)
49 // c) can trigger a hardware rendering bug https://issuetracker.google.com/issues/67102093
50 fontRequestEmojiCompatConfig.setReplaceAll(Build.VERSION.SDK_INT < Build.VERSION_CODES.O);
51 EmojiCompat.init(fontRequestEmojiCompatConfig);
52 }
53
54}