From 8081cce1cbd1915aaddd9a3353900f004efbf820 Mon Sep 17 00:00:00 2001 From: Constantin A <10349490+C1710@users.noreply.github.com> Date: Sat, 5 May 2018 16:43:19 +0200 Subject: [PATCH] Add the ability to rename the fallback font in FileEmojiCompatConfig --- .../filemojicompat/build.gradle | 6 +- .../filemojicompat/FileEmojiCompatConfig.java | 67 +++++++++++++------ 2 files changed, 49 insertions(+), 24 deletions(-) diff --git a/emojicompat/FileMojiCompat/filemojicompat/build.gradle b/emojicompat/FileMojiCompat/filemojicompat/build.gradle index 31742a2de..0dcd5af55 100644 --- a/emojicompat/FileMojiCompat/filemojicompat/build.gradle +++ b/emojicompat/FileMojiCompat/filemojicompat/build.gradle @@ -18,7 +18,7 @@ ext { libraryDescription = 'An EmojiCompat implementation using files from a local file or a file inside your assets directory' siteUrl = 'https://github.com/c1710/blobmoji' gitUrl = 'https://github.com/c1710/blobmoji.git' - libraryVersion = '1.0.6' + libraryVersion = '1.0.7' developerId = 'c1710' developerName = 'Constantin A.' developerEmail = 'c1710.apps@outlook.com' @@ -33,8 +33,8 @@ android { defaultConfig { minSdkVersion 14 targetSdkVersion 27 - versionCode 6 - versionName "1.0.6" + versionCode 7 + versionName "1.0.7" } diff --git a/emojicompat/FileMojiCompat/filemojicompat/src/main/java/de/c1710/filemojicompat/FileEmojiCompatConfig.java b/emojicompat/FileMojiCompat/filemojicompat/src/main/java/de/c1710/filemojicompat/FileEmojiCompatConfig.java index f23338ff4..97b72385a 100644 --- a/emojicompat/FileMojiCompat/filemojicompat/src/main/java/de/c1710/filemojicompat/FileEmojiCompatConfig.java +++ b/emojicompat/FileMojiCompat/filemojicompat/src/main/java/de/c1710/filemojicompat/FileEmojiCompatConfig.java @@ -31,10 +31,6 @@ import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.locks.ReentrantLock; /** * A simple implementation of EmojiCompat.Config using typeface files. @@ -54,6 +50,10 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { * Indicates whether all emojis should be replaced when the fallback font is used. */ private boolean replaceAllOnFallback = false; + /** + * The default name of the fallback font + */ + private static final String FONT_FALLBACK = "NoEmojiCompat.ttf"; /** * Create a new configuration for this EmojiCompat @@ -64,7 +64,21 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { // NEW @NonNull String path) { // This one is obviously new - this(context, new File(path)); + this(context, path, FONT_FALLBACK); + } + + /** + * Create a new configuration for this EmojiCompat + * @param path The file name/path of the requested font + * @param context Context instance + * @param fallbackFont The asset path of the fallback font + */ + public FileEmojiCompatConfig(@NonNull Context context, + // NEW + @NonNull String path, + @Nullable String fallbackFont) { + // This one is obviously new + this(context, new File(path), fallbackFont); } /** @@ -75,7 +89,22 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { public FileEmojiCompatConfig(@NonNull Context context, // NEW @Nullable File fontFile) { - super(new FileMetadataLoader(context, fontFile)); + this(context, fontFile, FONT_FALLBACK); + } + + /** + * Create a new configuration for this EmojiCompat based on a file + * @param context Context instance + * @param fontFile The file containing the EmojiCompat font + * @param fallbackFont The asset path of the fallback font + */ + public FileEmojiCompatConfig(@NonNull Context context, + // NEW + @Nullable File fontFile, + @Nullable String fallbackFont) { + super(new FileMetadataLoader(context, + fontFile, + fallbackFont != null ? fallbackFont : FONT_FALLBACK)); if(fontFile != null && fontFile.exists() && fontFile.canRead()) { try { // Is it a font? @@ -137,12 +166,6 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { return this; } - private void onFailed() { - Log.d(TAG, "onFailed: Could not load font"); - fallback = true; - super.setReplaceAll(false); - } - /** * This is the MetadataLoader. Derived from BundledMetadataLoader but with * the addition of a custom file name. @@ -151,13 +174,16 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { private final Context mContext; // NEW private final File fontFile; + private final String fallbackFont; private FileMetadataLoader(@NonNull Context context, // NEW - @Nullable File fontFile) { + @Nullable File fontFile, + @NonNull String fallbackFont) { this.mContext = context.getApplicationContext(); // NEW this.fontFile = fontFile; + this.fallbackFont = fallbackFont; } @@ -166,7 +192,7 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { @RequiresApi(19) public void load(@NonNull EmojiCompat.MetadataRepoLoaderCallback loaderCallback) { //Preconditions.checkNotNull(loaderCallback, "loaderCallback cannot be null"); - final InitRunnable runnable = new InitRunnable(mContext, loaderCallback, fontFile); + final InitRunnable runnable = new InitRunnable(mContext, loaderCallback, fontFile, fallbackFont); final Thread thread = new Thread(runnable); thread.setDaemon(false); thread.start(); @@ -175,8 +201,9 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { @RequiresApi(19) private static class InitRunnable implements Runnable { - // The font name is assigned in the constructor. + // The font names are assigned in the constructor. private final File FONT_FILE; + private final String FONT_FALLBACK; // Slightly different variable names private final EmojiCompat.MetadataRepoLoaderCallback loaderCallback; private final Context context; @@ -184,11 +211,13 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { private InitRunnable(final Context context, final EmojiCompat.MetadataRepoLoaderCallback loaderCallback, // NEW parameter - final File FONT_FILE) { + final File FONT_FILE, + final String FONT_FALLBACK) { // This has been changed a bit in order to get some consistency this.context = context; this.loaderCallback = loaderCallback; this.FONT_FILE = FONT_FILE; + this.FONT_FALLBACK = FONT_FALLBACK; } @Override @@ -206,16 +235,12 @@ public class FileEmojiCompatConfig extends EmojiCompat.Config { android.util.Log.w(TAG, "Error while loading the font file.", t); final AssetManager assetManager = context.getAssets(); final MetadataRepo resourceIndex = - MetadataRepo.create(assetManager, "NoEmojiCompat.ttf"); + MetadataRepo.create(assetManager, FONT_FALLBACK); loaderCallback.onLoaded(resourceIndex); } catch (Throwable t2) { loaderCallback.onFailed(t); } } } - - interface EmojiFontFailListener { - void onFailed(); - } } }