EmojiService.java

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