1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.text;
18 
19 import android.annotation.NonNull;
20 
21 import java.util.Collections;
22 import java.util.Set;
23 
24 
25 /**
26  * The set of emoji that should be drawn by the system with the default font for device consistency.
27  *
28  * This is intended to be used only by applications that do custom emoji rendering using tools like
29  * {@link android.text.style.ReplacementSpan} or custom emoji fonts.
30  *
31  * An example of how this should be used:
32  *
33  * <p>
34  *     <ol>
35  *         <li>
36  *             Match emoji for third party custom rendering
37  *         </li>
38  *         <li>
39  *             For each match, check against NonStandardEmoji before displaying custom glyph
40  *         </li>
41  *         <li>
42  *             If in NonStandardEmojiSet, do not display custom glyph (render with
43  *             android.graphics.Typeface.DEFAULT instead)
44  *         </li>
45  *         <li>
46  *             Otherwise, do custom rendering like normal
47  *         </li>
48  *     </ol>
49  * </p>
50  */
51 public final class EmojiConsistency {
52     /* Cannot construct */
EmojiConsistency()53     private EmojiConsistency() { }
54 
55     /**
56      * The set of emoji that should be drawn by the system with the default font for device
57      * consistency.
58      *
59      * Apps SHOULD attempt to avoid overwriting system emoji rendering with custom emoji glyphs for
60      * these codepoint sequences.
61      *
62      * Apps that display custom emoji glyphs via matching code may filter against this set. On
63      * match, the application SHOULD prefer Typeface.Default instead of a custom glyph
64      *
65      * Apps that use fonts may use this set to add {@link android.text.style.TypefaceSpan} for
66      * android.graphics.Typeface.DEFAULT for matched codepoint sequences.
67      *
68      * Codepoint sequences returned MUST match exactly to be considered a match with the exception
69      * of Variation Selectors.
70      *
71      * All codepoint sequences returned MUST be a complete emoji codepoint sequence as defined by
72      * unicode.
73      *
74      * @return set of codepoint sequences representing codepoints that should be rendered by the
75      * system using the default font.
76      */
77     @NonNull
getEmojiConsistencySet()78     public static Set<int[]> getEmojiConsistencySet() {
79         return Collections.emptySet();
80     }
81 
82 }
83