README.md
1
2 Android EmojiCompat Sample
3 ===================================
4
5 This sample demonstrates usage of EmojiCompat support library. You can use this library
6 to prevent your app from showing missing emoji characters in the form of tofu (). You
7 can use either bundled or downloadable emoji fonts. This sample shows both usages.
8
9 Introduction
10 ------------
11
12 The EmojiCompat support library aims to keep Android devices up to date with the latest emoji. It
13 prevents your app from showing missing emoji characters in the form of , which indicates that your
14 device does not have a font to display the text. By using the EmojiCompat support library, your app
15 users do not need to wait for Android OS updates to get the latest emoji.
16
17 For further detail, read [Emoji Compatibility][1] documentation.
18
19 ### Configuration
20
21 You need to first initialize EmojiCompat to load the metadata and the typeface. You can use either
22 bundled or downloadable fonts.
23
24 #### Use downloadable fonts
25
26 ***You need the beta version of Google Play Services to use this feature.*** Join
27 [Google Play Services Public Beta Program][4] and make sure you have v11 installed on your device
28 running Android O Developer Preview 2.
29
30 For the downloadable font configuration, you need to create an instance of the [FontRequest][5]
31 class, and provide the font provider authority, the font provider package, the font query, and a
32 list of set of hashes for the certificates. For more information about FontRequest, refer to the
33 Downloadable Fonts documentation. You can then create an instance of
34 [FontRequestEmojiCompatConfig][6] and pass it to EmojiCompat.init().
35
36 ```java
37 final FontRequest fontRequest = new FontRequest(
38 "com.google.android.gms.fonts",
39 "com.google.android.gms",
40 "Noto Color Emoji Compat",
41 R.array.com_google_android_gms_fonts_certs);
42 EmojiCompat.init(new FontRequestEmojiCompatConfig(getApplicationContext(), fontRequest)
43 .setReplaceAll(true)
44 .registerInitCallback(new EmojiCompat.InitCallback() {
45 @Override
46 public void onInitialized() {
47 Log.i(TAG, "EmojiCompat initialized");
48 }
49
50 @Override
51 public void onFailed(@Nullable Throwable throwable) {
52 Log.e(TAG, "EmojiCompat initialization failed", throwable);
53 }
54 });)
55 ```
56
57 #### Use bundled font
58
59 In order the use the bundled font, call init() method of [EmojiCompat][2] with an instance of
60 [BundledEmojiCompatConfig][3].
61
62 ### Use EmojiCompat
63
64 #### Built-in views
65
66 The easiest way to use EmojiCompat in your layout, is to use [EmojiAppCompatTextView][7],
67 [EmojiAppCompatEditText][8], or [EmojiAppCompatButton][9]. You can use them in your layout XMLs or
68 code. You can just set any text containing emoji and the widgets handle the rest.
69
70 #### With regular TextViews
71
72 If you want to use EmojiCompat with a regular TextView, retrieve an instance of EmojiCompat by
73 calling EmojiCompat.get() and call registerInitCallback method. You can pass an
74 EmojiCompat.InitCallback and use the EmojiCompat#process() method there to transform emoji text into
75 a backward-compatible format.
76
77 #### With custom TextViews
78
79 If you want to use EmojiCompat in your custom TextView, you can create an instance of
80 [EmojiTextViewHelper][10] and use it in some overridden methods, namely setFilters and setAllCaps.
81 [CustomTextView.java][11] shows what to do inside them.
82
83 [1]: https://developer.android.com/preview/features/emoji-compat.html
84 [2]: https://developer.android.com/reference/android/support/text/emoji/EmojiCompat.html
85 [3]: https://developer.android.com/reference/android/support/text/emoji/bundled/BundledEmojiCompatConfig.html
86 [4]: https://developers.google.com/android/guides/beta-program
87 [5]: https://developer.android.com/reference/android/support/v4/provider/FontRequest.html
88 [6]: https://developer.android.com/reference/android/support/text/emoji/FontRequestEmojiCompatConfig.html
89 [7]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiAppCompatTextView.html
90 [8]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiAppCompatEditText.html
91 [9]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiAppCompatButton.html
92 [10]: https://developer.android.com/reference/android/support/text/emoji/widget/EmojiCompatViewHelper.html
93 [11]: https://github.com/googlesamples/android-EmojiCompat/blog/master/app/src/main/java/com/example/android/emojicompat/CustomTextView.java
94
95 Pre-requisites
96 --------------
97
98 - Android SDK 25
99 - Android Build Tools v25.0.3
100 - Android Support Repository
101
102 Screenshots
103 -------------
104
105 <img src="screenshots/1-main.png" height="400" alt="Screenshot"/>
106
107 Getting Started
108 ---------------
109
110 This sample uses the Gradle build system. To build this project, use the
111 "gradlew build" command or use "Import Project" in Android Studio.
112
113 Support
114 -------
115
116 - Google+ Community: https://plus.google.com/communities/105153134372062985968
117 - Stack Overflow: http://stackoverflow.com/questions/tagged/android
118
119 If you've found an error in this sample, please file an issue:
120 https://github.com/googlesamples/android-EmojiCompat
121
122 Patches are encouraged, and may be submitted by forking this project and
123 submitting a pull request through GitHub. Please see CONTRIBUTING.md for more details.
124
125 License
126 -------
127
128 Copyright 2017 The Android Open Source Project, Inc.
129
130 Licensed to the Apache Software Foundation (ASF) under one or more contributor
131 license agreements. See the NOTICE file distributed with this work for
132 additional information regarding copyright ownership. The ASF licenses this
133 file to you under the Apache License, Version 2.0 (the "License"); you may not
134 use this file except in compliance with the License. You may obtain a copy of
135 the License at
136
137 http://www.apache.org/licenses/LICENSE-2.0
138
139 Unless required by applicable law or agreed to in writing, software
140 distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
141 WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
142 License for the specific language governing permissions and limitations under
143 the License.
144