diff --git a/core/api/current.txt b/core/api/current.txt index aacb5e55d751..92f151194f14 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -44998,6 +44998,10 @@ package android.text { method public android.text.Editable newEditable(CharSequence); } + public final class EmojiConsistency { + method @NonNull public static java.util.Set getEmojiConsistencySet(); + } + public interface GetChars extends java.lang.CharSequence { method public void getChars(int, int, char[], int); } diff --git a/core/java/android/text/EmojiConsistency.java b/core/java/android/text/EmojiConsistency.java new file mode 100644 index 000000000000..dfaa217c0cca --- /dev/null +++ b/core/java/android/text/EmojiConsistency.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.text; + +import android.annotation.NonNull; + +import java.util.Collections; +import java.util.Set; + + +/** + * The set of emoji that should be drawn by the system with the default font for device consistency. + * + * This is intended to be used only by applications that do custom emoji rendering using tools like + * {@link android.text.style.ReplacementSpan} or custom emoji fonts. + * + * An example of how this should be used: + * + *

+ *

    + *
  1. + * Match emoji for third party custom rendering + *
  2. + *
  3. + * For each match, check against NonStandardEmoji before displaying custom glyph + *
  4. + *
  5. + * If in NonStandardEmojiSet, do not display custom glyph (render with + * android.graphics.Typeface.DEFAULT instead) + *
  6. + *
  7. + * Otherwise, do custom rendering like normal + *
  8. + *
+ *

+ */ +public final class EmojiConsistency { + /* Cannot construct */ + private EmojiConsistency() { } + + /** + * The set of emoji that should be drawn by the system with the default font for device + * consistency. + * + * Apps SHOULD attempt to avoid overwriting system emoji rendering with custom emoji glyphs for + * these codepoint sequences. + * + * Apps that display custom emoji glyphs via matching code may filter against this set. On + * match, the application SHOULD prefer Typeface.Default instead of a custom glyph + * + * Apps that use fonts may use this set to add {@link android.text.style.TypefaceSpan} for + * android.graphics.Typeface.DEFAULT for matched codepoint sequences. + * + * Codepoint sequences returned MUST match exactly to be considered a match with the exception + * of Variation Selectors. + * + * All codepoint sequences returned MUST be a complete emoji codepoint sequence as defined by + * unicode. + * + * @return set of codepoint sequences representing codepoints that should be rendered by the + * system using the default font. + */ + @NonNull + public static Set getEmojiConsistencySet() { + return Collections.emptySet(); + } + +} diff --git a/core/tests/coretests/src/android/text/EmojiConsistencyTest.java b/core/tests/coretests/src/android/text/EmojiConsistencyTest.java new file mode 100644 index 000000000000..c6e9e9cce829 --- /dev/null +++ b/core/tests/coretests/src/android/text/EmojiConsistencyTest.java @@ -0,0 +1,37 @@ +/* + * Copyright 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.text; + +import static junit.framework.Assert.assertEquals; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Collections; + +@SmallTest +@RunWith(AndroidJUnit4.class) +public class EmojiConsistencyTest { + + @Test + public void exclusionList_isEmpty() { + assertEquals(EmojiConsistency.getEmojiConsistencySet(), Collections.emptySet()); + } +}