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:
+ *
+ *
+ *
+ * -
+ * Match emoji for third party custom rendering
+ *
+ * -
+ * For each match, check against NonStandardEmoji before displaying custom glyph
+ *
+ * -
+ * If in NonStandardEmojiSet, do not display custom glyph (render with
+ * android.graphics.Typeface.DEFAULT instead)
+ *
+ * -
+ * Otherwise, do custom rendering like normal
+ *
+ *
+ *
+ */
+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());
+ }
+}