/** * Copyright 2013 Joan Zapata * * 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. * * It uses FontAwesome font, licensed under OFL 1.1, which is compatible * with this library's license. * * http://scripts.sil.org/cms/scripts/render_download.php?format=file&media_id=OFL_plaintext&filename=OFL.txt */ package com.joanzapata.android.iconify; import android.content.Context; import android.graphics.Typeface; import android.text.Spanned; import android.widget.TextView; import java.io.IOException; import static android.text.Html.*; import static com.joanzapata.android.iconify.Utils.*; import static java.lang.String.valueOf; public final class Iconify { private static final String TTF_FILE = "firsttry.ttf"; public static final String TAG = Iconify.class.getSimpleName(); private static Typeface typeface = null; private Iconify() { // Prevent instantiation } /** Transform the given TextViews replacing {icon_xxx} texts with icons. */ public static final void addIcons(TextView... textViews) { for (TextView textView : textViews) { textView.setTypeface(getTypeface(textView.getContext())); textView.setText(compute(textView.getText())); } } public static CharSequence compute(CharSequence charSequence) { if (charSequence instanceof Spanned) { String text = toHtml((Spanned) charSequence); return fromHtml(replaceIcons(new StringBuilder((text))).toString()); } String text = charSequence.toString(); return replaceIcons(new StringBuilder(text)); } public static final void setIcon(TextView textView, IconValue value) { textView.setTypeface(getTypeface(textView.getContext())); textView.setText(valueOf(value.character)); } /** * The typeface that contains FontAwesome icons. * @return the typeface, or null if something goes wrong. */ public static final Typeface getTypeface(Context context) { if (typeface == null) { try { typeface = Typeface.createFromFile(resourceToFile(context, TTF_FILE)); } catch (IOException e) { return null; } } return typeface; } public static enum IconValue { icon_photo('\uf000'), icon_image('\uf001'), icon_th_grid('\uf002'), icon_pencil('\uf003'), icon_redo('\uf004'), icon_twitter_sq('\uf005'), icon_refresh('\uf006'), icon_undo('\uf007'), icon_linkedin('\uf008'), icon_linkedin_sq('\uf009'), icon_gplus('\uf00A'), icon_up_o('\uf00B'), icon_down_o('\uf00C'), icon_gplus_sq('\uf00D'), icon_facebook_sq('\uf00E'), icon_trash('\uf00F'), icon_facebook('\uf010'), icon_eraser('\uf011'), icon_tag('\uf012'), icon_done('\uf013'), icon_location('\uf014'), icon_save('\uf015'), icon_th_list('\uf016'), icon_contrast('\uf017'), icon_crop('\uf018'), icon_brightness('\uf019'), icon_twitter('\uf01A'), icon_vk('\uf01B'), icon_gallery('\uf01C'), icon_ya('\uf01D'), icon_ya_sq('\uf01E'), icon_ok('\uf01F'), icon_ok_sq('\uf020'), icon_share('\uf021'), icon_magic('\uf022'), icon_flip_vertical('\uf023'), icon_bitbucket('\uf024'), icon_bitbucket_sq('\uf025'), icon_instagram('\uf026'), icon_github_sq('\uf027'), icon_github('\uf028'), icon_bookmark('\uf029'), icon_flip_horizontal('\uf02A'); char character; IconValue(char character) { this.character = character; } public String formattedName() { return "{" + name() + "}"; } public char character() { return character; } } }