package com.joanzapata.iconify.internal; import android.content.Context; import android.graphics.Typeface; import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.joanzapata.iconify.Icon; import com.joanzapata.iconify.IconFontDescriptor; import java.util.HashMap; import java.util.Map; public class IconFontDescriptorWrapper { @NonNull private final IconFontDescriptor iconFontDescriptor; @NonNull private final Map<String, Icon> iconsByKey; @Nullable private Typeface cachedTypeface; public IconFontDescriptorWrapper(@NonNull IconFontDescriptor iconFontDescriptor) { this.iconFontDescriptor = iconFontDescriptor; iconsByKey = new HashMap<String, Icon>(); Icon[] characters = iconFontDescriptor.characters(); for (int i = 0, charactersLength = characters.length; i < charactersLength; i++) { Icon icon = characters[i]; iconsByKey.put(icon.key(), icon); } } @CheckResult @Nullable public Icon getIcon(@NonNull String key) { return iconsByKey.get(key); } @CheckResult @NonNull public IconFontDescriptor getIconFontDescriptor() { return iconFontDescriptor; } @CheckResult @NonNull public Typeface getTypeface(@NonNull Context context) { if (cachedTypeface != null) return cachedTypeface; synchronized (this) { if (cachedTypeface != null) return cachedTypeface; cachedTypeface = Typeface.createFromAsset(context.getAssets(), iconFontDescriptor.ttfFileName()); return cachedTypeface; } } @CheckResult public boolean hasIcon(@NonNull Icon icon) { return iconsByKey.values().contains(icon); } }