diff --git a/.gitignore b/.gitignore index 483e763..4babcb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,62 +1,15 @@ -# Copyright: Benjamin Weiss (keyboardsurfer) https://github.com/keyboardsurfer -# Under CC-BY-SA V3.0 (https://creativecommons.org/licenses/by-sa/3.0/legalcode) - -# svn files -.svn - -# built application files -*.apk -*.ap_ -*.jar - -# lint folder -lint - -# files for the dex VM -*.dex - -# Java class files -*.class - # generated files bin/ gen/ -classes/ -gen-external-apklibs/ - -# maven output folder -target # Local configuration file (sdk path, etc) local.properties -# Eclipse project files -.classpath -.project -.metadata -.settings - # IntelliJ files .idea *.iml -# OSX files -.DS_Store - -# Windows files -Thumbs.db - -# vi swap files -*.swp - -# backup files -*.bak - # gradle directory .gradle build/ - -#for oh-my-zsh jira plugin (https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins#jira) -.jira-url -atlassian-ide-plugin.xml - +gradle/ diff --git a/ADD_FONT.md b/ADD_FONT.md new file mode 100644 index 0000000..616ed5e --- /dev/null +++ b/ADD_FONT.md @@ -0,0 +1,30 @@ +Adding a Custom Font +================= + +Android Bootstrap uses Typeface Icon Sets, which provide scalable graphics without the hassle of +adding different drawable sizes for various screen densities. It should be possible to define your +own icon sets by following the instructions below. Please send pull requests if you want an icon set +added to the library by default. + +1. +Find the [reference sheet](https://fortawesome.github.io/Font-Awesome/cheatsheet/) + for the typeface, and use a script to parse it. +An example [parsing script](https://github.com/Bearded-Hen/AndroidBootstrapSample) is currently available +for the FontAwesome and Typicon typefaces. If possible, please also send a pull request for the script itself! + +2. +Create a class which implements the IconSet interface. This describes the location of the typeface +in the assets directory, and the icon codes which map to unicode characters. See the default icon sets +for examples. + +3. +Copy the typeface TTF file to the assets directory. + +4. +Initialise the custom typeface by calling TypefaceProvider.registerCustomIconSet(). + +5. +Add icons to text using the BootstrapTextBuilder. + +6. +Test out the new icon set, send a pull request, or raise an issue if something isn't working. \ No newline at end of file diff --git a/AndroidBootstrap/.classpath b/AndroidBootstrap/.classpath deleted file mode 100644 index 5176974..0000000 --- a/AndroidBootstrap/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/AndroidBootstrap/.project b/AndroidBootstrap/.project deleted file mode 100644 index 12eae9a..0000000 --- a/AndroidBootstrap/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - AndroidBootstrap - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/AndroidBootstrap/AndroidManifest.xml b/AndroidBootstrap/AndroidManifest.xml deleted file mode 100644 index d16dcd2..0000000 --- a/AndroidBootstrap/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - diff --git a/AndroidBootstrap/assets/fontawesome-webfont.ttf b/AndroidBootstrap/assets/fontawesome-webfont.ttf deleted file mode 100644 index 96a3639..0000000 Binary files a/AndroidBootstrap/assets/fontawesome-webfont.ttf and /dev/null differ diff --git a/AndroidBootstrap/build.gradle b/AndroidBootstrap/build.gradle index 0e82c4b..d0d7793 100644 --- a/AndroidBootstrap/build.gradle +++ b/AndroidBootstrap/build.gradle @@ -1,35 +1,18 @@ apply plugin: 'com.android.library' - -dependencies { - -} +apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle' android { - compileSdkVersion 22 - buildToolsVersion "22.0.1" + compileSdkVersion 23 + buildToolsVersion "23.0.1" defaultConfig { - minSdkVersion 7 - targetSdkVersion 22 + minSdkVersion 11 + targetSdkVersion 23 versionCode = Integer.parseInt(VERSION_CODE) versionName = VERSION_NAME } - - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - resources.srcDirs = ['src'] - aidl.srcDirs = ['src'] - renderscript.srcDirs = ['src'] - res.srcDirs = ['res'] - assets.srcDirs = ['assets'] - } - - instrumentTest.setRoot('tests') - debug.setRoot('build-types/debug') - release.setRoot('build-types/release') - } } -apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle' +dependencies { + compile 'com.android.support:support-annotations:23.0.1' +} diff --git a/AndroidBootstrap/libs/android-support-v4.jar b/AndroidBootstrap/libs/android-support-v4.jar deleted file mode 100644 index cf12d28..0000000 Binary files a/AndroidBootstrap/libs/android-support-v4.jar and /dev/null differ diff --git a/AndroidBootstrap/project.properties b/AndroidBootstrap/project.properties deleted file mode 100644 index 1b8c5a3..0000000 --- a/AndroidBootstrap/project.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-18 -android.library=true diff --git a/AndroidBootstrap/res/drawable/bbuton_danger.xml b/AndroidBootstrap/res/drawable/bbuton_danger.xml deleted file mode 100644 index c9fb1b6..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_danger.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_danger_rounded.xml b/AndroidBootstrap/res/drawable/bbuton_danger_rounded.xml deleted file mode 100644 index d54805a..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_danger_rounded.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_default.xml b/AndroidBootstrap/res/drawable/bbuton_default.xml deleted file mode 100644 index 14f5327..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_default.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_default_rounded.xml b/AndroidBootstrap/res/drawable/bbuton_default_rounded.xml deleted file mode 100644 index 8233b84..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_default_rounded.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_info.xml b/AndroidBootstrap/res/drawable/bbuton_info.xml deleted file mode 100644 index cfffe93..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_info.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_info_rounded.xml b/AndroidBootstrap/res/drawable/bbuton_info_rounded.xml deleted file mode 100644 index f0c6b4b..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_info_rounded.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_inverse.xml b/AndroidBootstrap/res/drawable/bbuton_inverse.xml deleted file mode 100644 index d2c59f4..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_inverse.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_inverse_rounded.xml b/AndroidBootstrap/res/drawable/bbuton_inverse_rounded.xml deleted file mode 100644 index 326b988..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_inverse_rounded.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_primary.xml b/AndroidBootstrap/res/drawable/bbuton_primary.xml deleted file mode 100644 index d40f61e..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_primary.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_primary_rounded.xml b/AndroidBootstrap/res/drawable/bbuton_primary_rounded.xml deleted file mode 100644 index 470208e..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_primary_rounded.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_success.xml b/AndroidBootstrap/res/drawable/bbuton_success.xml deleted file mode 100644 index c963189..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_success.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_success_rounded.xml b/AndroidBootstrap/res/drawable/bbuton_success_rounded.xml deleted file mode 100644 index 21806f8..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_success_rounded.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_warning.xml b/AndroidBootstrap/res/drawable/bbuton_warning.xml deleted file mode 100644 index e45b40d..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_warning.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bbuton_warning_rounded.xml b/AndroidBootstrap/res/drawable/bbuton_warning_rounded.xml deleted file mode 100644 index 44ebfcd..0000000 --- a/AndroidBootstrap/res/drawable/bbuton_warning_rounded.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bthumbnail_container_rounded.xml b/AndroidBootstrap/res/drawable/bthumbnail_container_rounded.xml deleted file mode 100644 index f59675c..0000000 --- a/AndroidBootstrap/res/drawable/bthumbnail_container_rounded.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bthumbnail_container_square.xml b/AndroidBootstrap/res/drawable/bthumbnail_container_square.xml deleted file mode 100644 index cae83c0..0000000 --- a/AndroidBootstrap/res/drawable/bthumbnail_container_square.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/bthumbnail_placeholder_default.xml b/AndroidBootstrap/res/drawable/bthumbnail_placeholder_default.xml deleted file mode 100644 index befbfd8..0000000 --- a/AndroidBootstrap/res/drawable/bthumbnail_placeholder_default.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/edittext_background.xml b/AndroidBootstrap/res/drawable/edittext_background.xml deleted file mode 100644 index 12aafab..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/edittext_background_danger.xml b/AndroidBootstrap/res/drawable/edittext_background_danger.xml deleted file mode 100644 index bb2285d..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background_danger.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/drawable/edittext_background_rounded.xml b/AndroidBootstrap/res/drawable/edittext_background_rounded.xml deleted file mode 100644 index ab036eb..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background_rounded.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/drawable/edittext_background_rounded_danger.xml b/AndroidBootstrap/res/drawable/edittext_background_rounded_danger.xml deleted file mode 100644 index 227efa7..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background_rounded_danger.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/drawable/edittext_background_rounded_success.xml b/AndroidBootstrap/res/drawable/edittext_background_rounded_success.xml deleted file mode 100644 index fa789a3..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background_rounded_success.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/drawable/edittext_background_rounded_warning.xml b/AndroidBootstrap/res/drawable/edittext_background_rounded_warning.xml deleted file mode 100644 index aeffc12..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background_rounded_warning.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/drawable/edittext_background_success.xml b/AndroidBootstrap/res/drawable/edittext_background_success.xml deleted file mode 100644 index bdc32b0..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background_success.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/drawable/edittext_background_warning.xml b/AndroidBootstrap/res/drawable/edittext_background_warning.xml deleted file mode 100644 index 5d14712..0000000 --- a/AndroidBootstrap/res/drawable/edittext_background_warning.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/drawable/thumbnail_circle.xml b/AndroidBootstrap/res/drawable/thumbnail_circle.xml deleted file mode 100644 index be3666c..0000000 --- a/AndroidBootstrap/res/drawable/thumbnail_circle.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/AndroidBootstrap/res/drawable/thumbnail_circle_container.xml b/AndroidBootstrap/res/drawable/thumbnail_circle_container.xml deleted file mode 100644 index ec530db..0000000 --- a/AndroidBootstrap/res/drawable/thumbnail_circle_container.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/drawable/thumbnail_circle_minimal.xml b/AndroidBootstrap/res/drawable/thumbnail_circle_minimal.xml deleted file mode 100644 index 16bcad7..0000000 --- a/AndroidBootstrap/res/drawable/thumbnail_circle_minimal.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/layout/bootstrap_button.xml b/AndroidBootstrap/res/layout/bootstrap_button.xml deleted file mode 100644 index 7bfd973..0000000 --- a/AndroidBootstrap/res/layout/bootstrap_button.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/layout/bootstrap_thumbnail.xml b/AndroidBootstrap/res/layout/bootstrap_thumbnail.xml deleted file mode 100644 index e65c47e..0000000 --- a/AndroidBootstrap/res/layout/bootstrap_thumbnail.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/layout/bootstrap_thumbnail_circle.xml b/AndroidBootstrap/res/layout/bootstrap_thumbnail_circle.xml deleted file mode 100644 index d837339..0000000 --- a/AndroidBootstrap/res/layout/bootstrap_thumbnail_circle.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/AndroidBootstrap/res/layout/placeholder.xml b/AndroidBootstrap/res/layout/placeholder.xml deleted file mode 100644 index c8a2efe..0000000 --- a/AndroidBootstrap/res/layout/placeholder.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/AndroidBootstrap/res/menu/main.xml b/AndroidBootstrap/res/menu/main.xml deleted file mode 100644 index 397a624..0000000 --- a/AndroidBootstrap/res/menu/main.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/AndroidBootstrap/res/values-sw600dp/dimens.xml b/AndroidBootstrap/res/values-sw600dp/dimens.xml deleted file mode 100644 index 44f01db..0000000 --- a/AndroidBootstrap/res/values-sw600dp/dimens.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/AndroidBootstrap/res/values-sw720dp-land/dimens.xml b/AndroidBootstrap/res/values-sw720dp-land/dimens.xml deleted file mode 100644 index 61e3fa8..0000000 --- a/AndroidBootstrap/res/values-sw720dp-land/dimens.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - 128dp - - diff --git a/AndroidBootstrap/res/values/attrs.xml b/AndroidBootstrap/res/values/attrs.xml deleted file mode 100644 index 73c74b5..0000000 --- a/AndroidBootstrap/res/values/attrs.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AndroidBootstrap/res/values/colors.xml b/AndroidBootstrap/res/values/colors.xml deleted file mode 100644 index ecfb263..0000000 --- a/AndroidBootstrap/res/values/colors.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - #ffffffff - #ff000000 - #ccc - #ffe0e0e0 - - #ff428bca - #ff357ebd - #ff3276b1 - #ff285e8e - #a5428bca - #a5357ebd - - #ffd9534f - #ffd43f3a - #ffd2322d - #ffac2925 - #a5d9534f - #a5d43f3a - - - #ff5cb85c - #ff4cae4c - #ff47a447 - #ff398439 - #a55cb85c - #a54cae4c - - - #fff0ad4e - #ffeea236 - #ffed9c28 - #ffd58512 - #a5f0ad4e - #a5eea236 - - #ff5bc0de - #ff46b8da - #ff39b3d7 - #ff269abc - #a55bc0de - #a546b8da - - #ffffffff - #ffcccccc - #ffebebeb - #ffadadad - #a5ffffff - #a5cccccc - - #ff0a0a0a - #ff141414 - #ff1f1f1f - #ff292929 - #a50a0a0a - #a5141414 - - #ffffffff - #e9e9e9 - #dbdbdb - #7e7e7e - - - diff --git a/AndroidBootstrap/res/values/dimens.xml b/AndroidBootstrap/res/values/dimens.xml deleted file mode 100644 index 379ac9e..0000000 --- a/AndroidBootstrap/res/values/dimens.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - 16dp - 16dp - 5dp - - 3dp - - 4dp - 8dp - 12dp - 16dp - diff --git a/AndroidBootstrap/res/values/strings.xml b/AndroidBootstrap/res/values/strings.xml deleted file mode 100644 index 69aff74..0000000 --- a/AndroidBootstrap/res/values/strings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - BButton - Settings - Hello world! - - diff --git a/AndroidBootstrap/res/values/styles.xml b/AndroidBootstrap/res/values/styles.xml deleted file mode 100644 index 1507533..0000000 --- a/AndroidBootstrap/res/values/styles.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapButton.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapButton.java deleted file mode 100644 index 5c80055..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapButton.java +++ /dev/null @@ -1,363 +0,0 @@ -package com.beardedhen.androidbootstrap; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.TextView; - -public class BootstrapButton extends FrameLayout { - - private TextView lblMiddle; - private TextView lblRight; - private TextView lblLeft; - private ViewGroup layout; - private boolean roundedCorners = false; - - private enum BootstrapType { - DEFAULT("default", R.drawable.bbuton_default, R.drawable.bbuton_default_rounded, R.color.black), - PRIMARY("primary", R.drawable.bbuton_primary, R.drawable.bbuton_primary_rounded, R.color.white), - SUCCESS("success", R.drawable.bbuton_success, R.drawable.bbuton_success_rounded, R.color.white), - INFO("info", R.drawable.bbuton_info, R.drawable.bbuton_info_rounded, R.color.white), - WARNING("warning", R.drawable.bbuton_warning, R.drawable.bbuton_warning_rounded, R.color.white), - DANGER("danger", R.drawable.bbuton_danger, R.drawable.bbuton_danger_rounded, R.color.white), - INVERSE("inverse", R.drawable.bbuton_inverse, R.drawable.bbuton_inverse_rounded, R.color.white); - - private final String type; - private final int normalBg; - private final int roundedBg; - private final int textColour; - - BootstrapType(String type, int normalBg, int roundedBg, int textColour) { - this.type = type; - this.normalBg = normalBg; - this.roundedBg = roundedBg; - this.textColour = textColour; - } - - public static BootstrapType getBootstrapTypeFromString(String type) { - for (BootstrapType value : BootstrapType.values()) { - if (value.type.equals(type)) { - return value; - } - } - return DEFAULT; - } - - public int getTextColour() { - return textColour; - } - - public int getRoundedBg() { - return roundedBg; - } - - public int getNormalBg() { - return normalBg; - } - } - - private enum BootstrapSize { - - LARGE("large", 20.0f, 15, 20), - DEFAULT("default", 14.0f, 10, 15), - SMALL("small", 12.0f, 5, 10), - XSMALL("xsmall", 10.0f, 2, 5); - - private final float fontSize; - private final String type; - private final int paddingA; - private final int paddingB; - - private BootstrapSize(String type, float fontSize, int paddingA, int paddingB) { - this.type = type; - this.fontSize = fontSize; - this.paddingA = paddingA; - this.paddingB = paddingB; - } - - public float getFontSize() { - return fontSize; - } - - public static BootstrapSize getBootstrapSizeFromString(String size) { - for (BootstrapSize value : BootstrapSize.values()) { - if (value.type.equals(size)) { - return value; - } - } - return DEFAULT; - } - } - - public BootstrapButton(Context context) { - super(context); - initialise(null); - } - - public BootstrapButton(Context context, AttributeSet attrs) { - super(context, attrs); - initialise(attrs); - } - - public BootstrapButton(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - initialise(attrs); - } - - private void initialise(AttributeSet attrs) { - LayoutInflater inflater = LayoutInflater.from(getContext()); - - float fontSize = FontAwesome.DEFAULT_FONT_SIZE; - float scale = getResources().getDisplayMetrics().density; //for padding - int paddingA; - int paddingB; - - TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapButton); - - String iconLeft = ""; - String iconRight = ""; - String text = ""; - String gravity = ""; - String size = "default"; - String bootstrapStringType = "default"; - boolean enabled = true; - - try { - if (a != null) { - bootstrapStringType = a.getString(R.styleable.BootstrapButton_bb_type); - bootstrapStringType = (bootstrapStringType == null) ? "default" : bootstrapStringType; - - // icons - iconLeft = a.getString(R.styleable.BootstrapButton_bb_icon_left); - iconLeft = (iconLeft == null) ? "" : iconLeft; - - iconRight = a.getString(R.styleable.BootstrapButton_bb_icon_right); - iconRight = (iconRight == null) ? "" : iconRight; - - // text - text = a.getString(R.styleable.BootstrapButton_android_text); - text = (text == null) ? "" : text; - - gravity = a.getString(R.styleable.BootstrapButton_bb_text_gravity); - gravity = (gravity == null) ? "" : gravity; - - // size - size = a.getString(R.styleable.BootstrapButton_bb_size); - size = (size == null) ? "default" : size; - - int layoutWidth = a.getLayoutDimension(R.styleable.BootstrapButton_android_layout_width, 0); - boolean fillparent = (layoutWidth == LayoutParams.MATCH_PARENT); - - Float layoutWeight = a.getFloat(R.styleable.BootstrapButton_android_layout_weight, -1); - fillparent = (layoutWeight != -1) || fillparent; - - roundedCorners = a.getBoolean(R.styleable.BootstrapButton_bb_roundedCorners, false); - enabled = a.getBoolean(R.styleable.BootstrapButton_android_enabled, true); - - if (a.getString(R.styleable.BootstrapButton_android_textSize) != null) { - float scaledDensity = getContext().getResources().getDisplayMetrics().scaledDensity; - float defaultDimen = FontAwesome.DEFAULT_FONT_SIZE * scaledDensity; - - float rawSize = a.getDimension(R.styleable.BootstrapButton_android_textSize, defaultDimen); - fontSize = rawSize / scaledDensity; - } - } - } finally { - if (a != null) { - a.recycle(); - } - } - - View v = inflater.inflate(R.layout.bootstrap_button, this, false); - - BootstrapSize bootstrapSize = BootstrapSize.getBootstrapSizeFromString(size); - - paddingA = (int) (bootstrapSize.paddingA * scale + 0.5f); - paddingB = (int) (bootstrapSize.paddingB * scale + 0.5f); - - //get layout items - layout = (ViewGroup) v.findViewById(R.id.layout); - lblLeft = (TextView) v.findViewById(R.id.lblLeft); - lblMiddle = (TextView) v.findViewById(R.id.lblMiddle); - lblRight = (TextView) v.findViewById(R.id.lblRight); - - setBootstrapType(bootstrapStringType); - //set the font awesome icon typeface - - if (!isInEditMode()) { - lblLeft.setTypeface(FontAwesome.getFont(getContext())); - lblRight.setTypeface(FontAwesome.getFont(getContext())); - } - - //set up the font size - lblLeft.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize); - lblMiddle.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize); - lblRight.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize); - - //deal with gravity - if (gravity.length() > 0) { - setTextGravity(gravity); - } - - boolean onlyIcon = true; - - //set the text - if (text.length() > 0) { - lblMiddle.setText(text); - lblMiddle.setVisibility(View.VISIBLE); - onlyIcon = false; - } - - setupIconLeft(paddingA, paddingB, iconLeft, iconRight, onlyIcon); - setupIconRight(paddingA, paddingB, iconLeft, iconRight, onlyIcon); - - if (iconLeft.length() > 0 && iconRight.length() > 0) { - lblMiddle.setPadding(paddingA, 0, paddingA, 0); - } - - this.setClickable(true); - this.setEnabled(enabled); - - layout.setPadding(0, paddingB, 0, paddingB); - - addView(v); - } - - private void setupIconLeft(int paddingA, int paddingB, String iconLeft, String iconRight, boolean onlyIcon) { - //set up the padding - if (iconLeft.length() > 0) { - setLeftIcon(iconLeft); - lblLeft.setVisibility(View.VISIBLE); - - if (!onlyIcon) { - lblLeft.setPadding(paddingB, 0, 0, 0); - } - else { - lblLeft.setPadding(paddingB, 0, paddingB, 0); - } - - //padding for symmetry - if ((iconRight.length() == 0) && !onlyIcon) { - lblMiddle.setPadding(paddingA, 0, paddingB, 0); - } - } - } - - private void setupIconRight(int paddingA, int paddingB, String iconLeft, String iconRight, boolean onlyIcon) { - if (iconRight.length() > 0) { - setRightIcon(iconRight); - lblRight.setVisibility(View.VISIBLE); - - if (!onlyIcon) { - lblRight.setPadding(0, 0, paddingB, 0); - } - else { - lblRight.setPadding(paddingB, 0, paddingB, 0); - } - - //padding for symmetry - if ((iconLeft.length() == 0) && !onlyIcon) { - lblMiddle.setPadding(paddingB, 0, paddingA, 0); - } - } - } - - public void setText(int stringId) { - setText(getContext().getResources().getString(stringId)); - } - - /** - * Changes the button text - * - * @param text - String value for what is displayed on the button - */ - public void setText(String text) { - lblMiddle.setText(text); - } - - /** - * Changes the left icon on a BootstrapButton - * - * @param leftIcon- String value for the icon as per http://fortawesome.github.io/Font-Awesome/cheatsheet/ - */ - public void setLeftIcon(String leftIcon) { - lblLeft.setText(FontAwesome.getUnicode(leftIcon)); - } - - /** - * Changes the right icon on a BootstrapButton - * - * @param rightIcon - String value for the icon as per http://fortawesome.github.io/Font-Awesome/cheatsheet/ - */ - public void setRightIcon(String rightIcon) { - lblRight.setText(FontAwesome.getUnicode(rightIcon)); - } - - /** - * Changes the type of BootstrapButton - * - * @param bootstrapType - String value for the type of button e.g. "primary" - */ - public void setBootstrapType(String bootstrapType) { - BootstrapType type = BootstrapType.getBootstrapTypeFromString(bootstrapType); - - int buttonBg = (roundedCorners) ? type.getRoundedBg() : type.getNormalBg(); - layout.setBackgroundResource(buttonBg); - - int textColor = getResources().getColor(type.getTextColour()); - - lblLeft.setTextColor(textColor); - lblMiddle.setTextColor(textColor); - lblRight.setTextColor(textColor); - } - - /** - * Specifies whether the BootstrapButton is enabled or disabled - * - * @param enabled - boolean state for either enabled or disabled - */ - public void setBootstrapButtonEnabled(boolean enabled) { - this.setEnabled(enabled); - } - - /** - * Changes the gravity for the text on a bootstrap button that is not wrap_content - * - * @param gravity - string for either center, right, or left. - */ - public void setTextGravity(String gravity) { - int gravityId = -1; - - switch (gravity) { - case "left": - gravityId = Gravity.LEFT; - break; - case "center": - gravityId = Gravity.CENTER_HORIZONTAL; - break; - case "right": - gravityId = Gravity.RIGHT; - break; - } - - if (gravityId != -1) { - lblMiddle.setGravity(gravityId | Gravity.CENTER_VERTICAL); - } - } - - /** - * Returns the text the BootstrapButton is displaying. - * - * @return CharSequence of text displayed - */ - public CharSequence getText() { - return lblMiddle.getText(); - } - -} diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java deleted file mode 100644 index 5010c83..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.beardedhen.androidbootstrap; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.beardedhen.androidbootstrap.utils.ImageUtils; - -public class BootstrapCircleThumbnail extends FrameLayout { - - private enum BootstrapCircleType { - SMALL("small", 2, 48), //padding adjustment for small thumbnails - MEDIUM("medium", 4, 80), - LARGE("large", 6, 112), - XLARGE("xlarge", 8, 176); - - private final String type; - private final int padding; - private final int diameter; - - private BootstrapCircleType(String type, int padding, int diameter) { - this.type = type; - this.padding = padding; - this.diameter = diameter; - } - - public int getDiameter() { // dp - return diameter; - } - - public int getPadding() { - return padding; - } - - public static BootstrapCircleType getBootstrapCircleTypeFromString(String type) { - for (BootstrapCircleType value : BootstrapCircleType.values()) { - if (value.type.equals(type)) { - return value; - } - } - return MEDIUM; - } - } - - private ImageView image; - private boolean minimal = false;//minimal means display just the image, no padding - private int imageWidth; - private int imageHeight; - private int padding = 0; - private LinearLayout placeholder; - private TextView dimensionsLabel; - - public BootstrapCircleThumbnail(Context context) { - super(context); - initialise(null); - } - - public BootstrapCircleThumbnail(Context context, AttributeSet attrs) { - super(context, attrs); - initialise(attrs); - } - - public BootstrapCircleThumbnail(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - initialise(attrs); - } - - private void initialise(AttributeSet attrs) { - LayoutInflater inflater = LayoutInflater.from(getContext()); - - TypedArray a = getContext().obtainStyledAttributes(attrs, - R.styleable.BootstrapCircleThumbnail); - - String size = ""; - String text = ""; - int imageDrawable = 0; - - try { - if (a != null) { - imageDrawable = a.getResourceId(R.styleable.BootstrapCircleThumbnail_bct_image, 0); - - text = a.getString(R.styleable.BootstrapCircleThumbnail_android_text); - text = (text == null) ? "" : text; - - size = a.getString(R.styleable.BootstrapCircleThumbnail_bct_size); - size = (size == null) ? "" : size; - - minimal = a.getBoolean(R.styleable.BootstrapCircleThumbnail_bct_minimal, false); - } - } finally { - if (a != null) { - a.recycle(); - } - } - - View v = inflater.inflate(R.layout.bootstrap_thumbnail_circle, this, false); - dimensionsLabel = (TextView) v.findViewById(R.id.dimensionsLabel); - - LinearLayout container = (LinearLayout) v.findViewById(R.id.container); - placeholder = (LinearLayout) v.findViewById(R.id.placeholder); - - image = (ImageView) v.findViewById(R.id.image); - float scale = getResources().getDisplayMetrics().density; - - //small image - - BootstrapCircleType type = BootstrapCircleType.getBootstrapCircleTypeFromString(size); - - padding = type.getPadding(); - imageWidth = type.getDiameter(); - imageHeight = type.getDiameter(); - - //convert padding to pixels - int paddingPX = (int) ((padding * scale) + 0.5); - - //convert image size to pixels - int imageSizeWidthPX = (int) ((imageWidth * scale) + 0.5); - int imageSizeHeightPX = (int) ((imageHeight * scale) + 0.5); - - //make inner image smaller to compensate for the padding so that entire circle including padding equals the size - //ex. small image = 48dp, small padding = 4dp, inner image = 48 - (4 * 2) = 40 - if (!this.minimal) { - imageSizeWidthPX -= (paddingPX * 2); - imageSizeHeightPX -= (paddingPX * 2); - - container.setPadding(paddingPX, paddingPX, paddingPX, paddingPX); - container.setBackgroundResource(R.drawable.thumbnail_circle_container); - } - else { - container.setBackgroundResource(R.drawable.thumbnail_circle_minimal); - } - - //if no image is given - if (imageDrawable == 0) { - this.image.setVisibility(View.GONE); - placeholder.setLayoutParams(new LinearLayout.LayoutParams(imageSizeWidthPX, imageSizeHeightPX)); - placeholder.setPadding(paddingPX, paddingPX, paddingPX, paddingPX); - - //set placeholder image - placeholder.setBackgroundResource(R.drawable.thumbnail_circle); - - dimensionsLabel.setText(text); - } - else { - placeholder.setPadding(0, 0, 0, 0); - dimensionsLabel.setVisibility(View.GONE); - Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), imageDrawable); - - Bitmap roundBitmap = ImageUtils.getCircleBitmap(bitmap, imageSizeWidthPX, imageSizeHeightPX); - image.setImageBitmap(roundBitmap); - } - - this.addView(v); - } - - public void setImage(int drawable) { - Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), drawable); - setImage(bitmap); - } - - public void setImage(Bitmap bitmap) { - placeholder.setPadding(0, 0, 0, 0); - this.dimensionsLabel.setVisibility(View.GONE); - this.image.setVisibility(View.VISIBLE); - - float scale = getResources().getDisplayMetrics().density; - - //convert image size to pixels - int widthPX = (int) ((this.imageWidth * scale) + 0.5); - int heightPX = (int) ((this.imageHeight * scale) + 0.5); - - int paddingPX = (int) ((this.padding * scale) + 0.5); - - if (!this.minimal) { - widthPX -= (paddingPX * 2); - heightPX -= (paddingPX * 2); - } - - Bitmap roundBitmap = ImageUtils.getCircleBitmap(bitmap, widthPX, heightPX); - image.setVisibility(View.VISIBLE); - image.setImageBitmap(roundBitmap); - - requestLayout(); - invalidate(); - } - -} diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapEditText.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapEditText.java deleted file mode 100644 index dacbd88..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapEditText.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.beardedhen.androidbootstrap; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.Gravity; -import android.widget.EditText; - -public class BootstrapEditText extends EditText { - - public enum TextState { - - DEFAULT("default", R.drawable.edittext_background_rounded, R.drawable.edittext_background), - SUCCESS("success", R.drawable.edittext_background_rounded_success, R.drawable.edittext_background_success), - WARNING("warning", R.drawable.edittext_background_rounded_warning, R.drawable.edittext_background_warning), - DANGER("danger", R.drawable.edittext_background_rounded_danger, R.drawable.edittext_background_danger); - - private final String state; - private final int roundedBg; - private final int normalBg; - - private TextState(String state, int roundedBg, int normalBg) { - this.state = state; - this.roundedBg = roundedBg; - this.normalBg = normalBg; - } - - public static TextState getStateFromString(String state) { - for (TextState value : TextState.values()) { - if (value.state.equals(state)) { - return value; - } - } - return DEFAULT; - } - - public int getRoundedBg() { - return roundedBg; - } - - public int getNormalBg() { - return normalBg; - } - } - - private boolean roundedCorners = false; - private int gravity = Gravity.CENTER_VERTICAL; - private TextState textState; - - public BootstrapEditText(Context context) { - super(context); - initialise(null); - } - - public BootstrapEditText(Context context, AttributeSet attrs) { - super(context, attrs); - initialise(attrs); - } - - public BootstrapEditText(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - initialise(attrs); - } - - private void initialise(AttributeSet attrs) { - TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapEditText); - - String state = "default"; - - try { - if (a != null) { - roundedCorners = a.getBoolean(R.styleable.BootstrapEditText_be_roundedCorners, false); - - //state - state = a.getString(R.styleable.BootstrapEditText_be_state); - state = (state == null) ? "default" : state; - - //gravity - gravity = a.getInt(R.styleable.BootstrapEditText_android_gravity, Gravity.CENTER_VERTICAL); - gravity = (gravity == Gravity.NO_GRAVITY) ? Gravity.CENTER_VERTICAL : gravity; - } - } finally { - if (a != null) { - a.recycle(); - } - } - - setGravity(gravity); - - if (this.isEnabled()) { - textState = TextState.getStateFromString(state); - setState(state); - } - } - - private void setBackgroundDrawable(TextState textState) { - this.textState = textState; - - if (roundedCorners) { - this.setBackgroundResource(textState.getRoundedBg()); - } - else { - this.setBackgroundResource(textState.getNormalBg()); - } - } - - /** - * Change the BootstrapEditTextState - * - * @param state an enum of success, warning, danger, or default. - */ - public void setState(TextState state) { - this.textState = state; - setBackgroundDrawable(textState); - } - - /** - * Deprecated, use {@link #setState(com.beardedhen.androidbootstrap.BootstrapEditText.TextState)} instead - */ - public void setState(String state) { - this.textState = TextState.getStateFromString(state); - setBackgroundDrawable(textState); - } - - /** - * Deprecated, use {@link #setState(com.beardedhen.androidbootstrap.BootstrapEditText.TextState)} instead - */ - @Deprecated public void setSuccess() { - setBackgroundDrawable(TextState.SUCCESS); - } - - /** - * Deprecated, use {@link #setState(com.beardedhen.androidbootstrap.BootstrapEditText.TextState)} instead - */ - @Deprecated public void setWarning() { - setBackgroundDrawable(TextState.WARNING); - } - - /** - * Deprecated, use {@link #setState(com.beardedhen.androidbootstrap.BootstrapEditText.TextState)} instead - */ - @Deprecated public void setDanger() { - setBackgroundDrawable(TextState.DANGER); - } - - /** - * Deprecated, use {@link #setState(com.beardedhen.androidbootstrap.BootstrapEditText.TextState)} instead - */ - @Deprecated public void setDefault() { - setBackgroundDrawable(TextState.DEFAULT); - } - - /** - * THIS METHOD IS DEPRECATED AND WILL BE REMOVED IN A FUTURE RELEASE. - * Use setEnabled() instead. - * - * Specifies whether the BootstrapEditText is enabled or disabled - * - * @param enabled - boolean state for either enabled or disabled - */ - @Deprecated public void setBootstrapEditTextEnabled(boolean enabled) { - this.setEnabled(enabled); - } - -} diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java deleted file mode 100644 index 5f5d871..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.beardedhen.androidbootstrap; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.TextView; - -public class BootstrapThumbnail extends FrameLayout { - private static final int DEFAULT_WIDTH = 150; //width of thumbnail when no width is given - private static final int DEFAULT_HEIGHT = 150;//height of thumbnail when no height is given - private static final int DEFAULT_MAX_PADDING = 8; //8dp is max padding size when padding isn't specified by user - private static final int DEFAULT_MIN_PADDING = 4; //4dp - - private LinearLayout placeholder; - private boolean roundedCorners = true; - - private enum ThumbnailTypes { - ROUNDED(R.drawable.bthumbnail_container_rounded, R.drawable.bthumbnail_placeholder_default), - SQUARE(R.drawable.bthumbnail_container_square, R.drawable.bthumbnail_placeholder_default); - - private final int containerDrawable; - private final int placeholderDrawable; - - ThumbnailTypes(int containerDrawable, int placeholderDrawable) { - this.containerDrawable = containerDrawable; - this.placeholderDrawable = placeholderDrawable; - } - - public static ThumbnailTypes getTypeFromBoolean(boolean roundedCorners) { - return (roundedCorners) ? ROUNDED : SQUARE; - } - - public int getContainerDrawable() { - return containerDrawable; - } - - public int getPlaceholderDrawable() { - return placeholderDrawable; - } - } - - public BootstrapThumbnail(Context context) { - super(context); - initialise(null); - } - - public BootstrapThumbnail(Context context, AttributeSet attrs) { - super(context, attrs); - initialise(attrs); - } - - public BootstrapThumbnail(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - initialise(attrs); - } - - private void initialise(AttributeSet attrs) { - LayoutInflater inflater = LayoutInflater.from(getContext()); - - TypedArray a = getContext().obtainStyledAttributes(attrs, - R.styleable.BootstrapThumbnail); - - //defaults - ThumbnailTypes type; - String text = ""; - int imageDrawable = 0; - float scale = getResources().getDisplayMetrics().density; //for padding - int width = DEFAULT_WIDTH; - int height = DEFAULT_HEIGHT; - int padding = 0; - int paddingDP = 0; - - try { - if (a != null) { - //attribute values - width = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_width, 0); - height = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_height, 0); - - if (a.getString(R.styleable.BootstrapThumbnail_bt_inside_padding) != null) { - paddingDP = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_inside_padding, 0); - } - else { - padding = (int) (((Math.sqrt(width * height)) / 100) * 2); - if (padding > DEFAULT_MAX_PADDING) { - padding = DEFAULT_MAX_PADDING; - } - if (padding < DEFAULT_MIN_PADDING) { - padding = DEFAULT_MIN_PADDING; - } - - paddingDP = (int) (padding * scale + 0.5f); //container padding in DP - } - - roundedCorners = a.getBoolean(R.styleable.BootstrapThumbnail_bt_roundedCorners, false); - imageDrawable = a.getResourceId(R.styleable.BootstrapThumbnail_bt_image, 0); - } - } finally { - if (a != null) { - a.recycle(); - } - } - - text = (int) (width / scale) + "x" + (int) (height / scale); - View v = inflater.inflate(R.layout.bootstrap_thumbnail, this, false); - - //get layout items - ViewGroup container = (ViewGroup) v.findViewById(R.id.container); - placeholder = (LinearLayout) v.findViewById(R.id.placeholder); - TextView dimensionsLabel = (TextView) v.findViewById(R.id.dimensionsLabel); - - //get the correct background type - type = ThumbnailTypes.getTypeFromBoolean(roundedCorners); - - //apply the background type - container.setBackgroundResource(type.getContainerDrawable()); - - //if no image is provided by user - if (imageDrawable == 0) { - //set default grey placeholder background - placeholder.setBackgroundResource(type.getPlaceholderDrawable()); - - //set the text - if (text.length() > 0) { - dimensionsLabel.setText(text); - dimensionsLabel.setVisibility(View.VISIBLE); - } - } - else { - //set background to user's provided image - placeholder.setBackgroundResource(imageDrawable); - - //remove textview dimensions - dimensionsLabel.setVisibility(View.GONE); - } - - //placeholder padding - int paddingP = (int) (((Math.sqrt(width * height)) / 100) * 4); - - //convert to DP - int paddingDPP = (int) (paddingP * scale + 0.5f);//placeholder padding in DP - - container.setPadding(paddingDP, paddingDP, paddingDP, paddingDP); - placeholder.setPadding(paddingDPP, paddingDPP, paddingDPP, paddingDPP); - placeholder.setLayoutParams(new LinearLayout.LayoutParams(width, height)); - - //set the font awesome icon typeface - dimensionsLabel.setTypeface(FontAwesome.getFont(getContext())); - - this.setClickable(true); - - addView(v); - } - - public void setImage(int drawable) { - this.placeholder.setBackgroundResource(drawable); - invalidate(); - requestLayout(); - } - -} diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesome.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesome.java deleted file mode 100644 index c95eb32..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesome.java +++ /dev/null @@ -1,637 +0,0 @@ -package com.beardedhen.androidbootstrap; - -import android.content.Context; -import android.graphics.Typeface; -import android.util.Log; - -import java.util.HashMap; -import java.util.Map; - -public class FontAwesome { - - private static final Map faMap = new HashMap<>(); - - private static Typeface font; - - public static final float DEFAULT_FONT_SIZE = 14.0f; - - private static final String UNKNOWN_CODE = "fa-question"; - - //font awesome map as per - //http://fortawesome.github.io/Font-Awesome/cheatsheet/ - - static { // Auto-generated FA-Map from 2015-02-07 - - faMap.put("fa-adjust", "\uf042"); - faMap.put("fa-adn", "\uf170"); - faMap.put("fa-align-center", "\uf037"); - faMap.put("fa-align-justify", "\uf039"); - faMap.put("fa-align-left", "\uf036"); - faMap.put("fa-align-right", "\uf038"); - faMap.put("fa-ambulance", "\uf0f9"); - faMap.put("fa-anchor", "\uf13d"); - faMap.put("fa-android", "\uf17b"); - faMap.put("fa-angellist", "\uf209"); - faMap.put("fa-angle-double-down", "\uf103"); - faMap.put("fa-angle-double-left", "\uf100"); - faMap.put("fa-angle-double-right", "\uf101"); - faMap.put("fa-angle-double-up", "\uf102"); - faMap.put("fa-angle-down", "\uf107"); - faMap.put("fa-angle-left", "\uf104"); - faMap.put("fa-angle-right", "\uf105"); - faMap.put("fa-angle-up", "\uf106"); - faMap.put("fa-apple", "\uf179"); - faMap.put("fa-archive", "\uf187"); - faMap.put("fa-area-chart", "\uf1fe"); - faMap.put("fa-arrow-circle-down", "\uf0ab"); - faMap.put("fa-arrow-circle-left", "\uf0a8"); - faMap.put("fa-arrow-circle-o-down", "\uf01a"); - faMap.put("fa-arrow-circle-o-left", "\uf190"); - faMap.put("fa-arrow-circle-o-right", "\uf18e"); - faMap.put("fa-arrow-circle-o-up", "\uf01b"); - faMap.put("fa-arrow-circle-right", "\uf0a9"); - faMap.put("fa-arrow-circle-up", "\uf0aa"); - faMap.put("fa-arrow-down", "\uf063"); - faMap.put("fa-arrow-left", "\uf060"); - faMap.put("fa-arrow-right", "\uf061"); - faMap.put("fa-arrow-up", "\uf062"); - faMap.put("fa-arrows", "\uf047"); - faMap.put("fa-arrows-alt", "\uf0b2"); - faMap.put("fa-arrows-h", "\uf07e"); - faMap.put("fa-arrows-v", "\uf07d"); - faMap.put("fa-asterisk", "\uf069"); - faMap.put("fa-at", "\uf1fa"); - faMap.put("fa-automobile", "\uf1b9"); - faMap.put("fa-backward", "\uf04a"); - faMap.put("fa-ban", "\uf05e"); - faMap.put("fa-bank", "\uf19c"); - faMap.put("fa-bar-chart", "\uf080"); - faMap.put("fa-bar-chart-o", "\uf080"); - faMap.put("fa-barcode", "\uf02a"); - faMap.put("fa-bars", "\uf0c9"); - faMap.put("fa-bed", "\uf236"); - faMap.put("fa-beer", "\uf0fc"); - faMap.put("fa-behance", "\uf1b4"); - faMap.put("fa-behance-square", "\uf1b5"); - faMap.put("fa-bell", "\uf0f3"); - faMap.put("fa-bell-o", "\uf0a2"); - faMap.put("fa-bell-slash", "\uf1f6"); - faMap.put("fa-bell-slash-o", "\uf1f7"); - faMap.put("fa-bicycle", "\uf206"); - faMap.put("fa-binoculars", "\uf1e5"); - faMap.put("fa-birthday-cake", "\uf1fd"); - faMap.put("fa-bitbucket", "\uf171"); - faMap.put("fa-bitbucket-square", "\uf172"); - faMap.put("fa-bitcoin", "\uf15a"); - faMap.put("fa-bold", "\uf032"); - faMap.put("fa-bolt", "\uf0e7"); - faMap.put("fa-bomb", "\uf1e2"); - faMap.put("fa-book", "\uf02d"); - faMap.put("fa-bookmark", "\uf02e"); - faMap.put("fa-bookmark-o", "\uf097"); - faMap.put("fa-briefcase", "\uf0b1"); - faMap.put("fa-btc", "\uf15a"); - faMap.put("fa-bug", "\uf188"); - faMap.put("fa-building", "\uf1ad"); - faMap.put("fa-building-o", "\uf0f7"); - faMap.put("fa-bullhorn", "\uf0a1"); - faMap.put("fa-bullseye", "\uf140"); - faMap.put("fa-bus", "\uf207"); - faMap.put("fa-buysellads", "\uf20d"); - faMap.put("fa-cab", "\uf1ba"); - faMap.put("fa-calculator", "\uf1ec"); - faMap.put("fa-calendar", "\uf073"); - faMap.put("fa-calendar-o", "\uf133"); - faMap.put("fa-camera", "\uf030"); - faMap.put("fa-camera-retro", "\uf083"); - faMap.put("fa-car", "\uf1b9"); - faMap.put("fa-caret-down", "\uf0d7"); - faMap.put("fa-caret-left", "\uf0d9"); - faMap.put("fa-caret-right", "\uf0da"); - faMap.put("fa-caret-square-o-down", "\uf150"); - faMap.put("fa-caret-square-o-left", "\uf191"); - faMap.put("fa-caret-square-o-right", "\uf152"); - faMap.put("fa-caret-square-o-up", "\uf151"); - faMap.put("fa-caret-up", "\uf0d8"); - faMap.put("fa-cart-arrow-down", "\uf218"); - faMap.put("fa-cart-plus", "\uf217"); - faMap.put("fa-cc", "\uf20a"); - faMap.put("fa-cc-amex", "\uf1f3"); - faMap.put("fa-cc-discover", "\uf1f2"); - faMap.put("fa-cc-mastercard", "\uf1f1"); - faMap.put("fa-cc-paypal", "\uf1f4"); - faMap.put("fa-cc-stripe", "\uf1f5"); - faMap.put("fa-cc-visa", "\uf1f0"); - faMap.put("fa-certificate", "\uf0a3"); - faMap.put("fa-chain", "\uf0c1"); - faMap.put("fa-chain-broken", "\uf127"); - faMap.put("fa-check", "\uf00c"); - faMap.put("fa-check-circle", "\uf058"); - faMap.put("fa-check-circle-o", "\uf05d"); - faMap.put("fa-check-square", "\uf14a"); - faMap.put("fa-check-square-o", "\uf046"); - faMap.put("fa-chevron-circle-down", "\uf13a"); - faMap.put("fa-chevron-circle-left", "\uf137"); - faMap.put("fa-chevron-circle-right", "\uf138"); - faMap.put("fa-chevron-circle-up", "\uf139"); - faMap.put("fa-chevron-down", "\uf078"); - faMap.put("fa-chevron-left", "\uf053"); - faMap.put("fa-chevron-right", "\uf054"); - faMap.put("fa-chevron-up", "\uf077"); - faMap.put("fa-child", "\uf1ae"); - faMap.put("fa-circle", "\uf111"); - faMap.put("fa-circle-o", "\uf10c"); - faMap.put("fa-circle-o-notch", "\uf1ce"); - faMap.put("fa-circle-thin", "\uf1db"); - faMap.put("fa-clipboard", "\uf0ea"); - faMap.put("fa-clock-o", "\uf017"); - faMap.put("fa-close", "\uf00d"); - faMap.put("fa-cloud", "\uf0c2"); - faMap.put("fa-cloud-download", "\uf0ed"); - faMap.put("fa-cloud-upload", "\uf0ee"); - faMap.put("fa-cny", "\uf157"); - faMap.put("fa-code", "\uf121"); - faMap.put("fa-code-fork", "\uf126"); - faMap.put("fa-codepen", "\uf1cb"); - faMap.put("fa-coffee", "\uf0f4"); - faMap.put("fa-cog", "\uf013"); - faMap.put("fa-cogs", "\uf085"); - faMap.put("fa-columns", "\uf0db"); - faMap.put("fa-comment", "\uf075"); - faMap.put("fa-comment-o", "\uf0e5"); - faMap.put("fa-comments", "\uf086"); - faMap.put("fa-comments-o", "\uf0e6"); - faMap.put("fa-compass", "\uf14e"); - faMap.put("fa-compress", "\uf066"); - faMap.put("fa-connectdevelop", "\uf20e"); - faMap.put("fa-copy", "\uf0c5"); - faMap.put("fa-copyright", "\uf1f9"); - faMap.put("fa-credit-card", "\uf09d"); - faMap.put("fa-crop", "\uf125"); - faMap.put("fa-crosshairs", "\uf05b"); - faMap.put("fa-css3", "\uf13c"); - faMap.put("fa-cube", "\uf1b2"); - faMap.put("fa-cubes", "\uf1b3"); - faMap.put("fa-cut", "\uf0c4"); - faMap.put("fa-cutlery", "\uf0f5"); - faMap.put("fa-dashboard", "\uf0e4"); - faMap.put("fa-dashcube", "\uf210"); - faMap.put("fa-database", "\uf1c0"); - faMap.put("fa-dedent", "\uf03b"); - faMap.put("fa-delicious", "\uf1a5"); - faMap.put("fa-desktop", "\uf108"); - faMap.put("fa-deviantart", "\uf1bd"); - faMap.put("fa-diamond", "\uf219"); - faMap.put("fa-digg", "\uf1a6"); - faMap.put("fa-dollar", "\uf155"); - faMap.put("fa-dot-circle-o", "\uf192"); - faMap.put("fa-download", "\uf019"); - faMap.put("fa-dribbble", "\uf17d"); - faMap.put("fa-dropbox", "\uf16b"); - faMap.put("fa-drupal", "\uf1a9"); - faMap.put("fa-edit", "\uf044"); - faMap.put("fa-eject", "\uf052"); - faMap.put("fa-ellipsis-h", "\uf141"); - faMap.put("fa-ellipsis-v", "\uf142"); - faMap.put("fa-empire", "\uf1d1"); - faMap.put("fa-envelope", "\uf0e0"); - faMap.put("fa-envelope-o", "\uf003"); - faMap.put("fa-envelope-square", "\uf199"); - faMap.put("fa-eraser", "\uf12d"); - faMap.put("fa-eur", "\uf153"); - faMap.put("fa-euro", "\uf153"); - faMap.put("fa-exchange", "\uf0ec"); - faMap.put("fa-exclamation", "\uf12a"); - faMap.put("fa-exclamation-circle", "\uf06a"); - faMap.put("fa-exclamation-triangle", "\uf071"); - faMap.put("fa-expand", "\uf065"); - faMap.put("fa-external-link", "\uf08e"); - faMap.put("fa-external-link-square", "\uf14c"); - faMap.put("fa-eye", "\uf06e"); - faMap.put("fa-eye-slash", "\uf070"); - faMap.put("fa-eyedropper", "\uf1fb"); - faMap.put("fa-facebook", "\uf09a"); - faMap.put("fa-facebook-f", "\uf09a"); - faMap.put("fa-facebook-official", "\uf230"); - faMap.put("fa-facebook-square", "\uf082"); - faMap.put("fa-fast-backward", "\uf049"); - faMap.put("fa-fast-forward", "\uf050"); - faMap.put("fa-fax", "\uf1ac"); - faMap.put("fa-female", "\uf182"); - faMap.put("fa-fighter-jet", "\uf0fb"); - faMap.put("fa-file", "\uf15b"); - faMap.put("fa-file-archive-o", "\uf1c6"); - faMap.put("fa-file-audio-o", "\uf1c7"); - faMap.put("fa-file-code-o", "\uf1c9"); - faMap.put("fa-file-excel-o", "\uf1c3"); - faMap.put("fa-file-image-o", "\uf1c5"); - faMap.put("fa-file-movie-o", "\uf1c8"); - faMap.put("fa-file-o", "\uf016"); - faMap.put("fa-file-pdf-o", "\uf1c1"); - faMap.put("fa-file-photo-o", "\uf1c5"); - faMap.put("fa-file-picture-o", "\uf1c5"); - faMap.put("fa-file-powerpoint-o", "\uf1c4"); - faMap.put("fa-file-sound-o", "\uf1c7"); - faMap.put("fa-file-text", "\uf15c"); - faMap.put("fa-file-text-o", "\uf0f6"); - faMap.put("fa-file-video-o", "\uf1c8"); - faMap.put("fa-file-word-o", "\uf1c2"); - faMap.put("fa-file-zip-o", "\uf1c6"); - faMap.put("fa-files-o", "\uf0c5"); - faMap.put("fa-film", "\uf008"); - faMap.put("fa-filter", "\uf0b0"); - faMap.put("fa-fire", "\uf06d"); - faMap.put("fa-fire-extinguisher", "\uf134"); - faMap.put("fa-flag", "\uf024"); - faMap.put("fa-flag-checkered", "\uf11e"); - faMap.put("fa-flag-o", "\uf11d"); - faMap.put("fa-flash", "\uf0e7"); - faMap.put("fa-flask", "\uf0c3"); - faMap.put("fa-flickr", "\uf16e"); - faMap.put("fa-floppy-o", "\uf0c7"); - faMap.put("fa-folder", "\uf07b"); - faMap.put("fa-folder-o", "\uf114"); - faMap.put("fa-folder-open", "\uf07c"); - faMap.put("fa-folder-open-o", "\uf115"); - faMap.put("fa-font", "\uf031"); - faMap.put("fa-forumbee", "\uf211"); - faMap.put("fa-forward", "\uf04e"); - faMap.put("fa-foursquare", "\uf180"); - faMap.put("fa-frown-o", "\uf119"); - faMap.put("fa-futbol-o", "\uf1e3"); - faMap.put("fa-gamepad", "\uf11b"); - faMap.put("fa-gavel", "\uf0e3"); - faMap.put("fa-gbp", "\uf154"); - faMap.put("fa-ge", "\uf1d1"); - faMap.put("fa-gear", "\uf013"); - faMap.put("fa-gears", "\uf085"); - faMap.put("fa-genderless", "\uf1db"); - faMap.put("fa-gift", "\uf06b"); - faMap.put("fa-git", "\uf1d3"); - faMap.put("fa-git-square", "\uf1d2"); - faMap.put("fa-github", "\uf09b"); - faMap.put("fa-github-alt", "\uf113"); - faMap.put("fa-github-square", "\uf092"); - faMap.put("fa-gittip", "\uf184"); - faMap.put("fa-glass", "\uf000"); - faMap.put("fa-globe", "\uf0ac"); - faMap.put("fa-google", "\uf1a0"); - faMap.put("fa-google-plus", "\uf0d5"); - faMap.put("fa-google-plus-square", "\uf0d4"); - faMap.put("fa-google-wallet", "\uf1ee"); - faMap.put("fa-graduation-cap", "\uf19d"); - faMap.put("fa-gratipay", "\uf184"); - faMap.put("fa-group", "\uf0c0"); - faMap.put("fa-h-square", "\uf0fd"); - faMap.put("fa-hacker-news", "\uf1d4"); - faMap.put("fa-hand-o-down", "\uf0a7"); - faMap.put("fa-hand-o-left", "\uf0a5"); - faMap.put("fa-hand-o-right", "\uf0a4"); - faMap.put("fa-hand-o-up", "\uf0a6"); - faMap.put("fa-hdd-o", "\uf0a0"); - faMap.put("fa-header", "\uf1dc"); - faMap.put("fa-headphones", "\uf025"); - faMap.put("fa-heart", "\uf004"); - faMap.put("fa-heart-o", "\uf08a"); - faMap.put("fa-heartbeat", "\uf21e"); - faMap.put("fa-history", "\uf1da"); - faMap.put("fa-home", "\uf015"); - faMap.put("fa-hospital-o", "\uf0f8"); - faMap.put("fa-hotel", "\uf236"); - faMap.put("fa-html5", "\uf13b"); - faMap.put("fa-ils", "\uf20b"); - faMap.put("fa-image", "\uf03e"); - faMap.put("fa-inbox", "\uf01c"); - faMap.put("fa-indent", "\uf03c"); - faMap.put("fa-info", "\uf129"); - faMap.put("fa-info-circle", "\uf05a"); - faMap.put("fa-inr", "\uf156"); - faMap.put("fa-instagram", "\uf16d"); - faMap.put("fa-institution", "\uf19c"); - faMap.put("fa-ioxhost", "\uf208"); - faMap.put("fa-italic", "\uf033"); - faMap.put("fa-joomla", "\uf1aa"); - faMap.put("fa-jpy", "\uf157"); - faMap.put("fa-jsfiddle", "\uf1cc"); - faMap.put("fa-key", "\uf084"); - faMap.put("fa-keyboard-o", "\uf11c"); - faMap.put("fa-krw", "\uf159"); - faMap.put("fa-language", "\uf1ab"); - faMap.put("fa-laptop", "\uf109"); - faMap.put("fa-lastfm", "\uf202"); - faMap.put("fa-lastfm-square", "\uf203"); - faMap.put("fa-leaf", "\uf06c"); - faMap.put("fa-leanpub", "\uf212"); - faMap.put("fa-legal", "\uf0e3"); - faMap.put("fa-lemon-o", "\uf094"); - faMap.put("fa-level-down", "\uf149"); - faMap.put("fa-level-up", "\uf148"); - faMap.put("fa-life-bouy", "\uf1cd"); - faMap.put("fa-life-buoy", "\uf1cd"); - faMap.put("fa-life-ring", "\uf1cd"); - faMap.put("fa-life-saver", "\uf1cd"); - faMap.put("fa-lightbulb-o", "\uf0eb"); - faMap.put("fa-line-chart", "\uf201"); - faMap.put("fa-link", "\uf0c1"); - faMap.put("fa-linkedin", "\uf0e1"); - faMap.put("fa-linkedin-square", "\uf08c"); - faMap.put("fa-linux", "\uf17c"); - faMap.put("fa-list", "\uf03a"); - faMap.put("fa-list-alt", "\uf022"); - faMap.put("fa-list-ol", "\uf0cb"); - faMap.put("fa-list-ul", "\uf0ca"); - faMap.put("fa-location-arrow", "\uf124"); - faMap.put("fa-lock", "\uf023"); - faMap.put("fa-long-arrow-down", "\uf175"); - faMap.put("fa-long-arrow-left", "\uf177"); - faMap.put("fa-long-arrow-right", "\uf178"); - faMap.put("fa-long-arrow-up", "\uf176"); - faMap.put("fa-magic", "\uf0d0"); - faMap.put("fa-magnet", "\uf076"); - faMap.put("fa-mail-forward", "\uf064"); - faMap.put("fa-mail-reply", "\uf112"); - faMap.put("fa-mail-reply-all", "\uf122"); - faMap.put("fa-male", "\uf183"); - faMap.put("fa-map-marker", "\uf041"); - faMap.put("fa-mars", "\uf222"); - faMap.put("fa-mars-double", "\uf227"); - faMap.put("fa-mars-stroke", "\uf229"); - faMap.put("fa-mars-stroke-h", "\uf22b"); - faMap.put("fa-mars-stroke-v", "\uf22a"); - faMap.put("fa-maxcdn", "\uf136"); - faMap.put("fa-meanpath", "\uf20c"); - faMap.put("fa-medium", "\uf23a"); - faMap.put("fa-medkit", "\uf0fa"); - faMap.put("fa-meh-o", "\uf11a"); - faMap.put("fa-mercury", "\uf223"); - faMap.put("fa-microphone", "\uf130"); - faMap.put("fa-microphone-slash", "\uf131"); - faMap.put("fa-minus", "\uf068"); - faMap.put("fa-minus-circle", "\uf056"); - faMap.put("fa-minus-square", "\uf146"); - faMap.put("fa-minus-square-o", "\uf147"); - faMap.put("fa-mobile", "\uf10b"); - faMap.put("fa-mobile-phone", "\uf10b"); - faMap.put("fa-money", "\uf0d6"); - faMap.put("fa-moon-o", "\uf186"); - faMap.put("fa-mortar-board", "\uf19d"); - faMap.put("fa-motorcycle", "\uf21c"); - faMap.put("fa-music", "\uf001"); - faMap.put("fa-navicon", "\uf0c9"); - faMap.put("fa-neuter", "\uf22c"); - faMap.put("fa-newspaper-o", "\uf1ea"); - faMap.put("fa-openid", "\uf19b"); - faMap.put("fa-outdent", "\uf03b"); - faMap.put("fa-pagelines", "\uf18c"); - faMap.put("fa-paint-brush", "\uf1fc"); - faMap.put("fa-paper-plane", "\uf1d8"); - faMap.put("fa-paper-plane-o", "\uf1d9"); - faMap.put("fa-paperclip", "\uf0c6"); - faMap.put("fa-paragraph", "\uf1dd"); - faMap.put("fa-paste", "\uf0ea"); - faMap.put("fa-pause", "\uf04c"); - faMap.put("fa-paw", "\uf1b0"); - faMap.put("fa-paypal", "\uf1ed"); - faMap.put("fa-pencil", "\uf040"); - faMap.put("fa-pencil-square", "\uf14b"); - faMap.put("fa-pencil-square-o", "\uf044"); - faMap.put("fa-phone", "\uf095"); - faMap.put("fa-phone-square", "\uf098"); - faMap.put("fa-photo", "\uf03e"); - faMap.put("fa-picture-o", "\uf03e"); - faMap.put("fa-pie-chart", "\uf200"); - faMap.put("fa-pied-piper", "\uf1a7"); - faMap.put("fa-pied-piper-alt", "\uf1a8"); - faMap.put("fa-pinterest", "\uf0d2"); - faMap.put("fa-pinterest-p", "\uf231"); - faMap.put("fa-pinterest-square", "\uf0d3"); - faMap.put("fa-plane", "\uf072"); - faMap.put("fa-play", "\uf04b"); - faMap.put("fa-play-circle", "\uf144"); - faMap.put("fa-play-circle-o", "\uf01d"); - faMap.put("fa-plug", "\uf1e6"); - faMap.put("fa-plus", "\uf067"); - faMap.put("fa-plus-circle", "\uf055"); - faMap.put("fa-plus-square", "\uf0fe"); - faMap.put("fa-plus-square-o", "\uf196"); - faMap.put("fa-power-off", "\uf011"); - faMap.put("fa-print", "\uf02f"); - faMap.put("fa-puzzle-piece", "\uf12e"); - faMap.put("fa-qq", "\uf1d6"); - faMap.put("fa-qrcode", "\uf029"); - faMap.put("fa-question", "\uf128"); - faMap.put("fa-question-circle", "\uf059"); - faMap.put("fa-quote-left", "\uf10d"); - faMap.put("fa-quote-right", "\uf10e"); - faMap.put("fa-ra", "\uf1d0"); - faMap.put("fa-random", "\uf074"); - faMap.put("fa-rebel", "\uf1d0"); - faMap.put("fa-recycle", "\uf1b8"); - faMap.put("fa-reddit", "\uf1a1"); - faMap.put("fa-reddit-square", "\uf1a2"); - faMap.put("fa-refresh", "\uf021"); - faMap.put("fa-remove", "\uf00d"); - faMap.put("fa-renren", "\uf18b"); - faMap.put("fa-reorder", "\uf0c9"); - faMap.put("fa-repeat", "\uf01e"); - faMap.put("fa-reply", "\uf112"); - faMap.put("fa-reply-all", "\uf122"); - faMap.put("fa-retweet", "\uf079"); - faMap.put("fa-rmb", "\uf157"); - faMap.put("fa-road", "\uf018"); - faMap.put("fa-rocket", "\uf135"); - faMap.put("fa-rotate-left", "\uf0e2"); - faMap.put("fa-rotate-right", "\uf01e"); - faMap.put("fa-rouble", "\uf158"); - faMap.put("fa-rss", "\uf09e"); - faMap.put("fa-rss-square", "\uf143"); - faMap.put("fa-rub", "\uf158"); - faMap.put("fa-ruble", "\uf158"); - faMap.put("fa-rupee", "\uf156"); - faMap.put("fa-save", "\uf0c7"); - faMap.put("fa-scissors", "\uf0c4"); - faMap.put("fa-search", "\uf002"); - faMap.put("fa-search-minus", "\uf010"); - faMap.put("fa-search-plus", "\uf00e"); - faMap.put("fa-sellsy", "\uf213"); - faMap.put("fa-send", "\uf1d8"); - faMap.put("fa-send-o", "\uf1d9"); - faMap.put("fa-server", "\uf233"); - faMap.put("fa-share", "\uf064"); - faMap.put("fa-share-alt", "\uf1e0"); - faMap.put("fa-share-alt-square", "\uf1e1"); - faMap.put("fa-share-square", "\uf14d"); - faMap.put("fa-share-square-o", "\uf045"); - faMap.put("fa-shekel", "\uf20b"); - faMap.put("fa-sheqel", "\uf20b"); - faMap.put("fa-shield", "\uf132"); - faMap.put("fa-ship", "\uf21a"); - faMap.put("fa-shirtsinbulk", "\uf214"); - faMap.put("fa-shopping-cart", "\uf07a"); - faMap.put("fa-sign-in", "\uf090"); - faMap.put("fa-sign-out", "\uf08b"); - faMap.put("fa-signal", "\uf012"); - faMap.put("fa-simplybuilt", "\uf215"); - faMap.put("fa-sitemap", "\uf0e8"); - faMap.put("fa-skyatlas", "\uf216"); - faMap.put("fa-skype", "\uf17e"); - faMap.put("fa-slack", "\uf198"); - faMap.put("fa-sliders", "\uf1de"); - faMap.put("fa-slideshare", "\uf1e7"); - faMap.put("fa-smile-o", "\uf118"); - faMap.put("fa-soccer-ball-o", "\uf1e3"); - faMap.put("fa-sort", "\uf0dc"); - faMap.put("fa-sort-alpha-asc", "\uf15d"); - faMap.put("fa-sort-alpha-desc", "\uf15e"); - faMap.put("fa-sort-amount-asc", "\uf160"); - faMap.put("fa-sort-amount-desc", "\uf161"); - faMap.put("fa-sort-asc", "\uf0de"); - faMap.put("fa-sort-desc", "\uf0dd"); - faMap.put("fa-sort-down", "\uf0dd"); - faMap.put("fa-sort-numeric-asc", "\uf162"); - faMap.put("fa-sort-numeric-desc", "\uf163"); - faMap.put("fa-sort-up", "\uf0de"); - faMap.put("fa-soundcloud", "\uf1be"); - faMap.put("fa-space-shuttle", "\uf197"); - faMap.put("fa-spinner", "\uf110"); - faMap.put("fa-spoon", "\uf1b1"); - faMap.put("fa-spotify", "\uf1bc"); - faMap.put("fa-square", "\uf0c8"); - faMap.put("fa-square-o", "\uf096"); - faMap.put("fa-stack-exchange", "\uf18d"); - faMap.put("fa-stack-overflow", "\uf16c"); - faMap.put("fa-star", "\uf005"); - faMap.put("fa-star-half", "\uf089"); - faMap.put("fa-star-half-empty", "\uf123"); - faMap.put("fa-star-half-full", "\uf123"); - faMap.put("fa-star-half-o", "\uf123"); - faMap.put("fa-star-o", "\uf006"); - faMap.put("fa-steam", "\uf1b6"); - faMap.put("fa-steam-square", "\uf1b7"); - faMap.put("fa-step-backward", "\uf048"); - faMap.put("fa-step-forward", "\uf051"); - faMap.put("fa-stethoscope", "\uf0f1"); - faMap.put("fa-stop", "\uf04d"); - faMap.put("fa-street-view", "\uf21d"); - faMap.put("fa-strikethrough", "\uf0cc"); - faMap.put("fa-stumbleupon", "\uf1a4"); - faMap.put("fa-stumbleupon-circle", "\uf1a3"); - faMap.put("fa-subscript", "\uf12c"); - faMap.put("fa-subway", "\uf239"); - faMap.put("fa-suitcase", "\uf0f2"); - faMap.put("fa-sun-o", "\uf185"); - faMap.put("fa-superscript", "\uf12b"); - faMap.put("fa-support", "\uf1cd"); - faMap.put("fa-table", "\uf0ce"); - faMap.put("fa-tablet", "\uf10a"); - faMap.put("fa-tachometer", "\uf0e4"); - faMap.put("fa-tag", "\uf02b"); - faMap.put("fa-tags", "\uf02c"); - faMap.put("fa-tasks", "\uf0ae"); - faMap.put("fa-taxi", "\uf1ba"); - faMap.put("fa-tencent-weibo", "\uf1d5"); - faMap.put("fa-terminal", "\uf120"); - faMap.put("fa-text-height", "\uf034"); - faMap.put("fa-text-width", "\uf035"); - faMap.put("fa-th", "\uf00a"); - faMap.put("fa-th-large", "\uf009"); - faMap.put("fa-th-list", "\uf00b"); - faMap.put("fa-thumb-tack", "\uf08d"); - faMap.put("fa-thumbs-down", "\uf165"); - faMap.put("fa-thumbs-o-down", "\uf088"); - faMap.put("fa-thumbs-o-up", "\uf087"); - faMap.put("fa-thumbs-up", "\uf164"); - faMap.put("fa-ticket", "\uf145"); - faMap.put("fa-times", "\uf00d"); - faMap.put("fa-times-circle", "\uf057"); - faMap.put("fa-times-circle-o", "\uf05c"); - faMap.put("fa-tint", "\uf043"); - faMap.put("fa-toggle-down", "\uf150"); - faMap.put("fa-toggle-left", "\uf191"); - faMap.put("fa-toggle-off", "\uf204"); - faMap.put("fa-toggle-on", "\uf205"); - faMap.put("fa-toggle-right", "\uf152"); - faMap.put("fa-toggle-up", "\uf151"); - faMap.put("fa-train", "\uf238"); - faMap.put("fa-transgender", "\uf224"); - faMap.put("fa-transgender-alt", "\uf225"); - faMap.put("fa-trash", "\uf1f8"); - faMap.put("fa-trash-o", "\uf014"); - faMap.put("fa-tree", "\uf1bb"); - faMap.put("fa-trello", "\uf181"); - faMap.put("fa-trophy", "\uf091"); - faMap.put("fa-truck", "\uf0d1"); - faMap.put("fa-try", "\uf195"); - faMap.put("fa-tty", "\uf1e4"); - faMap.put("fa-tumblr", "\uf173"); - faMap.put("fa-tumblr-square", "\uf174"); - faMap.put("fa-turkish-lira", "\uf195"); - faMap.put("fa-twitch", "\uf1e8"); - faMap.put("fa-twitter", "\uf099"); - faMap.put("fa-twitter-square", "\uf081"); - faMap.put("fa-umbrella", "\uf0e9"); - faMap.put("fa-underline", "\uf0cd"); - faMap.put("fa-undo", "\uf0e2"); - faMap.put("fa-university", "\uf19c"); - faMap.put("fa-unlink", "\uf127"); - faMap.put("fa-unlock", "\uf09c"); - faMap.put("fa-unlock-alt", "\uf13e"); - faMap.put("fa-unsorted", "\uf0dc"); - faMap.put("fa-upload", "\uf093"); - faMap.put("fa-usd", "\uf155"); - faMap.put("fa-user", "\uf007"); - faMap.put("fa-user-md", "\uf0f0"); - faMap.put("fa-user-plus", "\uf234"); - faMap.put("fa-user-secret", "\uf21b"); - faMap.put("fa-user-times", "\uf235"); - faMap.put("fa-users", "\uf0c0"); - faMap.put("fa-venus", "\uf221"); - faMap.put("fa-venus-double", "\uf226"); - faMap.put("fa-venus-mars", "\uf228"); - faMap.put("fa-viacoin", "\uf237"); - faMap.put("fa-video-camera", "\uf03d"); - faMap.put("fa-vimeo-square", "\uf194"); - faMap.put("fa-vine", "\uf1ca"); - faMap.put("fa-vk", "\uf189"); - faMap.put("fa-volume-down", "\uf027"); - faMap.put("fa-volume-off", "\uf026"); - faMap.put("fa-volume-up", "\uf028"); - faMap.put("fa-warning", "\uf071"); - faMap.put("fa-wechat", "\uf1d7"); - faMap.put("fa-weibo", "\uf18a"); - faMap.put("fa-weixin", "\uf1d7"); - faMap.put("fa-whatsapp", "\uf232"); - faMap.put("fa-wheelchair", "\uf193"); - faMap.put("fa-wifi", "\uf1eb"); - faMap.put("fa-windows", "\uf17a"); - faMap.put("fa-won", "\uf159"); - faMap.put("fa-wordpress", "\uf19a"); - faMap.put("fa-wrench", "\uf0ad"); - faMap.put("fa-xing", "\uf168"); - faMap.put("fa-xing-square", "\uf169"); - faMap.put("fa-yahoo", "\uf19e"); - faMap.put("fa-yelp", "\uf1e9"); - faMap.put("fa-yen", "\uf157"); - faMap.put("fa-youtube", "\uf167"); - faMap.put("fa-youtube-play", "\uf16a"); - faMap.put("fa-youtube-square", "\uf166"); - } - - public static String getUnicode(String iconCode) { - String unicode = faMap.get(iconCode); - return (unicode == null) ? faMap.get(UNKNOWN_CODE) : unicode; - } - - public static Typeface getFont(Context context) { - if (font == null) { - try { - font = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf"); - } catch (Exception e) { - Log.e("BButton", "Could not get typeface because " + e.getMessage()); - font = Typeface.DEFAULT; - } - } - return font; - } - -} diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java deleted file mode 100644 index a6ffef9..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.beardedhen.androidbootstrap; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.view.animation.AlphaAnimation; -import android.view.animation.Animation; -import android.view.animation.LinearInterpolator; -import android.view.animation.RotateAnimation; -import android.widget.TextView; - -public class FontAwesomeText extends TextView { - - public enum AnimationSpeed { - FAST(500, 200), - MEDIUM(1000, 500), - SLOW(2000, 1000); - - private final long rotateDuration; - private final long flashDuration; - - private AnimationSpeed(long rotateDuration, long flashDuration) { - this.rotateDuration = rotateDuration; - this.flashDuration = flashDuration; - } - - public long getRotateDuration() { - return rotateDuration; - } - - public long getFlashDuration() { - return flashDuration; - } - } - - public FontAwesomeText(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - initialise(attrs); - } - - public FontAwesomeText(Context context, AttributeSet attrs) { - super(context, attrs); - initialise(attrs); - } - - public FontAwesomeText(Context context) { - super(context); - initialise(null); - } - - private void initialise(AttributeSet attrs) { - - float fontSize = FontAwesome.DEFAULT_FONT_SIZE; - String icon = ""; - - TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.FontAwesomeText); - - try { - if (a != null) { - // icon - icon = a.getString(R.styleable.FontAwesomeText_fa_icon); - icon = (icon == null) ? "" : icon; - } - } finally { - if (a != null) { - a.recycle(); - } - } - - if (!isInEditMode()) { - setIcon(icon); - this.setTypeface(FontAwesome.getFont(getContext())); - } - } - - /** - * Used to start flashing a FontAwesomeText item - * - * @param context the current applications context - * @param forever whether the item should flash repeatedly or just once - * @param speed how fast the item should flash, chose between FontAwesomeText.AnimationSpeed.SLOW / - * FontAwesomeText.AnimationSpeed.MEDIUM / FontAwesomeText.AnimationSpeed.FAST - */ - public void startFlashing(Context context, boolean forever, AnimationSpeed speed) { - Animation fadeIn = new AlphaAnimation(0, 1); - - //set up extra variables - fadeIn.setDuration(50); - fadeIn.setRepeatMode(Animation.REVERSE); - - //default repeat count is 0, however if user wants, set it up to be infinite - fadeIn.setRepeatCount(0); - if (forever) { - fadeIn.setRepeatCount(Animation.INFINITE); - } - - fadeIn.setStartOffset(speed.getFlashDuration()); - - //set the new animation to a final animation - final Animation animation = fadeIn; - - //run the animation - used to work correctly on older devices - this.postDelayed(new Runnable() { - @Override - public void run() { - startAnimation(animation); - } - }, 100); - } - - /** - * Used to start rotating a FontAwesomeText item - * - * @param context the current applications context - * @param clockwise true for clockwise, false for anti clockwise spinning - * @param speed how fast the item should flash, chose between FontAwesomeText.AnimationSpeed.SLOW / - * FontAwesomeText.AnimationSpeed.MEDIUM / FontAwesomeText.AnimationSpeed.FAST - */ - public void startRotate(Context context, boolean clockwise, AnimationSpeed speed) { - Animation rotate; - - //set up the rotation animation - if (clockwise) { - rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); - } - else { - rotate = new RotateAnimation(360, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); - } - - //set up some extra variables - rotate.setRepeatCount(Animation.INFINITE); - rotate.setInterpolator(new LinearInterpolator()); - rotate.setStartOffset(0); - rotate.setRepeatMode(Animation.RESTART); - rotate.setDuration(speed.getRotateDuration()); - - //send the new animation to a final animation - final Animation animation = rotate; - - //run the animation - used to work correctly on older devices - this.postDelayed(new Runnable() { - @Override - public void run() { - startAnimation(animation); - } - }, 100); - } - - /** - * Used to stop animating any FontAwesomeText item - */ - public void stopAnimation() { - //stop the animation - this.clearAnimation(); - } - - /** - * Used to set the icon for a FontAwesomeText item - * - * @param faIcon - String value for the icon as per http://fortawesome.github.io/Font-Awesome/cheatsheet/ - */ - public void setIcon(String faIcon) { - this.setText(FontAwesome.getUnicode(faIcon)); - } - -} diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/utils/AutoResizeTextView.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/utils/AutoResizeTextView.java deleted file mode 100644 index 379ab5f..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/utils/AutoResizeTextView.java +++ /dev/null @@ -1,304 +0,0 @@ -package com.beardedhen.androidbootstrap.utils; - -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.Resources; -import android.graphics.RectF; -import android.os.Build; -import android.text.Layout.Alignment; -import android.text.StaticLayout; -import android.text.TextPaint; -import android.util.AttributeSet; -import android.util.SparseIntArray; -import android.util.TypedValue; -import android.widget.TextView; - -/** - * Code from user M-WaJeEh on StackOverflow at - * http://stackoverflow.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds/17782522#17782522 - */ - -public class AutoResizeTextView extends TextView { - private interface SizeTester { - /** - * @param suggestedSize Size of text to be tested - * @param availableSpace available space in which text must fit - * @return an integer < 0 if after applying {@code suggestedSize} to - * text, it takes less space than {@code availableSpace}, > 0 - * otherwise - */ - public int onTestSize(int suggestedSize, RectF availableSpace); - } - - private final RectF mTextRect = new RectF(); - - private RectF mAvailableSpaceRect; - - private SparseIntArray mTextCachedSizes; - - private TextPaint mPaint; - - private float mMaxTextSize; - - private float mSpacingMult = 1.0f; - - private float mSpacingAdd = 0.0f; - - private float mMinTextSize = 20; - - private int mWidthLimit; - - private static final int NO_LINE_LIMIT = -1; - private int mMaxLines; - - private boolean mEnableSizeCache = true; - private boolean mInitialized; - - public AutoResizeTextView(Context context) { - super(context); - initialize(); - } - - public AutoResizeTextView(Context context, AttributeSet attrs) { - super(context, attrs); - initialize(); - } - - public AutoResizeTextView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - initialize(); - } - - private void initialize() { - mPaint = new TextPaint(getPaint()); - mMaxTextSize = getTextSize(); - mAvailableSpaceRect = new RectF(); - mTextCachedSizes = new SparseIntArray(); - if (mMaxLines == 0) { - // no value was assigned during construction - mMaxLines = NO_LINE_LIMIT; - } - mInitialized = true; - } - - @Override - public void setText(final CharSequence text, BufferType type) { - super.setText(text, type); - adjustTextSize(text.toString()); - } - - @Override - public void setTextSize(float size) { - mMaxTextSize = size; - mTextCachedSizes.clear(); - adjustTextSize(getText().toString()); - } - - @Override - public void setMaxLines(int maxlines) { - super.setMaxLines(maxlines); - mMaxLines = maxlines; - reAdjust(); - } - - public int getMaxLines() { - return mMaxLines; - } - - @Override - public void setSingleLine() { - super.setSingleLine(); - mMaxLines = 1; - reAdjust(); - } - - @Override - public void setSingleLine(boolean singleLine) { - super.setSingleLine(singleLine); - if (singleLine) { - mMaxLines = 1; - } - else { - mMaxLines = NO_LINE_LIMIT; - } - reAdjust(); - } - - @Override - public void setLines(int lines) { - super.setLines(lines); - mMaxLines = lines; - reAdjust(); - } - - @Override - public void setTextSize(int unit, float size) { - Context c = getContext(); - Resources r; - - if (c == null) { - r = Resources.getSystem(); - } - else { - r = c.getResources(); - } - mMaxTextSize = TypedValue.applyDimension(unit, size, - r.getDisplayMetrics()); - mTextCachedSizes.clear(); - adjustTextSize(getText().toString()); - } - - @Override - public void setLineSpacing(float add, float mult) { - super.setLineSpacing(add, mult); - mSpacingMult = mult; - mSpacingAdd = add; - } - - /** - * Set the lower text size limit and invalidate the view - * - * @param minTextSize minimum text size desired - */ - public void setMinTextSize(float minTextSize) { - mMinTextSize = minTextSize; - reAdjust(); - } - - private void reAdjust() { - adjustTextSize(getText().toString()); - } - - private void adjustTextSize(String string) { - if (!mInitialized) { - return; - } - int startSize = (int) mMinTextSize; - int heightLimit = getMeasuredHeight() - getCompoundPaddingBottom() - - getCompoundPaddingTop(); - mWidthLimit = getMeasuredWidth() - getCompoundPaddingLeft() - - getCompoundPaddingRight(); - mAvailableSpaceRect.right = mWidthLimit; - mAvailableSpaceRect.bottom = heightLimit; - super.setTextSize( - TypedValue.COMPLEX_UNIT_PX, - efficientTextSizeSearch(startSize, (int) mMaxTextSize, - mSizeTester, mAvailableSpaceRect)); - } - - private final SizeTester mSizeTester = new SizeTester() { - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - @Override - public int onTestSize(int suggestedSize, RectF availableSPace) { - mPaint.setTextSize(suggestedSize); - String text = getText().toString(); - boolean singleline = getMaxLines() == 1; - if (singleline) { - mTextRect.bottom = mPaint.getFontSpacing(); - mTextRect.right = mPaint.measureText(text); - } - else { - StaticLayout layout = new StaticLayout(text, mPaint, - mWidthLimit, Alignment.ALIGN_NORMAL, mSpacingMult, - mSpacingAdd, true); - // return early if we have more lines - if (getMaxLines() != NO_LINE_LIMIT - && layout.getLineCount() > getMaxLines()) { - return 1; - } - mTextRect.bottom = layout.getHeight(); - int maxWidth = -1; - for (int i = 0; i < layout.getLineCount(); i++) { - if (maxWidth < layout.getLineWidth(i)) { - maxWidth = (int) layout.getLineWidth(i); - } - } - mTextRect.right = maxWidth; - } - - mTextRect.offsetTo(0, 0); - if (availableSPace.contains(mTextRect)) { - // may be too small, don't worry we will find the best match - return -1; - } - else { - // too big - return 1; - } - } - }; - - /** - * Enables or disables size caching, enabling it will improve performance - * where you are animating a value inside TextView. This stores the font - * size against getText().length() Be careful though while enabling it as 0 - * takes more space than 1 on some fonts and so on. - * - * @param enable enable font size caching - */ - public void enableSizeCache(boolean enable) { - mEnableSizeCache = enable; - mTextCachedSizes.clear(); - adjustTextSize(getText().toString()); - } - - private int efficientTextSizeSearch(int start, int end, - SizeTester sizeTester, RectF availableSpace) { - if (!mEnableSizeCache) { - return binarySearch(start, end, sizeTester, availableSpace); - } - String text = getText().toString(); - int key = text == null ? 0 : text.length(); - int size = mTextCachedSizes.get(key); - if (size != 0) { - return size; - } - size = binarySearch(start, end, sizeTester, availableSpace); - mTextCachedSizes.put(key, size); - return size; - } - - private static int binarySearch(int start, int end, SizeTester sizeTester, - RectF availableSpace) { - int lastBest = start; - int lo = start; - int hi = end - 1; - int mid = 0; - while (lo <= hi) { - mid = (lo + hi) >>> 1; - int midValCmp = sizeTester.onTestSize(mid, availableSpace); - if (midValCmp < 0) { - lastBest = lo; - lo = mid + 1; - } - else if (midValCmp > 0) { - hi = mid - 1; - lastBest = hi; - } - else { - return mid; - } - } - // make sure to return last best - // this is what should always be returned - return lastBest; - - } - - @Override - protected void onTextChanged(final CharSequence text, final int start, - final int before, final int after) { - super.onTextChanged(text, start, before, after); - reAdjust(); - } - - @Override - protected void onSizeChanged(int width, int height, int oldwidth, - int oldheight) { - mTextCachedSizes.clear(); - super.onSizeChanged(width, height, oldwidth, oldheight); - if (width != oldwidth || height != oldheight) { - reAdjust(); - } - } -} diff --git a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/utils/ImageUtils.java b/AndroidBootstrap/src/com/beardedhen/androidbootstrap/utils/ImageUtils.java deleted file mode 100644 index ce69f49..0000000 --- a/AndroidBootstrap/src/com/beardedhen/androidbootstrap/utils/ImageUtils.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.beardedhen.androidbootstrap.utils; - - -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.PorterDuff.Mode; -import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; -import android.graphics.RectF; - -public class ImageUtils { - - public static Bitmap getCircleBitmap(Bitmap bitmap) { - return getCircleBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight()); - } - - public static Bitmap getCircleBitmap(Bitmap bitmap, int width, int height) { - Bitmap croppedBitmap = scaleCenterCrop(bitmap, width, height); - Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888); - Canvas canvas = new Canvas(output); - - final int color = 0xff424242; - final Paint paint = new Paint(); - - final Rect rect = new Rect(0, 0, width, height); - - paint.setAntiAlias(true); - canvas.drawARGB(0, 0, 0, 0); - paint.setColor(color); - - int radius = (width > height) ? height : width; - radius /= 2; - - canvas.drawCircle(width / 2, height / 2, radius, paint); - paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); - canvas.drawBitmap(croppedBitmap, rect, rect, paint); - - return output; - } - - public static Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) { - int sourceWidth = source.getWidth(); - int sourceHeight = source.getHeight(); - - float xScale = (float) newWidth / sourceWidth; - float yScale = (float) newHeight / sourceHeight; - float scale = Math.max(xScale, yScale); - - float scaledWidth = scale * sourceWidth; - float scaledHeight = scale * sourceHeight; - - float left = (newWidth - scaledWidth) / 2; - float top = (newHeight - scaledHeight) / 2; - - RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight); - - Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig()); - Canvas canvas = new Canvas(dest); - canvas.drawBitmap(source, null, targetRect, null); - - return dest; - } -} \ No newline at end of file diff --git a/AndroidBootstrap/src/main/AndroidManifest.xml b/AndroidBootstrap/src/main/AndroidManifest.xml new file mode 100644 index 0000000..06fe873 --- /dev/null +++ b/AndroidBootstrap/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/fontawesome-webfont.ttf b/AndroidBootstrap/src/main/assets/fontawesome-webfont-v440.ttf similarity index 81% rename from fontawesome-webfont.ttf rename to AndroidBootstrap/src/main/assets/fontawesome-webfont-v440.ttf index ed9372f..d7994e1 100644 Binary files a/fontawesome-webfont.ttf and b/AndroidBootstrap/src/main/assets/fontawesome-webfont-v440.ttf differ diff --git a/AndroidBootstrap/src/main/assets/typicons-v207.ttf b/AndroidBootstrap/src/main/assets/typicons-v207.ttf new file mode 100755 index 0000000..f7df94b Binary files /dev/null and b/AndroidBootstrap/src/main/assets/typicons-v207.ttf differ diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/AwesomeTextView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/AwesomeTextView.java new file mode 100644 index 0000000..f7b437e --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/AwesomeTextView.java @@ -0,0 +1,256 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.LinearInterpolator; +import android.view.animation.RotateAnimation; +import android.widget.TextView; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.view.BootstrapBrandView; +import com.beardedhen.androidbootstrap.api.view.BootstrapTextView; +import com.beardedhen.androidbootstrap.font.FontAwesome; +import com.beardedhen.androidbootstrap.font.IconSet; +import com.beardedhen.androidbootstrap.font.Typicon; + +import java.io.Serializable; + +/** + * This class extends the default Android TextView to supply Bootstrap behaviour. The text color + * can be set by changing the BootstrapBrand, and scalable Typeface icons can be interspersed with + * regular text, using the BootstrapText spannable. + */ +public class AwesomeTextView extends TextView implements BootstrapTextView, BootstrapBrandView { + + private static final String TAG = "com.beardedhen.androidbootstrap.AwesomeTextView"; + + private BootstrapText bootstrapText; + private BootstrapBrand bootstrapBrand; + + public enum AnimationSpeed { + FAST(500, 200), + MEDIUM(1000, 500), + SLOW(2000, 1000); + + private final long rotateDuration; + private final long flashDuration; + + AnimationSpeed(long rotateDuration, long flashDuration) { + this.rotateDuration = rotateDuration; + this.flashDuration = flashDuration; + } + + public long getRotateDuration() { + return rotateDuration; + } + + public long getFlashDuration() { + return flashDuration; + } + } + + public AwesomeTextView(Context context) { + super(context); + initialise(null); + } + + public AwesomeTextView(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public AwesomeTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + private void initialise(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.AwesomeTextView); + String markdownText; + + try { + int typeOrdinal = a.getInt(R.styleable.AwesomeTextView_bootstrapBrand, -1); + int faIconOrdinal = a.getInt(R.styleable.AwesomeTextView_fontAwesomeIcon, -1); + int typiconOrdinal = a.getInt(R.styleable.AwesomeTextView_typicon, -1); + + this.bootstrapBrand = DefaultBootstrapBrand.fromAttributeValue(typeOrdinal); + + if (typiconOrdinal != -1) { + final IconSet typicon = TypefaceProvider.retrieveRegisteredIconSet(Typicon.FONT_PATH); + setIcon(typicon.iconCodeForAttrIndex(typiconOrdinal), typicon); + } + if (faIconOrdinal != -1) { + final IconSet fontAwesome = TypefaceProvider.retrieveRegisteredIconSet(FontAwesome.FONT_PATH); + setIcon(fontAwesome.iconCodeForAttrIndex(faIconOrdinal), fontAwesome); + } + + markdownText = a.getString(R.styleable.AwesomeTextView_bootstrapText); + } + finally { + a.recycle(); + } + setClickable(true); // allows view to reach android:state_pressed + setGravity(Gravity.CENTER); + + if (markdownText != null) { + setMarkdownText(markdownText); + } + updateBootstrapState(); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + bundle.putSerializable(BootstrapTextView.KEY, bootstrapText); + bundle.putSerializable(BootstrapBrand.KEY, bootstrapBrand); + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + + Serializable text = bundle.getSerializable(BootstrapTextView.KEY); + Serializable brand = bundle.getSerializable(BootstrapBrand.KEY); + + if (brand instanceof BootstrapBrand) { + bootstrapBrand = (BootstrapBrand) brand; + } + if (text instanceof BootstrapText) { + bootstrapText = (BootstrapText) text; + } + state = bundle.getParcelable(TAG); + } + super.onRestoreInstanceState(state); + updateBootstrapState(); + } + + /** + * Starts a Flashing Animation on the AwesomeTextView + * + * @param forever whether the animation should be infinite or play once + * @param speed how fast the item should flash + */ + public void startFlashing(boolean forever, AnimationSpeed speed) { + Animation fadeIn = new AlphaAnimation(0, 1); + + //set up extra variables + fadeIn.setDuration(50); + fadeIn.setRepeatMode(Animation.REVERSE); + + //default repeat count is 0, however if user wants, set it up to be infinite + fadeIn.setRepeatCount(0); + if (forever) { + fadeIn.setRepeatCount(Animation.INFINITE); + } + + fadeIn.setStartOffset(speed.getFlashDuration()); + startAnimation(fadeIn); + } + + /** + * Starts a rotating animation on the AwesomeTextView + * + * @param clockwise true for clockwise, false for anti clockwise spinning + * @param speed how fast the item should rotate + */ + public void startRotate(boolean clockwise, AnimationSpeed speed) { + Animation rotate; + + //set up the rotation animation + if (clockwise) { + rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + } + else { + rotate = new RotateAnimation(360, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + } + + //set up some extra variables + rotate.setRepeatCount(Animation.INFINITE); + rotate.setInterpolator(new LinearInterpolator()); + rotate.setStartOffset(0); + rotate.setRepeatMode(Animation.RESTART); + rotate.setDuration(speed.getRotateDuration()); + startAnimation(rotate); + } + + /** + * Sets the text to display a FontIcon, replacing whatever text is already present. + * Used to set the text to display a FontAwesome Icon. + * + * @param iconSet - An implementation of FontIcon + */ + public void setIcon(CharSequence iconCode, IconSet iconSet) { + setBootstrapText(new BootstrapText.Builder(getContext()).addIcon(iconCode, iconSet).build()); + } + + /** + * Sets the text to display a FontIcon, replacing whatever text is already present. + * Used to set the text to display a FontAwesome Icon. + * + * @param iconCode the fontawesome icon code e.g. "fa_play" + */ + public void setFontAwesomeIcon(@FontAwesome.Icon CharSequence iconCode) { + setBootstrapText(new BootstrapText.Builder(getContext()).addFontAwesomeIcon(iconCode).build()); + } + + /** + * Sets the text to display a FontIcon, replacing whatever text is already present. + * Used to set the text to display a Typicon. + * + * @param iconCode the typicon icon code e.g. "ty_adjust_brightness" + */ + public void setTypicon(@Typicon.Icon CharSequence iconCode) { + setBootstrapText(new BootstrapText.Builder(getContext()).addTypicon(iconCode).build()); + } + + @Override public void setMarkdownText(String text) { + setBootstrapText(IconResolver.resolveMarkdown(getContext(), text)); + } + + protected void updateBootstrapState() { + if (bootstrapText != null) { + setText(bootstrapText); + } + if (bootstrapBrand != null) { + setTextColor(bootstrapBrand.defaultFill(getContext())); + } + } + + /* + * Getters/Setters + */ + + @Override public void setBootstrapText(BootstrapText bootstrapText) { + this.bootstrapText = bootstrapText; + updateBootstrapState(); + } + + @Nullable @Override public BootstrapText getBootstrapText() { + return bootstrapText; + } + + @Override public void setBootstrapBrand(@NonNull BootstrapBrand bootstrapBrand) { + this.bootstrapBrand = bootstrapBrand; + updateBootstrapState(); + } + + @NonNull @Override public BootstrapBrand getBootstrapBrand() { + return bootstrapBrand; + } + + @Override public void setText(CharSequence text, BufferType type) { + super.setText(text, type); + bootstrapText = null; + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapBaseThumbnail.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapBaseThumbnail.java new file mode 100644 index 0000000..0643a37 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapBaseThumbnail.java @@ -0,0 +1,227 @@ +package com.beardedhen.androidbootstrap; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.AttributeSet; +import android.widget.ImageView; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; +import com.beardedhen.androidbootstrap.api.view.BootstrapBrandView; +import com.beardedhen.androidbootstrap.api.view.BootstrapSizeView; +import com.beardedhen.androidbootstrap.api.view.BorderView; +import com.beardedhen.androidbootstrap.utils.ColorUtils; +import com.beardedhen.androidbootstrap.utils.DimenUtils; + +import java.io.Serializable; + +import static android.widget.ImageView.ScaleType.CENTER_CROP; + +/** + * Parent class of Circle & Square Thumbnails - contains boilerplate code required to get + * BootstrapBrand & borders working via getters/setters. Also overrides ImageView so that only + * CENTER_CROP is allowed, and a callback is fired whenever the image source changes. + */ +abstract class BootstrapBaseThumbnail extends ImageView implements BootstrapBrandView, + BorderView, BootstrapSizeView { + + private static final String TAG = "com.beardedhen.androidbootstrap.BootstrapBaseThumbnail"; + + protected BootstrapBrand bootstrapBrand; + protected boolean hasBorder; + + protected float baselineBorderWidth; + protected float baselineOuterBorderWidth; + + protected float bootstrapSize; + + protected Bitmap sourceBitmap; + protected final Paint placeholderPaint = new Paint(); + protected final Paint borderPaint = new Paint(); + protected final Paint imagePaint = new Paint(); + + public BootstrapBaseThumbnail(Context context) { + super(context); + initialise(null); + } + + public BootstrapBaseThumbnail(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapBaseThumbnail(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + protected void initialise(AttributeSet attrs) { + this.baselineOuterBorderWidth = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bthumbnail_outer_stroke); + this.baselineBorderWidth = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bthumbnail_default_border); + setupPaints(); + updateImageState(); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + + bundle.putSerializable(BootstrapBrandView.KEY, bootstrapBrand); + bundle.putBoolean(BorderView.KEY_DISPLAYED, hasBorder); + bundle.putFloat(BootstrapSizeView.KEY, bootstrapSize); + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + + this.hasBorder = bundle.getBoolean(BorderView.KEY_DISPLAYED); + this.bootstrapSize = bundle.getFloat(BootstrapSizeView.KEY); + + Serializable brand = bundle.getSerializable(BootstrapBrandView.KEY); + + if (brand instanceof BootstrapBrand) { + this.bootstrapBrand = (BootstrapBrand) brand; + } + state = bundle.getParcelable(TAG); + } + super.onRestoreInstanceState(state); + updateImageState(); + } + + private void setupPaints() { + int strokeColor = bootstrapBrand.defaultEdge(getContext()); + int placeholderColor = ColorUtils.resolveColor(R.color.bootstrap_gray_light, getContext()); + + borderPaint.setColor(strokeColor); + borderPaint.setAntiAlias(true); + borderPaint.setStrokeWidth(baselineBorderWidth); + borderPaint.setStyle(Paint.Style.STROKE); + imagePaint.setAntiAlias(true); + + placeholderPaint.setColor(placeholderColor); + placeholderPaint.setAntiAlias(true); + placeholderPaint.setStyle(Paint.Style.FILL); + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + updateImageState(); + } + + @Override public void setScaleType(ScaleType scaleType) { + if (scaleType != CENTER_CROP) { + throw new IllegalArgumentException("Only CenterCrop is currently supported by this view"); + } + else { + super.setScaleType(scaleType); + } + } + + @Override public ScaleType getScaleType() { + return CENTER_CROP; + } + + /** + * @return the original Bitmap source that will be drawn as a circular image + */ + @Nullable private Bitmap getBitmapForView() { + Drawable drawable = getDrawable(); + + if (drawable == null) { + return null; + } + + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable) drawable).getBitmap(); + } + else { + int w = drawable.getIntrinsicWidth(); + int h = drawable.getIntrinsicHeight(); + + Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + drawable.draw(new Canvas(bm)); + return bm; + } + } + + /* + * Image setter overrides + */ + + @Override public void setImageBitmap(Bitmap bm) { + super.setImageBitmap(bm); + this.sourceBitmap = bm; + updateImageState(); + } + + @Override public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + this.sourceBitmap = getBitmapForView(); + updateImageState(); + } + + @Override public void setImageResource(int resId) { + super.setImageResource(resId); + this.sourceBitmap = getBitmapForView(); + updateImageState(); + } + + @Override public void setImageURI(Uri uri) { + super.setImageURI(uri); + this.sourceBitmap = getBitmapForView(); + updateImageState(); + } + + /** + * Called when the ImageView should alter its source bitmap, then invalidate itself. + */ + protected abstract void updateImageState(); + + /* + * Getters/Setters + */ + + @Override public void setBootstrapBrand(@NonNull BootstrapBrand bootstrapBrand) { + this.bootstrapBrand = bootstrapBrand; + updateImageState(); + } + + @NonNull @Override public BootstrapBrand getBootstrapBrand() { + return bootstrapBrand; + } + + @TargetApi(16) @Override public void setBorderDisplayed(boolean displayed) { + this.hasBorder = displayed; + updateImageState(); + } + + @Override public boolean isBorderDisplayed() { + return hasBorder; + } + + @Override public float getBootstrapSize() { + return bootstrapSize; + } + + @Override public void setBootstrapSize(float bootstrapSize) { + this.bootstrapSize = bootstrapSize; + updateImageState(); + } + + @Override public void setBootstrapSize(DefaultBootstrapSize bootstrapSize) { + setBootstrapSize(bootstrapSize.scaleFactor()); + } + +} \ No newline at end of file diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapButton.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapButton.java new file mode 100644 index 0000000..4534e70 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapButton.java @@ -0,0 +1,281 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.ViewParent; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition; +import com.beardedhen.androidbootstrap.api.defaults.ButtonMode; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; +import com.beardedhen.androidbootstrap.api.view.BootstrapSizeView; +import com.beardedhen.androidbootstrap.api.view.ButtonModeView; +import com.beardedhen.androidbootstrap.api.view.OutlineableView; +import com.beardedhen.androidbootstrap.api.view.RoundableView; +import com.beardedhen.androidbootstrap.utils.DimenUtils; + +import java.io.Serializable; + +/** + * BootstrapButtons are regular buttons styled with BootstrapBrand colors, roundable corners, and an + * 'outlineable' mode. It is possible to group together multiple buttons using BootstrapButtonGroup, + * allowing the use of different selection modes e.g. Checkbox/Radio group. + */ +public class BootstrapButton extends AwesomeTextView implements BootstrapSizeView, + OutlineableView, RoundableView, ButtonModeView { + + private static final String TAG = "com.beardedhen.androidbootstrap.BootstrapButton"; + private static final String KEY_MODE = "com.beardedhen.androidbootstrap.BootstrapButton.MODE"; + private static final String KEY_INDEX = "com.beardedhen.androidbootstrap.BootstrapButton.KEY_INDEX"; + + private int parentIndex; + private ViewGroupPosition viewGroupPosition = ViewGroupPosition.SOLO; + private ButtonMode buttonMode = ButtonMode.REGULAR; + + private float bootstrapSize; + + private boolean roundedCorners; + private boolean showOutline; + + private float baselineFontSize; + private float baselineVertPadding; + private float baselineHoriPadding; + private float baselineStrokeWidth; + private float baselineCornerRadius; + + public BootstrapButton(Context context) { + super(context); + initialise(null); + } + + public BootstrapButton(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapButton(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + private void initialise(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapButton); + viewGroupPosition = ViewGroupPosition.SOLO; + + try { + this.roundedCorners = a.getBoolean(R.styleable.BootstrapButton_roundedCorners, false); + this.showOutline = a.getBoolean(R.styleable.BootstrapButton_showOutline, false); + + int sizeOrdinal = a.getInt(R.styleable.BootstrapButton_bootstrapSize, -1); + int modeOrdinal = a.getInt(R.styleable.BootstrapButtonGroup_buttonMode, -1); + + bootstrapSize = DefaultBootstrapSize.fromAttributeValue(sizeOrdinal).scaleFactor(); + buttonMode = ButtonMode.fromAttributeValue(modeOrdinal); + } + finally { + a.recycle(); + } + + baselineFontSize = DimenUtils.pixelsFromSpResource(getContext(), R.dimen.bootstrap_button_default_font_size); + baselineVertPadding = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_button_default_vert_padding); + baselineHoriPadding = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_button_default_hori_padding); + baselineStrokeWidth = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_button_default_edge_width); + baselineCornerRadius = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_button_default_corner_radius); + updateBootstrapState(); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + + bundle.putBoolean(RoundableView.KEY, roundedCorners); + bundle.putBoolean(OutlineableView.KEY, showOutline); + bundle.putInt(KEY_INDEX, parentIndex); + bundle.putFloat(BootstrapSizeView.KEY, bootstrapSize); + bundle.putSerializable(KEY_MODE, buttonMode); + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + + this.roundedCorners = bundle.getBoolean(RoundableView.KEY); + this.showOutline = bundle.getBoolean(OutlineableView.KEY); + this.parentIndex = bundle.getInt(KEY_INDEX); + this.bootstrapSize = bundle.getFloat(BootstrapSizeView.KEY); + + Serializable m = bundle.getSerializable(KEY_MODE); + + if (m instanceof ButtonMode) { + buttonMode = (ButtonMode) m; + } + } + super.onRestoreInstanceState(state); + } + + @Override protected void updateBootstrapState() { + super.updateBootstrapState(); + BootstrapBrand bootstrapBrand = getBootstrapBrand(); + + float cornerRadius = baselineCornerRadius; + float strokeWidth = baselineStrokeWidth; + + final float fontSize = baselineFontSize * bootstrapSize; + setTextSize(fontSize); + + cornerRadius *= bootstrapSize; + strokeWidth *= bootstrapSize; + + setTextColor(BootstrapDrawableFactory.bootstrapButtonText( + getContext(), + showOutline, + bootstrapBrand)); + + Drawable bg = BootstrapDrawableFactory.bootstrapButton( + getContext(), + bootstrapBrand, + (int) strokeWidth, + (int) cornerRadius, + viewGroupPosition, + showOutline, + roundedCorners); + + if (Build.VERSION.SDK_INT >= 16) { + setBackground(bg); + } + else { + setBackgroundDrawable(bg); + } + + int vert = (int) (baselineVertPadding * bootstrapSize); + int hori = (int) (baselineHoriPadding * bootstrapSize); + setPadding(hori, vert, hori, vert); + } + + @Override public boolean onTouchEvent(@NonNull MotionEvent event) { + + switch (buttonMode) { + case REGULAR: + return super.onTouchEvent(event); + case TOGGLE: + return handleToggle(event); + case CHECKBOX: + return handleToggle(event); + case RADIO: + return handleRadioEvent(event); + default: + return super.onTouchEvent(event); + } + } + + private boolean handleRadioEvent(@NonNull MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (isSelected()) { + setSelected(false); + } + else { // notify parent to deselect any peers + setSelected(true); + + ViewParent parent = getParent(); + + if (parent instanceof BootstrapButtonGroup) { + ((BootstrapButtonGroup) parent).onRadioToggle(parentIndex); + } + } + return true; + } + else { + return false; + } + } + + private boolean handleToggle(@NonNull MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + setSelected(!isSelected()); + return true; + } + else { + return false; + } + } + + /** + * Called by the ViewParent, notifies the child of its position so that it can update its + * drawable to match the position + * + * @param viewGroupPosition the position in the ViewGroup + */ + void setViewGroupPosition(ViewGroupPosition viewGroupPosition, int parentIndex) { + this.viewGroupPosition = viewGroupPosition; + this.parentIndex = parentIndex; + updateBootstrapState(); + } + + void updateFromParent(BootstrapBrand bootstrapBrand, + float bootstrapSize, + ButtonMode buttonMode, + boolean outline, + boolean rounded) { // called when viewparent attrs are updated + + // called by BootstrapButtonGroup when updating state all at once + + this.bootstrapSize = bootstrapSize; + this.buttonMode = buttonMode; + this.showOutline = outline; + this.roundedCorners = rounded; + setBootstrapBrand(bootstrapBrand); + updateBootstrapState(); + } + + /* + * Getters/Setters + */ + + @Override public boolean isShowOutline() { + return showOutline; + } + + @Override public boolean isRounded() { + return roundedCorners; + } + + @Override public void setShowOutline(boolean showOutline) { + this.showOutline = showOutline; + updateBootstrapState(); + } + + @Override public void setRounded(boolean rounded) { + this.roundedCorners = rounded; + updateBootstrapState(); + } + + @NonNull @Override public ButtonMode getButtonMode() { + return buttonMode; + } + + @Override public void setButtonMode(@NonNull ButtonMode buttonMode) { + this.buttonMode = buttonMode; + } + + @Override public float getBootstrapSize() { + return bootstrapSize; + } + + @Override public void setBootstrapSize(DefaultBootstrapSize bootstrapSize) { + setBootstrapSize(bootstrapSize.scaleFactor()); + } + + @Override public void setBootstrapSize(float bootstrapSize) { + this.bootstrapSize = bootstrapSize; + updateBootstrapState(); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapButtonGroup.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapButtonGroup.java new file mode 100644 index 0000000..03277f8 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapButtonGroup.java @@ -0,0 +1,366 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition; +import com.beardedhen.androidbootstrap.api.defaults.ButtonMode; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; +import com.beardedhen.androidbootstrap.api.view.BootstrapBrandView; +import com.beardedhen.androidbootstrap.api.view.BootstrapSizeView; +import com.beardedhen.androidbootstrap.api.view.ButtonModeView; +import com.beardedhen.androidbootstrap.api.view.OutlineableView; +import com.beardedhen.androidbootstrap.api.view.RoundableView; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import static com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition.BOTTOM; +import static com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition.END; +import static com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition.MIDDLE_HORI; +import static com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition.MIDDLE_VERT; +import static com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition.SOLO; +import static com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition.START; +import static com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition.TOP; + +/** + * BootstrapButtonGroups are a LinearLayout which exclusively holds BootstrapButtons. It is possible + * to set the properties of all children with one method call to this view. Options include + * BootstrapBrand colors, roundable corners, 'outlineable' mode and different selection modes + * e.g. Checkbox/Radio group. + */ +public class BootstrapButtonGroup extends LinearLayout implements BootstrapSizeView, + OutlineableView, RoundableView, BootstrapBrandView, ButtonModeView { + + private static final String TAG = "com.beardedhen.androidbootstrap.BootstrapButtonGroup"; + private static final String KEY_MODE = "com.beardedhen.androidbootstrap.BootstrapButtonGroup.MODE"; + + private float bootstrapSize; + private ButtonMode buttonMode; + private BootstrapBrand bootstrapBrand; + + private boolean rounded; + private boolean outline; + + public BootstrapButtonGroup(Context context) { + super(context); + initialise(null); + } + + public BootstrapButtonGroup(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapButtonGroup(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initialise(attrs); + } + + private void initialise(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapButtonGroup); + + try { + this.rounded = a.getBoolean(R.styleable.BootstrapButtonGroup_roundedCorners, false); + this.outline = a.getBoolean(R.styleable.BootstrapButtonGroup_showOutline, false); + + int typeOrdinal = a.getInt(R.styleable.BootstrapButtonGroup_buttonMode, -1); + int brandOrdinal = a.getInt(R.styleable.BootstrapButtonGroup_bootstrapBrand, -1); + int sizeOrdinal = a.getInt(R.styleable.BootstrapButtonGroup_bootstrapSize, -1); + + this.buttonMode = ButtonMode.fromAttributeValue(typeOrdinal); + this.bootstrapBrand = DefaultBootstrapBrand.fromAttributeValue(brandOrdinal); + this.bootstrapSize = DefaultBootstrapSize.fromAttributeValue(sizeOrdinal).scaleFactor(); + } + finally { + a.recycle(); + } + updateBootstrapPositions(); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + + bundle.putSerializable(KEY_MODE, buttonMode); + bundle.putSerializable(BootstrapBrand.KEY, bootstrapBrand); + + bundle.putBoolean(RoundableView.KEY, rounded); + bundle.putBoolean(OutlineableView.KEY, outline); + + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + + outline = bundle.getBoolean(OutlineableView.KEY); + rounded = bundle.getBoolean(RoundableView.KEY); + + Serializable brand = bundle.getSerializable(BootstrapBrand.KEY); + Serializable m = bundle.getSerializable(KEY_MODE); + + if (m instanceof ButtonMode) { + buttonMode = (ButtonMode) m; + } + if (brand instanceof BootstrapBrand) { + bootstrapBrand = (BootstrapBrand) brand; + } + + state = bundle.getParcelable(TAG); + } + super.onRestoreInstanceState(state); + updateBootstrapPositions(); + } + + private void updateBootstrapPositions() { + int childCount = getChildCount(); + int orientation = getOrientation(); + + // tell children their position so they can draw backgrounds appropriately + + if (childCount == 0) { + return; + } + else if (childCount == 1) { + BootstrapButton button = retrieveButtonChild(0); + button.setViewGroupPosition(SOLO, 0); + } + + List buttonList = new ArrayList<>(); + + for (int i = 0; i < childCount; i++) { + BootstrapButton button = retrieveButtonChild(i); + + if (button.getVisibility() == VISIBLE) { + buttonList.add(button); + } + } + + final int size = buttonList.size(); + for (int i = 0; i < size; i++) { + BootstrapButton button = buttonList.get(i); + ViewGroupPosition position; + + if (i == 0) { // first view + position = orientation == HORIZONTAL ? START : TOP; + } + else if (i == size - 1) { // last view + position = orientation == HORIZONTAL ? END : BOTTOM; + } + else { + position = orientation == HORIZONTAL ? MIDDLE_HORI : MIDDLE_VERT; + } + button.setViewGroupPosition(position, i); + button.updateFromParent(bootstrapBrand, bootstrapSize, buttonMode, outline, rounded); + } + } + + private BootstrapButton retrieveButtonChild(int i) { + View view = getChildAt(i); + + if ((view instanceof BootstrapButton)) { + return (BootstrapButton) view; + } + else { + throw new IllegalStateException("All child view of BootstrapButtonGroup must be BootstrapButtons"); + } + } + + /** + * Used for Radio Group Mode - resets all children to an unselected state, + * apart from the calling Button. + * + * @param index the index of the button becoming selected + */ + void onRadioToggle(int index) { + for (int i = 0; i < getChildCount(); i++) { + + if (i != index) { + BootstrapButton b = retrieveButtonChild(i); + b.setSelected(false); + } + } + } + + /* + * Getters / Setters + */ + + @Override public float getBootstrapSize() { + return bootstrapSize; + } + + @Override public void setBootstrapSize(DefaultBootstrapSize bootstrapSize) { + setBootstrapSize(bootstrapSize.scaleFactor()); + } + + @Override public void setBootstrapSize(float bootstrapSize) { + this.bootstrapSize = bootstrapSize; + + for (int i = 0; i < getChildCount(); i++) { + BootstrapButton button = retrieveButtonChild(i); + button.setBootstrapSize(this.bootstrapSize); + } + } + + @NonNull public ButtonMode getButtonMode() { + return buttonMode; + } + + public void setButtonMode(@NonNull ButtonMode buttonMode) { + this.buttonMode = buttonMode; + + for (int i = 0; i < getChildCount(); i++) { + BootstrapButton button = retrieveButtonChild(i); + button.setButtonMode(buttonMode); + } + } + + @Override public void setBootstrapBrand(@NonNull BootstrapBrand bootstrapBrand) { + this.bootstrapBrand = bootstrapBrand; + + for (int i = 0; i < getChildCount(); i++) { + BootstrapButton button = retrieveButtonChild(i); + button.setBootstrapBrand(bootstrapBrand); + } + } + + @NonNull @Override public BootstrapBrand getBootstrapBrand() { + return bootstrapBrand; + } + + @Override public void setShowOutline(boolean showOutline) { + this.outline = showOutline; + + for (int i = 0; i < getChildCount(); i++) { + BootstrapButton button = retrieveButtonChild(i); + button.setShowOutline(outline); + } + } + + @Override public boolean isShowOutline() { + return outline; + } + + @Override public void setRounded(boolean rounded) { + this.rounded = rounded; + + for (int i = 0; i < getChildCount(); i++) { + BootstrapButton button = retrieveButtonChild(i); + button.setRounded(rounded); + } + } + + @Override public boolean isRounded() { + return rounded; + } + + /* + * Overrides + */ + + + @Override public void setOrientation(int orientation) { + super.setOrientation(orientation); + updateBootstrapPositions(); + } + + @Override public void addView(@NonNull View child) { + super.addView(child); + updateBootstrapPositions(); + } + + @Override public void addView(@NonNull View child, int index) { + super.addView(child, index); + updateBootstrapPositions(); + } + + @Override public void addView(@NonNull View child, int index, ViewGroup.LayoutParams params) { + super.addView(child, index, params); + updateBootstrapPositions(); + } + + @Override public void addView(@NonNull View child, ViewGroup.LayoutParams params) { + super.addView(child, params); + updateBootstrapPositions(); + } + + @Override public void addView(@NonNull View child, int width, int height) { + super.addView(child, width, height); + updateBootstrapPositions(); + } + + @Override + protected boolean addViewInLayout( + @NonNull View child, int index, ViewGroup.LayoutParams params) { + boolean b = super.addViewInLayout(child, index, params); + updateBootstrapPositions(); + return b; + } + + @Override + protected boolean addViewInLayout(@NonNull + View child, int index, ViewGroup.LayoutParams params, boolean preventRequestLayout) { + boolean b = super.addViewInLayout(child, index, params, preventRequestLayout); + updateBootstrapPositions(); + return b; + } + + @Override public void removeView(@NonNull View view) { + super.removeView(view); + updateBootstrapPositions(); + } + + @Override protected void removeDetachedView(@NonNull View child, boolean animate) { + super.removeDetachedView(child, animate); + updateBootstrapPositions(); + } + + @Override public void removeAllViews() { + super.removeAllViews(); + updateBootstrapPositions(); + } + + @Override public void removeAllViewsInLayout() { + super.removeAllViewsInLayout(); + updateBootstrapPositions(); + } + + @Override public void removeViewAt(int index) { + super.removeViewAt(index); + updateBootstrapPositions(); + } + + @Override public void removeViewInLayout(@NonNull View view) { + super.removeViewInLayout(view); + updateBootstrapPositions(); + } + + @Override public void removeViews(int start, int count) { + super.removeViews(start, count); + updateBootstrapPositions(); + } + + @Override public void removeViewsInLayout(int start, int count) { + super.removeViewsInLayout(start, count); + updateBootstrapPositions(); + } + + @Override protected void onFinishInflate() { + super.onFinishInflate(); + updateBootstrapPositions(); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java new file mode 100644 index 0000000..7df9095 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java @@ -0,0 +1,189 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.annotation.NonNull; +import android.util.AttributeSet; + +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; +import com.beardedhen.androidbootstrap.utils.ColorUtils; +import com.beardedhen.androidbootstrap.utils.DimenUtils; + +/** + * BootstrapCircleThumbnails display a circular image with an optional border, that can be themed + * using BootstrapBrand colors. The view extends ImageView, and will automatically center crop & + * scale images. + */ +public class BootstrapCircleThumbnail extends BootstrapBaseThumbnail { + + private static final String TAG = "com.beardedhen.androidbootstrap.BootstrapCircleThumbnail"; + + private final RectF imageRectF = new RectF(); + private final Matrix matrix = new Matrix(); + + public BootstrapCircleThumbnail(Context context) { + super(context); + initialise(null); + } + + public BootstrapCircleThumbnail(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapCircleThumbnail(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + protected void initialise(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapCircleThumbnail); + + try { + int typeOrdinal = a.getInt(R.styleable.BootstrapCircleThumbnail_bootstrapBrand, -1); + int sizeOrdinal = a.getInt(R.styleable.BootstrapCircleThumbnail_bootstrapSize, -1); + + this.hasBorder = a.getBoolean(R.styleable.BootstrapCircleThumbnail_hasBorder, true); + this.bootstrapSize = DefaultBootstrapSize.fromAttributeValue(sizeOrdinal).scaleFactor(); + + if (typeOrdinal == -1) { // override to use Primary for default border (looks nicer) + this.bootstrapBrand = DefaultBootstrapBrand.PRIMARY; + } + else { + this.bootstrapBrand = DefaultBootstrapBrand.fromAttributeValue(typeOrdinal); + } + } + finally { + a.recycle(); + } + + baselineOuterBorderWidth = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bthumbnail_outer_stroke); + super.initialise(attrs); + } + + /** + * This method is called when the Circle Image needs to be recreated due to changes in size etc. + *

+ * A Paint object uses a BitmapShader to draw a center-cropped, circular image onto the View + * Canvas. A Matrix on the BitmapShader scales the original Bitmap to match the current view + * bounds, avoiding any inefficiencies in duplicating Bitmaps. + *

+ * + * Further reading + */ + protected void updateImageState() { + float viewWidth = getWidth(); + float viewHeight = getHeight(); + + if ((int) viewWidth <= 0 || (int) viewHeight <= 0) { + return; + } + + if (sourceBitmap != null) { + BitmapShader imageShader = new BitmapShader(sourceBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + imagePaint.setShader(imageShader); + + // Scale the bitmap using a matrix, ensuring that it always matches the view bounds. + float bitmapWidth = sourceBitmap.getWidth(); + float bitmapHeight = sourceBitmap.getHeight(); + + float scaleFactor = (bitmapWidth < bitmapHeight) ? bitmapWidth : bitmapHeight; + float xScale = viewWidth / scaleFactor; + float yScale = viewHeight / scaleFactor; + + // Translate image to center crop (if it is not a perfect square bitmap) + float dx = 0; + float dy = 0; + + if (bitmapWidth > bitmapHeight) { + dx = (viewWidth - bitmapWidth * xScale) * 0.5f; + } + else if (bitmapHeight > bitmapWidth) { + dy = (viewHeight - bitmapHeight * yScale) * 0.5f; + } + + matrix.set(null); + matrix.setScale(xScale, yScale); + matrix.postTranslate((dx + 0.5f), (dy + 0.5f)); + + imageShader.setLocalMatrix(matrix); + imageRectF.set(0, 0, viewWidth, viewHeight); + } + updateBackground(); + invalidate(); + } + + @Override protected void onDraw(@NonNull Canvas canvas) { + float viewWidth = getWidth(); + float viewHeight = getHeight(); + + if ((int) viewWidth <= 0 || (int) viewHeight <= 0) { + return; + } + + boolean isPlaceholder = sourceBitmap == null; + + // draw the image paint first, then draw a border as a Stroke paint (if needed) + float center = viewWidth / 2; + float imageRadius = center; + + if (hasBorder) { + imageRadius -= (baselineBorderWidth * bootstrapSize); + } + + Paint paint = (isPlaceholder) ? placeholderPaint : imagePaint; + canvas.drawCircle(center, center, imageRadius, paint); + } + + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + int w = MeasureSpec.getSize(widthMeasureSpec); // AT_MOST/EXACTLY are used by default + int h = MeasureSpec.getSize(heightMeasureSpec); + + if (sourceBitmap != null) { + if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.UNSPECIFIED) { + w = sourceBitmap.getWidth(); + } + if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.UNSPECIFIED) { + h = sourceBitmap.getHeight(); + } + } + + if (w > h) { // no ovals allowed + w = h; + } + if (h > w) { + h = w; + } + setMeasuredDimension(w, h); + } + + private void updateBackground() { + Drawable bg = null; + + if (hasBorder) { + bg = BootstrapDrawableFactory.bootstrapCircleThumbnail( + getContext(), + bootstrapBrand, + (int) (baselineOuterBorderWidth * bootstrapSize), + ColorUtils.resolveColor(R.color.bootstrap_thumbnail_background, getContext())); + } + if (Build.VERSION.SDK_INT >= 16) { + setBackground(bg); + } + else { + setBackgroundDrawable(bg); + } + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapDrawableFactory.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapDrawableFactory.java new file mode 100644 index 0000000..fd0af3b --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapDrawableFactory.java @@ -0,0 +1,315 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.LayerDrawable; +import android.graphics.drawable.StateListDrawable; +import android.os.Build; +import android.support.annotation.ColorInt; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.attributes.ViewGroupPosition; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.utils.ColorUtils; +import com.beardedhen.androidbootstrap.utils.DimenUtils; + +/** + * Provides a factory for generating Drawables which are used as the backgrounds for Bootstrap Views. + * This avoids needing to define hundreds of XML resource files. + */ +class BootstrapDrawableFactory { + + /** + * Generates a background drawable for a Bootstrap Button + * + * @param context the current context + * @param brand the bootstrap brand + * @param strokeWidth the stroke width in px + * @param cornerRadius the corner radius in px + * @param position the position of the button in its parent view + * @param showOutline whether the button should be outlined + * @param rounded whether the corners should be rounded + * @return a background drawable for the BootstrapButton + */ + static Drawable bootstrapButton(Context context, + BootstrapBrand brand, + int strokeWidth, + int cornerRadius, + ViewGroupPosition position, + boolean showOutline, + boolean rounded) { + + GradientDrawable defaultGd = new GradientDrawable(); + GradientDrawable activeGd = new GradientDrawable(); + GradientDrawable disabledGd = new GradientDrawable(); + + defaultGd.setColor(showOutline ? Color.TRANSPARENT : brand.defaultFill(context)); + activeGd.setColor(showOutline ? brand.activeFill(context) : brand.activeFill(context)); + disabledGd.setColor(showOutline ? Color.TRANSPARENT : brand.disabledFill(context)); + + defaultGd.setStroke(strokeWidth, brand.defaultEdge(context)); + activeGd.setStroke(strokeWidth, brand.activeEdge(context)); + disabledGd.setStroke(strokeWidth, brand.disabledEdge(context)); + + if (showOutline && brand instanceof DefaultBootstrapBrand) { + DefaultBootstrapBrand db = (DefaultBootstrapBrand) brand; + + if (db == DefaultBootstrapBrand.SECONDARY) { + int color = ColorUtils.resolveColor(R.color.bootstrap_brand_secondary_border, context); + + defaultGd.setStroke(strokeWidth, color); + activeGd.setStroke(strokeWidth, color); + disabledGd.setStroke(strokeWidth, color); + } + } + + setupDrawableCorners(position, rounded, cornerRadius, defaultGd, activeGd, disabledGd); + return setupStateDrawable(position, strokeWidth, defaultGd, activeGd, disabledGd); + } + + /** + * Generates a Drawable for a Bootstrap Label background, according to state parameters + * + * @param context the current context + * @param bootstrapBrand the BootstrapBrand theming whose colors should be used + * @param rounded whether the corners should be rounded or not + * @param height the view height in px + * @return the Bootstrap Label background + */ + static Drawable bootstrapLabel(Context context, + BootstrapBrand bootstrapBrand, + boolean rounded, + float height) { + + int cornerRadius = (int) DimenUtils.pixelsFromDpResource(context, R.dimen.bootstrap_default_corner_radius); + + GradientDrawable drawable = new GradientDrawable(); + drawable.setColor(bootstrapBrand.defaultFill(context)); + + // corner radius should be half height if rounded as a "Pill" label + drawable.setCornerRadius(rounded ? height / 2 : cornerRadius); + return drawable; + } + + /** + * Generates a Drawable for a Bootstrap Edit Text background + * + * @param context the current context + * @param bootstrapBrand the BootstrapBrand theming whose colors should be used + * @param rounded whether the corners should be rounded or not + * @return the Bootstrap Edit Text background + */ + static Drawable bootstrapEditText(Context context, + BootstrapBrand bootstrapBrand, + float strokeWidth, + float cornerRadius, + boolean rounded) { + + StateListDrawable drawable = new StateListDrawable(); + + GradientDrawable activeDrawable = new GradientDrawable(); + GradientDrawable disabledDrawable = new GradientDrawable(); + GradientDrawable defaultDrawable = new GradientDrawable(); + + activeDrawable.setColor(ColorUtils.resolveColor(android.R.color.white, context)); + disabledDrawable.setColor(ColorUtils.resolveColor(android.R.color.white, context)); + defaultDrawable.setColor(ColorUtils.resolveColor(android.R.color.white, context)); + + if (rounded) { + activeDrawable.setCornerRadius(cornerRadius); + disabledDrawable.setCornerRadius(cornerRadius); + defaultDrawable.setCornerRadius(cornerRadius); + } + + // stroke is larger when focused + int defaultBorder = ColorUtils.resolveColor(R.color.bootstrap_brand_secondary_border, context); + int disabledBorder = ColorUtils.resolveColor(R.color.bootstrap_edittext_disabled, context); + + activeDrawable.setStroke((int) strokeWidth, bootstrapBrand.defaultEdge(context)); + disabledDrawable.setStroke((int) strokeWidth, disabledBorder); + defaultDrawable.setStroke((int) strokeWidth, defaultBorder); + + drawable.addState(new int[]{android.R.attr.state_focused}, activeDrawable); + drawable.addState(new int[]{-android.R.attr.state_enabled}, disabledDrawable); + drawable.addState(new int[]{}, defaultDrawable); + + return drawable; + } + + static Drawable bootstrapCircleThumbnail(Context context, + BootstrapBrand bootstrapBrand, + @ColorInt int outerBorderWidth, + @ColorInt int bg) { + + GradientDrawable drawable = new GradientDrawable(); + drawable.setShape(GradientDrawable.OVAL); + drawable.setColor(bg); + drawable.setStroke(outerBorderWidth, bootstrapBrand.defaultEdge(context)); + return drawable; + } + + static Drawable bootstrapThumbnail(Context context, + BootstrapBrand bootstrapBrand, + @ColorInt int outerBorderWidth, + @ColorInt int bg, + boolean rounded) { + + GradientDrawable drawable = new GradientDrawable(); + drawable.setShape(GradientDrawable.RECTANGLE); + drawable.setColor(bg); + drawable.setStroke(outerBorderWidth, bootstrapBrand.defaultEdge(context)); + + float r = DimenUtils.pixelsFromDpResource(context, R.dimen.bthumbnail_rounded_corner); + + if (rounded) { + drawable.setCornerRadii(new float[]{r, r, r, r, r, r, r, r}); + } + + return drawable; + } + + /** + * Generates a colorstatelist for a bootstrap button + * + * @param context the current context + * @param outline whether the button is outlined + * @param brand the button brand + * @return the color state list + */ + static ColorStateList bootstrapButtonText(Context context, boolean outline, BootstrapBrand brand) { + + int defaultColor = outline ? brand.defaultFill(context) : brand.defaultTextColor(context); + int activeColor = outline ? ColorUtils.resolveColor(android.R.color.white, context) : brand.activeTextColor(context); + int disabledColor = outline ? brand.disabledFill(context) : brand.disabledTextColor(context); + + if (outline && brand instanceof DefaultBootstrapBrand) { // special case + DefaultBootstrapBrand db = (DefaultBootstrapBrand) brand; + + if (db == DefaultBootstrapBrand.SECONDARY) { + defaultColor = ColorUtils.resolveColor(R.color.bootstrap_brand_secondary_border, context); + disabledColor = defaultColor; + } + } + return new ColorStateList(getStateList(), getColorList(defaultColor, activeColor, disabledColor)); + } + + private static StateListDrawable setupStateDrawable(ViewGroupPosition position, int strokeWidth, GradientDrawable defaultGd, GradientDrawable activeGd, GradientDrawable disabledGd) { + StateListDrawable stateListDrawable = new StateListDrawable(); + LayerDrawable defaultLayer = new LayerDrawable(new Drawable[]{defaultGd}); + LayerDrawable activeLayer = new LayerDrawable(new Drawable[]{activeGd}); + LayerDrawable disabledLayer = new LayerDrawable(new Drawable[]{disabledGd}); + + LayerDrawable[] ldAry = new LayerDrawable[]{defaultLayer, activeLayer, disabledLayer}; + int n = strokeWidth * -1; + + // use LayerDrawable to hide strokes on one side of the drawable (if needed), using negative insets + if (position != null) { + switch (position) { + case MIDDLE_HORI: + setInsetOnLayers(ldAry, n, 0, 0, 0); + break; + case END: + setInsetOnLayers(ldAry, n, 0, 0, 0); + break; + case MIDDLE_VERT: + setInsetOnLayers(ldAry, 0, n, 0, 0); + break; + case BOTTOM: + setInsetOnLayers(ldAry, 0, n, 0, 0); + } + } + + if (Build.VERSION.SDK_INT >= 14) { + stateListDrawable.addState(new int[]{android.R.attr.state_hovered}, activeLayer); + } + + stateListDrawable.addState(new int[]{android.R.attr.state_activated}, activeLayer); + stateListDrawable.addState(new int[]{android.R.attr.state_focused}, activeLayer); + stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, activeLayer); + stateListDrawable.addState(new int[]{android.R.attr.state_selected}, activeLayer); + stateListDrawable.addState(new int[]{-android.R.attr.state_enabled}, disabledLayer); + stateListDrawable.addState(new int[]{}, defaultLayer); + + return stateListDrawable; + } + + private static void setupDrawableCorners(ViewGroupPosition position, boolean rounded, int cornerRadius, GradientDrawable defaultGd, GradientDrawable activeGd, GradientDrawable disabledGd) { + if (rounded) { + if (position == ViewGroupPosition.SOLO) { + defaultGd.setCornerRadius(cornerRadius); + activeGd.setCornerRadius(cornerRadius); + disabledGd.setCornerRadius(cornerRadius); + } + else { + float[] radii; // X/Y pairs for top-left, top-right, bottom-right, bottom-left. + float r = cornerRadius; + + switch (position) { + case MIDDLE_HORI: + radii = new float[]{0, 0, 0, 0, 0, 0, 0, 0}; + break; + case MIDDLE_VERT: + radii = new float[]{0, 0, 0, 0, 0, 0, 0, 0}; + break; + case TOP: + radii = new float[]{r, r, r, r, 0, 0, 0, 0}; + break; + case BOTTOM: + radii = new float[]{0, 0, 0, 0, r, r, r, r}; + break; + case START: + radii = new float[]{r, r, 0, 0, 0, 0, r, r,}; + break; + case END: + radii = new float[]{0, 0, r, r, r, r, 0, 0}; + break; + default: + radii = new float[]{0, 0, 0, 0, 0, 0, 0, 0}; + break; + } + + defaultGd.setCornerRadii(radii); + activeGd.setCornerRadii(radii); + disabledGd.setCornerRadii(radii); + } + } + } + + private static int[][] getStateList() { + if (Build.VERSION.SDK_INT >= 14) { + return new int[][] + {new int[]{android.R.attr.state_hovered}, new int[]{android.R.attr.state_activated}, + new int[]{android.R.attr.state_focused}, new int[]{android.R.attr.state_selected}, + new int[]{android.R.attr.state_pressed}, new int[]{android.R.attr.state_hovered}, + new int[]{-android.R.attr.state_enabled}, new int[]{}}; + } + else { + return new int[][] + {new int[]{android.R.attr.state_activated}, new int[]{android.R.attr.state_focused}, + new int[]{android.R.attr.state_selected}, new int[]{android.R.attr.state_pressed}, + new int[]{android.R.attr.state_hovered}, new int[]{-android.R.attr.state_enabled}, + new int[]{}}; + } + } + + private static int[] getColorList(int defaultColor, int activeColor, int disabledColor) { + if (Build.VERSION.SDK_INT >= 14) { + return new int[]{activeColor, activeColor, activeColor, activeColor, activeColor, + activeColor, disabledColor, defaultColor}; + } + else { + return new int[]{activeColor, activeColor, activeColor, activeColor, activeColor, + disabledColor, defaultColor}; + } + } + + private static void setInsetOnLayers(LayerDrawable[] ary, int l, int t, int r, int b) { + for (LayerDrawable ld : ary) { + ld.setLayerInset(0, l, t, r, b); + } + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapEditText.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapEditText.java new file mode 100644 index 0000000..d4b4973 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapEditText.java @@ -0,0 +1,172 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.view.Gravity; +import android.widget.EditText; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; +import com.beardedhen.androidbootstrap.api.view.BootstrapBrandView; +import com.beardedhen.androidbootstrap.api.view.BootstrapSizeView; +import com.beardedhen.androidbootstrap.api.view.RoundableView; +import com.beardedhen.androidbootstrap.utils.DimenUtils; + +import java.io.Serializable; + +/** + * BootstrapEditText allows users to enter values like a regular Android EditText, and allows coloring + * via BootstrapBrand, and rounding of its background. + */ +public class BootstrapEditText extends EditText implements BootstrapBrandView, RoundableView, + BootstrapSizeView { + + private static final String TAG = "com.beardedhen.androidbootstrap.BootstrapEditText"; + + private float baselineFontSize; + private float baselineVertPadding; + private float baselineHoriPadding; + private float baselineStrokeWidth; + private float baselineCornerRadius; + + private BootstrapBrand bootstrapBrand; + private float bootstrapSize; + private boolean rounded; + + public BootstrapEditText(Context context) { + super(context); + initialise(null); + } + + public BootstrapEditText(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + private void initialise(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapEditText); + + try { + this.rounded = a.getBoolean(R.styleable.BootstrapEditText_roundedCorners, false); + + int typeOrdinal = a.getInt(R.styleable.AwesomeTextView_bootstrapBrand, -1); + int sizeOrdinal = a.getInt(R.styleable.BootstrapEditText_bootstrapSize, -1); + + this.bootstrapBrand = DefaultBootstrapBrand.fromAttributeValue(typeOrdinal); + this.bootstrapSize = DefaultBootstrapSize.fromAttributeValue(sizeOrdinal).scaleFactor(); + } + finally { + a.recycle(); + } + + baselineFontSize = DimenUtils.pixelsFromSpResource(getContext(), R.dimen.bootstrap_edit_text_default_font_size); + baselineVertPadding = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_edit_text_vert_padding); + baselineHoriPadding = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_edit_text_hori_padding); + baselineStrokeWidth = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_edit_text_edge_width); + baselineCornerRadius = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_edit_text_corner_radius); + + setGravity(Gravity.CENTER_VERTICAL); // center text vertically by default + updateBootstrapState(); + invalidate(); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + bundle.putBoolean(RoundableView.KEY, rounded); + bundle.putFloat(BootstrapSizeView.KEY, bootstrapSize); + bundle.putSerializable(BootstrapBrand.KEY, bootstrapBrand); + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + this.rounded = bundle.getBoolean(RoundableView.KEY); + this.bootstrapSize = bundle.getFloat(BootstrapSizeView.KEY); + + Serializable brand = bundle.getSerializable(BootstrapBrand.KEY); + + if (brand instanceof BootstrapBrand) { + bootstrapBrand = (BootstrapBrand) brand; + } + state = bundle.getParcelable(TAG); + } + super.onRestoreInstanceState(state); + updateBootstrapState(); + } + + private void updateBootstrapState() { + int vPadding = (int) (baselineVertPadding * bootstrapSize); + int hPadding = (int) (baselineHoriPadding * bootstrapSize); + setPadding(vPadding, hPadding, vPadding, hPadding); + + int strokeWidth = (int) (baselineStrokeWidth * bootstrapSize); + float cornerRadius = baselineCornerRadius * bootstrapSize; + + final float fontSize = baselineFontSize * bootstrapSize; + setTextSize(fontSize); + + Drawable bg = BootstrapDrawableFactory.bootstrapEditText( + getContext(), + bootstrapBrand, + strokeWidth, + cornerRadius, + rounded); + + if (Build.VERSION.SDK_INT >= 16) { + setBackground(bg); + } + else { + setBackgroundDrawable(bg); + } + } + + /* + * Getters/Setters + */ + + @Override public void setBootstrapBrand(@NonNull BootstrapBrand bootstrapBrand) { + this.bootstrapBrand = bootstrapBrand; + updateBootstrapState(); + } + + @NonNull @Override public BootstrapBrand getBootstrapBrand() { + return bootstrapBrand; + } + + @Override public void setRounded(boolean rounded) { + this.rounded = rounded; + updateBootstrapState(); + } + + @Override public boolean isRounded() { + return rounded; + } + + @Override public float getBootstrapSize() { + return bootstrapSize; + } + + @Override public void setBootstrapSize(float bootstrapSize) { + this.bootstrapSize = bootstrapSize; + updateBootstrapState(); + } + + @Override public void setBootstrapSize(DefaultBootstrapSize bootstrapSize) { + setBootstrapSize(bootstrapSize.scaleFactor()); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapLabel.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapLabel.java new file mode 100644 index 0000000..21fd537 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapLabel.java @@ -0,0 +1,146 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.NonNull; +import android.util.AttributeSet; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapHeading; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading; +import com.beardedhen.androidbootstrap.api.view.BootstrapHeadingView; +import com.beardedhen.androidbootstrap.api.view.RoundableView; + +import java.io.Serializable; + +/** + * BootstrapLabels are designed for showing text styled with BootstrapBrands - they should be + * considered similar to a BootstrapButton, but without the press functionality. It is possible to + * set the size of BootstrapLabels using H1-H6 elements. + */ +public class BootstrapLabel extends AwesomeTextView implements RoundableView, BootstrapHeadingView { + + private static final String TAG = "com.beardedhen.androidbootstrap.BootstrapLabel"; + + private BootstrapHeading bootstrapHeading; + private boolean roundable; + + public BootstrapLabel(Context context) { + super(context); + initialise(null); + } + + public BootstrapLabel(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapLabel(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + private void initialise(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapLabel); + + try { + int attrValue = a.getInt(R.styleable.BootstrapLabel_bootstrapHeading, 5); + this.roundable = a.getBoolean(R.styleable.BootstrapButton_roundedCorners, false); + + this.bootstrapHeading = DefaultBootstrapHeading.fromAttributeValue(attrValue); + } + finally { + a.recycle(); + } + updateBootstrapState(); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + bundle.putBoolean(RoundableView.KEY, roundable); + bundle.putSerializable(BootstrapHeading.KEY, bootstrapHeading); + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + + this.roundable = bundle.getBoolean(RoundableView.KEY); + + Serializable heading = bundle.getSerializable(BootstrapHeading.KEY); + + if (heading instanceof BootstrapHeading) { + bootstrapHeading = (BootstrapHeading) heading; + } + state = bundle.getParcelable(TAG); + } + super.onRestoreInstanceState(state); + updateBootstrapState(); + } + + @Override public void updateBootstrapState() { + super.updateBootstrapState(); + // set bg color etc + + if (bootstrapHeading != null) { + int vert = (int) bootstrapHeading.verticalPadding(getContext()); + int hori = (int) bootstrapHeading.horizontalPadding(getContext()); + + setPadding(hori, vert, hori, vert); + setTextSize(bootstrapHeading.getTextSize(getContext())); + } + + setTextColor(getBootstrapBrand().defaultTextColor(getContext())); + setTypeface(Typeface.DEFAULT_BOLD); + + Drawable bg = BootstrapDrawableFactory.bootstrapLabel( + getContext(), + getBootstrapBrand(), + roundable, + getHeight()); + + if (Build.VERSION.SDK_INT >= 16) { + setBackground(bg); + } + else { + setBackgroundDrawable(bg); + } + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + if (roundable && h != oldh) { // corner radius should always be h/2 + updateBootstrapState(); + } + } + + /* + * Getters/Setters + */ + + @Override public void setRounded(boolean rounded) { + this.roundable = rounded; + updateBootstrapState(); + } + + @Override public boolean isRounded() { + return roundable; + } + + @Override public void setBootstrapHeading(@NonNull BootstrapHeading bootstrapHeading) { + this.bootstrapHeading = bootstrapHeading; + updateBootstrapState(); + } + + @NonNull @Override public BootstrapHeading getBootstrapHeading() { + return bootstrapHeading; + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapProgressBar.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapProgressBar.java new file mode 100644 index 0000000..98769ed --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapProgressBar.java @@ -0,0 +1,483 @@ +package com.beardedhen.androidbootstrap; + +import android.animation.Animator; +import android.animation.ValueAnimator; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.RectF; +import android.os.Bundle; +import android.os.Parcelable; +import android.support.annotation.ColorInt; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.LinearInterpolator; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; +import com.beardedhen.androidbootstrap.api.view.BootstrapBrandView; +import com.beardedhen.androidbootstrap.api.view.BootstrapSizeView; +import com.beardedhen.androidbootstrap.api.view.ProgressView; +import com.beardedhen.androidbootstrap.api.view.RoundableView; +import com.beardedhen.androidbootstrap.utils.ColorUtils; +import com.beardedhen.androidbootstrap.utils.DimenUtils; + +import java.io.Serializable; + +import static android.graphics.Bitmap.Config.ARGB_8888; + +/** + * BootstrapProgressBar displays determinate progress to the user, and is colored with BootstrapBrands. + * Striped effects and progress update animations are supported out of the box. + */ +public class BootstrapProgressBar extends View implements ProgressView, BootstrapBrandView, + RoundableView, BootstrapSizeView { + + private static final String TAG = "com.beardedhen.androidbootstrap.AwesomeTextView"; + + private static final long UPDATE_ANIM_MS = 300; + private static final int STRIPE_ALPHA = 150; + private static final long STRIPE_CYCLE_MS = 1500; + + private Paint progressPaint; + private Paint stripePaint; + private Paint bgPaint; + + private int userProgress; + private int drawnProgress; + + private boolean striped; + private boolean animated; + private boolean rounded; + + private ValueAnimator progressAnimator; + private Paint tilePaint; + private float baselineHeight; + + private BootstrapBrand bootstrapBrand; + + private Canvas progressCanvas; + private Bitmap progressBitmap; + private Bitmap stripeTile; + + private float bootstrapSize; + + public BootstrapProgressBar(Context context) { + super(context); + initialise(null); + } + + public BootstrapProgressBar(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initialise(attrs); + } + + private void initialise(AttributeSet attrs) { + ValueAnimator.setFrameDelay(15); // attempt 60fps + tilePaint = new Paint(); + baselineHeight = DimenUtils.pixelsFromDpResource(getContext(), R.dimen.bootstrap_progress_bar_height); + + progressPaint = new Paint(); + progressPaint.setStyle(Paint.Style.FILL); + progressPaint.setAntiAlias(true); + + stripePaint = new Paint(); + stripePaint.setStyle(Paint.Style.FILL); + stripePaint.setAntiAlias(true); + + bgPaint = new Paint(); + bgPaint.setStyle(Paint.Style.FILL); + bgPaint.setColor(ColorUtils.resolveColor(R.color.bootstrap_gray_light, getContext())); + + // get attributes + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapProgressBar); + + try { + this.animated = a.getBoolean(R.styleable.BootstrapProgressBar_animated, false); + this.rounded = a.getBoolean(R.styleable.BootstrapProgressBar_roundedCorners, false); + this.striped = a.getBoolean(R.styleable.BootstrapProgressBar_striped, false); + this.userProgress = a.getInt(R.styleable.BootstrapProgressBar_progress, 0); + + int typeOrdinal = a.getInt(R.styleable.AwesomeTextView_bootstrapBrand, -1); + int sizeOrdinal = a.getInt(R.styleable.BootstrapProgressBar_bootstrapSize, -1); + + this.bootstrapSize = DefaultBootstrapSize.fromAttributeValue(sizeOrdinal).scaleFactor(); + this.bootstrapBrand = DefaultBootstrapBrand.fromAttributeValue(typeOrdinal); + this.drawnProgress = userProgress; + } + finally { + a.recycle(); + } + + updateBootstrapState(); + setProgress(this.userProgress); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + + bundle.putInt(KEY_USER_PROGRESS, userProgress); + bundle.putInt(KEY_DRAWN_PROGRESS, drawnProgress); + bundle.putBoolean(KEY_STRIPED, striped); + bundle.putBoolean(KEY_ANIMATED, animated); + bundle.putBoolean(RoundableView.KEY, rounded); + bundle.putFloat(BootstrapSizeView.KEY, bootstrapSize); + bundle.putSerializable(BootstrapBrand.KEY, bootstrapBrand); + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + + Serializable brand = bundle.getSerializable(BootstrapBrand.KEY); + + if (brand instanceof BootstrapBrand) { + bootstrapBrand = (BootstrapBrand) brand; + } + + this.userProgress = bundle.getInt(KEY_USER_PROGRESS); + this.drawnProgress = bundle.getInt(KEY_DRAWN_PROGRESS); + this.striped = bundle.getBoolean(KEY_STRIPED); + this.animated = bundle.getBoolean(KEY_ANIMATED); + this.rounded = bundle.getBoolean(RoundableView.KEY); + this.bootstrapSize = bundle.getFloat(BootstrapSizeView.KEY); + + state = bundle.getParcelable(TAG); + } + super.onRestoreInstanceState(state); + updateBootstrapState(); + setProgress(userProgress); + } + + private int getStripeColor(@ColorInt int color) { + return Color.argb(STRIPE_ALPHA, Color.red(color), Color.green(color), Color.blue(color)); + } + + /** + * Starts an animation which moves the progress bar from one value to another, in response to + * a call to setProgress(). Animation update callbacks allow the interpolator value to be used + * to calculate the current progress value, which is stored in a temporary variable. The view is + * then invalidated. + *

+ * If this method is called when a progress update animation is already running, the previous + * animation will be cancelled, and the currently drawn progress recorded. A new animation will + * then be started from the last drawn point. + */ + private void startProgressUpdateAnimation() { + clearAnimation(); + + progressAnimator = ValueAnimator.ofFloat(drawnProgress, userProgress); + progressAnimator.setDuration(UPDATE_ANIM_MS); + progressAnimator.setRepeatCount(0); + progressAnimator.setRepeatMode(ValueAnimator.RESTART); + progressAnimator.setInterpolator(new DecelerateInterpolator()); + + progressAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + + @Override public void onAnimationUpdate(ValueAnimator animation) { + drawnProgress = (int) ((float) animation.getAnimatedValue()); + invalidate(); + } + }); + + // start striped animation after progress update if needed + progressAnimator.addListener(new Animator.AnimatorListener() { + @Override public void onAnimationStart(Animator animation) { + } + + @Override public void onAnimationEnd(Animator animation) { + startStripedAnimationIfNeeded(); // start striped animation after progress update + } + + @Override public void onAnimationCancel(Animator animation) { + } + + @Override public void onAnimationRepeat(Animator animation) { + } + }); + progressAnimator.start(); + } + + /** + * Starts an infinite animation cycle which provides the visual effect of stripes moving + * backwards. The current system time is used to offset tiled bitmaps of the progress background, + * producing the effect that the stripes are moving backwards. + */ + private void startStripedAnimationIfNeeded() { + if (!striped || !animated) { + return; + } + + clearAnimation(); + + progressAnimator = ValueAnimator.ofFloat(0, 0); + progressAnimator.setDuration(UPDATE_ANIM_MS); + progressAnimator.setRepeatCount(ValueAnimator.INFINITE); + progressAnimator.setRepeatMode(ValueAnimator.RESTART); + + progressAnimator.setInterpolator(new LinearInterpolator()); + progressAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override public void onAnimationUpdate(ValueAnimator animation) { + invalidate(); + } + }); + progressAnimator.start(); + } + + /* + * Custom Measuring/Drawing + */ + + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // restrict view to default progressbar height + + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + + switch (heightMode) { + case MeasureSpec.EXACTLY: + break; + case MeasureSpec.AT_MOST: // prefer default height, if not all available use as much as possible + float desiredHeight = (baselineHeight * bootstrapSize); + height = (height > desiredHeight) ? (int) desiredHeight : height; + break; + default: + height = (int) (baselineHeight * bootstrapSize); + break; + } + setMeasuredDimension(width, height); + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + if (h != oldh) { + stripeTile = null; // dereference cached bitmap + } + + super.onSizeChanged(w, h, oldw, oldh); + } + + @Override protected void onDraw(Canvas canvas) { + float w = getWidth(); + float h = getHeight(); + + if (w <= 0 || h <= 0) { + return; + } + + if (progressBitmap == null) { + progressBitmap = Bitmap.createBitmap((int) w, (int) h, ARGB_8888); + } + if (progressCanvas == null) { + progressCanvas = new Canvas(progressBitmap); + } + progressCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); + + float ratio = (float) (drawnProgress / 100.0); + int lineEnd = (int) (w * ratio); + + float offset = 0; + float offsetFactor = (System.currentTimeMillis() % STRIPE_CYCLE_MS) / (float) STRIPE_CYCLE_MS; + + if (striped && animated) { // determine offset for current animation frame of progress bar + offset = (h * 2) * offsetFactor; + } + + if (striped) { // draw a regular striped bar + if (stripeTile == null) { + stripeTile = createTile(h, stripePaint, progressPaint); + } + + float start = 0 - offset; + + while (start < lineEnd) { + progressCanvas.drawBitmap(stripeTile, start, 0, tilePaint); + start += stripeTile.getWidth(); + } + } + else { // draw a filled bar + progressCanvas.drawRect(0, 0, lineEnd, h, progressPaint); + } + + progressCanvas.drawRect(lineEnd, 0, w, h, bgPaint); // draw bg + + float corners = rounded ? h / 2 : 0; + Bitmap round = createRoundedBitmap(progressBitmap, corners); + canvas.drawBitmap(round, 0, 0, tilePaint); + } + + /** + * Creates a Bitmap which is a tile of the progress bar background + * + * @param h the view height + * @return a bitmap of the progress bar background + */ + private static Bitmap createTile(float h, Paint stripePaint, Paint progressPaint) { + Bitmap bm = Bitmap.createBitmap((int) h * 2, (int) h, ARGB_8888); + Canvas tile = new Canvas(bm); + + float x = 0; + Path path = new Path(); + + path.moveTo(x, 0); + path.lineTo(x, h); + path.lineTo(h, h); + tile.drawPath(path, stripePaint); // draw striped triangle + + path.reset(); + path.moveTo(x, 0); + path.lineTo(x + h, h); + path.lineTo(x + (h * 2), h); + path.lineTo(x + h, 0); + tile.drawPath(path, progressPaint); // draw progress parallelogram + + x += h; + path.reset(); + path.moveTo(x, 0); + path.lineTo(x + h, 0); + path.lineTo(x + h, h); + tile.drawPath(path, stripePaint); // draw striped triangle (completing tile) + + return bm; + } + + /** + * Creates a rounded bitmap with transparent corners, from a square bitmap. + * See StackOverflow + * + * @param bitmap the original bitmap + * @param cornerRadius the radius of the corners + * @return a rounded bitmap + */ + private static Bitmap createRoundedBitmap(Bitmap bitmap, float cornerRadius) { + Bitmap roundedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), ARGB_8888); + Canvas canvas = new Canvas(roundedBitmap); + + final Paint paint = new Paint(); + final Rect frame = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); + + // prepare canvas for transfer + paint.setAntiAlias(true); + paint.setColor(0xFFFFFFFF); + paint.setStyle(Paint.Style.FILL); + canvas.drawARGB(0, 0, 0, 0); + canvas.drawRoundRect(new RectF(frame), cornerRadius, cornerRadius, paint); + + // draw bitmap + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas.drawBitmap(bitmap, frame, frame, paint); + + return roundedBitmap; + } + + private void updateBootstrapState() { + int color = bootstrapBrand.defaultFill(getContext()); + progressPaint.setColor(color); + stripePaint.setColor(getStripeColor(color)); + invalidateDrawCache(); + invalidate(); + } + + private void invalidateDrawCache() { + stripeTile = null; + progressBitmap = null; + progressCanvas = null; + } + + /* + * Getters/Setters + */ + + + @Override public void setProgress(int progress) { + if (progress < 0 || progress > 100) { + String s = String.format("Invalid value '%d' - progress must be an integer in the range 0-100", progress); + throw new IllegalArgumentException(s); + } + + this.userProgress = progress; + + if (animated) { + startProgressUpdateAnimation(); + } + else { + this.drawnProgress = progress; + invalidate(); + } + } + + @Override public int getProgress() { + return userProgress; + } + + @Override public void setStriped(boolean striped) { + this.striped = striped; + invalidate(); + startStripedAnimationIfNeeded(); + } + + @Override public boolean isStriped() { + return striped; + } + + @Override public void setAnimated(boolean animated) { + this.animated = animated; + invalidate(); + startStripedAnimationIfNeeded(); + } + + @Override public boolean isAnimated() { + return animated; + } + + @Override public void setBootstrapBrand(@NonNull BootstrapBrand bootstrapBrand) { + this.bootstrapBrand = bootstrapBrand; + updateBootstrapState(); + } + + @NonNull @Override public BootstrapBrand getBootstrapBrand() { + return bootstrapBrand; + } + + @Override public void setRounded(boolean rounded) { + this.rounded = rounded; + updateBootstrapState(); + } + + @Override public boolean isRounded() { + return rounded; + } + + @Override public float getBootstrapSize() { + return bootstrapSize; + } + + @Override public void setBootstrapSize(float bootstrapSize) { + this.bootstrapSize = bootstrapSize; + requestLayout(); + updateBootstrapState(); + } + + @Override public void setBootstrapSize(DefaultBootstrapSize bootstrapSize) { + setBootstrapSize(bootstrapSize.scaleFactor()); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapText.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapText.java new file mode 100644 index 0000000..9f7b4cc --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapText.java @@ -0,0 +1,103 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.text.SpannableString; +import android.text.Spanned; + +import com.beardedhen.androidbootstrap.font.AwesomeTypefaceSpan; +import com.beardedhen.androidbootstrap.font.FontAwesome; +import com.beardedhen.androidbootstrap.font.IconSet; +import com.beardedhen.androidbootstrap.font.Typicon; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +/** + * Bootstrap Text provides a Builder class, which allows convenient construction of SpannableStrings. + * Currently regular text, FontAwesome icons, and Typicons can be added. + */ +public class BootstrapText extends SpannableString implements Serializable { + + private BootstrapText(CharSequence source) { + super(source); + } + + /** + * This class should be used to construct BootstrapText instances. Text is appended to itself + * in the order in which it was added. + */ + public static class Builder { + + private final StringBuilder sb; + private final Context context; + + private final Map fontIndicesMap; + + public Builder(Context context) { + fontIndicesMap = new HashMap<>(); + sb = new StringBuilder(); + this.context = context.getApplicationContext(); + } + + /** + * Appends a regular piece of text to the BootstrapText under construction. + * + * @param text a regular piece of text + * @return the updated builder instance + */ + public Builder addText(CharSequence text) { + sb.append(text); + return this; + } + + /** + * Appends a FontAwesomeIcon to the BootstrapText under construction + * @return the updated builder instance + */ + public Builder addFontAwesomeIcon(@FontAwesome.Icon CharSequence iconCode) { + IconSet iconSet = TypefaceProvider.retrieveRegisteredIconSet(FontAwesome.FONT_PATH); + sb.append(iconSet.unicodeForKey(iconCode)); + fontIndicesMap.put(sb.length(), iconSet); + return this; + } + + /** + * Appends a Typicon to the BootstrapText under construction + * @return the updated builder instance + */ + public Builder addTypicon(@Typicon.Icon CharSequence iconCode) { + IconSet iconSet = TypefaceProvider.retrieveRegisteredIconSet(Typicon.FONT_PATH); + sb.append(iconSet.unicodeForKey(iconCode)); + fontIndicesMap.put(sb.length(), iconSet); + return this; + } + + /** + * Appends a font icon to the BootstrapText under construction + * @param iconSet a font icon + * @return the updated builder instance + */ + public Builder addIcon(CharSequence iconCode, IconSet iconSet) { + sb.append(iconSet.unicodeForKey(iconCode)); + fontIndicesMap.put(sb.length(), iconSet); + return this; + } + + /** + * @return a new instance of BootstrapText, constructed according to Builder arguments. + */ + public BootstrapText build() { + BootstrapText bootstrapText = new BootstrapText(sb.toString()); + + for (Map.Entry entry : fontIndicesMap.entrySet()) { + int index = entry.getKey(); + + AwesomeTypefaceSpan span = new AwesomeTypefaceSpan(context, entry.getValue()); + bootstrapText.setSpan(span, index - 1, index, Spanned.SPAN_INCLUSIVE_INCLUSIVE); + } + return bootstrapText; + } + } + +} \ No newline at end of file diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapThumbnail.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapThumbnail.java new file mode 100644 index 0000000..69ecf31 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/BootstrapThumbnail.java @@ -0,0 +1,166 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.AttributeSet; + +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; +import com.beardedhen.androidbootstrap.api.view.RoundableView; +import com.beardedhen.androidbootstrap.utils.ColorUtils; + +// TODO document/finalise + +public class BootstrapThumbnail extends BootstrapBaseThumbnail implements RoundableView { + + private static final String TAG = "com.beardedhen.androidbootstrap.BootstrapThumbnail"; + + private Paint placeholderPaint; + private final RectF imageRect = new RectF(); + + private boolean roundedCorners; + private float baselineCornerRadius; + + public BootstrapThumbnail(Context context) { + super(context); + initialise(null); + } + + public BootstrapThumbnail(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(attrs); + } + + public BootstrapThumbnail(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initialise(attrs); + } + + @Override public Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + bundle.putParcelable(TAG, super.onSaveInstanceState()); + bundle.putBoolean(RoundableView.KEY, roundedCorners); + return bundle; + } + + @Override public void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + this.roundedCorners = bundle.getBoolean(RoundableView.KEY); + state = bundle.getParcelable(TAG); + } + super.onRestoreInstanceState(state); + } + + protected void initialise(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapThumbnail); + + try { + int typeOrdinal = a.getInt(R.styleable.BootstrapThumbnail_bootstrapBrand, -1); + int sizeOrdinal = a.getInt(R.styleable.BootstrapThumbnail_bootstrapSize, -1); + + this.hasBorder = a.getBoolean(R.styleable.BootstrapCircleThumbnail_hasBorder, true); + this.bootstrapSize = DefaultBootstrapSize.fromAttributeValue(sizeOrdinal).scaleFactor(); + + if (typeOrdinal == -1) { // override to use Primary for default border (looks nicer) + this.bootstrapBrand = DefaultBootstrapBrand.PRIMARY; + } + else { + this.bootstrapBrand = DefaultBootstrapBrand.fromAttributeValue(typeOrdinal); + } + } + finally { + a.recycle(); + } + + placeholderPaint = new Paint(); + placeholderPaint.setColor(ColorUtils.resolveColor(R.color.bootstrap_gray_light, getContext())); + placeholderPaint.setStyle(Paint.Style.FILL); + placeholderPaint.setAntiAlias(true); + + this.baselineCornerRadius = getResources().getDimension(R.dimen.bthumbnail_rounded_corner); + this.baselineBorderWidth = getResources().getDimension(R.dimen.bthumbnail_default_border); + setScaleType(ScaleType.CENTER_CROP); + + super.initialise(attrs); + } + + protected void updateImageState() { + updateBackground(); + updatePadding(); + invalidate(); + } + + private void updateBackground() { + Drawable bg = null; + + if (hasBorder) { + bg = BootstrapDrawableFactory.bootstrapThumbnail( + getContext(), + bootstrapBrand, + (int) (baselineOuterBorderWidth * bootstrapSize), + ColorUtils.resolveColor(R.color.bootstrap_thumbnail_background, getContext()), + roundedCorners); + } + if (Build.VERSION.SDK_INT >= 16) { + setBackground(bg); + } + else { + setBackgroundDrawable(bg); + } + } + + private void updatePadding() { + if (Build.VERSION.SDK_INT >= 16) { + int p = hasBorder ? (int) (baselineBorderWidth * bootstrapSize) : 0; + setPadding(p, p, p, p); + setCropToPadding(hasBorder); + } + } + + @Override protected void onDraw(Canvas canvas) { + if (sourceBitmap == null) { // draw a placeholder + + float padding = hasBorder ? (baselineBorderWidth * bootstrapSize) : 0; + imageRect.top = padding; + imageRect.bottom = getHeight() - padding; + imageRect.left = padding; + imageRect.right = getWidth() - padding; + + if (roundedCorners) { + canvas.drawRoundRect( + imageRect, + (baselineCornerRadius * bootstrapSize), + (baselineCornerRadius * bootstrapSize), + placeholderPaint); + } + else { + canvas.drawRect(imageRect, placeholderPaint); + } + } + else { + super.onDraw(canvas); + } + } + + /* + * Getters/setters + */ + + @Override public void setRounded(boolean rounded) { + this.roundedCorners = rounded; + updateImageState(); + } + + @Override public boolean isRounded() { + return roundedCorners; + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/IconResolver.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/IconResolver.java new file mode 100644 index 0000000..e446d0c --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/IconResolver.java @@ -0,0 +1,105 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; + +import com.beardedhen.androidbootstrap.font.FontAwesome; +import com.beardedhen.androidbootstrap.font.IconSet; +import com.beardedhen.androidbootstrap.font.Typicon; + +/** + * Resolves markdown strings using FA codes and produces BootstrapText instances. + */ +class IconResolver { + + private static final String REGEX_FONT_AWESOME = "fa_[a-z_0-9]+"; + private static final String REGEX_TYPICONS = "ty_[a-z_0-9]+"; + + /** + * Resolves markdown to produce a BootstrapText instance. e.g. "{fa_android}" would be replaced + * with the appropriate FontAwesome character and a SpannableString producec. + * + * @param context the current context + * @param markdown the markdown string + * @return a constructed BootstrapText + */ + static BootstrapText resolveMarkdown(Context context, String markdown) { + if (markdown == null) { + return null; + } + else { // detect {fa_*} and split into spannable, ignore escaped chars + BootstrapText.Builder builder = new BootstrapText.Builder(context); + + int lastAddedIndex = 0; + int startIndex = -1; + int endIndex = -1; + + for (int i = 0; i < markdown.length(); i++) { + char c = markdown.charAt(i); + + if (c == '\\') { // escape sequence, ignore next char + i += 2; + continue; + } + + if (c == '{') { + startIndex = i; + } + else if (c == '}') { + endIndex = i; + } + + if (startIndex != -1 && endIndex != -1) { // recognised markdown string + + if (startIndex >= 0 && endIndex < markdown.length()) { + String iconCode = markdown.substring(startIndex + 1, endIndex); + builder.addText(markdown.substring(lastAddedIndex, startIndex)); + + if (iconCode.matches(REGEX_FONT_AWESOME)) { // text is FontAwesome code + builder.addIcon(iconCode, TypefaceProvider.retrieveRegisteredIconSet(FontAwesome.FONT_PATH)); + } + else if (iconCode.matches(REGEX_TYPICONS)) { + builder.addIcon(iconCode, TypefaceProvider.retrieveRegisteredIconSet(Typicon.FONT_PATH)); + } + else { + builder.addIcon(iconCode, resolveIconSet(iconCode)); + } + lastAddedIndex = endIndex + 1; + } + startIndex = -1; + endIndex = -1; + } + } + return builder.addText(markdown.substring(lastAddedIndex, markdown.length())).build(); + } + } + + /** + * Searches for the unicode character value for the Font Icon Code. This method searches all + * active FontIcons in the application. + * + * @param iconCode the font icon code + * @return the unicode character matching the icon, or null if none matches + */ + private static IconSet resolveIconSet(String iconCode) { + CharSequence unicode; + + for (IconSet set : TypefaceProvider.getRegisteredIconSets()) { + + if (set.fontPath().equals(FontAwesome.FONT_PATH) || set.fontPath().equals(Typicon.FONT_PATH)) { + continue; // already checked previously, ignore + } + + unicode = set.unicodeForKey(iconCode); + + if (unicode != null) { + return set; + } + } + + String message = String.format("Could not find FontIcon value for '%s', " + + "please ensure that it is mapped to a valid font", iconCode); + + throw new IllegalArgumentException(message); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/TypefaceProvider.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/TypefaceProvider.java new file mode 100644 index 0000000..a96fa92 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/TypefaceProvider.java @@ -0,0 +1,83 @@ +package com.beardedhen.androidbootstrap; + +import android.content.Context; +import android.graphics.Typeface; + +import com.beardedhen.androidbootstrap.font.FontAwesome; +import com.beardedhen.androidbootstrap.font.IconSet; +import com.beardedhen.androidbootstrap.font.Typicon; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * Holds static instances of Typefaces, and IconSets, allowing views to use them across the application + * without expensive initialisation. + */ +public class TypefaceProvider { + + private final static Map TYPEFACE_MAP = new HashMap<>(); + private final static Map REGISTERED_ICON_SETS = new HashMap<>(); + + /** + * Returns a reference to the requested typeface, creating a new instance if none already exists + * + * @param context the current context + * @param iconSet the icon typeface + * @return a reference to the typeface instance + */ + public static Typeface getTypeface(Context context, IconSet iconSet) { + String path = iconSet.fontPath().toString(); + + if (TYPEFACE_MAP.get(path) == null) { + final Typeface font = Typeface.createFromAsset(context.getAssets(), path); + TYPEFACE_MAP.put(path, font); + } + return TYPEFACE_MAP.get(path); + } + + /** + * Registers instances of the Default IconSets so that they are available throughout the whole + * application. Currently the default icon sets include FontAwesome and Typicon. + */ + public static void registerDefaultIconSets() { + final FontAwesome fontAwesome = new FontAwesome(); + final Typicon typicon = new Typicon(); + + REGISTERED_ICON_SETS.put(fontAwesome.fontPath(), fontAwesome); + REGISTERED_ICON_SETS.put(typicon.fontPath(), typicon); + } + + /** + * Registers a custom IconSet, so that it is available for use throughout the whole application. + * + * @param iconSet a custom IconSet + */ + public static void registerCustomIconSet(IconSet iconSet) { + REGISTERED_ICON_SETS.put(iconSet.fontPath(), iconSet); + } + + /** + * Retrieves a registered IconSet whose font can be found in the asset directory at the given path + * @param fontPath the given path + * @return the registered IconSet instance + */ + public static IconSet retrieveRegisteredIconSet(String fontPath) { + final IconSet iconSet = REGISTERED_ICON_SETS.get(fontPath); + + if (iconSet == null) { + throw new RuntimeException(String.format("Font '%s' not properly registered", fontPath)); + } + return iconSet; + } + + /** + * Retrieves a collection of all registered IconSets in the application + * @return a collection of registered IconSets. + */ + public static Collection getRegisteredIconSets() { + return REGISTERED_ICON_SETS.values(); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/BootstrapBrand.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/BootstrapBrand.java new file mode 100644 index 0000000..82fa8b1 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/BootstrapBrand.java @@ -0,0 +1,88 @@ +package com.beardedhen.androidbootstrap.api.attributes; + +import android.content.Context; +import android.support.annotation.ColorInt; + +import java.io.Serializable; + +/** + * A Bootstrap Brand is a color which is used universally across many Bootstrap Views. An example is + * the 'Info' Brand which colors views light blue. + */ +public interface BootstrapBrand extends Serializable { + + String KEY = "BootstrapBrand"; + + /** + * Retrieves the color that should be used for the default fill state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int defaultFill(Context context); + + /** + * Retrieves the color that should be used for the default border state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int defaultEdge(Context context); + + /** + * Retrieves the text color that should be used for the default state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int defaultTextColor(Context context); + + /** + * Retrieves the color that should be used for the active fill state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int activeFill(Context context); + + /** + * Retrieves the color that should be used for the active border state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int activeEdge(Context context); + + /** + * Retrieves the text color that should be used for the active state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int activeTextColor(Context context); + + /** + * Retrieves the color that should be used for the disabled fill state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int disabledFill(Context context); + + /** + * Retrieves the color that should be used for the disabled border state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int disabledEdge(Context context); + + /** + * Retrieves the text color that should be used for the disabled state + * + * @param context the current context + * @return the color for the current brand + */ + @ColorInt int disabledTextColor(Context context); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/BootstrapHeading.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/BootstrapHeading.java new file mode 100644 index 0000000..de13f5e --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/BootstrapHeading.java @@ -0,0 +1,39 @@ +package com.beardedhen.androidbootstrap.api.attributes; + +import android.content.Context; + +import java.io.Serializable; + +/** + * A Heading defines the text size and padding of its view. Bootstrap supports styles for H1-H6 + * elements out of the box. + */ +public interface BootstrapHeading extends Serializable { + + String KEY = "com.beardedhen.androidbootstrap.api.attributes.BootstrapHeading"; + + /** + * Retrieves the text size for the current BootstrapHeading. + * + * @param context the current context + * @return the text size + */ + float getTextSize(Context context); + + /** + * Retrieves the vertical padding for the current BootstrapHeading + * + * @param context the current context + * @return the vertical padding + */ + float verticalPadding(Context context); + + /** + * Retrieves the horizontal padding for the current BootstrapHeading + * + * @param context the current context + * @return the horizontal padding + */ + float horizontalPadding(Context context); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/ViewGroupPosition.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/ViewGroupPosition.java new file mode 100644 index 0000000..f7847c8 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/attributes/ViewGroupPosition.java @@ -0,0 +1,11 @@ +package com.beardedhen.androidbootstrap.api.attributes; + +public enum ViewGroupPosition { + SOLO, + MIDDLE_HORI, + MIDDLE_VERT, + TOP, + BOTTOM, + START, + END +} \ No newline at end of file diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/ButtonMode.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/ButtonMode.java new file mode 100644 index 0000000..2071de7 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/ButtonMode.java @@ -0,0 +1,23 @@ +package com.beardedhen.androidbootstrap.api.defaults; + +public enum ButtonMode { + REGULAR, + TOGGLE, + CHECKBOX, + RADIO; + + public static ButtonMode fromAttributeValue(int attrValue) { + switch (attrValue) { + case 0: + return REGULAR; + case 1: + return TOGGLE; + case 2: + return CHECKBOX; + case 3: + return RADIO; + default: + return REGULAR; + } + } +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapBrand.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapBrand.java new file mode 100644 index 0000000..9879d38 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapBrand.java @@ -0,0 +1,101 @@ +package com.beardedhen.androidbootstrap.api.defaults; + +import android.content.Context; +import android.support.annotation.ColorInt; + +import com.beardedhen.androidbootstrap.R; +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; + +import static com.beardedhen.androidbootstrap.utils.ColorUtils.ACTIVE_OPACITY_FACTOR_EDGE; +import static com.beardedhen.androidbootstrap.utils.ColorUtils.ACTIVE_OPACITY_FACTOR_FILL; +import static com.beardedhen.androidbootstrap.utils.ColorUtils.DISABLED_ALPHA_EDGE; +import static com.beardedhen.androidbootstrap.utils.ColorUtils.DISABLED_ALPHA_FILL; +import static com.beardedhen.androidbootstrap.utils.ColorUtils.decreaseRgbChannels; +import static com.beardedhen.androidbootstrap.utils.ColorUtils.increaseOpacity; +import static com.beardedhen.androidbootstrap.utils.ColorUtils.resolveColor; + +/** + * Bootstrap provides 6 brands by default - Primary, Success, Info, Warning, Danger, and Default. + * Brands are often supplemented by view-specific colors, which are not globally used. + */ +public enum DefaultBootstrapBrand implements BootstrapBrand { + + PRIMARY(R.color.bootstrap_brand_primary), + SUCCESS(R.color.bootstrap_brand_success), + INFO(R.color.bootstrap_brand_info), + WARNING(R.color.bootstrap_brand_warning), + DANGER(R.color.bootstrap_brand_danger), + SECONDARY(R.color.bootstrap_brand_secondary_fill, R.color.bootstrap_brand_secondary_text), + REGULAR(R.color.bootstrap_gray_light); + + private final int textColor; + private final int color; + + DefaultBootstrapBrand(int color) { + this.color = color; + this.textColor = android.R.color.white; + } + + DefaultBootstrapBrand(int color, int textColor) { + this.color = color; + this.textColor = textColor; + } + + public static DefaultBootstrapBrand fromAttributeValue(int attrValue) { + switch (attrValue) { + case 0: + return PRIMARY; + case 1: + return SUCCESS; + case 2: + return INFO; + case 3: + return WARNING; + case 4: + return DANGER; + case 5: + return REGULAR; + case 6: + return SECONDARY; + default: + return REGULAR; + } + } + + @ColorInt public int defaultFill(Context context) { + return resolveColor(color, context); + } + + @ColorInt public int defaultEdge(Context context) { + return decreaseRgbChannels(context, color, ACTIVE_OPACITY_FACTOR_EDGE); + } + + @ColorInt public int activeFill(Context context) { + return decreaseRgbChannels(context, color, ACTIVE_OPACITY_FACTOR_FILL); + } + + @ColorInt public int activeEdge(Context context) { + return decreaseRgbChannels(context, color, ACTIVE_OPACITY_FACTOR_FILL + ACTIVE_OPACITY_FACTOR_EDGE); + } + + @ColorInt public int disabledFill(Context context) { + return increaseOpacity(context, color, DISABLED_ALPHA_FILL); + } + + @ColorInt public int disabledEdge(Context context) { + return increaseOpacity(context, color, DISABLED_ALPHA_FILL - DISABLED_ALPHA_EDGE); + } + + @ColorInt public int defaultTextColor(Context context) { + return resolveColor(textColor, context); + } + + @ColorInt public int activeTextColor(Context context) { + return resolveColor(textColor, context); + } + + @ColorInt public int disabledTextColor(Context context) { + return resolveColor(textColor, context); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapHeading.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapHeading.java new file mode 100644 index 0000000..d0197ee --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapHeading.java @@ -0,0 +1,81 @@ +package com.beardedhen.androidbootstrap.api.defaults; + +import android.content.Context; +import android.support.annotation.DimenRes; + +import com.beardedhen.androidbootstrap.R; +import com.beardedhen.androidbootstrap.api.attributes.BootstrapHeading; +import com.beardedhen.androidbootstrap.utils.DimenUtils; + +/** + * Bootstrap provides styling for elements H1-H6, and sets their text size & padding using the + * values supplied here. + */ +public enum DefaultBootstrapHeading implements BootstrapHeading { + + H1(R.dimen.bootstrap_h1_text_size, + R.dimen.bootstrap_h1_vert_padding, + R.dimen.bootstrap_h1_hori_padding), + + H2(R.dimen.bootstrap_h2_text_size, + R.dimen.bootstrap_h2_vert_padding, + R.dimen.bootstrap_h2_hori_padding), + + H3(R.dimen.bootstrap_h3_text_size, + R.dimen.bootstrap_h3_vert_padding, + R.dimen.bootstrap_h3_hori_padding), + + H4(R.dimen.bootstrap_h4_text_size, + R.dimen.bootstrap_h4_vert_padding, + R.dimen.bootstrap_h4_hori_padding), + + H5(R.dimen.bootstrap_h5_text_size, + R.dimen.bootstrap_h5_vert_padding, + R.dimen.bootstrap_h5_hori_padding), + + H6(R.dimen.bootstrap_h6_text_size, + R.dimen.bootstrap_h6_vert_padding, + R.dimen.bootstrap_h6_hori_padding); + + private final @DimenRes int textSize; + private final @DimenRes int vertPadding; + private final @DimenRes int horiPadding; + + DefaultBootstrapHeading(int textSize, int vertPadding, int horiPadding) { + this.textSize = textSize; + this.vertPadding = vertPadding; + this.horiPadding = horiPadding; + } + + public static DefaultBootstrapHeading fromAttributeValue(int attrValue) { + switch (attrValue) { + case 0: + return H1; + case 1: + return H2; + case 2: + return H3; + case 3: + return H4; + case 4: + return H5; + case 5: + return H6; + default: + return H6; + } + } + + @Override public float getTextSize(Context context) { + return DimenUtils.pixelsFromSpResource(context, textSize); + } + + @Override public float verticalPadding(Context context) { + return DimenUtils.pixelsFromDpResource(context, vertPadding); + } + + @Override public float horizontalPadding(Context context) { + return DimenUtils.pixelsFromDpResource(context, horiPadding); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapSize.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapSize.java new file mode 100644 index 0000000..df48e60 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/defaults/DefaultBootstrapSize.java @@ -0,0 +1,49 @@ +package com.beardedhen.androidbootstrap.api.defaults; + +/** + * Bootstrap provides 5 sizes - XS, SM, MD, LG, and XL. In the Android implementation the scale + * factors used are 0.70, 0.85, 1.00, 1.30, and 1.60 respectively. + */ +public enum DefaultBootstrapSize { + + XS(), + SM(), + MD(), + LG(), + XL(); + + public static DefaultBootstrapSize fromAttributeValue(int attrValue) { + switch (attrValue) { + case 0: + return XS; + case 1: + return SM; + case 2: + return MD; + case 3: + return LG; + case 4: + return XL; + default: + return MD; + } + } + + public float scaleFactor() { + switch (this) { + case XS: + return 0.70f; + case SM: + return 0.85f; + case MD: + return 1.00f; + case LG: + return 1.30f; + case XL: + return 1.60f; + default: + return 1.00f; + } + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapBrandView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapBrandView.java new file mode 100644 index 0000000..d236fb7 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapBrandView.java @@ -0,0 +1,26 @@ +package com.beardedhen.androidbootstrap.api.view; + +import android.support.annotation.NonNull; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; + +/** + * Views which implement this interface change their color according to the given Bootstrap Brand + */ +public interface BootstrapBrandView { + + String KEY = "com.beardedhen.androidbootstrap.api.view.BootstrapBrandView"; + + /** + * Changes the color of the view to match the given Bootstrap Brand + * + * @param bootstrapBrand the Bootstrap Brand + */ + void setBootstrapBrand(@NonNull BootstrapBrand bootstrapBrand); + + /** + * @return the current Bootstrap Brand + */ + @NonNull BootstrapBrand getBootstrapBrand(); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapHeadingView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapHeadingView.java new file mode 100644 index 0000000..d5da082 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapHeadingView.java @@ -0,0 +1,27 @@ +package com.beardedhen.androidbootstrap.api.view; + +import android.support.annotation.NonNull; + +import com.beardedhen.androidbootstrap.api.attributes.BootstrapHeading; + +/** + * Views which implement this interface change their text size & padding according to the + * given Bootstrap Heading + */ +public interface BootstrapHeadingView { + + String KEY = "com.beardedhen.androidbootstrap.api.attributes.BootstrapHeading"; + + /** + * Sets this view to use the given Bootstrap Heading, changing its text size & padding + * + * @param bootstrapHeading the Bootstrap Heading + */ + void setBootstrapHeading(@NonNull BootstrapHeading bootstrapHeading); + + /** + * @return the Bootstrap Heading for the view + */ + @NonNull BootstrapHeading getBootstrapHeading(); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapSizeView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapSizeView.java new file mode 100644 index 0000000..1771486 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapSizeView.java @@ -0,0 +1,38 @@ +package com.beardedhen.androidbootstrap.api.view; + +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; + +/** + * Classes which implement this interface allow aspects of their view to be scaled by a float factor. + * For example, a Button may double its padding from the baseline if a factor of 2.0 is provided. + */ +public interface BootstrapSizeView { + + String KEY = "com.beardedhen.androidbootstrap.api.view.BootstrapSizeView"; + + /** + * Retrieves the scale factor that should be used to scale a view from its baseline size. + * For example, specifying that a Button should use a scale factor of 2.0 may increase its + * padding and font size by that factor. + * + * @return the scale factor + */ + float getBootstrapSize(); + + /** + * Sets the scale factor that should be used to scale a view from its baseline size. + * For example, specifying that a Button should use a scale factor of 2.0 may increase its + * padding and font size by that factor. + * + * @param bootstrapSize the scale factor + */ + void setBootstrapSize(float bootstrapSize); + + /** + * Convenience method that sets the scale factor using a default bootstrap size enum value. + * + * @param bootstrapSize a default scale factor + */ + void setBootstrapSize(DefaultBootstrapSize bootstrapSize); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapTextView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapTextView.java new file mode 100644 index 0000000..4a3b904 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BootstrapTextView.java @@ -0,0 +1,34 @@ +package com.beardedhen.androidbootstrap.api.view; + +import android.support.annotation.Nullable; + +import com.beardedhen.androidbootstrap.BootstrapText; + +/** + * Views which implement this interface can set their text using BootstrapText + */ +public interface BootstrapTextView { + + String KEY = "com.beardedhen.androidbootstrap.BootstrapText"; + + /** + * Sets the view to display the given BootstrapText + * + * @param bootstrapText the BootstrapText + */ + void setBootstrapText(@Nullable BootstrapText bootstrapText); + + /** + * @return the current BootstrapText, or null if none exists + */ + @Nullable BootstrapText getBootstrapText(); + + /** + * Sets the view to display the given markdown text, by constructing a BootstrapText. e.g. + * "This is a {fa-stop} button" + * + * @param text the markdown text + */ + void setMarkdownText(@Nullable String text); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BorderView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BorderView.java new file mode 100644 index 0000000..02f0cbb --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/BorderView.java @@ -0,0 +1,22 @@ +package com.beardedhen.androidbootstrap.api.view; + +/** + * Views which implement this interface allow the border to be dynamically displayed + */ +public interface BorderView { + + String KEY_DISPLAYED = "com.beardedhen.androidbootstrap.api.view.KEY_DISPLAYED"; + + /** + * Sets whether a border should be displayed or not + * + * @param displayed whether a border should be displayed or not + */ + void setBorderDisplayed(boolean displayed); + + /** + * @return whether the border is displayed or not + */ + boolean isBorderDisplayed(); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/ButtonModeView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/ButtonModeView.java new file mode 100644 index 0000000..cb7e29e --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/ButtonModeView.java @@ -0,0 +1,24 @@ +package com.beardedhen.androidbootstrap.api.view; + +import android.support.annotation.NonNull; + +import com.beardedhen.androidbootstrap.api.defaults.ButtonMode; + +/** + * Views which implement this interface allow the selection mode of their buttons to be set + */ +public interface ButtonModeView { + + /** + * @return the selection mode currently used by the button + */ + @NonNull ButtonMode getButtonMode(); + + /** + * Sets the selection mode the button should use + * + * @param buttonMode the selection mode + */ + void setButtonMode(@NonNull ButtonMode buttonMode); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/OutlineableView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/OutlineableView.java new file mode 100644 index 0000000..3441d48 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/OutlineableView.java @@ -0,0 +1,23 @@ +package com.beardedhen.androidbootstrap.api.view; + +/** + * Views which implement this interface allow the user to specify whether the view should be + * displayed as an outline or not. + */ +public interface OutlineableView { + + String KEY = "Outlineable"; + + /** + * Sets whether the view should display itself as an outline or not. + * + * @param showOutline true to display as an outline, otherwise false + */ + void setShowOutline(boolean showOutline); + + /** + * @return true if the view is currently displaying itself as an outline + */ + boolean isShowOutline(); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/ProgressView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/ProgressView.java new file mode 100644 index 0000000..d4eff98 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/ProgressView.java @@ -0,0 +1,53 @@ +package com.beardedhen.androidbootstrap.api.view; + +import android.support.annotation.IntRange; + +/** + * Views which implement this interface visually display ongoing progress to users + */ +public interface ProgressView { + + String KEY_USER_PROGRESS = "com.beardedhen.androidbootstrap.api.view.KEY_USER_PROGRESS"; + String KEY_DRAWN_PROGRESS = "com.beardedhen.androidbootstrap.api.view.KEY_DRAWN_PROGRESS"; + String KEY_STRIPED = "com.beardedhen.androidbootstrap.api.view.KEY_STRIPED"; + String KEY_ANIMATED = "com.beardedhen.androidbootstrap.api.view.KEY_ANIMATED"; + + /** + * Updates the amount of progress displayed to the user. + * + * @param progress an integer between 0-100 + */ + void setProgress(@IntRange(from=0,to=100) int progress); + + /** + * @return the amount of progress displayed to the user (0-100) + */ + @IntRange(from=0,to=100)int getProgress(); + + /** + * Sets whether the view should display a striped pattern. + * + * @param striped true for a striped pattern, false for a plain pattern + */ + void setStriped(boolean striped); + + /** + * @return true if the view is displaying a striped pattern, otherwise false + */ + boolean isStriped(); + + /** + * Sets whether the view should animate itself. If the view is striped, the animation will run + * in an infinite loop; if the view is not striped, the animation will only be visible when + * setProgress() is called. + * + * @param animated whether the view should animate its updates or not. + */ + void setAnimated(boolean animated); + + /** + * @return true if the view should animate itself + */ + boolean isAnimated(); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/RoundableView.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/RoundableView.java new file mode 100644 index 0000000..4d9d5ec --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/api/view/RoundableView.java @@ -0,0 +1,23 @@ +package com.beardedhen.androidbootstrap.api.view; + +/** + * Views which implement this interface allow the user to specify whether the view should have + * rounded corners or not. The interpretation of what a 'rounded corner' is will differ between views. + */ +public interface RoundableView { + + String KEY = "com.beardedhen.androidbootstrap.api.view.Roundable"; + + /** + * Sets whether the view should display rounded corners or not + * + * @param rounded whether the view should be rounded + */ + void setRounded(boolean rounded); + + /** + * @return true if the view is displaying rounded corners, otherwise false + */ + boolean isRounded(); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/AwesomeTypefaceSpan.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/AwesomeTypefaceSpan.java new file mode 100644 index 0000000..5149263 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/AwesomeTypefaceSpan.java @@ -0,0 +1,32 @@ +package com.beardedhen.androidbootstrap.font; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.text.TextPaint; +import android.text.style.TypefaceSpan; + +import com.beardedhen.androidbootstrap.TypefaceProvider; + +/** + * A custom span which paints text using the typeface specified by the IconSet passed to the constructor + */ +public class AwesomeTypefaceSpan extends TypefaceSpan { + + private final Context context; + private final IconSet iconSet; + + public AwesomeTypefaceSpan(Context context, IconSet iconSet) { + super(iconSet.fontPath().toString()); + this.context = context.getApplicationContext(); + this.iconSet = iconSet; + } + + @Override public void updateDrawState(@NonNull TextPaint ds) { + ds.setTypeface(TypefaceProvider.getTypeface(context, iconSet)); + } + + @Override public void updateMeasureState(@NonNull TextPaint paint) { + paint.setTypeface(TypefaceProvider.getTypeface(context, iconSet)); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/FontAwesome.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/FontAwesome.java new file mode 100644 index 0000000..b0c043b --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/FontAwesome.java @@ -0,0 +1,2742 @@ +package com.beardedhen.androidbootstrap.font; + +import android.support.annotation.StringDef; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.HashMap; +import java.util.Map; + +/** + * Maps FontAwesome Icon Codes to unicode characters, allowing its use in AwesomeTextView. + * See the Cheatsheet for icon + * code reference. Please note that icon codes use underscores rather than hyphens in this + * library. For example, "fa-play" would become "fa_play". This is due to restrictions in how + * Android Attributes can be named. + */ +public class FontAwesome implements IconSet { + + public static final String FONT_PATH = "fontawesome-webfont-v440.ttf"; + + @Override public CharSequence unicodeForKey(@Icon CharSequence key) { + return ICON_MAP.get(key); + } + + @Override public CharSequence iconCodeForAttrIndex(int index) { + return ATTR_MAP.get(index); + } + + @Override public CharSequence fontPath() { + return FONT_PATH; + } + + // Auto-generated Icon Set from 2015-10-05 + + private static final Map ICON_MAP = new HashMap<>(); + private static final Map ATTR_MAP = new HashMap<>(); + + @Retention(RetentionPolicy.SOURCE) + @StringDef({ + FA_ADJUST, + FA_ADN, + FA_ALIGN_CENTER, + FA_ALIGN_JUSTIFY, + FA_ALIGN_LEFT, + FA_ALIGN_RIGHT, + FA_AMAZON, + FA_AMBULANCE, + FA_ANCHOR, + FA_ANDROID, + FA_ANGELLIST, + FA_ANGLE_DOUBLE_DOWN, + FA_ANGLE_DOUBLE_LEFT, + FA_ANGLE_DOUBLE_RIGHT, + FA_ANGLE_DOUBLE_UP, + FA_ANGLE_DOWN, + FA_ANGLE_LEFT, + FA_ANGLE_RIGHT, + FA_ANGLE_UP, + FA_APPLE, + FA_ARCHIVE, + FA_AREA_CHART, + FA_ARROW_CIRCLE_DOWN, + FA_ARROW_CIRCLE_LEFT, + FA_ARROW_CIRCLE_O_DOWN, + FA_ARROW_CIRCLE_O_LEFT, + FA_ARROW_CIRCLE_O_RIGHT, + FA_ARROW_CIRCLE_O_UP, + FA_ARROW_CIRCLE_RIGHT, + FA_ARROW_CIRCLE_UP, + FA_ARROW_DOWN, + FA_ARROW_LEFT, + FA_ARROW_RIGHT, + FA_ARROW_UP, + FA_ARROWS, + FA_ARROWS_ALT, + FA_ARROWS_H, + FA_ARROWS_V, + FA_ASTERISK, + FA_AT, + FA_AUTOMOBILE, + FA_BACKWARD, + FA_BALANCE_SCALE, + FA_BAN, + FA_BANK, + FA_BAR_CHART, + FA_BAR_CHART_O, + FA_BARCODE, + FA_BARS, + FA_BATTERY_0, + FA_BATTERY_1, + FA_BATTERY_2, + FA_BATTERY_3, + FA_BATTERY_4, + FA_BATTERY_EMPTY, + FA_BATTERY_FULL, + FA_BATTERY_HALF, + FA_BATTERY_QUARTER, + FA_BATTERY_THREE_QUARTERS, + FA_BED, + FA_BEER, + FA_BEHANCE, + FA_BEHANCE_SQUARE, + FA_BELL, + FA_BELL_O, + FA_BELL_SLASH, + FA_BELL_SLASH_O, + FA_BICYCLE, + FA_BINOCULARS, + FA_BIRTHDAY_CAKE, + FA_BITBUCKET, + FA_BITBUCKET_SQUARE, + FA_BITCOIN, + FA_BLACK_TIE, + FA_BOLD, + FA_BOLT, + FA_BOMB, + FA_BOOK, + FA_BOOKMARK, + FA_BOOKMARK_O, + FA_BRIEFCASE, + FA_BTC, + FA_BUG, + FA_BUILDING, + FA_BUILDING_O, + FA_BULLHORN, + FA_BULLSEYE, + FA_BUS, + FA_BUYSELLADS, + FA_CAB, + FA_CALCULATOR, + FA_CALENDAR, + FA_CALENDAR_CHECK_O, + FA_CALENDAR_MINUS_O, + FA_CALENDAR_O, + FA_CALENDAR_PLUS_O, + FA_CALENDAR_TIMES_O, + FA_CAMERA, + FA_CAMERA_RETRO, + FA_CAR, + FA_CARET_DOWN, + FA_CARET_LEFT, + FA_CARET_RIGHT, + FA_CARET_SQUARE_O_DOWN, + FA_CARET_SQUARE_O_LEFT, + FA_CARET_SQUARE_O_RIGHT, + FA_CARET_SQUARE_O_UP, + FA_CARET_UP, + FA_CART_ARROW_DOWN, + FA_CART_PLUS, + FA_CC, + FA_CC_AMEX, + FA_CC_DINERS_CLUB, + FA_CC_DISCOVER, + FA_CC_JCB, + FA_CC_MASTERCARD, + FA_CC_PAYPAL, + FA_CC_STRIPE, + FA_CC_VISA, + FA_CERTIFICATE, + FA_CHAIN, + FA_CHAIN_BROKEN, + FA_CHECK, + FA_CHECK_CIRCLE, + FA_CHECK_CIRCLE_O, + FA_CHECK_SQUARE, + FA_CHECK_SQUARE_O, + FA_CHEVRON_CIRCLE_DOWN, + FA_CHEVRON_CIRCLE_LEFT, + FA_CHEVRON_CIRCLE_RIGHT, + FA_CHEVRON_CIRCLE_UP, + FA_CHEVRON_DOWN, + FA_CHEVRON_LEFT, + FA_CHEVRON_RIGHT, + FA_CHEVRON_UP, + FA_CHILD, + FA_CHROME, + FA_CIRCLE, + FA_CIRCLE_O, + FA_CIRCLE_O_NOTCH, + FA_CIRCLE_THIN, + FA_CLIPBOARD, + FA_CLOCK_O, + FA_CLONE, + FA_CLOSE, + FA_CLOUD, + FA_CLOUD_DOWNLOAD, + FA_CLOUD_UPLOAD, + FA_CNY, + FA_CODE, + FA_CODE_FORK, + FA_CODEPEN, + FA_COFFEE, + FA_COG, + FA_COGS, + FA_COLUMNS, + FA_COMMENT, + FA_COMMENT_O, + FA_COMMENTING, + FA_COMMENTING_O, + FA_COMMENTS, + FA_COMMENTS_O, + FA_COMPASS, + FA_COMPRESS, + FA_CONNECTDEVELOP, + FA_CONTAO, + FA_COPY, + FA_COPYRIGHT, + FA_CREATIVE_COMMONS, + FA_CREDIT_CARD, + FA_CROP, + FA_CROSSHAIRS, + FA_CSS3, + FA_CUBE, + FA_CUBES, + FA_CUT, + FA_CUTLERY, + FA_DASHBOARD, + FA_DASHCUBE, + FA_DATABASE, + FA_DEDENT, + FA_DELICIOUS, + FA_DESKTOP, + FA_DEVIANTART, + FA_DIAMOND, + FA_DIGG, + FA_DOLLAR, + FA_DOT_CIRCLE_O, + FA_DOWNLOAD, + FA_DRIBBBLE, + FA_DROPBOX, + FA_DRUPAL, + FA_EDIT, + FA_EJECT, + FA_ELLIPSIS_H, + FA_ELLIPSIS_V, + FA_EMPIRE, + FA_ENVELOPE, + FA_ENVELOPE_O, + FA_ENVELOPE_SQUARE, + FA_ERASER, + FA_EUR, + FA_EURO, + FA_EXCHANGE, + FA_EXCLAMATION, + FA_EXCLAMATION_CIRCLE, + FA_EXCLAMATION_TRIANGLE, + FA_EXPAND, + FA_EXPEDITEDSSL, + FA_EXTERNAL_LINK, + FA_EXTERNAL_LINK_SQUARE, + FA_EYE, + FA_EYE_SLASH, + FA_EYEDROPPER, + FA_FACEBOOK, + FA_FACEBOOK_F, + FA_FACEBOOK_OFFICIAL, + FA_FACEBOOK_SQUARE, + FA_FAST_BACKWARD, + FA_FAST_FORWARD, + FA_FAX, + FA_FEED, + FA_FEMALE, + FA_FIGHTER_JET, + FA_FILE, + FA_FILE_ARCHIVE_O, + FA_FILE_AUDIO_O, + FA_FILE_CODE_O, + FA_FILE_EXCEL_O, + FA_FILE_IMAGE_O, + FA_FILE_MOVIE_O, + FA_FILE_O, + FA_FILE_PDF_O, + FA_FILE_PHOTO_O, + FA_FILE_PICTURE_O, + FA_FILE_POWERPOINT_O, + FA_FILE_SOUND_O, + FA_FILE_TEXT, + FA_FILE_TEXT_O, + FA_FILE_VIDEO_O, + FA_FILE_WORD_O, + FA_FILE_ZIP_O, + FA_FILES_O, + FA_FILM, + FA_FILTER, + FA_FIRE, + FA_FIRE_EXTINGUISHER, + FA_FIREFOX, + FA_FLAG, + FA_FLAG_CHECKERED, + FA_FLAG_O, + FA_FLASH, + FA_FLASK, + FA_FLICKR, + FA_FLOPPY_O, + FA_FOLDER, + FA_FOLDER_O, + FA_FOLDER_OPEN, + FA_FOLDER_OPEN_O, + FA_FONT, + FA_FONTICONS, + FA_FORUMBEE, + FA_FORWARD, + FA_FOURSQUARE, + FA_FROWN_O, + FA_FUTBOL_O, + FA_GAMEPAD, + FA_GAVEL, + FA_GBP, + FA_GE, + FA_GEAR, + FA_GEARS, + FA_GENDERLESS, + FA_GET_POCKET, + FA_GG, + FA_GG_CIRCLE, + FA_GIFT, + FA_GIT, + FA_GIT_SQUARE, + FA_GITHUB, + FA_GITHUB_ALT, + FA_GITHUB_SQUARE, + FA_GITTIP, + FA_GLASS, + FA_GLOBE, + FA_GOOGLE, + FA_GOOGLE_PLUS, + FA_GOOGLE_PLUS_SQUARE, + FA_GOOGLE_WALLET, + FA_GRADUATION_CAP, + FA_GRATIPAY, + FA_GROUP, + FA_H_SQUARE, + FA_HACKER_NEWS, + FA_HAND_GRAB_O, + FA_HAND_LIZARD_O, + FA_HAND_O_DOWN, + FA_HAND_O_LEFT, + FA_HAND_O_RIGHT, + FA_HAND_O_UP, + FA_HAND_PAPER_O, + FA_HAND_PEACE_O, + FA_HAND_POINTER_O, + FA_HAND_ROCK_O, + FA_HAND_SCISSORS_O, + FA_HAND_SPOCK_O, + FA_HAND_STOP_O, + FA_HDD_O, + FA_HEADER, + FA_HEADPHONES, + FA_HEART, + FA_HEART_O, + FA_HEARTBEAT, + FA_HISTORY, + FA_HOME, + FA_HOSPITAL_O, + FA_HOTEL, + FA_HOURGLASS, + FA_HOURGLASS_1, + FA_HOURGLASS_2, + FA_HOURGLASS_3, + FA_HOURGLASS_END, + FA_HOURGLASS_HALF, + FA_HOURGLASS_O, + FA_HOURGLASS_START, + FA_HOUZZ, + FA_HTML5, + FA_I_CURSOR, + FA_ILS, + FA_IMAGE, + FA_INBOX, + FA_INDENT, + FA_INDUSTRY, + FA_INFO, + FA_INFO_CIRCLE, + FA_INR, + FA_INSTAGRAM, + FA_INSTITUTION, + FA_INTERNET_EXPLORER, + FA_INTERSEX, + FA_IOXHOST, + FA_ITALIC, + FA_JOOMLA, + FA_JPY, + FA_JSFIDDLE, + FA_KEY, + FA_KEYBOARD_O, + FA_KRW, + FA_LANGUAGE, + FA_LAPTOP, + FA_LASTFM, + FA_LASTFM_SQUARE, + FA_LEAF, + FA_LEANPUB, + FA_LEGAL, + FA_LEMON_O, + FA_LEVEL_DOWN, + FA_LEVEL_UP, + FA_LIFE_BOUY, + FA_LIFE_BUOY, + FA_LIFE_RING, + FA_LIFE_SAVER, + FA_LIGHTBULB_O, + FA_LINE_CHART, + FA_LINK, + FA_LINKEDIN, + FA_LINKEDIN_SQUARE, + FA_LINUX, + FA_LIST, + FA_LIST_ALT, + FA_LIST_OL, + FA_LIST_UL, + FA_LOCATION_ARROW, + FA_LOCK, + FA_LONG_ARROW_DOWN, + FA_LONG_ARROW_LEFT, + FA_LONG_ARROW_RIGHT, + FA_LONG_ARROW_UP, + FA_MAGIC, + FA_MAGNET, + FA_MAIL_FORWARD, + FA_MAIL_REPLY, + FA_MAIL_REPLY_ALL, + FA_MALE, + FA_MAP, + FA_MAP_MARKER, + FA_MAP_O, + FA_MAP_PIN, + FA_MAP_SIGNS, + FA_MARS, + FA_MARS_DOUBLE, + FA_MARS_STROKE, + FA_MARS_STROKE_H, + FA_MARS_STROKE_V, + FA_MAXCDN, + FA_MEANPATH, + FA_MEDIUM, + FA_MEDKIT, + FA_MEH_O, + FA_MERCURY, + FA_MICROPHONE, + FA_MICROPHONE_SLASH, + FA_MINUS, + FA_MINUS_CIRCLE, + FA_MINUS_SQUARE, + FA_MINUS_SQUARE_O, + FA_MOBILE, + FA_MOBILE_PHONE, + FA_MONEY, + FA_MOON_O, + FA_MORTAR_BOARD, + FA_MOTORCYCLE, + FA_MOUSE_POINTER, + FA_MUSIC, + FA_NAVICON, + FA_NEUTER, + FA_NEWSPAPER_O, + FA_OBJECT_GROUP, + FA_OBJECT_UNGROUP, + FA_ODNOKLASSNIKI, + FA_ODNOKLASSNIKI_SQUARE, + FA_OPENCART, + FA_OPENID, + FA_OPERA, + FA_OPTIN_MONSTER, + FA_OUTDENT, + FA_PAGELINES, + FA_PAINT_BRUSH, + FA_PAPER_PLANE, + FA_PAPER_PLANE_O, + FA_PAPERCLIP, + FA_PARAGRAPH, + FA_PASTE, + FA_PAUSE, + FA_PAW, + FA_PAYPAL, + FA_PENCIL, + FA_PENCIL_SQUARE, + FA_PENCIL_SQUARE_O, + FA_PHONE, + FA_PHONE_SQUARE, + FA_PHOTO, + FA_PICTURE_O, + FA_PIE_CHART, + FA_PIED_PIPER, + FA_PIED_PIPER_ALT, + FA_PINTEREST, + FA_PINTEREST_P, + FA_PINTEREST_SQUARE, + FA_PLANE, + FA_PLAY, + FA_PLAY_CIRCLE, + FA_PLAY_CIRCLE_O, + FA_PLUG, + FA_PLUS, + FA_PLUS_CIRCLE, + FA_PLUS_SQUARE, + FA_PLUS_SQUARE_O, + FA_POWER_OFF, + FA_PRINT, + FA_PUZZLE_PIECE, + FA_QQ, + FA_QRCODE, + FA_QUESTION, + FA_QUESTION_CIRCLE, + FA_QUOTE_LEFT, + FA_QUOTE_RIGHT, + FA_RA, + FA_RANDOM, + FA_REBEL, + FA_RECYCLE, + FA_REDDIT, + FA_REDDIT_SQUARE, + FA_REFRESH, + FA_REGISTERED, + FA_REMOVE, + FA_RENREN, + FA_REORDER, + FA_REPEAT, + FA_REPLY, + FA_REPLY_ALL, + FA_RETWEET, + FA_RMB, + FA_ROAD, + FA_ROCKET, + FA_ROTATE_LEFT, + FA_ROTATE_RIGHT, + FA_ROUBLE, + FA_RSS, + FA_RSS_SQUARE, + FA_RUB, + FA_RUBLE, + FA_RUPEE, + FA_SAFARI, + FA_SAVE, + FA_SCISSORS, + FA_SEARCH, + FA_SEARCH_MINUS, + FA_SEARCH_PLUS, + FA_SELLSY, + FA_SEND, + FA_SEND_O, + FA_SERVER, + FA_SHARE, + FA_SHARE_ALT, + FA_SHARE_ALT_SQUARE, + FA_SHARE_SQUARE, + FA_SHARE_SQUARE_O, + FA_SHEKEL, + FA_SHEQEL, + FA_SHIELD, + FA_SHIP, + FA_SHIRTSINBULK, + FA_SHOPPING_CART, + FA_SIGN_IN, + FA_SIGN_OUT, + FA_SIGNAL, + FA_SIMPLYBUILT, + FA_SITEMAP, + FA_SKYATLAS, + FA_SKYPE, + FA_SLACK, + FA_SLIDERS, + FA_SLIDESHARE, + FA_SMILE_O, + FA_SOCCER_BALL_O, + FA_SORT, + FA_SORT_ALPHA_ASC, + FA_SORT_ALPHA_DESC, + FA_SORT_AMOUNT_ASC, + FA_SORT_AMOUNT_DESC, + FA_SORT_ASC, + FA_SORT_DESC, + FA_SORT_DOWN, + FA_SORT_NUMERIC_ASC, + FA_SORT_NUMERIC_DESC, + FA_SORT_UP, + FA_SOUNDCLOUD, + FA_SPACE_SHUTTLE, + FA_SPINNER, + FA_SPOON, + FA_SPOTIFY, + FA_SQUARE, + FA_SQUARE_O, + FA_STACK_EXCHANGE, + FA_STACK_OVERFLOW, + FA_STAR, + FA_STAR_HALF, + FA_STAR_HALF_EMPTY, + FA_STAR_HALF_FULL, + FA_STAR_HALF_O, + FA_STAR_O, + FA_STEAM, + FA_STEAM_SQUARE, + FA_STEP_BACKWARD, + FA_STEP_FORWARD, + FA_STETHOSCOPE, + FA_STICKY_NOTE, + FA_STICKY_NOTE_O, + FA_STOP, + FA_STREET_VIEW, + FA_STRIKETHROUGH, + FA_STUMBLEUPON, + FA_STUMBLEUPON_CIRCLE, + FA_SUBSCRIPT, + FA_SUBWAY, + FA_SUITCASE, + FA_SUN_O, + FA_SUPERSCRIPT, + FA_SUPPORT, + FA_TABLE, + FA_TABLET, + FA_TACHOMETER, + FA_TAG, + FA_TAGS, + FA_TASKS, + FA_TAXI, + FA_TELEVISION, + FA_TENCENT_WEIBO, + FA_TERMINAL, + FA_TEXT_HEIGHT, + FA_TEXT_WIDTH, + FA_TH, + FA_TH_LARGE, + FA_TH_LIST, + FA_THUMB_TACK, + FA_THUMBS_DOWN, + FA_THUMBS_O_DOWN, + FA_THUMBS_O_UP, + FA_THUMBS_UP, + FA_TICKET, + FA_TIMES, + FA_TIMES_CIRCLE, + FA_TIMES_CIRCLE_O, + FA_TINT, + FA_TOGGLE_DOWN, + FA_TOGGLE_LEFT, + FA_TOGGLE_OFF, + FA_TOGGLE_ON, + FA_TOGGLE_RIGHT, + FA_TOGGLE_UP, + FA_TRADEMARK, + FA_TRAIN, + FA_TRANSGENDER, + FA_TRANSGENDER_ALT, + FA_TRASH, + FA_TRASH_O, + FA_TREE, + FA_TRELLO, + FA_TRIPADVISOR, + FA_TROPHY, + FA_TRUCK, + FA_TRY, + FA_TTY, + FA_TUMBLR, + FA_TUMBLR_SQUARE, + FA_TURKISH_LIRA, + FA_TV, + FA_TWITCH, + FA_TWITTER, + FA_TWITTER_SQUARE, + FA_UMBRELLA, + FA_UNDERLINE, + FA_UNDO, + FA_UNIVERSITY, + FA_UNLINK, + FA_UNLOCK, + FA_UNLOCK_ALT, + FA_UNSORTED, + FA_UPLOAD, + FA_USD, + FA_USER, + FA_USER_MD, + FA_USER_PLUS, + FA_USER_SECRET, + FA_USER_TIMES, + FA_USERS, + FA_VENUS, + FA_VENUS_DOUBLE, + FA_VENUS_MARS, + FA_VIACOIN, + FA_VIDEO_CAMERA, + FA_VIMEO, + FA_VIMEO_SQUARE, + FA_VINE, + FA_VK, + FA_VOLUME_DOWN, + FA_VOLUME_OFF, + FA_VOLUME_UP, + FA_WARNING, + FA_WECHAT, + FA_WEIBO, + FA_WEIXIN, + FA_WHATSAPP, + FA_WHEELCHAIR, + FA_WIFI, + FA_WIKIPEDIA_W, + FA_WINDOWS, + FA_WON, + FA_WORDPRESS, + FA_WRENCH, + FA_XING, + FA_XING_SQUARE, + FA_Y_COMBINATOR, + FA_Y_COMBINATOR_SQUARE, + FA_YAHOO, + FA_YC, + FA_YC_SQUARE, + FA_YELP, + FA_YEN, + FA_YOUTUBE, + FA_YOUTUBE_PLAY, + FA_YOUTUBE_SQUARE + })public @interface Icon {} + + public static final String FA_ADJUST = "fa_adjust"; + public static final String FA_ADN = "fa_adn"; + public static final String FA_ALIGN_CENTER = "fa_align_center"; + public static final String FA_ALIGN_JUSTIFY = "fa_align_justify"; + public static final String FA_ALIGN_LEFT = "fa_align_left"; + public static final String FA_ALIGN_RIGHT = "fa_align_right"; + public static final String FA_AMAZON = "fa_amazon"; + public static final String FA_AMBULANCE = "fa_ambulance"; + public static final String FA_ANCHOR = "fa_anchor"; + public static final String FA_ANDROID = "fa_android"; + public static final String FA_ANGELLIST = "fa_angellist"; + public static final String FA_ANGLE_DOUBLE_DOWN = "fa_angle_double_down"; + public static final String FA_ANGLE_DOUBLE_LEFT = "fa_angle_double_left"; + public static final String FA_ANGLE_DOUBLE_RIGHT = "fa_angle_double_right"; + public static final String FA_ANGLE_DOUBLE_UP = "fa_angle_double_up"; + public static final String FA_ANGLE_DOWN = "fa_angle_down"; + public static final String FA_ANGLE_LEFT = "fa_angle_left"; + public static final String FA_ANGLE_RIGHT = "fa_angle_right"; + public static final String FA_ANGLE_UP = "fa_angle_up"; + public static final String FA_APPLE = "fa_apple"; + public static final String FA_ARCHIVE = "fa_archive"; + public static final String FA_AREA_CHART = "fa_area_chart"; + public static final String FA_ARROW_CIRCLE_DOWN = "fa_arrow_circle_down"; + public static final String FA_ARROW_CIRCLE_LEFT = "fa_arrow_circle_left"; + public static final String FA_ARROW_CIRCLE_O_DOWN = "fa_arrow_circle_o_down"; + public static final String FA_ARROW_CIRCLE_O_LEFT = "fa_arrow_circle_o_left"; + public static final String FA_ARROW_CIRCLE_O_RIGHT = "fa_arrow_circle_o_right"; + public static final String FA_ARROW_CIRCLE_O_UP = "fa_arrow_circle_o_up"; + public static final String FA_ARROW_CIRCLE_RIGHT = "fa_arrow_circle_right"; + public static final String FA_ARROW_CIRCLE_UP = "fa_arrow_circle_up"; + public static final String FA_ARROW_DOWN = "fa_arrow_down"; + public static final String FA_ARROW_LEFT = "fa_arrow_left"; + public static final String FA_ARROW_RIGHT = "fa_arrow_right"; + public static final String FA_ARROW_UP = "fa_arrow_up"; + public static final String FA_ARROWS = "fa_arrows"; + public static final String FA_ARROWS_ALT = "fa_arrows_alt"; + public static final String FA_ARROWS_H = "fa_arrows_h"; + public static final String FA_ARROWS_V = "fa_arrows_v"; + public static final String FA_ASTERISK = "fa_asterisk"; + public static final String FA_AT = "fa_at"; + public static final String FA_AUTOMOBILE = "fa_automobile"; + public static final String FA_BACKWARD = "fa_backward"; + public static final String FA_BALANCE_SCALE = "fa_balance_scale"; + public static final String FA_BAN = "fa_ban"; + public static final String FA_BANK = "fa_bank"; + public static final String FA_BAR_CHART = "fa_bar_chart"; + public static final String FA_BAR_CHART_O = "fa_bar_chart_o"; + public static final String FA_BARCODE = "fa_barcode"; + public static final String FA_BARS = "fa_bars"; + public static final String FA_BATTERY_0 = "fa_battery_0"; + public static final String FA_BATTERY_1 = "fa_battery_1"; + public static final String FA_BATTERY_2 = "fa_battery_2"; + public static final String FA_BATTERY_3 = "fa_battery_3"; + public static final String FA_BATTERY_4 = "fa_battery_4"; + public static final String FA_BATTERY_EMPTY = "fa_battery_empty"; + public static final String FA_BATTERY_FULL = "fa_battery_full"; + public static final String FA_BATTERY_HALF = "fa_battery_half"; + public static final String FA_BATTERY_QUARTER = "fa_battery_quarter"; + public static final String FA_BATTERY_THREE_QUARTERS = "fa_battery_three_quarters"; + public static final String FA_BED = "fa_bed"; + public static final String FA_BEER = "fa_beer"; + public static final String FA_BEHANCE = "fa_behance"; + public static final String FA_BEHANCE_SQUARE = "fa_behance_square"; + public static final String FA_BELL = "fa_bell"; + public static final String FA_BELL_O = "fa_bell_o"; + public static final String FA_BELL_SLASH = "fa_bell_slash"; + public static final String FA_BELL_SLASH_O = "fa_bell_slash_o"; + public static final String FA_BICYCLE = "fa_bicycle"; + public static final String FA_BINOCULARS = "fa_binoculars"; + public static final String FA_BIRTHDAY_CAKE = "fa_birthday_cake"; + public static final String FA_BITBUCKET = "fa_bitbucket"; + public static final String FA_BITBUCKET_SQUARE = "fa_bitbucket_square"; + public static final String FA_BITCOIN = "fa_bitcoin"; + public static final String FA_BLACK_TIE = "fa_black_tie"; + public static final String FA_BOLD = "fa_bold"; + public static final String FA_BOLT = "fa_bolt"; + public static final String FA_BOMB = "fa_bomb"; + public static final String FA_BOOK = "fa_book"; + public static final String FA_BOOKMARK = "fa_bookmark"; + public static final String FA_BOOKMARK_O = "fa_bookmark_o"; + public static final String FA_BRIEFCASE = "fa_briefcase"; + public static final String FA_BTC = "fa_btc"; + public static final String FA_BUG = "fa_bug"; + public static final String FA_BUILDING = "fa_building"; + public static final String FA_BUILDING_O = "fa_building_o"; + public static final String FA_BULLHORN = "fa_bullhorn"; + public static final String FA_BULLSEYE = "fa_bullseye"; + public static final String FA_BUS = "fa_bus"; + public static final String FA_BUYSELLADS = "fa_buysellads"; + public static final String FA_CAB = "fa_cab"; + public static final String FA_CALCULATOR = "fa_calculator"; + public static final String FA_CALENDAR = "fa_calendar"; + public static final String FA_CALENDAR_CHECK_O = "fa_calendar_check_o"; + public static final String FA_CALENDAR_MINUS_O = "fa_calendar_minus_o"; + public static final String FA_CALENDAR_O = "fa_calendar_o"; + public static final String FA_CALENDAR_PLUS_O = "fa_calendar_plus_o"; + public static final String FA_CALENDAR_TIMES_O = "fa_calendar_times_o"; + public static final String FA_CAMERA = "fa_camera"; + public static final String FA_CAMERA_RETRO = "fa_camera_retro"; + public static final String FA_CAR = "fa_car"; + public static final String FA_CARET_DOWN = "fa_caret_down"; + public static final String FA_CARET_LEFT = "fa_caret_left"; + public static final String FA_CARET_RIGHT = "fa_caret_right"; + public static final String FA_CARET_SQUARE_O_DOWN = "fa_caret_square_o_down"; + public static final String FA_CARET_SQUARE_O_LEFT = "fa_caret_square_o_left"; + public static final String FA_CARET_SQUARE_O_RIGHT = "fa_caret_square_o_right"; + public static final String FA_CARET_SQUARE_O_UP = "fa_caret_square_o_up"; + public static final String FA_CARET_UP = "fa_caret_up"; + public static final String FA_CART_ARROW_DOWN = "fa_cart_arrow_down"; + public static final String FA_CART_PLUS = "fa_cart_plus"; + public static final String FA_CC = "fa_cc"; + public static final String FA_CC_AMEX = "fa_cc_amex"; + public static final String FA_CC_DINERS_CLUB = "fa_cc_diners_club"; + public static final String FA_CC_DISCOVER = "fa_cc_discover"; + public static final String FA_CC_JCB = "fa_cc_jcb"; + public static final String FA_CC_MASTERCARD = "fa_cc_mastercard"; + public static final String FA_CC_PAYPAL = "fa_cc_paypal"; + public static final String FA_CC_STRIPE = "fa_cc_stripe"; + public static final String FA_CC_VISA = "fa_cc_visa"; + public static final String FA_CERTIFICATE = "fa_certificate"; + public static final String FA_CHAIN = "fa_chain"; + public static final String FA_CHAIN_BROKEN = "fa_chain_broken"; + public static final String FA_CHECK = "fa_check"; + public static final String FA_CHECK_CIRCLE = "fa_check_circle"; + public static final String FA_CHECK_CIRCLE_O = "fa_check_circle_o"; + public static final String FA_CHECK_SQUARE = "fa_check_square"; + public static final String FA_CHECK_SQUARE_O = "fa_check_square_o"; + public static final String FA_CHEVRON_CIRCLE_DOWN = "fa_chevron_circle_down"; + public static final String FA_CHEVRON_CIRCLE_LEFT = "fa_chevron_circle_left"; + public static final String FA_CHEVRON_CIRCLE_RIGHT = "fa_chevron_circle_right"; + public static final String FA_CHEVRON_CIRCLE_UP = "fa_chevron_circle_up"; + public static final String FA_CHEVRON_DOWN = "fa_chevron_down"; + public static final String FA_CHEVRON_LEFT = "fa_chevron_left"; + public static final String FA_CHEVRON_RIGHT = "fa_chevron_right"; + public static final String FA_CHEVRON_UP = "fa_chevron_up"; + public static final String FA_CHILD = "fa_child"; + public static final String FA_CHROME = "fa_chrome"; + public static final String FA_CIRCLE = "fa_circle"; + public static final String FA_CIRCLE_O = "fa_circle_o"; + public static final String FA_CIRCLE_O_NOTCH = "fa_circle_o_notch"; + public static final String FA_CIRCLE_THIN = "fa_circle_thin"; + public static final String FA_CLIPBOARD = "fa_clipboard"; + public static final String FA_CLOCK_O = "fa_clock_o"; + public static final String FA_CLONE = "fa_clone"; + public static final String FA_CLOSE = "fa_close"; + public static final String FA_CLOUD = "fa_cloud"; + public static final String FA_CLOUD_DOWNLOAD = "fa_cloud_download"; + public static final String FA_CLOUD_UPLOAD = "fa_cloud_upload"; + public static final String FA_CNY = "fa_cny"; + public static final String FA_CODE = "fa_code"; + public static final String FA_CODE_FORK = "fa_code_fork"; + public static final String FA_CODEPEN = "fa_codepen"; + public static final String FA_COFFEE = "fa_coffee"; + public static final String FA_COG = "fa_cog"; + public static final String FA_COGS = "fa_cogs"; + public static final String FA_COLUMNS = "fa_columns"; + public static final String FA_COMMENT = "fa_comment"; + public static final String FA_COMMENT_O = "fa_comment_o"; + public static final String FA_COMMENTING = "fa_commenting"; + public static final String FA_COMMENTING_O = "fa_commenting_o"; + public static final String FA_COMMENTS = "fa_comments"; + public static final String FA_COMMENTS_O = "fa_comments_o"; + public static final String FA_COMPASS = "fa_compass"; + public static final String FA_COMPRESS = "fa_compress"; + public static final String FA_CONNECTDEVELOP = "fa_connectdevelop"; + public static final String FA_CONTAO = "fa_contao"; + public static final String FA_COPY = "fa_copy"; + public static final String FA_COPYRIGHT = "fa_copyright"; + public static final String FA_CREATIVE_COMMONS = "fa_creative_commons"; + public static final String FA_CREDIT_CARD = "fa_credit_card"; + public static final String FA_CROP = "fa_crop"; + public static final String FA_CROSSHAIRS = "fa_crosshairs"; + public static final String FA_CSS3 = "fa_css3"; + public static final String FA_CUBE = "fa_cube"; + public static final String FA_CUBES = "fa_cubes"; + public static final String FA_CUT = "fa_cut"; + public static final String FA_CUTLERY = "fa_cutlery"; + public static final String FA_DASHBOARD = "fa_dashboard"; + public static final String FA_DASHCUBE = "fa_dashcube"; + public static final String FA_DATABASE = "fa_database"; + public static final String FA_DEDENT = "fa_dedent"; + public static final String FA_DELICIOUS = "fa_delicious"; + public static final String FA_DESKTOP = "fa_desktop"; + public static final String FA_DEVIANTART = "fa_deviantart"; + public static final String FA_DIAMOND = "fa_diamond"; + public static final String FA_DIGG = "fa_digg"; + public static final String FA_DOLLAR = "fa_dollar"; + public static final String FA_DOT_CIRCLE_O = "fa_dot_circle_o"; + public static final String FA_DOWNLOAD = "fa_download"; + public static final String FA_DRIBBBLE = "fa_dribbble"; + public static final String FA_DROPBOX = "fa_dropbox"; + public static final String FA_DRUPAL = "fa_drupal"; + public static final String FA_EDIT = "fa_edit"; + public static final String FA_EJECT = "fa_eject"; + public static final String FA_ELLIPSIS_H = "fa_ellipsis_h"; + public static final String FA_ELLIPSIS_V = "fa_ellipsis_v"; + public static final String FA_EMPIRE = "fa_empire"; + public static final String FA_ENVELOPE = "fa_envelope"; + public static final String FA_ENVELOPE_O = "fa_envelope_o"; + public static final String FA_ENVELOPE_SQUARE = "fa_envelope_square"; + public static final String FA_ERASER = "fa_eraser"; + public static final String FA_EUR = "fa_eur"; + public static final String FA_EURO = "fa_euro"; + public static final String FA_EXCHANGE = "fa_exchange"; + public static final String FA_EXCLAMATION = "fa_exclamation"; + public static final String FA_EXCLAMATION_CIRCLE = "fa_exclamation_circle"; + public static final String FA_EXCLAMATION_TRIANGLE = "fa_exclamation_triangle"; + public static final String FA_EXPAND = "fa_expand"; + public static final String FA_EXPEDITEDSSL = "fa_expeditedssl"; + public static final String FA_EXTERNAL_LINK = "fa_external_link"; + public static final String FA_EXTERNAL_LINK_SQUARE = "fa_external_link_square"; + public static final String FA_EYE = "fa_eye"; + public static final String FA_EYE_SLASH = "fa_eye_slash"; + public static final String FA_EYEDROPPER = "fa_eyedropper"; + public static final String FA_FACEBOOK = "fa_facebook"; + public static final String FA_FACEBOOK_F = "fa_facebook_f"; + public static final String FA_FACEBOOK_OFFICIAL = "fa_facebook_official"; + public static final String FA_FACEBOOK_SQUARE = "fa_facebook_square"; + public static final String FA_FAST_BACKWARD = "fa_fast_backward"; + public static final String FA_FAST_FORWARD = "fa_fast_forward"; + public static final String FA_FAX = "fa_fax"; + public static final String FA_FEED = "fa_feed"; + public static final String FA_FEMALE = "fa_female"; + public static final String FA_FIGHTER_JET = "fa_fighter_jet"; + public static final String FA_FILE = "fa_file"; + public static final String FA_FILE_ARCHIVE_O = "fa_file_archive_o"; + public static final String FA_FILE_AUDIO_O = "fa_file_audio_o"; + public static final String FA_FILE_CODE_O = "fa_file_code_o"; + public static final String FA_FILE_EXCEL_O = "fa_file_excel_o"; + public static final String FA_FILE_IMAGE_O = "fa_file_image_o"; + public static final String FA_FILE_MOVIE_O = "fa_file_movie_o"; + public static final String FA_FILE_O = "fa_file_o"; + public static final String FA_FILE_PDF_O = "fa_file_pdf_o"; + public static final String FA_FILE_PHOTO_O = "fa_file_photo_o"; + public static final String FA_FILE_PICTURE_O = "fa_file_picture_o"; + public static final String FA_FILE_POWERPOINT_O = "fa_file_powerpoint_o"; + public static final String FA_FILE_SOUND_O = "fa_file_sound_o"; + public static final String FA_FILE_TEXT = "fa_file_text"; + public static final String FA_FILE_TEXT_O = "fa_file_text_o"; + public static final String FA_FILE_VIDEO_O = "fa_file_video_o"; + public static final String FA_FILE_WORD_O = "fa_file_word_o"; + public static final String FA_FILE_ZIP_O = "fa_file_zip_o"; + public static final String FA_FILES_O = "fa_files_o"; + public static final String FA_FILM = "fa_film"; + public static final String FA_FILTER = "fa_filter"; + public static final String FA_FIRE = "fa_fire"; + public static final String FA_FIRE_EXTINGUISHER = "fa_fire_extinguisher"; + public static final String FA_FIREFOX = "fa_firefox"; + public static final String FA_FLAG = "fa_flag"; + public static final String FA_FLAG_CHECKERED = "fa_flag_checkered"; + public static final String FA_FLAG_O = "fa_flag_o"; + public static final String FA_FLASH = "fa_flash"; + public static final String FA_FLASK = "fa_flask"; + public static final String FA_FLICKR = "fa_flickr"; + public static final String FA_FLOPPY_O = "fa_floppy_o"; + public static final String FA_FOLDER = "fa_folder"; + public static final String FA_FOLDER_O = "fa_folder_o"; + public static final String FA_FOLDER_OPEN = "fa_folder_open"; + public static final String FA_FOLDER_OPEN_O = "fa_folder_open_o"; + public static final String FA_FONT = "fa_font"; + public static final String FA_FONTICONS = "fa_fonticons"; + public static final String FA_FORUMBEE = "fa_forumbee"; + public static final String FA_FORWARD = "fa_forward"; + public static final String FA_FOURSQUARE = "fa_foursquare"; + public static final String FA_FROWN_O = "fa_frown_o"; + public static final String FA_FUTBOL_O = "fa_futbol_o"; + public static final String FA_GAMEPAD = "fa_gamepad"; + public static final String FA_GAVEL = "fa_gavel"; + public static final String FA_GBP = "fa_gbp"; + public static final String FA_GE = "fa_ge"; + public static final String FA_GEAR = "fa_gear"; + public static final String FA_GEARS = "fa_gears"; + public static final String FA_GENDERLESS = "fa_genderless"; + public static final String FA_GET_POCKET = "fa_get_pocket"; + public static final String FA_GG = "fa_gg"; + public static final String FA_GG_CIRCLE = "fa_gg_circle"; + public static final String FA_GIFT = "fa_gift"; + public static final String FA_GIT = "fa_git"; + public static final String FA_GIT_SQUARE = "fa_git_square"; + public static final String FA_GITHUB = "fa_github"; + public static final String FA_GITHUB_ALT = "fa_github_alt"; + public static final String FA_GITHUB_SQUARE = "fa_github_square"; + public static final String FA_GITTIP = "fa_gittip"; + public static final String FA_GLASS = "fa_glass"; + public static final String FA_GLOBE = "fa_globe"; + public static final String FA_GOOGLE = "fa_google"; + public static final String FA_GOOGLE_PLUS = "fa_google_plus"; + public static final String FA_GOOGLE_PLUS_SQUARE = "fa_google_plus_square"; + public static final String FA_GOOGLE_WALLET = "fa_google_wallet"; + public static final String FA_GRADUATION_CAP = "fa_graduation_cap"; + public static final String FA_GRATIPAY = "fa_gratipay"; + public static final String FA_GROUP = "fa_group"; + public static final String FA_H_SQUARE = "fa_h_square"; + public static final String FA_HACKER_NEWS = "fa_hacker_news"; + public static final String FA_HAND_GRAB_O = "fa_hand_grab_o"; + public static final String FA_HAND_LIZARD_O = "fa_hand_lizard_o"; + public static final String FA_HAND_O_DOWN = "fa_hand_o_down"; + public static final String FA_HAND_O_LEFT = "fa_hand_o_left"; + public static final String FA_HAND_O_RIGHT = "fa_hand_o_right"; + public static final String FA_HAND_O_UP = "fa_hand_o_up"; + public static final String FA_HAND_PAPER_O = "fa_hand_paper_o"; + public static final String FA_HAND_PEACE_O = "fa_hand_peace_o"; + public static final String FA_HAND_POINTER_O = "fa_hand_pointer_o"; + public static final String FA_HAND_ROCK_O = "fa_hand_rock_o"; + public static final String FA_HAND_SCISSORS_O = "fa_hand_scissors_o"; + public static final String FA_HAND_SPOCK_O = "fa_hand_spock_o"; + public static final String FA_HAND_STOP_O = "fa_hand_stop_o"; + public static final String FA_HDD_O = "fa_hdd_o"; + public static final String FA_HEADER = "fa_header"; + public static final String FA_HEADPHONES = "fa_headphones"; + public static final String FA_HEART = "fa_heart"; + public static final String FA_HEART_O = "fa_heart_o"; + public static final String FA_HEARTBEAT = "fa_heartbeat"; + public static final String FA_HISTORY = "fa_history"; + public static final String FA_HOME = "fa_home"; + public static final String FA_HOSPITAL_O = "fa_hospital_o"; + public static final String FA_HOTEL = "fa_hotel"; + public static final String FA_HOURGLASS = "fa_hourglass"; + public static final String FA_HOURGLASS_1 = "fa_hourglass_1"; + public static final String FA_HOURGLASS_2 = "fa_hourglass_2"; + public static final String FA_HOURGLASS_3 = "fa_hourglass_3"; + public static final String FA_HOURGLASS_END = "fa_hourglass_end"; + public static final String FA_HOURGLASS_HALF = "fa_hourglass_half"; + public static final String FA_HOURGLASS_O = "fa_hourglass_o"; + public static final String FA_HOURGLASS_START = "fa_hourglass_start"; + public static final String FA_HOUZZ = "fa_houzz"; + public static final String FA_HTML5 = "fa_html5"; + public static final String FA_I_CURSOR = "fa_i_cursor"; + public static final String FA_ILS = "fa_ils"; + public static final String FA_IMAGE = "fa_image"; + public static final String FA_INBOX = "fa_inbox"; + public static final String FA_INDENT = "fa_indent"; + public static final String FA_INDUSTRY = "fa_industry"; + public static final String FA_INFO = "fa_info"; + public static final String FA_INFO_CIRCLE = "fa_info_circle"; + public static final String FA_INR = "fa_inr"; + public static final String FA_INSTAGRAM = "fa_instagram"; + public static final String FA_INSTITUTION = "fa_institution"; + public static final String FA_INTERNET_EXPLORER = "fa_internet_explorer"; + public static final String FA_INTERSEX = "fa_intersex"; + public static final String FA_IOXHOST = "fa_ioxhost"; + public static final String FA_ITALIC = "fa_italic"; + public static final String FA_JOOMLA = "fa_joomla"; + public static final String FA_JPY = "fa_jpy"; + public static final String FA_JSFIDDLE = "fa_jsfiddle"; + public static final String FA_KEY = "fa_key"; + public static final String FA_KEYBOARD_O = "fa_keyboard_o"; + public static final String FA_KRW = "fa_krw"; + public static final String FA_LANGUAGE = "fa_language"; + public static final String FA_LAPTOP = "fa_laptop"; + public static final String FA_LASTFM = "fa_lastfm"; + public static final String FA_LASTFM_SQUARE = "fa_lastfm_square"; + public static final String FA_LEAF = "fa_leaf"; + public static final String FA_LEANPUB = "fa_leanpub"; + public static final String FA_LEGAL = "fa_legal"; + public static final String FA_LEMON_O = "fa_lemon_o"; + public static final String FA_LEVEL_DOWN = "fa_level_down"; + public static final String FA_LEVEL_UP = "fa_level_up"; + public static final String FA_LIFE_BOUY = "fa_life_bouy"; + public static final String FA_LIFE_BUOY = "fa_life_buoy"; + public static final String FA_LIFE_RING = "fa_life_ring"; + public static final String FA_LIFE_SAVER = "fa_life_saver"; + public static final String FA_LIGHTBULB_O = "fa_lightbulb_o"; + public static final String FA_LINE_CHART = "fa_line_chart"; + public static final String FA_LINK = "fa_link"; + public static final String FA_LINKEDIN = "fa_linkedin"; + public static final String FA_LINKEDIN_SQUARE = "fa_linkedin_square"; + public static final String FA_LINUX = "fa_linux"; + public static final String FA_LIST = "fa_list"; + public static final String FA_LIST_ALT = "fa_list_alt"; + public static final String FA_LIST_OL = "fa_list_ol"; + public static final String FA_LIST_UL = "fa_list_ul"; + public static final String FA_LOCATION_ARROW = "fa_location_arrow"; + public static final String FA_LOCK = "fa_lock"; + public static final String FA_LONG_ARROW_DOWN = "fa_long_arrow_down"; + public static final String FA_LONG_ARROW_LEFT = "fa_long_arrow_left"; + public static final String FA_LONG_ARROW_RIGHT = "fa_long_arrow_right"; + public static final String FA_LONG_ARROW_UP = "fa_long_arrow_up"; + public static final String FA_MAGIC = "fa_magic"; + public static final String FA_MAGNET = "fa_magnet"; + public static final String FA_MAIL_FORWARD = "fa_mail_forward"; + public static final String FA_MAIL_REPLY = "fa_mail_reply"; + public static final String FA_MAIL_REPLY_ALL = "fa_mail_reply_all"; + public static final String FA_MALE = "fa_male"; + public static final String FA_MAP = "fa_map"; + public static final String FA_MAP_MARKER = "fa_map_marker"; + public static final String FA_MAP_O = "fa_map_o"; + public static final String FA_MAP_PIN = "fa_map_pin"; + public static final String FA_MAP_SIGNS = "fa_map_signs"; + public static final String FA_MARS = "fa_mars"; + public static final String FA_MARS_DOUBLE = "fa_mars_double"; + public static final String FA_MARS_STROKE = "fa_mars_stroke"; + public static final String FA_MARS_STROKE_H = "fa_mars_stroke_h"; + public static final String FA_MARS_STROKE_V = "fa_mars_stroke_v"; + public static final String FA_MAXCDN = "fa_maxcdn"; + public static final String FA_MEANPATH = "fa_meanpath"; + public static final String FA_MEDIUM = "fa_medium"; + public static final String FA_MEDKIT = "fa_medkit"; + public static final String FA_MEH_O = "fa_meh_o"; + public static final String FA_MERCURY = "fa_mercury"; + public static final String FA_MICROPHONE = "fa_microphone"; + public static final String FA_MICROPHONE_SLASH = "fa_microphone_slash"; + public static final String FA_MINUS = "fa_minus"; + public static final String FA_MINUS_CIRCLE = "fa_minus_circle"; + public static final String FA_MINUS_SQUARE = "fa_minus_square"; + public static final String FA_MINUS_SQUARE_O = "fa_minus_square_o"; + public static final String FA_MOBILE = "fa_mobile"; + public static final String FA_MOBILE_PHONE = "fa_mobile_phone"; + public static final String FA_MONEY = "fa_money"; + public static final String FA_MOON_O = "fa_moon_o"; + public static final String FA_MORTAR_BOARD = "fa_mortar_board"; + public static final String FA_MOTORCYCLE = "fa_motorcycle"; + public static final String FA_MOUSE_POINTER = "fa_mouse_pointer"; + public static final String FA_MUSIC = "fa_music"; + public static final String FA_NAVICON = "fa_navicon"; + public static final String FA_NEUTER = "fa_neuter"; + public static final String FA_NEWSPAPER_O = "fa_newspaper_o"; + public static final String FA_OBJECT_GROUP = "fa_object_group"; + public static final String FA_OBJECT_UNGROUP = "fa_object_ungroup"; + public static final String FA_ODNOKLASSNIKI = "fa_odnoklassniki"; + public static final String FA_ODNOKLASSNIKI_SQUARE = "fa_odnoklassniki_square"; + public static final String FA_OPENCART = "fa_opencart"; + public static final String FA_OPENID = "fa_openid"; + public static final String FA_OPERA = "fa_opera"; + public static final String FA_OPTIN_MONSTER = "fa_optin_monster"; + public static final String FA_OUTDENT = "fa_outdent"; + public static final String FA_PAGELINES = "fa_pagelines"; + public static final String FA_PAINT_BRUSH = "fa_paint_brush"; + public static final String FA_PAPER_PLANE = "fa_paper_plane"; + public static final String FA_PAPER_PLANE_O = "fa_paper_plane_o"; + public static final String FA_PAPERCLIP = "fa_paperclip"; + public static final String FA_PARAGRAPH = "fa_paragraph"; + public static final String FA_PASTE = "fa_paste"; + public static final String FA_PAUSE = "fa_pause"; + public static final String FA_PAW = "fa_paw"; + public static final String FA_PAYPAL = "fa_paypal"; + public static final String FA_PENCIL = "fa_pencil"; + public static final String FA_PENCIL_SQUARE = "fa_pencil_square"; + public static final String FA_PENCIL_SQUARE_O = "fa_pencil_square_o"; + public static final String FA_PHONE = "fa_phone"; + public static final String FA_PHONE_SQUARE = "fa_phone_square"; + public static final String FA_PHOTO = "fa_photo"; + public static final String FA_PICTURE_O = "fa_picture_o"; + public static final String FA_PIE_CHART = "fa_pie_chart"; + public static final String FA_PIED_PIPER = "fa_pied_piper"; + public static final String FA_PIED_PIPER_ALT = "fa_pied_piper_alt"; + public static final String FA_PINTEREST = "fa_pinterest"; + public static final String FA_PINTEREST_P = "fa_pinterest_p"; + public static final String FA_PINTEREST_SQUARE = "fa_pinterest_square"; + public static final String FA_PLANE = "fa_plane"; + public static final String FA_PLAY = "fa_play"; + public static final String FA_PLAY_CIRCLE = "fa_play_circle"; + public static final String FA_PLAY_CIRCLE_O = "fa_play_circle_o"; + public static final String FA_PLUG = "fa_plug"; + public static final String FA_PLUS = "fa_plus"; + public static final String FA_PLUS_CIRCLE = "fa_plus_circle"; + public static final String FA_PLUS_SQUARE = "fa_plus_square"; + public static final String FA_PLUS_SQUARE_O = "fa_plus_square_o"; + public static final String FA_POWER_OFF = "fa_power_off"; + public static final String FA_PRINT = "fa_print"; + public static final String FA_PUZZLE_PIECE = "fa_puzzle_piece"; + public static final String FA_QQ = "fa_qq"; + public static final String FA_QRCODE = "fa_qrcode"; + public static final String FA_QUESTION = "fa_question"; + public static final String FA_QUESTION_CIRCLE = "fa_question_circle"; + public static final String FA_QUOTE_LEFT = "fa_quote_left"; + public static final String FA_QUOTE_RIGHT = "fa_quote_right"; + public static final String FA_RA = "fa_ra"; + public static final String FA_RANDOM = "fa_random"; + public static final String FA_REBEL = "fa_rebel"; + public static final String FA_RECYCLE = "fa_recycle"; + public static final String FA_REDDIT = "fa_reddit"; + public static final String FA_REDDIT_SQUARE = "fa_reddit_square"; + public static final String FA_REFRESH = "fa_refresh"; + public static final String FA_REGISTERED = "fa_registered"; + public static final String FA_REMOVE = "fa_remove"; + public static final String FA_RENREN = "fa_renren"; + public static final String FA_REORDER = "fa_reorder"; + public static final String FA_REPEAT = "fa_repeat"; + public static final String FA_REPLY = "fa_reply"; + public static final String FA_REPLY_ALL = "fa_reply_all"; + public static final String FA_RETWEET = "fa_retweet"; + public static final String FA_RMB = "fa_rmb"; + public static final String FA_ROAD = "fa_road"; + public static final String FA_ROCKET = "fa_rocket"; + public static final String FA_ROTATE_LEFT = "fa_rotate_left"; + public static final String FA_ROTATE_RIGHT = "fa_rotate_right"; + public static final String FA_ROUBLE = "fa_rouble"; + public static final String FA_RSS = "fa_rss"; + public static final String FA_RSS_SQUARE = "fa_rss_square"; + public static final String FA_RUB = "fa_rub"; + public static final String FA_RUBLE = "fa_ruble"; + public static final String FA_RUPEE = "fa_rupee"; + public static final String FA_SAFARI = "fa_safari"; + public static final String FA_SAVE = "fa_save"; + public static final String FA_SCISSORS = "fa_scissors"; + public static final String FA_SEARCH = "fa_search"; + public static final String FA_SEARCH_MINUS = "fa_search_minus"; + public static final String FA_SEARCH_PLUS = "fa_search_plus"; + public static final String FA_SELLSY = "fa_sellsy"; + public static final String FA_SEND = "fa_send"; + public static final String FA_SEND_O = "fa_send_o"; + public static final String FA_SERVER = "fa_server"; + public static final String FA_SHARE = "fa_share"; + public static final String FA_SHARE_ALT = "fa_share_alt"; + public static final String FA_SHARE_ALT_SQUARE = "fa_share_alt_square"; + public static final String FA_SHARE_SQUARE = "fa_share_square"; + public static final String FA_SHARE_SQUARE_O = "fa_share_square_o"; + public static final String FA_SHEKEL = "fa_shekel"; + public static final String FA_SHEQEL = "fa_sheqel"; + public static final String FA_SHIELD = "fa_shield"; + public static final String FA_SHIP = "fa_ship"; + public static final String FA_SHIRTSINBULK = "fa_shirtsinbulk"; + public static final String FA_SHOPPING_CART = "fa_shopping_cart"; + public static final String FA_SIGN_IN = "fa_sign_in"; + public static final String FA_SIGN_OUT = "fa_sign_out"; + public static final String FA_SIGNAL = "fa_signal"; + public static final String FA_SIMPLYBUILT = "fa_simplybuilt"; + public static final String FA_SITEMAP = "fa_sitemap"; + public static final String FA_SKYATLAS = "fa_skyatlas"; + public static final String FA_SKYPE = "fa_skype"; + public static final String FA_SLACK = "fa_slack"; + public static final String FA_SLIDERS = "fa_sliders"; + public static final String FA_SLIDESHARE = "fa_slideshare"; + public static final String FA_SMILE_O = "fa_smile_o"; + public static final String FA_SOCCER_BALL_O = "fa_soccer_ball_o"; + public static final String FA_SORT = "fa_sort"; + public static final String FA_SORT_ALPHA_ASC = "fa_sort_alpha_asc"; + public static final String FA_SORT_ALPHA_DESC = "fa_sort_alpha_desc"; + public static final String FA_SORT_AMOUNT_ASC = "fa_sort_amount_asc"; + public static final String FA_SORT_AMOUNT_DESC = "fa_sort_amount_desc"; + public static final String FA_SORT_ASC = "fa_sort_asc"; + public static final String FA_SORT_DESC = "fa_sort_desc"; + public static final String FA_SORT_DOWN = "fa_sort_down"; + public static final String FA_SORT_NUMERIC_ASC = "fa_sort_numeric_asc"; + public static final String FA_SORT_NUMERIC_DESC = "fa_sort_numeric_desc"; + public static final String FA_SORT_UP = "fa_sort_up"; + public static final String FA_SOUNDCLOUD = "fa_soundcloud"; + public static final String FA_SPACE_SHUTTLE = "fa_space_shuttle"; + public static final String FA_SPINNER = "fa_spinner"; + public static final String FA_SPOON = "fa_spoon"; + public static final String FA_SPOTIFY = "fa_spotify"; + public static final String FA_SQUARE = "fa_square"; + public static final String FA_SQUARE_O = "fa_square_o"; + public static final String FA_STACK_EXCHANGE = "fa_stack_exchange"; + public static final String FA_STACK_OVERFLOW = "fa_stack_overflow"; + public static final String FA_STAR = "fa_star"; + public static final String FA_STAR_HALF = "fa_star_half"; + public static final String FA_STAR_HALF_EMPTY = "fa_star_half_empty"; + public static final String FA_STAR_HALF_FULL = "fa_star_half_full"; + public static final String FA_STAR_HALF_O = "fa_star_half_o"; + public static final String FA_STAR_O = "fa_star_o"; + public static final String FA_STEAM = "fa_steam"; + public static final String FA_STEAM_SQUARE = "fa_steam_square"; + public static final String FA_STEP_BACKWARD = "fa_step_backward"; + public static final String FA_STEP_FORWARD = "fa_step_forward"; + public static final String FA_STETHOSCOPE = "fa_stethoscope"; + public static final String FA_STICKY_NOTE = "fa_sticky_note"; + public static final String FA_STICKY_NOTE_O = "fa_sticky_note_o"; + public static final String FA_STOP = "fa_stop"; + public static final String FA_STREET_VIEW = "fa_street_view"; + public static final String FA_STRIKETHROUGH = "fa_strikethrough"; + public static final String FA_STUMBLEUPON = "fa_stumbleupon"; + public static final String FA_STUMBLEUPON_CIRCLE = "fa_stumbleupon_circle"; + public static final String FA_SUBSCRIPT = "fa_subscript"; + public static final String FA_SUBWAY = "fa_subway"; + public static final String FA_SUITCASE = "fa_suitcase"; + public static final String FA_SUN_O = "fa_sun_o"; + public static final String FA_SUPERSCRIPT = "fa_superscript"; + public static final String FA_SUPPORT = "fa_support"; + public static final String FA_TABLE = "fa_table"; + public static final String FA_TABLET = "fa_tablet"; + public static final String FA_TACHOMETER = "fa_tachometer"; + public static final String FA_TAG = "fa_tag"; + public static final String FA_TAGS = "fa_tags"; + public static final String FA_TASKS = "fa_tasks"; + public static final String FA_TAXI = "fa_taxi"; + public static final String FA_TELEVISION = "fa_television"; + public static final String FA_TENCENT_WEIBO = "fa_tencent_weibo"; + public static final String FA_TERMINAL = "fa_terminal"; + public static final String FA_TEXT_HEIGHT = "fa_text_height"; + public static final String FA_TEXT_WIDTH = "fa_text_width"; + public static final String FA_TH = "fa_th"; + public static final String FA_TH_LARGE = "fa_th_large"; + public static final String FA_TH_LIST = "fa_th_list"; + public static final String FA_THUMB_TACK = "fa_thumb_tack"; + public static final String FA_THUMBS_DOWN = "fa_thumbs_down"; + public static final String FA_THUMBS_O_DOWN = "fa_thumbs_o_down"; + public static final String FA_THUMBS_O_UP = "fa_thumbs_o_up"; + public static final String FA_THUMBS_UP = "fa_thumbs_up"; + public static final String FA_TICKET = "fa_ticket"; + public static final String FA_TIMES = "fa_times"; + public static final String FA_TIMES_CIRCLE = "fa_times_circle"; + public static final String FA_TIMES_CIRCLE_O = "fa_times_circle_o"; + public static final String FA_TINT = "fa_tint"; + public static final String FA_TOGGLE_DOWN = "fa_toggle_down"; + public static final String FA_TOGGLE_LEFT = "fa_toggle_left"; + public static final String FA_TOGGLE_OFF = "fa_toggle_off"; + public static final String FA_TOGGLE_ON = "fa_toggle_on"; + public static final String FA_TOGGLE_RIGHT = "fa_toggle_right"; + public static final String FA_TOGGLE_UP = "fa_toggle_up"; + public static final String FA_TRADEMARK = "fa_trademark"; + public static final String FA_TRAIN = "fa_train"; + public static final String FA_TRANSGENDER = "fa_transgender"; + public static final String FA_TRANSGENDER_ALT = "fa_transgender_alt"; + public static final String FA_TRASH = "fa_trash"; + public static final String FA_TRASH_O = "fa_trash_o"; + public static final String FA_TREE = "fa_tree"; + public static final String FA_TRELLO = "fa_trello"; + public static final String FA_TRIPADVISOR = "fa_tripadvisor"; + public static final String FA_TROPHY = "fa_trophy"; + public static final String FA_TRUCK = "fa_truck"; + public static final String FA_TRY = "fa_try"; + public static final String FA_TTY = "fa_tty"; + public static final String FA_TUMBLR = "fa_tumblr"; + public static final String FA_TUMBLR_SQUARE = "fa_tumblr_square"; + public static final String FA_TURKISH_LIRA = "fa_turkish_lira"; + public static final String FA_TV = "fa_tv"; + public static final String FA_TWITCH = "fa_twitch"; + public static final String FA_TWITTER = "fa_twitter"; + public static final String FA_TWITTER_SQUARE = "fa_twitter_square"; + public static final String FA_UMBRELLA = "fa_umbrella"; + public static final String FA_UNDERLINE = "fa_underline"; + public static final String FA_UNDO = "fa_undo"; + public static final String FA_UNIVERSITY = "fa_university"; + public static final String FA_UNLINK = "fa_unlink"; + public static final String FA_UNLOCK = "fa_unlock"; + public static final String FA_UNLOCK_ALT = "fa_unlock_alt"; + public static final String FA_UNSORTED = "fa_unsorted"; + public static final String FA_UPLOAD = "fa_upload"; + public static final String FA_USD = "fa_usd"; + public static final String FA_USER = "fa_user"; + public static final String FA_USER_MD = "fa_user_md"; + public static final String FA_USER_PLUS = "fa_user_plus"; + public static final String FA_USER_SECRET = "fa_user_secret"; + public static final String FA_USER_TIMES = "fa_user_times"; + public static final String FA_USERS = "fa_users"; + public static final String FA_VENUS = "fa_venus"; + public static final String FA_VENUS_DOUBLE = "fa_venus_double"; + public static final String FA_VENUS_MARS = "fa_venus_mars"; + public static final String FA_VIACOIN = "fa_viacoin"; + public static final String FA_VIDEO_CAMERA = "fa_video_camera"; + public static final String FA_VIMEO = "fa_vimeo"; + public static final String FA_VIMEO_SQUARE = "fa_vimeo_square"; + public static final String FA_VINE = "fa_vine"; + public static final String FA_VK = "fa_vk"; + public static final String FA_VOLUME_DOWN = "fa_volume_down"; + public static final String FA_VOLUME_OFF = "fa_volume_off"; + public static final String FA_VOLUME_UP = "fa_volume_up"; + public static final String FA_WARNING = "fa_warning"; + public static final String FA_WECHAT = "fa_wechat"; + public static final String FA_WEIBO = "fa_weibo"; + public static final String FA_WEIXIN = "fa_weixin"; + public static final String FA_WHATSAPP = "fa_whatsapp"; + public static final String FA_WHEELCHAIR = "fa_wheelchair"; + public static final String FA_WIFI = "fa_wifi"; + public static final String FA_WIKIPEDIA_W = "fa_wikipedia_w"; + public static final String FA_WINDOWS = "fa_windows"; + public static final String FA_WON = "fa_won"; + public static final String FA_WORDPRESS = "fa_wordpress"; + public static final String FA_WRENCH = "fa_wrench"; + public static final String FA_XING = "fa_xing"; + public static final String FA_XING_SQUARE = "fa_xing_square"; + public static final String FA_Y_COMBINATOR = "fa_y_combinator"; + public static final String FA_Y_COMBINATOR_SQUARE = "fa_y_combinator_square"; + public static final String FA_YAHOO = "fa_yahoo"; + public static final String FA_YC = "fa_yc"; + public static final String FA_YC_SQUARE = "fa_yc_square"; + public static final String FA_YELP = "fa_yelp"; + public static final String FA_YEN = "fa_yen"; + public static final String FA_YOUTUBE = "fa_youtube"; + public static final String FA_YOUTUBE_PLAY = "fa_youtube_play"; + public static final String FA_YOUTUBE_SQUARE = "fa_youtube_square"; + + static { + ICON_MAP.put(FA_ADJUST, "\uf042"); + ICON_MAP.put(FA_ADN, "\uf170"); + ICON_MAP.put(FA_ALIGN_CENTER, "\uf037"); + ICON_MAP.put(FA_ALIGN_JUSTIFY, "\uf039"); + ICON_MAP.put(FA_ALIGN_LEFT, "\uf036"); + ICON_MAP.put(FA_ALIGN_RIGHT, "\uf038"); + ICON_MAP.put(FA_AMAZON, "\uf270"); + ICON_MAP.put(FA_AMBULANCE, "\uf0f9"); + ICON_MAP.put(FA_ANCHOR, "\uf13d"); + ICON_MAP.put(FA_ANDROID, "\uf17b"); + ICON_MAP.put(FA_ANGELLIST, "\uf209"); + ICON_MAP.put(FA_ANGLE_DOUBLE_DOWN, "\uf103"); + ICON_MAP.put(FA_ANGLE_DOUBLE_LEFT, "\uf100"); + ICON_MAP.put(FA_ANGLE_DOUBLE_RIGHT, "\uf101"); + ICON_MAP.put(FA_ANGLE_DOUBLE_UP, "\uf102"); + ICON_MAP.put(FA_ANGLE_DOWN, "\uf107"); + ICON_MAP.put(FA_ANGLE_LEFT, "\uf104"); + ICON_MAP.put(FA_ANGLE_RIGHT, "\uf105"); + ICON_MAP.put(FA_ANGLE_UP, "\uf106"); + ICON_MAP.put(FA_APPLE, "\uf179"); + ICON_MAP.put(FA_ARCHIVE, "\uf187"); + ICON_MAP.put(FA_AREA_CHART, "\uf1fe"); + ICON_MAP.put(FA_ARROW_CIRCLE_DOWN, "\uf0ab"); + ICON_MAP.put(FA_ARROW_CIRCLE_LEFT, "\uf0a8"); + ICON_MAP.put(FA_ARROW_CIRCLE_O_DOWN, "\uf01a"); + ICON_MAP.put(FA_ARROW_CIRCLE_O_LEFT, "\uf190"); + ICON_MAP.put(FA_ARROW_CIRCLE_O_RIGHT, "\uf18e"); + ICON_MAP.put(FA_ARROW_CIRCLE_O_UP, "\uf01b"); + ICON_MAP.put(FA_ARROW_CIRCLE_RIGHT, "\uf0a9"); + ICON_MAP.put(FA_ARROW_CIRCLE_UP, "\uf0aa"); + ICON_MAP.put(FA_ARROW_DOWN, "\uf063"); + ICON_MAP.put(FA_ARROW_LEFT, "\uf060"); + ICON_MAP.put(FA_ARROW_RIGHT, "\uf061"); + ICON_MAP.put(FA_ARROW_UP, "\uf062"); + ICON_MAP.put(FA_ARROWS, "\uf047"); + ICON_MAP.put(FA_ARROWS_ALT, "\uf0b2"); + ICON_MAP.put(FA_ARROWS_H, "\uf07e"); + ICON_MAP.put(FA_ARROWS_V, "\uf07d"); + ICON_MAP.put(FA_ASTERISK, "\uf069"); + ICON_MAP.put(FA_AT, "\uf1fa"); + ICON_MAP.put(FA_AUTOMOBILE, "\uf1b9"); + ICON_MAP.put(FA_BACKWARD, "\uf04a"); + ICON_MAP.put(FA_BALANCE_SCALE, "\uf24e"); + ICON_MAP.put(FA_BAN, "\uf05e"); + ICON_MAP.put(FA_BANK, "\uf19c"); + ICON_MAP.put(FA_BAR_CHART, "\uf080"); + ICON_MAP.put(FA_BAR_CHART_O, "\uf080"); + ICON_MAP.put(FA_BARCODE, "\uf02a"); + ICON_MAP.put(FA_BARS, "\uf0c9"); + ICON_MAP.put(FA_BATTERY_0, "\uf244"); + ICON_MAP.put(FA_BATTERY_1, "\uf243"); + ICON_MAP.put(FA_BATTERY_2, "\uf242"); + ICON_MAP.put(FA_BATTERY_3, "\uf241"); + ICON_MAP.put(FA_BATTERY_4, "\uf240"); + ICON_MAP.put(FA_BATTERY_EMPTY, "\uf244"); + ICON_MAP.put(FA_BATTERY_FULL, "\uf240"); + ICON_MAP.put(FA_BATTERY_HALF, "\uf242"); + ICON_MAP.put(FA_BATTERY_QUARTER, "\uf243"); + ICON_MAP.put(FA_BATTERY_THREE_QUARTERS, "\uf241"); + ICON_MAP.put(FA_BED, "\uf236"); + ICON_MAP.put(FA_BEER, "\uf0fc"); + ICON_MAP.put(FA_BEHANCE, "\uf1b4"); + ICON_MAP.put(FA_BEHANCE_SQUARE, "\uf1b5"); + ICON_MAP.put(FA_BELL, "\uf0f3"); + ICON_MAP.put(FA_BELL_O, "\uf0a2"); + ICON_MAP.put(FA_BELL_SLASH, "\uf1f6"); + ICON_MAP.put(FA_BELL_SLASH_O, "\uf1f7"); + ICON_MAP.put(FA_BICYCLE, "\uf206"); + ICON_MAP.put(FA_BINOCULARS, "\uf1e5"); + ICON_MAP.put(FA_BIRTHDAY_CAKE, "\uf1fd"); + ICON_MAP.put(FA_BITBUCKET, "\uf171"); + ICON_MAP.put(FA_BITBUCKET_SQUARE, "\uf172"); + ICON_MAP.put(FA_BITCOIN, "\uf15a"); + ICON_MAP.put(FA_BLACK_TIE, "\uf27e"); + ICON_MAP.put(FA_BOLD, "\uf032"); + ICON_MAP.put(FA_BOLT, "\uf0e7"); + ICON_MAP.put(FA_BOMB, "\uf1e2"); + ICON_MAP.put(FA_BOOK, "\uf02d"); + ICON_MAP.put(FA_BOOKMARK, "\uf02e"); + ICON_MAP.put(FA_BOOKMARK_O, "\uf097"); + ICON_MAP.put(FA_BRIEFCASE, "\uf0b1"); + ICON_MAP.put(FA_BTC, "\uf15a"); + ICON_MAP.put(FA_BUG, "\uf188"); + ICON_MAP.put(FA_BUILDING, "\uf1ad"); + ICON_MAP.put(FA_BUILDING_O, "\uf0f7"); + ICON_MAP.put(FA_BULLHORN, "\uf0a1"); + ICON_MAP.put(FA_BULLSEYE, "\uf140"); + ICON_MAP.put(FA_BUS, "\uf207"); + ICON_MAP.put(FA_BUYSELLADS, "\uf20d"); + ICON_MAP.put(FA_CAB, "\uf1ba"); + ICON_MAP.put(FA_CALCULATOR, "\uf1ec"); + ICON_MAP.put(FA_CALENDAR, "\uf073"); + ICON_MAP.put(FA_CALENDAR_CHECK_O, "\uf274"); + ICON_MAP.put(FA_CALENDAR_MINUS_O, "\uf272"); + ICON_MAP.put(FA_CALENDAR_O, "\uf133"); + ICON_MAP.put(FA_CALENDAR_PLUS_O, "\uf271"); + ICON_MAP.put(FA_CALENDAR_TIMES_O, "\uf273"); + ICON_MAP.put(FA_CAMERA, "\uf030"); + ICON_MAP.put(FA_CAMERA_RETRO, "\uf083"); + ICON_MAP.put(FA_CAR, "\uf1b9"); + ICON_MAP.put(FA_CARET_DOWN, "\uf0d7"); + ICON_MAP.put(FA_CARET_LEFT, "\uf0d9"); + ICON_MAP.put(FA_CARET_RIGHT, "\uf0da"); + ICON_MAP.put(FA_CARET_SQUARE_O_DOWN, "\uf150"); + ICON_MAP.put(FA_CARET_SQUARE_O_LEFT, "\uf191"); + ICON_MAP.put(FA_CARET_SQUARE_O_RIGHT, "\uf152"); + ICON_MAP.put(FA_CARET_SQUARE_O_UP, "\uf151"); + ICON_MAP.put(FA_CARET_UP, "\uf0d8"); + ICON_MAP.put(FA_CART_ARROW_DOWN, "\uf218"); + ICON_MAP.put(FA_CART_PLUS, "\uf217"); + ICON_MAP.put(FA_CC, "\uf20a"); + ICON_MAP.put(FA_CC_AMEX, "\uf1f3"); + ICON_MAP.put(FA_CC_DINERS_CLUB, "\uf24c"); + ICON_MAP.put(FA_CC_DISCOVER, "\uf1f2"); + ICON_MAP.put(FA_CC_JCB, "\uf24b"); + ICON_MAP.put(FA_CC_MASTERCARD, "\uf1f1"); + ICON_MAP.put(FA_CC_PAYPAL, "\uf1f4"); + ICON_MAP.put(FA_CC_STRIPE, "\uf1f5"); + ICON_MAP.put(FA_CC_VISA, "\uf1f0"); + ICON_MAP.put(FA_CERTIFICATE, "\uf0a3"); + ICON_MAP.put(FA_CHAIN, "\uf0c1"); + ICON_MAP.put(FA_CHAIN_BROKEN, "\uf127"); + ICON_MAP.put(FA_CHECK, "\uf00c"); + ICON_MAP.put(FA_CHECK_CIRCLE, "\uf058"); + ICON_MAP.put(FA_CHECK_CIRCLE_O, "\uf05d"); + ICON_MAP.put(FA_CHECK_SQUARE, "\uf14a"); + ICON_MAP.put(FA_CHECK_SQUARE_O, "\uf046"); + ICON_MAP.put(FA_CHEVRON_CIRCLE_DOWN, "\uf13a"); + ICON_MAP.put(FA_CHEVRON_CIRCLE_LEFT, "\uf137"); + ICON_MAP.put(FA_CHEVRON_CIRCLE_RIGHT, "\uf138"); + ICON_MAP.put(FA_CHEVRON_CIRCLE_UP, "\uf139"); + ICON_MAP.put(FA_CHEVRON_DOWN, "\uf078"); + ICON_MAP.put(FA_CHEVRON_LEFT, "\uf053"); + ICON_MAP.put(FA_CHEVRON_RIGHT, "\uf054"); + ICON_MAP.put(FA_CHEVRON_UP, "\uf077"); + ICON_MAP.put(FA_CHILD, "\uf1ae"); + ICON_MAP.put(FA_CHROME, "\uf268"); + ICON_MAP.put(FA_CIRCLE, "\uf111"); + ICON_MAP.put(FA_CIRCLE_O, "\uf10c"); + ICON_MAP.put(FA_CIRCLE_O_NOTCH, "\uf1ce"); + ICON_MAP.put(FA_CIRCLE_THIN, "\uf1db"); + ICON_MAP.put(FA_CLIPBOARD, "\uf0ea"); + ICON_MAP.put(FA_CLOCK_O, "\uf017"); + ICON_MAP.put(FA_CLONE, "\uf24d"); + ICON_MAP.put(FA_CLOSE, "\uf00d"); + ICON_MAP.put(FA_CLOUD, "\uf0c2"); + ICON_MAP.put(FA_CLOUD_DOWNLOAD, "\uf0ed"); + ICON_MAP.put(FA_CLOUD_UPLOAD, "\uf0ee"); + ICON_MAP.put(FA_CNY, "\uf157"); + ICON_MAP.put(FA_CODE, "\uf121"); + ICON_MAP.put(FA_CODE_FORK, "\uf126"); + ICON_MAP.put(FA_CODEPEN, "\uf1cb"); + ICON_MAP.put(FA_COFFEE, "\uf0f4"); + ICON_MAP.put(FA_COG, "\uf013"); + ICON_MAP.put(FA_COGS, "\uf085"); + ICON_MAP.put(FA_COLUMNS, "\uf0db"); + ICON_MAP.put(FA_COMMENT, "\uf075"); + ICON_MAP.put(FA_COMMENT_O, "\uf0e5"); + ICON_MAP.put(FA_COMMENTING, "\uf27a"); + ICON_MAP.put(FA_COMMENTING_O, "\uf27b"); + ICON_MAP.put(FA_COMMENTS, "\uf086"); + ICON_MAP.put(FA_COMMENTS_O, "\uf0e6"); + ICON_MAP.put(FA_COMPASS, "\uf14e"); + ICON_MAP.put(FA_COMPRESS, "\uf066"); + ICON_MAP.put(FA_CONNECTDEVELOP, "\uf20e"); + ICON_MAP.put(FA_CONTAO, "\uf26d"); + ICON_MAP.put(FA_COPY, "\uf0c5"); + ICON_MAP.put(FA_COPYRIGHT, "\uf1f9"); + ICON_MAP.put(FA_CREATIVE_COMMONS, "\uf25e"); + ICON_MAP.put(FA_CREDIT_CARD, "\uf09d"); + ICON_MAP.put(FA_CROP, "\uf125"); + ICON_MAP.put(FA_CROSSHAIRS, "\uf05b"); + ICON_MAP.put(FA_CSS3, "\uf13c"); + ICON_MAP.put(FA_CUBE, "\uf1b2"); + ICON_MAP.put(FA_CUBES, "\uf1b3"); + ICON_MAP.put(FA_CUT, "\uf0c4"); + ICON_MAP.put(FA_CUTLERY, "\uf0f5"); + ICON_MAP.put(FA_DASHBOARD, "\uf0e4"); + ICON_MAP.put(FA_DASHCUBE, "\uf210"); + ICON_MAP.put(FA_DATABASE, "\uf1c0"); + ICON_MAP.put(FA_DEDENT, "\uf03b"); + ICON_MAP.put(FA_DELICIOUS, "\uf1a5"); + ICON_MAP.put(FA_DESKTOP, "\uf108"); + ICON_MAP.put(FA_DEVIANTART, "\uf1bd"); + ICON_MAP.put(FA_DIAMOND, "\uf219"); + ICON_MAP.put(FA_DIGG, "\uf1a6"); + ICON_MAP.put(FA_DOLLAR, "\uf155"); + ICON_MAP.put(FA_DOT_CIRCLE_O, "\uf192"); + ICON_MAP.put(FA_DOWNLOAD, "\uf019"); + ICON_MAP.put(FA_DRIBBBLE, "\uf17d"); + ICON_MAP.put(FA_DROPBOX, "\uf16b"); + ICON_MAP.put(FA_DRUPAL, "\uf1a9"); + ICON_MAP.put(FA_EDIT, "\uf044"); + ICON_MAP.put(FA_EJECT, "\uf052"); + ICON_MAP.put(FA_ELLIPSIS_H, "\uf141"); + ICON_MAP.put(FA_ELLIPSIS_V, "\uf142"); + ICON_MAP.put(FA_EMPIRE, "\uf1d1"); + ICON_MAP.put(FA_ENVELOPE, "\uf0e0"); + ICON_MAP.put(FA_ENVELOPE_O, "\uf003"); + ICON_MAP.put(FA_ENVELOPE_SQUARE, "\uf199"); + ICON_MAP.put(FA_ERASER, "\uf12d"); + ICON_MAP.put(FA_EUR, "\uf153"); + ICON_MAP.put(FA_EURO, "\uf153"); + ICON_MAP.put(FA_EXCHANGE, "\uf0ec"); + ICON_MAP.put(FA_EXCLAMATION, "\uf12a"); + ICON_MAP.put(FA_EXCLAMATION_CIRCLE, "\uf06a"); + ICON_MAP.put(FA_EXCLAMATION_TRIANGLE, "\uf071"); + ICON_MAP.put(FA_EXPAND, "\uf065"); + ICON_MAP.put(FA_EXPEDITEDSSL, "\uf23e"); + ICON_MAP.put(FA_EXTERNAL_LINK, "\uf08e"); + ICON_MAP.put(FA_EXTERNAL_LINK_SQUARE, "\uf14c"); + ICON_MAP.put(FA_EYE, "\uf06e"); + ICON_MAP.put(FA_EYE_SLASH, "\uf070"); + ICON_MAP.put(FA_EYEDROPPER, "\uf1fb"); + ICON_MAP.put(FA_FACEBOOK, "\uf09a"); + ICON_MAP.put(FA_FACEBOOK_F, "\uf09a"); + ICON_MAP.put(FA_FACEBOOK_OFFICIAL, "\uf230"); + ICON_MAP.put(FA_FACEBOOK_SQUARE, "\uf082"); + ICON_MAP.put(FA_FAST_BACKWARD, "\uf049"); + ICON_MAP.put(FA_FAST_FORWARD, "\uf050"); + ICON_MAP.put(FA_FAX, "\uf1ac"); + ICON_MAP.put(FA_FEED, "\uf09e"); + ICON_MAP.put(FA_FEMALE, "\uf182"); + ICON_MAP.put(FA_FIGHTER_JET, "\uf0fb"); + ICON_MAP.put(FA_FILE, "\uf15b"); + ICON_MAP.put(FA_FILE_ARCHIVE_O, "\uf1c6"); + ICON_MAP.put(FA_FILE_AUDIO_O, "\uf1c7"); + ICON_MAP.put(FA_FILE_CODE_O, "\uf1c9"); + ICON_MAP.put(FA_FILE_EXCEL_O, "\uf1c3"); + ICON_MAP.put(FA_FILE_IMAGE_O, "\uf1c5"); + ICON_MAP.put(FA_FILE_MOVIE_O, "\uf1c8"); + ICON_MAP.put(FA_FILE_O, "\uf016"); + ICON_MAP.put(FA_FILE_PDF_O, "\uf1c1"); + ICON_MAP.put(FA_FILE_PHOTO_O, "\uf1c5"); + ICON_MAP.put(FA_FILE_PICTURE_O, "\uf1c5"); + ICON_MAP.put(FA_FILE_POWERPOINT_O, "\uf1c4"); + ICON_MAP.put(FA_FILE_SOUND_O, "\uf1c7"); + ICON_MAP.put(FA_FILE_TEXT, "\uf15c"); + ICON_MAP.put(FA_FILE_TEXT_O, "\uf0f6"); + ICON_MAP.put(FA_FILE_VIDEO_O, "\uf1c8"); + ICON_MAP.put(FA_FILE_WORD_O, "\uf1c2"); + ICON_MAP.put(FA_FILE_ZIP_O, "\uf1c6"); + ICON_MAP.put(FA_FILES_O, "\uf0c5"); + ICON_MAP.put(FA_FILM, "\uf008"); + ICON_MAP.put(FA_FILTER, "\uf0b0"); + ICON_MAP.put(FA_FIRE, "\uf06d"); + ICON_MAP.put(FA_FIRE_EXTINGUISHER, "\uf134"); + ICON_MAP.put(FA_FIREFOX, "\uf269"); + ICON_MAP.put(FA_FLAG, "\uf024"); + ICON_MAP.put(FA_FLAG_CHECKERED, "\uf11e"); + ICON_MAP.put(FA_FLAG_O, "\uf11d"); + ICON_MAP.put(FA_FLASH, "\uf0e7"); + ICON_MAP.put(FA_FLASK, "\uf0c3"); + ICON_MAP.put(FA_FLICKR, "\uf16e"); + ICON_MAP.put(FA_FLOPPY_O, "\uf0c7"); + ICON_MAP.put(FA_FOLDER, "\uf07b"); + ICON_MAP.put(FA_FOLDER_O, "\uf114"); + ICON_MAP.put(FA_FOLDER_OPEN, "\uf07c"); + ICON_MAP.put(FA_FOLDER_OPEN_O, "\uf115"); + ICON_MAP.put(FA_FONT, "\uf031"); + ICON_MAP.put(FA_FONTICONS, "\uf280"); + ICON_MAP.put(FA_FORUMBEE, "\uf211"); + ICON_MAP.put(FA_FORWARD, "\uf04e"); + ICON_MAP.put(FA_FOURSQUARE, "\uf180"); + ICON_MAP.put(FA_FROWN_O, "\uf119"); + ICON_MAP.put(FA_FUTBOL_O, "\uf1e3"); + ICON_MAP.put(FA_GAMEPAD, "\uf11b"); + ICON_MAP.put(FA_GAVEL, "\uf0e3"); + ICON_MAP.put(FA_GBP, "\uf154"); + ICON_MAP.put(FA_GE, "\uf1d1"); + ICON_MAP.put(FA_GEAR, "\uf013"); + ICON_MAP.put(FA_GEARS, "\uf085"); + ICON_MAP.put(FA_GENDERLESS, "\uf22d"); + ICON_MAP.put(FA_GET_POCKET, "\uf265"); + ICON_MAP.put(FA_GG, "\uf260"); + ICON_MAP.put(FA_GG_CIRCLE, "\uf261"); + ICON_MAP.put(FA_GIFT, "\uf06b"); + ICON_MAP.put(FA_GIT, "\uf1d3"); + ICON_MAP.put(FA_GIT_SQUARE, "\uf1d2"); + ICON_MAP.put(FA_GITHUB, "\uf09b"); + ICON_MAP.put(FA_GITHUB_ALT, "\uf113"); + ICON_MAP.put(FA_GITHUB_SQUARE, "\uf092"); + ICON_MAP.put(FA_GITTIP, "\uf184"); + ICON_MAP.put(FA_GLASS, "\uf000"); + ICON_MAP.put(FA_GLOBE, "\uf0ac"); + ICON_MAP.put(FA_GOOGLE, "\uf1a0"); + ICON_MAP.put(FA_GOOGLE_PLUS, "\uf0d5"); + ICON_MAP.put(FA_GOOGLE_PLUS_SQUARE, "\uf0d4"); + ICON_MAP.put(FA_GOOGLE_WALLET, "\uf1ee"); + ICON_MAP.put(FA_GRADUATION_CAP, "\uf19d"); + ICON_MAP.put(FA_GRATIPAY, "\uf184"); + ICON_MAP.put(FA_GROUP, "\uf0c0"); + ICON_MAP.put(FA_H_SQUARE, "\uf0fd"); + ICON_MAP.put(FA_HACKER_NEWS, "\uf1d4"); + ICON_MAP.put(FA_HAND_GRAB_O, "\uf255"); + ICON_MAP.put(FA_HAND_LIZARD_O, "\uf258"); + ICON_MAP.put(FA_HAND_O_DOWN, "\uf0a7"); + ICON_MAP.put(FA_HAND_O_LEFT, "\uf0a5"); + ICON_MAP.put(FA_HAND_O_RIGHT, "\uf0a4"); + ICON_MAP.put(FA_HAND_O_UP, "\uf0a6"); + ICON_MAP.put(FA_HAND_PAPER_O, "\uf256"); + ICON_MAP.put(FA_HAND_PEACE_O, "\uf25b"); + ICON_MAP.put(FA_HAND_POINTER_O, "\uf25a"); + ICON_MAP.put(FA_HAND_ROCK_O, "\uf255"); + ICON_MAP.put(FA_HAND_SCISSORS_O, "\uf257"); + ICON_MAP.put(FA_HAND_SPOCK_O, "\uf259"); + ICON_MAP.put(FA_HAND_STOP_O, "\uf256"); + ICON_MAP.put(FA_HDD_O, "\uf0a0"); + ICON_MAP.put(FA_HEADER, "\uf1dc"); + ICON_MAP.put(FA_HEADPHONES, "\uf025"); + ICON_MAP.put(FA_HEART, "\uf004"); + ICON_MAP.put(FA_HEART_O, "\uf08a"); + ICON_MAP.put(FA_HEARTBEAT, "\uf21e"); + ICON_MAP.put(FA_HISTORY, "\uf1da"); + ICON_MAP.put(FA_HOME, "\uf015"); + ICON_MAP.put(FA_HOSPITAL_O, "\uf0f8"); + ICON_MAP.put(FA_HOTEL, "\uf236"); + ICON_MAP.put(FA_HOURGLASS, "\uf254"); + ICON_MAP.put(FA_HOURGLASS_1, "\uf251"); + ICON_MAP.put(FA_HOURGLASS_2, "\uf252"); + ICON_MAP.put(FA_HOURGLASS_3, "\uf253"); + ICON_MAP.put(FA_HOURGLASS_END, "\uf253"); + ICON_MAP.put(FA_HOURGLASS_HALF, "\uf252"); + ICON_MAP.put(FA_HOURGLASS_O, "\uf250"); + ICON_MAP.put(FA_HOURGLASS_START, "\uf251"); + ICON_MAP.put(FA_HOUZZ, "\uf27c"); + ICON_MAP.put(FA_HTML5, "\uf13b"); + ICON_MAP.put(FA_I_CURSOR, "\uf246"); + ICON_MAP.put(FA_ILS, "\uf20b"); + ICON_MAP.put(FA_IMAGE, "\uf03e"); + ICON_MAP.put(FA_INBOX, "\uf01c"); + ICON_MAP.put(FA_INDENT, "\uf03c"); + ICON_MAP.put(FA_INDUSTRY, "\uf275"); + ICON_MAP.put(FA_INFO, "\uf129"); + ICON_MAP.put(FA_INFO_CIRCLE, "\uf05a"); + ICON_MAP.put(FA_INR, "\uf156"); + ICON_MAP.put(FA_INSTAGRAM, "\uf16d"); + ICON_MAP.put(FA_INSTITUTION, "\uf19c"); + ICON_MAP.put(FA_INTERNET_EXPLORER, "\uf26b"); + ICON_MAP.put(FA_INTERSEX, "\uf224"); + ICON_MAP.put(FA_IOXHOST, "\uf208"); + ICON_MAP.put(FA_ITALIC, "\uf033"); + ICON_MAP.put(FA_JOOMLA, "\uf1aa"); + ICON_MAP.put(FA_JPY, "\uf157"); + ICON_MAP.put(FA_JSFIDDLE, "\uf1cc"); + ICON_MAP.put(FA_KEY, "\uf084"); + ICON_MAP.put(FA_KEYBOARD_O, "\uf11c"); + ICON_MAP.put(FA_KRW, "\uf159"); + ICON_MAP.put(FA_LANGUAGE, "\uf1ab"); + ICON_MAP.put(FA_LAPTOP, "\uf109"); + ICON_MAP.put(FA_LASTFM, "\uf202"); + ICON_MAP.put(FA_LASTFM_SQUARE, "\uf203"); + ICON_MAP.put(FA_LEAF, "\uf06c"); + ICON_MAP.put(FA_LEANPUB, "\uf212"); + ICON_MAP.put(FA_LEGAL, "\uf0e3"); + ICON_MAP.put(FA_LEMON_O, "\uf094"); + ICON_MAP.put(FA_LEVEL_DOWN, "\uf149"); + ICON_MAP.put(FA_LEVEL_UP, "\uf148"); + ICON_MAP.put(FA_LIFE_BOUY, "\uf1cd"); + ICON_MAP.put(FA_LIFE_BUOY, "\uf1cd"); + ICON_MAP.put(FA_LIFE_RING, "\uf1cd"); + ICON_MAP.put(FA_LIFE_SAVER, "\uf1cd"); + ICON_MAP.put(FA_LIGHTBULB_O, "\uf0eb"); + ICON_MAP.put(FA_LINE_CHART, "\uf201"); + ICON_MAP.put(FA_LINK, "\uf0c1"); + ICON_MAP.put(FA_LINKEDIN, "\uf0e1"); + ICON_MAP.put(FA_LINKEDIN_SQUARE, "\uf08c"); + ICON_MAP.put(FA_LINUX, "\uf17c"); + ICON_MAP.put(FA_LIST, "\uf03a"); + ICON_MAP.put(FA_LIST_ALT, "\uf022"); + ICON_MAP.put(FA_LIST_OL, "\uf0cb"); + ICON_MAP.put(FA_LIST_UL, "\uf0ca"); + ICON_MAP.put(FA_LOCATION_ARROW, "\uf124"); + ICON_MAP.put(FA_LOCK, "\uf023"); + ICON_MAP.put(FA_LONG_ARROW_DOWN, "\uf175"); + ICON_MAP.put(FA_LONG_ARROW_LEFT, "\uf177"); + ICON_MAP.put(FA_LONG_ARROW_RIGHT, "\uf178"); + ICON_MAP.put(FA_LONG_ARROW_UP, "\uf176"); + ICON_MAP.put(FA_MAGIC, "\uf0d0"); + ICON_MAP.put(FA_MAGNET, "\uf076"); + ICON_MAP.put(FA_MAIL_FORWARD, "\uf064"); + ICON_MAP.put(FA_MAIL_REPLY, "\uf112"); + ICON_MAP.put(FA_MAIL_REPLY_ALL, "\uf122"); + ICON_MAP.put(FA_MALE, "\uf183"); + ICON_MAP.put(FA_MAP, "\uf279"); + ICON_MAP.put(FA_MAP_MARKER, "\uf041"); + ICON_MAP.put(FA_MAP_O, "\uf278"); + ICON_MAP.put(FA_MAP_PIN, "\uf276"); + ICON_MAP.put(FA_MAP_SIGNS, "\uf277"); + ICON_MAP.put(FA_MARS, "\uf222"); + ICON_MAP.put(FA_MARS_DOUBLE, "\uf227"); + ICON_MAP.put(FA_MARS_STROKE, "\uf229"); + ICON_MAP.put(FA_MARS_STROKE_H, "\uf22b"); + ICON_MAP.put(FA_MARS_STROKE_V, "\uf22a"); + ICON_MAP.put(FA_MAXCDN, "\uf136"); + ICON_MAP.put(FA_MEANPATH, "\uf20c"); + ICON_MAP.put(FA_MEDIUM, "\uf23a"); + ICON_MAP.put(FA_MEDKIT, "\uf0fa"); + ICON_MAP.put(FA_MEH_O, "\uf11a"); + ICON_MAP.put(FA_MERCURY, "\uf223"); + ICON_MAP.put(FA_MICROPHONE, "\uf130"); + ICON_MAP.put(FA_MICROPHONE_SLASH, "\uf131"); + ICON_MAP.put(FA_MINUS, "\uf068"); + ICON_MAP.put(FA_MINUS_CIRCLE, "\uf056"); + ICON_MAP.put(FA_MINUS_SQUARE, "\uf146"); + ICON_MAP.put(FA_MINUS_SQUARE_O, "\uf147"); + ICON_MAP.put(FA_MOBILE, "\uf10b"); + ICON_MAP.put(FA_MOBILE_PHONE, "\uf10b"); + ICON_MAP.put(FA_MONEY, "\uf0d6"); + ICON_MAP.put(FA_MOON_O, "\uf186"); + ICON_MAP.put(FA_MORTAR_BOARD, "\uf19d"); + ICON_MAP.put(FA_MOTORCYCLE, "\uf21c"); + ICON_MAP.put(FA_MOUSE_POINTER, "\uf245"); + ICON_MAP.put(FA_MUSIC, "\uf001"); + ICON_MAP.put(FA_NAVICON, "\uf0c9"); + ICON_MAP.put(FA_NEUTER, "\uf22c"); + ICON_MAP.put(FA_NEWSPAPER_O, "\uf1ea"); + ICON_MAP.put(FA_OBJECT_GROUP, "\uf247"); + ICON_MAP.put(FA_OBJECT_UNGROUP, "\uf248"); + ICON_MAP.put(FA_ODNOKLASSNIKI, "\uf263"); + ICON_MAP.put(FA_ODNOKLASSNIKI_SQUARE, "\uf264"); + ICON_MAP.put(FA_OPENCART, "\uf23d"); + ICON_MAP.put(FA_OPENID, "\uf19b"); + ICON_MAP.put(FA_OPERA, "\uf26a"); + ICON_MAP.put(FA_OPTIN_MONSTER, "\uf23c"); + ICON_MAP.put(FA_OUTDENT, "\uf03b"); + ICON_MAP.put(FA_PAGELINES, "\uf18c"); + ICON_MAP.put(FA_PAINT_BRUSH, "\uf1fc"); + ICON_MAP.put(FA_PAPER_PLANE, "\uf1d8"); + ICON_MAP.put(FA_PAPER_PLANE_O, "\uf1d9"); + ICON_MAP.put(FA_PAPERCLIP, "\uf0c6"); + ICON_MAP.put(FA_PARAGRAPH, "\uf1dd"); + ICON_MAP.put(FA_PASTE, "\uf0ea"); + ICON_MAP.put(FA_PAUSE, "\uf04c"); + ICON_MAP.put(FA_PAW, "\uf1b0"); + ICON_MAP.put(FA_PAYPAL, "\uf1ed"); + ICON_MAP.put(FA_PENCIL, "\uf040"); + ICON_MAP.put(FA_PENCIL_SQUARE, "\uf14b"); + ICON_MAP.put(FA_PENCIL_SQUARE_O, "\uf044"); + ICON_MAP.put(FA_PHONE, "\uf095"); + ICON_MAP.put(FA_PHONE_SQUARE, "\uf098"); + ICON_MAP.put(FA_PHOTO, "\uf03e"); + ICON_MAP.put(FA_PICTURE_O, "\uf03e"); + ICON_MAP.put(FA_PIE_CHART, "\uf200"); + ICON_MAP.put(FA_PIED_PIPER, "\uf1a7"); + ICON_MAP.put(FA_PIED_PIPER_ALT, "\uf1a8"); + ICON_MAP.put(FA_PINTEREST, "\uf0d2"); + ICON_MAP.put(FA_PINTEREST_P, "\uf231"); + ICON_MAP.put(FA_PINTEREST_SQUARE, "\uf0d3"); + ICON_MAP.put(FA_PLANE, "\uf072"); + ICON_MAP.put(FA_PLAY, "\uf04b"); + ICON_MAP.put(FA_PLAY_CIRCLE, "\uf144"); + ICON_MAP.put(FA_PLAY_CIRCLE_O, "\uf01d"); + ICON_MAP.put(FA_PLUG, "\uf1e6"); + ICON_MAP.put(FA_PLUS, "\uf067"); + ICON_MAP.put(FA_PLUS_CIRCLE, "\uf055"); + ICON_MAP.put(FA_PLUS_SQUARE, "\uf0fe"); + ICON_MAP.put(FA_PLUS_SQUARE_O, "\uf196"); + ICON_MAP.put(FA_POWER_OFF, "\uf011"); + ICON_MAP.put(FA_PRINT, "\uf02f"); + ICON_MAP.put(FA_PUZZLE_PIECE, "\uf12e"); + ICON_MAP.put(FA_QQ, "\uf1d6"); + ICON_MAP.put(FA_QRCODE, "\uf029"); + ICON_MAP.put(FA_QUESTION, "\uf128"); + ICON_MAP.put(FA_QUESTION_CIRCLE, "\uf059"); + ICON_MAP.put(FA_QUOTE_LEFT, "\uf10d"); + ICON_MAP.put(FA_QUOTE_RIGHT, "\uf10e"); + ICON_MAP.put(FA_RA, "\uf1d0"); + ICON_MAP.put(FA_RANDOM, "\uf074"); + ICON_MAP.put(FA_REBEL, "\uf1d0"); + ICON_MAP.put(FA_RECYCLE, "\uf1b8"); + ICON_MAP.put(FA_REDDIT, "\uf1a1"); + ICON_MAP.put(FA_REDDIT_SQUARE, "\uf1a2"); + ICON_MAP.put(FA_REFRESH, "\uf021"); + ICON_MAP.put(FA_REGISTERED, "\uf25d"); + ICON_MAP.put(FA_REMOVE, "\uf00d"); + ICON_MAP.put(FA_RENREN, "\uf18b"); + ICON_MAP.put(FA_REORDER, "\uf0c9"); + ICON_MAP.put(FA_REPEAT, "\uf01e"); + ICON_MAP.put(FA_REPLY, "\uf112"); + ICON_MAP.put(FA_REPLY_ALL, "\uf122"); + ICON_MAP.put(FA_RETWEET, "\uf079"); + ICON_MAP.put(FA_RMB, "\uf157"); + ICON_MAP.put(FA_ROAD, "\uf018"); + ICON_MAP.put(FA_ROCKET, "\uf135"); + ICON_MAP.put(FA_ROTATE_LEFT, "\uf0e2"); + ICON_MAP.put(FA_ROTATE_RIGHT, "\uf01e"); + ICON_MAP.put(FA_ROUBLE, "\uf158"); + ICON_MAP.put(FA_RSS, "\uf09e"); + ICON_MAP.put(FA_RSS_SQUARE, "\uf143"); + ICON_MAP.put(FA_RUB, "\uf158"); + ICON_MAP.put(FA_RUBLE, "\uf158"); + ICON_MAP.put(FA_RUPEE, "\uf156"); + ICON_MAP.put(FA_SAFARI, "\uf267"); + ICON_MAP.put(FA_SAVE, "\uf0c7"); + ICON_MAP.put(FA_SCISSORS, "\uf0c4"); + ICON_MAP.put(FA_SEARCH, "\uf002"); + ICON_MAP.put(FA_SEARCH_MINUS, "\uf010"); + ICON_MAP.put(FA_SEARCH_PLUS, "\uf00e"); + ICON_MAP.put(FA_SELLSY, "\uf213"); + ICON_MAP.put(FA_SEND, "\uf1d8"); + ICON_MAP.put(FA_SEND_O, "\uf1d9"); + ICON_MAP.put(FA_SERVER, "\uf233"); + ICON_MAP.put(FA_SHARE, "\uf064"); + ICON_MAP.put(FA_SHARE_ALT, "\uf1e0"); + ICON_MAP.put(FA_SHARE_ALT_SQUARE, "\uf1e1"); + ICON_MAP.put(FA_SHARE_SQUARE, "\uf14d"); + ICON_MAP.put(FA_SHARE_SQUARE_O, "\uf045"); + ICON_MAP.put(FA_SHEKEL, "\uf20b"); + ICON_MAP.put(FA_SHEQEL, "\uf20b"); + ICON_MAP.put(FA_SHIELD, "\uf132"); + ICON_MAP.put(FA_SHIP, "\uf21a"); + ICON_MAP.put(FA_SHIRTSINBULK, "\uf214"); + ICON_MAP.put(FA_SHOPPING_CART, "\uf07a"); + ICON_MAP.put(FA_SIGN_IN, "\uf090"); + ICON_MAP.put(FA_SIGN_OUT, "\uf08b"); + ICON_MAP.put(FA_SIGNAL, "\uf012"); + ICON_MAP.put(FA_SIMPLYBUILT, "\uf215"); + ICON_MAP.put(FA_SITEMAP, "\uf0e8"); + ICON_MAP.put(FA_SKYATLAS, "\uf216"); + ICON_MAP.put(FA_SKYPE, "\uf17e"); + ICON_MAP.put(FA_SLACK, "\uf198"); + ICON_MAP.put(FA_SLIDERS, "\uf1de"); + ICON_MAP.put(FA_SLIDESHARE, "\uf1e7"); + ICON_MAP.put(FA_SMILE_O, "\uf118"); + ICON_MAP.put(FA_SOCCER_BALL_O, "\uf1e3"); + ICON_MAP.put(FA_SORT, "\uf0dc"); + ICON_MAP.put(FA_SORT_ALPHA_ASC, "\uf15d"); + ICON_MAP.put(FA_SORT_ALPHA_DESC, "\uf15e"); + ICON_MAP.put(FA_SORT_AMOUNT_ASC, "\uf160"); + ICON_MAP.put(FA_SORT_AMOUNT_DESC, "\uf161"); + ICON_MAP.put(FA_SORT_ASC, "\uf0de"); + ICON_MAP.put(FA_SORT_DESC, "\uf0dd"); + ICON_MAP.put(FA_SORT_DOWN, "\uf0dd"); + ICON_MAP.put(FA_SORT_NUMERIC_ASC, "\uf162"); + ICON_MAP.put(FA_SORT_NUMERIC_DESC, "\uf163"); + ICON_MAP.put(FA_SORT_UP, "\uf0de"); + ICON_MAP.put(FA_SOUNDCLOUD, "\uf1be"); + ICON_MAP.put(FA_SPACE_SHUTTLE, "\uf197"); + ICON_MAP.put(FA_SPINNER, "\uf110"); + ICON_MAP.put(FA_SPOON, "\uf1b1"); + ICON_MAP.put(FA_SPOTIFY, "\uf1bc"); + ICON_MAP.put(FA_SQUARE, "\uf0c8"); + ICON_MAP.put(FA_SQUARE_O, "\uf096"); + ICON_MAP.put(FA_STACK_EXCHANGE, "\uf18d"); + ICON_MAP.put(FA_STACK_OVERFLOW, "\uf16c"); + ICON_MAP.put(FA_STAR, "\uf005"); + ICON_MAP.put(FA_STAR_HALF, "\uf089"); + ICON_MAP.put(FA_STAR_HALF_EMPTY, "\uf123"); + ICON_MAP.put(FA_STAR_HALF_FULL, "\uf123"); + ICON_MAP.put(FA_STAR_HALF_O, "\uf123"); + ICON_MAP.put(FA_STAR_O, "\uf006"); + ICON_MAP.put(FA_STEAM, "\uf1b6"); + ICON_MAP.put(FA_STEAM_SQUARE, "\uf1b7"); + ICON_MAP.put(FA_STEP_BACKWARD, "\uf048"); + ICON_MAP.put(FA_STEP_FORWARD, "\uf051"); + ICON_MAP.put(FA_STETHOSCOPE, "\uf0f1"); + ICON_MAP.put(FA_STICKY_NOTE, "\uf249"); + ICON_MAP.put(FA_STICKY_NOTE_O, "\uf24a"); + ICON_MAP.put(FA_STOP, "\uf04d"); + ICON_MAP.put(FA_STREET_VIEW, "\uf21d"); + ICON_MAP.put(FA_STRIKETHROUGH, "\uf0cc"); + ICON_MAP.put(FA_STUMBLEUPON, "\uf1a4"); + ICON_MAP.put(FA_STUMBLEUPON_CIRCLE, "\uf1a3"); + ICON_MAP.put(FA_SUBSCRIPT, "\uf12c"); + ICON_MAP.put(FA_SUBWAY, "\uf239"); + ICON_MAP.put(FA_SUITCASE, "\uf0f2"); + ICON_MAP.put(FA_SUN_O, "\uf185"); + ICON_MAP.put(FA_SUPERSCRIPT, "\uf12b"); + ICON_MAP.put(FA_SUPPORT, "\uf1cd"); + ICON_MAP.put(FA_TABLE, "\uf0ce"); + ICON_MAP.put(FA_TABLET, "\uf10a"); + ICON_MAP.put(FA_TACHOMETER, "\uf0e4"); + ICON_MAP.put(FA_TAG, "\uf02b"); + ICON_MAP.put(FA_TAGS, "\uf02c"); + ICON_MAP.put(FA_TASKS, "\uf0ae"); + ICON_MAP.put(FA_TAXI, "\uf1ba"); + ICON_MAP.put(FA_TELEVISION, "\uf26c"); + ICON_MAP.put(FA_TENCENT_WEIBO, "\uf1d5"); + ICON_MAP.put(FA_TERMINAL, "\uf120"); + ICON_MAP.put(FA_TEXT_HEIGHT, "\uf034"); + ICON_MAP.put(FA_TEXT_WIDTH, "\uf035"); + ICON_MAP.put(FA_TH, "\uf00a"); + ICON_MAP.put(FA_TH_LARGE, "\uf009"); + ICON_MAP.put(FA_TH_LIST, "\uf00b"); + ICON_MAP.put(FA_THUMB_TACK, "\uf08d"); + ICON_MAP.put(FA_THUMBS_DOWN, "\uf165"); + ICON_MAP.put(FA_THUMBS_O_DOWN, "\uf088"); + ICON_MAP.put(FA_THUMBS_O_UP, "\uf087"); + ICON_MAP.put(FA_THUMBS_UP, "\uf164"); + ICON_MAP.put(FA_TICKET, "\uf145"); + ICON_MAP.put(FA_TIMES, "\uf00d"); + ICON_MAP.put(FA_TIMES_CIRCLE, "\uf057"); + ICON_MAP.put(FA_TIMES_CIRCLE_O, "\uf05c"); + ICON_MAP.put(FA_TINT, "\uf043"); + ICON_MAP.put(FA_TOGGLE_DOWN, "\uf150"); + ICON_MAP.put(FA_TOGGLE_LEFT, "\uf191"); + ICON_MAP.put(FA_TOGGLE_OFF, "\uf204"); + ICON_MAP.put(FA_TOGGLE_ON, "\uf205"); + ICON_MAP.put(FA_TOGGLE_RIGHT, "\uf152"); + ICON_MAP.put(FA_TOGGLE_UP, "\uf151"); + ICON_MAP.put(FA_TRADEMARK, "\uf25c"); + ICON_MAP.put(FA_TRAIN, "\uf238"); + ICON_MAP.put(FA_TRANSGENDER, "\uf224"); + ICON_MAP.put(FA_TRANSGENDER_ALT, "\uf225"); + ICON_MAP.put(FA_TRASH, "\uf1f8"); + ICON_MAP.put(FA_TRASH_O, "\uf014"); + ICON_MAP.put(FA_TREE, "\uf1bb"); + ICON_MAP.put(FA_TRELLO, "\uf181"); + ICON_MAP.put(FA_TRIPADVISOR, "\uf262"); + ICON_MAP.put(FA_TROPHY, "\uf091"); + ICON_MAP.put(FA_TRUCK, "\uf0d1"); + ICON_MAP.put(FA_TRY, "\uf195"); + ICON_MAP.put(FA_TTY, "\uf1e4"); + ICON_MAP.put(FA_TUMBLR, "\uf173"); + ICON_MAP.put(FA_TUMBLR_SQUARE, "\uf174"); + ICON_MAP.put(FA_TURKISH_LIRA, "\uf195"); + ICON_MAP.put(FA_TV, "\uf26c"); + ICON_MAP.put(FA_TWITCH, "\uf1e8"); + ICON_MAP.put(FA_TWITTER, "\uf099"); + ICON_MAP.put(FA_TWITTER_SQUARE, "\uf081"); + ICON_MAP.put(FA_UMBRELLA, "\uf0e9"); + ICON_MAP.put(FA_UNDERLINE, "\uf0cd"); + ICON_MAP.put(FA_UNDO, "\uf0e2"); + ICON_MAP.put(FA_UNIVERSITY, "\uf19c"); + ICON_MAP.put(FA_UNLINK, "\uf127"); + ICON_MAP.put(FA_UNLOCK, "\uf09c"); + ICON_MAP.put(FA_UNLOCK_ALT, "\uf13e"); + ICON_MAP.put(FA_UNSORTED, "\uf0dc"); + ICON_MAP.put(FA_UPLOAD, "\uf093"); + ICON_MAP.put(FA_USD, "\uf155"); + ICON_MAP.put(FA_USER, "\uf007"); + ICON_MAP.put(FA_USER_MD, "\uf0f0"); + ICON_MAP.put(FA_USER_PLUS, "\uf234"); + ICON_MAP.put(FA_USER_SECRET, "\uf21b"); + ICON_MAP.put(FA_USER_TIMES, "\uf235"); + ICON_MAP.put(FA_USERS, "\uf0c0"); + ICON_MAP.put(FA_VENUS, "\uf221"); + ICON_MAP.put(FA_VENUS_DOUBLE, "\uf226"); + ICON_MAP.put(FA_VENUS_MARS, "\uf228"); + ICON_MAP.put(FA_VIACOIN, "\uf237"); + ICON_MAP.put(FA_VIDEO_CAMERA, "\uf03d"); + ICON_MAP.put(FA_VIMEO, "\uf27d"); + ICON_MAP.put(FA_VIMEO_SQUARE, "\uf194"); + ICON_MAP.put(FA_VINE, "\uf1ca"); + ICON_MAP.put(FA_VK, "\uf189"); + ICON_MAP.put(FA_VOLUME_DOWN, "\uf027"); + ICON_MAP.put(FA_VOLUME_OFF, "\uf026"); + ICON_MAP.put(FA_VOLUME_UP, "\uf028"); + ICON_MAP.put(FA_WARNING, "\uf071"); + ICON_MAP.put(FA_WECHAT, "\uf1d7"); + ICON_MAP.put(FA_WEIBO, "\uf18a"); + ICON_MAP.put(FA_WEIXIN, "\uf1d7"); + ICON_MAP.put(FA_WHATSAPP, "\uf232"); + ICON_MAP.put(FA_WHEELCHAIR, "\uf193"); + ICON_MAP.put(FA_WIFI, "\uf1eb"); + ICON_MAP.put(FA_WIKIPEDIA_W, "\uf266"); + ICON_MAP.put(FA_WINDOWS, "\uf17a"); + ICON_MAP.put(FA_WON, "\uf159"); + ICON_MAP.put(FA_WORDPRESS, "\uf19a"); + ICON_MAP.put(FA_WRENCH, "\uf0ad"); + ICON_MAP.put(FA_XING, "\uf168"); + ICON_MAP.put(FA_XING_SQUARE, "\uf169"); + ICON_MAP.put(FA_Y_COMBINATOR, "\uf23b"); + ICON_MAP.put(FA_Y_COMBINATOR_SQUARE, "\uf1d4"); + ICON_MAP.put(FA_YAHOO, "\uf19e"); + ICON_MAP.put(FA_YC, "\uf23b"); + ICON_MAP.put(FA_YC_SQUARE, "\uf1d4"); + ICON_MAP.put(FA_YELP, "\uf1e9"); + ICON_MAP.put(FA_YEN, "\uf157"); + ICON_MAP.put(FA_YOUTUBE, "\uf167"); + ICON_MAP.put(FA_YOUTUBE_PLAY, "\uf16a"); + ICON_MAP.put(FA_YOUTUBE_SQUARE, "\uf166"); + + + + + ATTR_MAP.put(0, FA_ADJUST); + ATTR_MAP.put(1, FA_ADN); + ATTR_MAP.put(2, FA_ALIGN_CENTER); + ATTR_MAP.put(3, FA_ALIGN_JUSTIFY); + ATTR_MAP.put(4, FA_ALIGN_LEFT); + ATTR_MAP.put(5, FA_ALIGN_RIGHT); + ATTR_MAP.put(6, FA_AMAZON); + ATTR_MAP.put(7, FA_AMBULANCE); + ATTR_MAP.put(8, FA_ANCHOR); + ATTR_MAP.put(9, FA_ANDROID); + ATTR_MAP.put(10, FA_ANGELLIST); + ATTR_MAP.put(11, FA_ANGLE_DOUBLE_DOWN); + ATTR_MAP.put(12, FA_ANGLE_DOUBLE_LEFT); + ATTR_MAP.put(13, FA_ANGLE_DOUBLE_RIGHT); + ATTR_MAP.put(14, FA_ANGLE_DOUBLE_UP); + ATTR_MAP.put(15, FA_ANGLE_DOWN); + ATTR_MAP.put(16, FA_ANGLE_LEFT); + ATTR_MAP.put(17, FA_ANGLE_RIGHT); + ATTR_MAP.put(18, FA_ANGLE_UP); + ATTR_MAP.put(19, FA_APPLE); + ATTR_MAP.put(20, FA_ARCHIVE); + ATTR_MAP.put(21, FA_AREA_CHART); + ATTR_MAP.put(22, FA_ARROW_CIRCLE_DOWN); + ATTR_MAP.put(23, FA_ARROW_CIRCLE_LEFT); + ATTR_MAP.put(24, FA_ARROW_CIRCLE_O_DOWN); + ATTR_MAP.put(25, FA_ARROW_CIRCLE_O_LEFT); + ATTR_MAP.put(26, FA_ARROW_CIRCLE_O_RIGHT); + ATTR_MAP.put(27, FA_ARROW_CIRCLE_O_UP); + ATTR_MAP.put(28, FA_ARROW_CIRCLE_RIGHT); + ATTR_MAP.put(29, FA_ARROW_CIRCLE_UP); + ATTR_MAP.put(30, FA_ARROW_DOWN); + ATTR_MAP.put(31, FA_ARROW_LEFT); + ATTR_MAP.put(32, FA_ARROW_RIGHT); + ATTR_MAP.put(33, FA_ARROW_UP); + ATTR_MAP.put(34, FA_ARROWS); + ATTR_MAP.put(35, FA_ARROWS_ALT); + ATTR_MAP.put(36, FA_ARROWS_H); + ATTR_MAP.put(37, FA_ARROWS_V); + ATTR_MAP.put(38, FA_ASTERISK); + ATTR_MAP.put(39, FA_AT); + ATTR_MAP.put(40, FA_AUTOMOBILE); + ATTR_MAP.put(41, FA_BACKWARD); + ATTR_MAP.put(42, FA_BALANCE_SCALE); + ATTR_MAP.put(43, FA_BAN); + ATTR_MAP.put(44, FA_BANK); + ATTR_MAP.put(45, FA_BAR_CHART); + ATTR_MAP.put(46, FA_BAR_CHART_O); + ATTR_MAP.put(47, FA_BARCODE); + ATTR_MAP.put(48, FA_BARS); + ATTR_MAP.put(49, FA_BATTERY_0); + ATTR_MAP.put(50, FA_BATTERY_1); + ATTR_MAP.put(51, FA_BATTERY_2); + ATTR_MAP.put(52, FA_BATTERY_3); + ATTR_MAP.put(53, FA_BATTERY_4); + ATTR_MAP.put(54, FA_BATTERY_EMPTY); + ATTR_MAP.put(55, FA_BATTERY_FULL); + ATTR_MAP.put(56, FA_BATTERY_HALF); + ATTR_MAP.put(57, FA_BATTERY_QUARTER); + ATTR_MAP.put(58, FA_BATTERY_THREE_QUARTERS); + ATTR_MAP.put(59, FA_BED); + ATTR_MAP.put(60, FA_BEER); + ATTR_MAP.put(61, FA_BEHANCE); + ATTR_MAP.put(62, FA_BEHANCE_SQUARE); + ATTR_MAP.put(63, FA_BELL); + ATTR_MAP.put(64, FA_BELL_O); + ATTR_MAP.put(65, FA_BELL_SLASH); + ATTR_MAP.put(66, FA_BELL_SLASH_O); + ATTR_MAP.put(67, FA_BICYCLE); + ATTR_MAP.put(68, FA_BINOCULARS); + ATTR_MAP.put(69, FA_BIRTHDAY_CAKE); + ATTR_MAP.put(70, FA_BITBUCKET); + ATTR_MAP.put(71, FA_BITBUCKET_SQUARE); + ATTR_MAP.put(72, FA_BITCOIN); + ATTR_MAP.put(73, FA_BLACK_TIE); + ATTR_MAP.put(74, FA_BOLD); + ATTR_MAP.put(75, FA_BOLT); + ATTR_MAP.put(76, FA_BOMB); + ATTR_MAP.put(77, FA_BOOK); + ATTR_MAP.put(78, FA_BOOKMARK); + ATTR_MAP.put(79, FA_BOOKMARK_O); + ATTR_MAP.put(80, FA_BRIEFCASE); + ATTR_MAP.put(81, FA_BTC); + ATTR_MAP.put(82, FA_BUG); + ATTR_MAP.put(83, FA_BUILDING); + ATTR_MAP.put(84, FA_BUILDING_O); + ATTR_MAP.put(85, FA_BULLHORN); + ATTR_MAP.put(86, FA_BULLSEYE); + ATTR_MAP.put(87, FA_BUS); + ATTR_MAP.put(88, FA_BUYSELLADS); + ATTR_MAP.put(89, FA_CAB); + ATTR_MAP.put(90, FA_CALCULATOR); + ATTR_MAP.put(91, FA_CALENDAR); + ATTR_MAP.put(92, FA_CALENDAR_CHECK_O); + ATTR_MAP.put(93, FA_CALENDAR_MINUS_O); + ATTR_MAP.put(94, FA_CALENDAR_O); + ATTR_MAP.put(95, FA_CALENDAR_PLUS_O); + ATTR_MAP.put(96, FA_CALENDAR_TIMES_O); + ATTR_MAP.put(97, FA_CAMERA); + ATTR_MAP.put(98, FA_CAMERA_RETRO); + ATTR_MAP.put(99, FA_CAR); + ATTR_MAP.put(100, FA_CARET_DOWN); + ATTR_MAP.put(101, FA_CARET_LEFT); + ATTR_MAP.put(102, FA_CARET_RIGHT); + ATTR_MAP.put(103, FA_CARET_SQUARE_O_DOWN); + ATTR_MAP.put(104, FA_CARET_SQUARE_O_LEFT); + ATTR_MAP.put(105, FA_CARET_SQUARE_O_RIGHT); + ATTR_MAP.put(106, FA_CARET_SQUARE_O_UP); + ATTR_MAP.put(107, FA_CARET_UP); + ATTR_MAP.put(108, FA_CART_ARROW_DOWN); + ATTR_MAP.put(109, FA_CART_PLUS); + ATTR_MAP.put(110, FA_CC); + ATTR_MAP.put(111, FA_CC_AMEX); + ATTR_MAP.put(112, FA_CC_DINERS_CLUB); + ATTR_MAP.put(113, FA_CC_DISCOVER); + ATTR_MAP.put(114, FA_CC_JCB); + ATTR_MAP.put(115, FA_CC_MASTERCARD); + ATTR_MAP.put(116, FA_CC_PAYPAL); + ATTR_MAP.put(117, FA_CC_STRIPE); + ATTR_MAP.put(118, FA_CC_VISA); + ATTR_MAP.put(119, FA_CERTIFICATE); + ATTR_MAP.put(120, FA_CHAIN); + ATTR_MAP.put(121, FA_CHAIN_BROKEN); + ATTR_MAP.put(122, FA_CHECK); + ATTR_MAP.put(123, FA_CHECK_CIRCLE); + ATTR_MAP.put(124, FA_CHECK_CIRCLE_O); + ATTR_MAP.put(125, FA_CHECK_SQUARE); + ATTR_MAP.put(126, FA_CHECK_SQUARE_O); + ATTR_MAP.put(127, FA_CHEVRON_CIRCLE_DOWN); + ATTR_MAP.put(128, FA_CHEVRON_CIRCLE_LEFT); + ATTR_MAP.put(129, FA_CHEVRON_CIRCLE_RIGHT); + ATTR_MAP.put(130, FA_CHEVRON_CIRCLE_UP); + ATTR_MAP.put(131, FA_CHEVRON_DOWN); + ATTR_MAP.put(132, FA_CHEVRON_LEFT); + ATTR_MAP.put(133, FA_CHEVRON_RIGHT); + ATTR_MAP.put(134, FA_CHEVRON_UP); + ATTR_MAP.put(135, FA_CHILD); + ATTR_MAP.put(136, FA_CHROME); + ATTR_MAP.put(137, FA_CIRCLE); + ATTR_MAP.put(138, FA_CIRCLE_O); + ATTR_MAP.put(139, FA_CIRCLE_O_NOTCH); + ATTR_MAP.put(140, FA_CIRCLE_THIN); + ATTR_MAP.put(141, FA_CLIPBOARD); + ATTR_MAP.put(142, FA_CLOCK_O); + ATTR_MAP.put(143, FA_CLONE); + ATTR_MAP.put(144, FA_CLOSE); + ATTR_MAP.put(145, FA_CLOUD); + ATTR_MAP.put(146, FA_CLOUD_DOWNLOAD); + ATTR_MAP.put(147, FA_CLOUD_UPLOAD); + ATTR_MAP.put(148, FA_CNY); + ATTR_MAP.put(149, FA_CODE); + ATTR_MAP.put(150, FA_CODE_FORK); + ATTR_MAP.put(151, FA_CODEPEN); + ATTR_MAP.put(152, FA_COFFEE); + ATTR_MAP.put(153, FA_COG); + ATTR_MAP.put(154, FA_COGS); + ATTR_MAP.put(155, FA_COLUMNS); + ATTR_MAP.put(156, FA_COMMENT); + ATTR_MAP.put(157, FA_COMMENT_O); + ATTR_MAP.put(158, FA_COMMENTING); + ATTR_MAP.put(159, FA_COMMENTING_O); + ATTR_MAP.put(160, FA_COMMENTS); + ATTR_MAP.put(161, FA_COMMENTS_O); + ATTR_MAP.put(162, FA_COMPASS); + ATTR_MAP.put(163, FA_COMPRESS); + ATTR_MAP.put(164, FA_CONNECTDEVELOP); + ATTR_MAP.put(165, FA_CONTAO); + ATTR_MAP.put(166, FA_COPY); + ATTR_MAP.put(167, FA_COPYRIGHT); + ATTR_MAP.put(168, FA_CREATIVE_COMMONS); + ATTR_MAP.put(169, FA_CREDIT_CARD); + ATTR_MAP.put(170, FA_CROP); + ATTR_MAP.put(171, FA_CROSSHAIRS); + ATTR_MAP.put(172, FA_CSS3); + ATTR_MAP.put(173, FA_CUBE); + ATTR_MAP.put(174, FA_CUBES); + ATTR_MAP.put(175, FA_CUT); + ATTR_MAP.put(176, FA_CUTLERY); + ATTR_MAP.put(177, FA_DASHBOARD); + ATTR_MAP.put(178, FA_DASHCUBE); + ATTR_MAP.put(179, FA_DATABASE); + ATTR_MAP.put(180, FA_DEDENT); + ATTR_MAP.put(181, FA_DELICIOUS); + ATTR_MAP.put(182, FA_DESKTOP); + ATTR_MAP.put(183, FA_DEVIANTART); + ATTR_MAP.put(184, FA_DIAMOND); + ATTR_MAP.put(185, FA_DIGG); + ATTR_MAP.put(186, FA_DOLLAR); + ATTR_MAP.put(187, FA_DOT_CIRCLE_O); + ATTR_MAP.put(188, FA_DOWNLOAD); + ATTR_MAP.put(189, FA_DRIBBBLE); + ATTR_MAP.put(190, FA_DROPBOX); + ATTR_MAP.put(191, FA_DRUPAL); + ATTR_MAP.put(192, FA_EDIT); + ATTR_MAP.put(193, FA_EJECT); + ATTR_MAP.put(194, FA_ELLIPSIS_H); + ATTR_MAP.put(195, FA_ELLIPSIS_V); + ATTR_MAP.put(196, FA_EMPIRE); + ATTR_MAP.put(197, FA_ENVELOPE); + ATTR_MAP.put(198, FA_ENVELOPE_O); + ATTR_MAP.put(199, FA_ENVELOPE_SQUARE); + ATTR_MAP.put(200, FA_ERASER); + ATTR_MAP.put(201, FA_EUR); + ATTR_MAP.put(202, FA_EURO); + ATTR_MAP.put(203, FA_EXCHANGE); + ATTR_MAP.put(204, FA_EXCLAMATION); + ATTR_MAP.put(205, FA_EXCLAMATION_CIRCLE); + ATTR_MAP.put(206, FA_EXCLAMATION_TRIANGLE); + ATTR_MAP.put(207, FA_EXPAND); + ATTR_MAP.put(208, FA_EXPEDITEDSSL); + ATTR_MAP.put(209, FA_EXTERNAL_LINK); + ATTR_MAP.put(210, FA_EXTERNAL_LINK_SQUARE); + ATTR_MAP.put(211, FA_EYE); + ATTR_MAP.put(212, FA_EYE_SLASH); + ATTR_MAP.put(213, FA_EYEDROPPER); + ATTR_MAP.put(214, FA_FACEBOOK); + ATTR_MAP.put(215, FA_FACEBOOK_F); + ATTR_MAP.put(216, FA_FACEBOOK_OFFICIAL); + ATTR_MAP.put(217, FA_FACEBOOK_SQUARE); + ATTR_MAP.put(218, FA_FAST_BACKWARD); + ATTR_MAP.put(219, FA_FAST_FORWARD); + ATTR_MAP.put(220, FA_FAX); + ATTR_MAP.put(221, FA_FEED); + ATTR_MAP.put(222, FA_FEMALE); + ATTR_MAP.put(223, FA_FIGHTER_JET); + ATTR_MAP.put(224, FA_FILE); + ATTR_MAP.put(225, FA_FILE_ARCHIVE_O); + ATTR_MAP.put(226, FA_FILE_AUDIO_O); + ATTR_MAP.put(227, FA_FILE_CODE_O); + ATTR_MAP.put(228, FA_FILE_EXCEL_O); + ATTR_MAP.put(229, FA_FILE_IMAGE_O); + ATTR_MAP.put(230, FA_FILE_MOVIE_O); + ATTR_MAP.put(231, FA_FILE_O); + ATTR_MAP.put(232, FA_FILE_PDF_O); + ATTR_MAP.put(233, FA_FILE_PHOTO_O); + ATTR_MAP.put(234, FA_FILE_PICTURE_O); + ATTR_MAP.put(235, FA_FILE_POWERPOINT_O); + ATTR_MAP.put(236, FA_FILE_SOUND_O); + ATTR_MAP.put(237, FA_FILE_TEXT); + ATTR_MAP.put(238, FA_FILE_TEXT_O); + ATTR_MAP.put(239, FA_FILE_VIDEO_O); + ATTR_MAP.put(240, FA_FILE_WORD_O); + ATTR_MAP.put(241, FA_FILE_ZIP_O); + ATTR_MAP.put(242, FA_FILES_O); + ATTR_MAP.put(243, FA_FILM); + ATTR_MAP.put(244, FA_FILTER); + ATTR_MAP.put(245, FA_FIRE); + ATTR_MAP.put(246, FA_FIRE_EXTINGUISHER); + ATTR_MAP.put(247, FA_FIREFOX); + ATTR_MAP.put(248, FA_FLAG); + ATTR_MAP.put(249, FA_FLAG_CHECKERED); + ATTR_MAP.put(250, FA_FLAG_O); + ATTR_MAP.put(251, FA_FLASH); + ATTR_MAP.put(252, FA_FLASK); + ATTR_MAP.put(253, FA_FLICKR); + ATTR_MAP.put(254, FA_FLOPPY_O); + ATTR_MAP.put(255, FA_FOLDER); + ATTR_MAP.put(256, FA_FOLDER_O); + ATTR_MAP.put(257, FA_FOLDER_OPEN); + ATTR_MAP.put(258, FA_FOLDER_OPEN_O); + ATTR_MAP.put(259, FA_FONT); + ATTR_MAP.put(260, FA_FONTICONS); + ATTR_MAP.put(261, FA_FORUMBEE); + ATTR_MAP.put(262, FA_FORWARD); + ATTR_MAP.put(263, FA_FOURSQUARE); + ATTR_MAP.put(264, FA_FROWN_O); + ATTR_MAP.put(265, FA_FUTBOL_O); + ATTR_MAP.put(266, FA_GAMEPAD); + ATTR_MAP.put(267, FA_GAVEL); + ATTR_MAP.put(268, FA_GBP); + ATTR_MAP.put(269, FA_GE); + ATTR_MAP.put(270, FA_GEAR); + ATTR_MAP.put(271, FA_GEARS); + ATTR_MAP.put(272, FA_GENDERLESS); + ATTR_MAP.put(273, FA_GET_POCKET); + ATTR_MAP.put(274, FA_GG); + ATTR_MAP.put(275, FA_GG_CIRCLE); + ATTR_MAP.put(276, FA_GIFT); + ATTR_MAP.put(277, FA_GIT); + ATTR_MAP.put(278, FA_GIT_SQUARE); + ATTR_MAP.put(279, FA_GITHUB); + ATTR_MAP.put(280, FA_GITHUB_ALT); + ATTR_MAP.put(281, FA_GITHUB_SQUARE); + ATTR_MAP.put(282, FA_GITTIP); + ATTR_MAP.put(283, FA_GLASS); + ATTR_MAP.put(284, FA_GLOBE); + ATTR_MAP.put(285, FA_GOOGLE); + ATTR_MAP.put(286, FA_GOOGLE_PLUS); + ATTR_MAP.put(287, FA_GOOGLE_PLUS_SQUARE); + ATTR_MAP.put(288, FA_GOOGLE_WALLET); + ATTR_MAP.put(289, FA_GRADUATION_CAP); + ATTR_MAP.put(290, FA_GRATIPAY); + ATTR_MAP.put(291, FA_GROUP); + ATTR_MAP.put(292, FA_H_SQUARE); + ATTR_MAP.put(293, FA_HACKER_NEWS); + ATTR_MAP.put(294, FA_HAND_GRAB_O); + ATTR_MAP.put(295, FA_HAND_LIZARD_O); + ATTR_MAP.put(296, FA_HAND_O_DOWN); + ATTR_MAP.put(297, FA_HAND_O_LEFT); + ATTR_MAP.put(298, FA_HAND_O_RIGHT); + ATTR_MAP.put(299, FA_HAND_O_UP); + ATTR_MAP.put(300, FA_HAND_PAPER_O); + ATTR_MAP.put(301, FA_HAND_PEACE_O); + ATTR_MAP.put(302, FA_HAND_POINTER_O); + ATTR_MAP.put(303, FA_HAND_ROCK_O); + ATTR_MAP.put(304, FA_HAND_SCISSORS_O); + ATTR_MAP.put(305, FA_HAND_SPOCK_O); + ATTR_MAP.put(306, FA_HAND_STOP_O); + ATTR_MAP.put(307, FA_HDD_O); + ATTR_MAP.put(308, FA_HEADER); + ATTR_MAP.put(309, FA_HEADPHONES); + ATTR_MAP.put(310, FA_HEART); + ATTR_MAP.put(311, FA_HEART_O); + ATTR_MAP.put(312, FA_HEARTBEAT); + ATTR_MAP.put(313, FA_HISTORY); + ATTR_MAP.put(314, FA_HOME); + ATTR_MAP.put(315, FA_HOSPITAL_O); + ATTR_MAP.put(316, FA_HOTEL); + ATTR_MAP.put(317, FA_HOURGLASS); + ATTR_MAP.put(318, FA_HOURGLASS_1); + ATTR_MAP.put(319, FA_HOURGLASS_2); + ATTR_MAP.put(320, FA_HOURGLASS_3); + ATTR_MAP.put(321, FA_HOURGLASS_END); + ATTR_MAP.put(322, FA_HOURGLASS_HALF); + ATTR_MAP.put(323, FA_HOURGLASS_O); + ATTR_MAP.put(324, FA_HOURGLASS_START); + ATTR_MAP.put(325, FA_HOUZZ); + ATTR_MAP.put(326, FA_HTML5); + ATTR_MAP.put(327, FA_I_CURSOR); + ATTR_MAP.put(328, FA_ILS); + ATTR_MAP.put(329, FA_IMAGE); + ATTR_MAP.put(330, FA_INBOX); + ATTR_MAP.put(331, FA_INDENT); + ATTR_MAP.put(332, FA_INDUSTRY); + ATTR_MAP.put(333, FA_INFO); + ATTR_MAP.put(334, FA_INFO_CIRCLE); + ATTR_MAP.put(335, FA_INR); + ATTR_MAP.put(336, FA_INSTAGRAM); + ATTR_MAP.put(337, FA_INSTITUTION); + ATTR_MAP.put(338, FA_INTERNET_EXPLORER); + ATTR_MAP.put(339, FA_INTERSEX); + ATTR_MAP.put(340, FA_IOXHOST); + ATTR_MAP.put(341, FA_ITALIC); + ATTR_MAP.put(342, FA_JOOMLA); + ATTR_MAP.put(343, FA_JPY); + ATTR_MAP.put(344, FA_JSFIDDLE); + ATTR_MAP.put(345, FA_KEY); + ATTR_MAP.put(346, FA_KEYBOARD_O); + ATTR_MAP.put(347, FA_KRW); + ATTR_MAP.put(348, FA_LANGUAGE); + ATTR_MAP.put(349, FA_LAPTOP); + ATTR_MAP.put(350, FA_LASTFM); + ATTR_MAP.put(351, FA_LASTFM_SQUARE); + ATTR_MAP.put(352, FA_LEAF); + ATTR_MAP.put(353, FA_LEANPUB); + ATTR_MAP.put(354, FA_LEGAL); + ATTR_MAP.put(355, FA_LEMON_O); + ATTR_MAP.put(356, FA_LEVEL_DOWN); + ATTR_MAP.put(357, FA_LEVEL_UP); + ATTR_MAP.put(358, FA_LIFE_BOUY); + ATTR_MAP.put(359, FA_LIFE_BUOY); + ATTR_MAP.put(360, FA_LIFE_RING); + ATTR_MAP.put(361, FA_LIFE_SAVER); + ATTR_MAP.put(362, FA_LIGHTBULB_O); + ATTR_MAP.put(363, FA_LINE_CHART); + ATTR_MAP.put(364, FA_LINK); + ATTR_MAP.put(365, FA_LINKEDIN); + ATTR_MAP.put(366, FA_LINKEDIN_SQUARE); + ATTR_MAP.put(367, FA_LINUX); + ATTR_MAP.put(368, FA_LIST); + ATTR_MAP.put(369, FA_LIST_ALT); + ATTR_MAP.put(370, FA_LIST_OL); + ATTR_MAP.put(371, FA_LIST_UL); + ATTR_MAP.put(372, FA_LOCATION_ARROW); + ATTR_MAP.put(373, FA_LOCK); + ATTR_MAP.put(374, FA_LONG_ARROW_DOWN); + ATTR_MAP.put(375, FA_LONG_ARROW_LEFT); + ATTR_MAP.put(376, FA_LONG_ARROW_RIGHT); + ATTR_MAP.put(377, FA_LONG_ARROW_UP); + ATTR_MAP.put(378, FA_MAGIC); + ATTR_MAP.put(379, FA_MAGNET); + ATTR_MAP.put(380, FA_MAIL_FORWARD); + ATTR_MAP.put(381, FA_MAIL_REPLY); + ATTR_MAP.put(382, FA_MAIL_REPLY_ALL); + ATTR_MAP.put(383, FA_MALE); + ATTR_MAP.put(384, FA_MAP); + ATTR_MAP.put(385, FA_MAP_MARKER); + ATTR_MAP.put(386, FA_MAP_O); + ATTR_MAP.put(387, FA_MAP_PIN); + ATTR_MAP.put(388, FA_MAP_SIGNS); + ATTR_MAP.put(389, FA_MARS); + ATTR_MAP.put(390, FA_MARS_DOUBLE); + ATTR_MAP.put(391, FA_MARS_STROKE); + ATTR_MAP.put(392, FA_MARS_STROKE_H); + ATTR_MAP.put(393, FA_MARS_STROKE_V); + ATTR_MAP.put(394, FA_MAXCDN); + ATTR_MAP.put(395, FA_MEANPATH); + ATTR_MAP.put(396, FA_MEDIUM); + ATTR_MAP.put(397, FA_MEDKIT); + ATTR_MAP.put(398, FA_MEH_O); + ATTR_MAP.put(399, FA_MERCURY); + ATTR_MAP.put(400, FA_MICROPHONE); + ATTR_MAP.put(401, FA_MICROPHONE_SLASH); + ATTR_MAP.put(402, FA_MINUS); + ATTR_MAP.put(403, FA_MINUS_CIRCLE); + ATTR_MAP.put(404, FA_MINUS_SQUARE); + ATTR_MAP.put(405, FA_MINUS_SQUARE_O); + ATTR_MAP.put(406, FA_MOBILE); + ATTR_MAP.put(407, FA_MOBILE_PHONE); + ATTR_MAP.put(408, FA_MONEY); + ATTR_MAP.put(409, FA_MOON_O); + ATTR_MAP.put(410, FA_MORTAR_BOARD); + ATTR_MAP.put(411, FA_MOTORCYCLE); + ATTR_MAP.put(412, FA_MOUSE_POINTER); + ATTR_MAP.put(413, FA_MUSIC); + ATTR_MAP.put(414, FA_NAVICON); + ATTR_MAP.put(415, FA_NEUTER); + ATTR_MAP.put(416, FA_NEWSPAPER_O); + ATTR_MAP.put(417, FA_OBJECT_GROUP); + ATTR_MAP.put(418, FA_OBJECT_UNGROUP); + ATTR_MAP.put(419, FA_ODNOKLASSNIKI); + ATTR_MAP.put(420, FA_ODNOKLASSNIKI_SQUARE); + ATTR_MAP.put(421, FA_OPENCART); + ATTR_MAP.put(422, FA_OPENID); + ATTR_MAP.put(423, FA_OPERA); + ATTR_MAP.put(424, FA_OPTIN_MONSTER); + ATTR_MAP.put(425, FA_OUTDENT); + ATTR_MAP.put(426, FA_PAGELINES); + ATTR_MAP.put(427, FA_PAINT_BRUSH); + ATTR_MAP.put(428, FA_PAPER_PLANE); + ATTR_MAP.put(429, FA_PAPER_PLANE_O); + ATTR_MAP.put(430, FA_PAPERCLIP); + ATTR_MAP.put(431, FA_PARAGRAPH); + ATTR_MAP.put(432, FA_PASTE); + ATTR_MAP.put(433, FA_PAUSE); + ATTR_MAP.put(434, FA_PAW); + ATTR_MAP.put(435, FA_PAYPAL); + ATTR_MAP.put(436, FA_PENCIL); + ATTR_MAP.put(437, FA_PENCIL_SQUARE); + ATTR_MAP.put(438, FA_PENCIL_SQUARE_O); + ATTR_MAP.put(439, FA_PHONE); + ATTR_MAP.put(440, FA_PHONE_SQUARE); + ATTR_MAP.put(441, FA_PHOTO); + ATTR_MAP.put(442, FA_PICTURE_O); + ATTR_MAP.put(443, FA_PIE_CHART); + ATTR_MAP.put(444, FA_PIED_PIPER); + ATTR_MAP.put(445, FA_PIED_PIPER_ALT); + ATTR_MAP.put(446, FA_PINTEREST); + ATTR_MAP.put(447, FA_PINTEREST_P); + ATTR_MAP.put(448, FA_PINTEREST_SQUARE); + ATTR_MAP.put(449, FA_PLANE); + ATTR_MAP.put(450, FA_PLAY); + ATTR_MAP.put(451, FA_PLAY_CIRCLE); + ATTR_MAP.put(452, FA_PLAY_CIRCLE_O); + ATTR_MAP.put(453, FA_PLUG); + ATTR_MAP.put(454, FA_PLUS); + ATTR_MAP.put(455, FA_PLUS_CIRCLE); + ATTR_MAP.put(456, FA_PLUS_SQUARE); + ATTR_MAP.put(457, FA_PLUS_SQUARE_O); + ATTR_MAP.put(458, FA_POWER_OFF); + ATTR_MAP.put(459, FA_PRINT); + ATTR_MAP.put(460, FA_PUZZLE_PIECE); + ATTR_MAP.put(461, FA_QQ); + ATTR_MAP.put(462, FA_QRCODE); + ATTR_MAP.put(463, FA_QUESTION); + ATTR_MAP.put(464, FA_QUESTION_CIRCLE); + ATTR_MAP.put(465, FA_QUOTE_LEFT); + ATTR_MAP.put(466, FA_QUOTE_RIGHT); + ATTR_MAP.put(467, FA_RA); + ATTR_MAP.put(468, FA_RANDOM); + ATTR_MAP.put(469, FA_REBEL); + ATTR_MAP.put(470, FA_RECYCLE); + ATTR_MAP.put(471, FA_REDDIT); + ATTR_MAP.put(472, FA_REDDIT_SQUARE); + ATTR_MAP.put(473, FA_REFRESH); + ATTR_MAP.put(474, FA_REGISTERED); + ATTR_MAP.put(475, FA_REMOVE); + ATTR_MAP.put(476, FA_RENREN); + ATTR_MAP.put(477, FA_REORDER); + ATTR_MAP.put(478, FA_REPEAT); + ATTR_MAP.put(479, FA_REPLY); + ATTR_MAP.put(480, FA_REPLY_ALL); + ATTR_MAP.put(481, FA_RETWEET); + ATTR_MAP.put(482, FA_RMB); + ATTR_MAP.put(483, FA_ROAD); + ATTR_MAP.put(484, FA_ROCKET); + ATTR_MAP.put(485, FA_ROTATE_LEFT); + ATTR_MAP.put(486, FA_ROTATE_RIGHT); + ATTR_MAP.put(487, FA_ROUBLE); + ATTR_MAP.put(488, FA_RSS); + ATTR_MAP.put(489, FA_RSS_SQUARE); + ATTR_MAP.put(490, FA_RUB); + ATTR_MAP.put(491, FA_RUBLE); + ATTR_MAP.put(492, FA_RUPEE); + ATTR_MAP.put(493, FA_SAFARI); + ATTR_MAP.put(494, FA_SAVE); + ATTR_MAP.put(495, FA_SCISSORS); + ATTR_MAP.put(496, FA_SEARCH); + ATTR_MAP.put(497, FA_SEARCH_MINUS); + ATTR_MAP.put(498, FA_SEARCH_PLUS); + ATTR_MAP.put(499, FA_SELLSY); + ATTR_MAP.put(500, FA_SEND); + ATTR_MAP.put(501, FA_SEND_O); + ATTR_MAP.put(502, FA_SERVER); + ATTR_MAP.put(503, FA_SHARE); + ATTR_MAP.put(504, FA_SHARE_ALT); + ATTR_MAP.put(505, FA_SHARE_ALT_SQUARE); + ATTR_MAP.put(506, FA_SHARE_SQUARE); + ATTR_MAP.put(507, FA_SHARE_SQUARE_O); + ATTR_MAP.put(508, FA_SHEKEL); + ATTR_MAP.put(509, FA_SHEQEL); + ATTR_MAP.put(510, FA_SHIELD); + ATTR_MAP.put(511, FA_SHIP); + ATTR_MAP.put(512, FA_SHIRTSINBULK); + ATTR_MAP.put(513, FA_SHOPPING_CART); + ATTR_MAP.put(514, FA_SIGN_IN); + ATTR_MAP.put(515, FA_SIGN_OUT); + ATTR_MAP.put(516, FA_SIGNAL); + ATTR_MAP.put(517, FA_SIMPLYBUILT); + ATTR_MAP.put(518, FA_SITEMAP); + ATTR_MAP.put(519, FA_SKYATLAS); + ATTR_MAP.put(520, FA_SKYPE); + ATTR_MAP.put(521, FA_SLACK); + ATTR_MAP.put(522, FA_SLIDERS); + ATTR_MAP.put(523, FA_SLIDESHARE); + ATTR_MAP.put(524, FA_SMILE_O); + ATTR_MAP.put(525, FA_SOCCER_BALL_O); + ATTR_MAP.put(526, FA_SORT); + ATTR_MAP.put(527, FA_SORT_ALPHA_ASC); + ATTR_MAP.put(528, FA_SORT_ALPHA_DESC); + ATTR_MAP.put(529, FA_SORT_AMOUNT_ASC); + ATTR_MAP.put(530, FA_SORT_AMOUNT_DESC); + ATTR_MAP.put(531, FA_SORT_ASC); + ATTR_MAP.put(532, FA_SORT_DESC); + ATTR_MAP.put(533, FA_SORT_DOWN); + ATTR_MAP.put(534, FA_SORT_NUMERIC_ASC); + ATTR_MAP.put(535, FA_SORT_NUMERIC_DESC); + ATTR_MAP.put(536, FA_SORT_UP); + ATTR_MAP.put(537, FA_SOUNDCLOUD); + ATTR_MAP.put(538, FA_SPACE_SHUTTLE); + ATTR_MAP.put(539, FA_SPINNER); + ATTR_MAP.put(540, FA_SPOON); + ATTR_MAP.put(541, FA_SPOTIFY); + ATTR_MAP.put(542, FA_SQUARE); + ATTR_MAP.put(543, FA_SQUARE_O); + ATTR_MAP.put(544, FA_STACK_EXCHANGE); + ATTR_MAP.put(545, FA_STACK_OVERFLOW); + ATTR_MAP.put(546, FA_STAR); + ATTR_MAP.put(547, FA_STAR_HALF); + ATTR_MAP.put(548, FA_STAR_HALF_EMPTY); + ATTR_MAP.put(549, FA_STAR_HALF_FULL); + ATTR_MAP.put(550, FA_STAR_HALF_O); + ATTR_MAP.put(551, FA_STAR_O); + ATTR_MAP.put(552, FA_STEAM); + ATTR_MAP.put(553, FA_STEAM_SQUARE); + ATTR_MAP.put(554, FA_STEP_BACKWARD); + ATTR_MAP.put(555, FA_STEP_FORWARD); + ATTR_MAP.put(556, FA_STETHOSCOPE); + ATTR_MAP.put(557, FA_STICKY_NOTE); + ATTR_MAP.put(558, FA_STICKY_NOTE_O); + ATTR_MAP.put(559, FA_STOP); + ATTR_MAP.put(560, FA_STREET_VIEW); + ATTR_MAP.put(561, FA_STRIKETHROUGH); + ATTR_MAP.put(562, FA_STUMBLEUPON); + ATTR_MAP.put(563, FA_STUMBLEUPON_CIRCLE); + ATTR_MAP.put(564, FA_SUBSCRIPT); + ATTR_MAP.put(565, FA_SUBWAY); + ATTR_MAP.put(566, FA_SUITCASE); + ATTR_MAP.put(567, FA_SUN_O); + ATTR_MAP.put(568, FA_SUPERSCRIPT); + ATTR_MAP.put(569, FA_SUPPORT); + ATTR_MAP.put(570, FA_TABLE); + ATTR_MAP.put(571, FA_TABLET); + ATTR_MAP.put(572, FA_TACHOMETER); + ATTR_MAP.put(573, FA_TAG); + ATTR_MAP.put(574, FA_TAGS); + ATTR_MAP.put(575, FA_TASKS); + ATTR_MAP.put(576, FA_TAXI); + ATTR_MAP.put(577, FA_TELEVISION); + ATTR_MAP.put(578, FA_TENCENT_WEIBO); + ATTR_MAP.put(579, FA_TERMINAL); + ATTR_MAP.put(580, FA_TEXT_HEIGHT); + ATTR_MAP.put(581, FA_TEXT_WIDTH); + ATTR_MAP.put(582, FA_TH); + ATTR_MAP.put(583, FA_TH_LARGE); + ATTR_MAP.put(584, FA_TH_LIST); + ATTR_MAP.put(585, FA_THUMB_TACK); + ATTR_MAP.put(586, FA_THUMBS_DOWN); + ATTR_MAP.put(587, FA_THUMBS_O_DOWN); + ATTR_MAP.put(588, FA_THUMBS_O_UP); + ATTR_MAP.put(589, FA_THUMBS_UP); + ATTR_MAP.put(590, FA_TICKET); + ATTR_MAP.put(591, FA_TIMES); + ATTR_MAP.put(592, FA_TIMES_CIRCLE); + ATTR_MAP.put(593, FA_TIMES_CIRCLE_O); + ATTR_MAP.put(594, FA_TINT); + ATTR_MAP.put(595, FA_TOGGLE_DOWN); + ATTR_MAP.put(596, FA_TOGGLE_LEFT); + ATTR_MAP.put(597, FA_TOGGLE_OFF); + ATTR_MAP.put(598, FA_TOGGLE_ON); + ATTR_MAP.put(599, FA_TOGGLE_RIGHT); + ATTR_MAP.put(600, FA_TOGGLE_UP); + ATTR_MAP.put(601, FA_TRADEMARK); + ATTR_MAP.put(602, FA_TRAIN); + ATTR_MAP.put(603, FA_TRANSGENDER); + ATTR_MAP.put(604, FA_TRANSGENDER_ALT); + ATTR_MAP.put(605, FA_TRASH); + ATTR_MAP.put(606, FA_TRASH_O); + ATTR_MAP.put(607, FA_TREE); + ATTR_MAP.put(608, FA_TRELLO); + ATTR_MAP.put(609, FA_TRIPADVISOR); + ATTR_MAP.put(610, FA_TROPHY); + ATTR_MAP.put(611, FA_TRUCK); + ATTR_MAP.put(612, FA_TRY); + ATTR_MAP.put(613, FA_TTY); + ATTR_MAP.put(614, FA_TUMBLR); + ATTR_MAP.put(615, FA_TUMBLR_SQUARE); + ATTR_MAP.put(616, FA_TURKISH_LIRA); + ATTR_MAP.put(617, FA_TV); + ATTR_MAP.put(618, FA_TWITCH); + ATTR_MAP.put(619, FA_TWITTER); + ATTR_MAP.put(620, FA_TWITTER_SQUARE); + ATTR_MAP.put(621, FA_UMBRELLA); + ATTR_MAP.put(622, FA_UNDERLINE); + ATTR_MAP.put(623, FA_UNDO); + ATTR_MAP.put(624, FA_UNIVERSITY); + ATTR_MAP.put(625, FA_UNLINK); + ATTR_MAP.put(626, FA_UNLOCK); + ATTR_MAP.put(627, FA_UNLOCK_ALT); + ATTR_MAP.put(628, FA_UNSORTED); + ATTR_MAP.put(629, FA_UPLOAD); + ATTR_MAP.put(630, FA_USD); + ATTR_MAP.put(631, FA_USER); + ATTR_MAP.put(632, FA_USER_MD); + ATTR_MAP.put(633, FA_USER_PLUS); + ATTR_MAP.put(634, FA_USER_SECRET); + ATTR_MAP.put(635, FA_USER_TIMES); + ATTR_MAP.put(636, FA_USERS); + ATTR_MAP.put(637, FA_VENUS); + ATTR_MAP.put(638, FA_VENUS_DOUBLE); + ATTR_MAP.put(639, FA_VENUS_MARS); + ATTR_MAP.put(640, FA_VIACOIN); + ATTR_MAP.put(641, FA_VIDEO_CAMERA); + ATTR_MAP.put(642, FA_VIMEO); + ATTR_MAP.put(643, FA_VIMEO_SQUARE); + ATTR_MAP.put(644, FA_VINE); + ATTR_MAP.put(645, FA_VK); + ATTR_MAP.put(646, FA_VOLUME_DOWN); + ATTR_MAP.put(647, FA_VOLUME_OFF); + ATTR_MAP.put(648, FA_VOLUME_UP); + ATTR_MAP.put(649, FA_WARNING); + ATTR_MAP.put(650, FA_WECHAT); + ATTR_MAP.put(651, FA_WEIBO); + ATTR_MAP.put(652, FA_WEIXIN); + ATTR_MAP.put(653, FA_WHATSAPP); + ATTR_MAP.put(654, FA_WHEELCHAIR); + ATTR_MAP.put(655, FA_WIFI); + ATTR_MAP.put(656, FA_WIKIPEDIA_W); + ATTR_MAP.put(657, FA_WINDOWS); + ATTR_MAP.put(658, FA_WON); + ATTR_MAP.put(659, FA_WORDPRESS); + ATTR_MAP.put(660, FA_WRENCH); + ATTR_MAP.put(661, FA_XING); + ATTR_MAP.put(662, FA_XING_SQUARE); + ATTR_MAP.put(663, FA_Y_COMBINATOR); + ATTR_MAP.put(664, FA_Y_COMBINATOR_SQUARE); + ATTR_MAP.put(665, FA_YAHOO); + ATTR_MAP.put(666, FA_YC); + ATTR_MAP.put(667, FA_YC_SQUARE); + ATTR_MAP.put(668, FA_YELP); + ATTR_MAP.put(669, FA_YEN); + ATTR_MAP.put(670, FA_YOUTUBE); + ATTR_MAP.put(671, FA_YOUTUBE_PLAY); + ATTR_MAP.put(672, FA_YOUTUBE_SQUARE); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/IconSet.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/IconSet.java new file mode 100644 index 0000000..c0b6912 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/IconSet.java @@ -0,0 +1,32 @@ +package com.beardedhen.androidbootstrap.font; + +/** + * Specifies the icon codes for a Typeface, and provides the filename of the font so that it can be + * initialised + */ +public interface IconSet { + + /** + * Returns the unicode character for the current Font Icon. + * + * @return the unicode character + */ + CharSequence unicodeForKey(CharSequence key); + + + /** + * Returns the icon code for the current Font Icon. + * + * @return the icon code + */ + CharSequence iconCodeForAttrIndex(int index); + + /** + * Specifies the location that the font file resides in, starting from the assets directory + * e.g."fontawesome-webfont.ttf" + * + * @return the font path + */ + CharSequence fontPath(); + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/Typicon.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/Typicon.java new file mode 100644 index 0000000..a63e750 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/font/Typicon.java @@ -0,0 +1,1391 @@ +package com.beardedhen.androidbootstrap.font; + +import android.support.annotation.StringDef; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.HashMap; +import java.util.Map; + +/** + * Maps Typicons Icon Codes to unicode characters, allowing its use in AwesomeTextView. + * See the Cheatsheet for icon + * code reference. Please note that icon codes have been prefixed with "ty_". + * For example, "adjust_brightness" would become "ty_adjust_brightness". + */ +public class Typicon implements IconSet { + + public static final String FONT_PATH = "typicons-v207.ttf"; + + private static final Map ICON_MAP = new HashMap<>(); + private static final Map ATTR_MAP = new HashMap<>(); + + @Override public CharSequence unicodeForKey(@Icon CharSequence key) { + return ICON_MAP.get(key); + } + + @Override public CharSequence iconCodeForAttrIndex(int index) { + return ATTR_MAP.get(index); + } + + @Override public CharSequence fontPath() { + return FONT_PATH; + } + + // Auto-generated Icon Set from 2015-10-05 + + @Retention(RetentionPolicy.SOURCE) + @StringDef({ + TY_ADJUST_BRIGHTNESS, + TY_ADJUST_CONTRAST, + TY_ANCHOR, + TY_ANCHOR_OUTLINE, + TY_ARCHIVE, + TY_ARROW_BACK, + TY_ARROW_BACK_OUTLINE, + TY_ARROW_DOWN, + TY_ARROW_DOWN_OUTLINE, + TY_ARROW_DOWN_THICK, + TY_ARROW_FORWARD, + TY_ARROW_FORWARD_OUTLINE, + TY_ARROW_LEFT, + TY_ARROW_LEFT_OUTLINE, + TY_ARROW_LEFT_THICK, + TY_ARROW_LOOP, + TY_ARROW_LOOP_OUTLINE, + TY_ARROW_MAXIMISE, + TY_ARROW_MAXIMISE_OUTLINE, + TY_ARROW_MINIMISE, + TY_ARROW_MINIMISE_OUTLINE, + TY_ARROW_MOVE, + TY_ARROW_MOVE_OUTLINE, + TY_ARROW_REPEAT, + TY_ARROW_REPEAT_OUTLINE, + TY_ARROW_RIGHT, + TY_ARROW_RIGHT_OUTLINE, + TY_ARROW_RIGHT_THICK, + TY_ARROW_SHUFFLE, + TY_ARROW_SORTED_DOWN, + TY_ARROW_SORTED_UP, + TY_ARROW_SYNC, + TY_ARROW_SYNC_OUTLINE, + TY_ARROW_UNSORTED, + TY_ARROW_UP, + TY_ARROW_UP_OUTLINE, + TY_ARROW_UP_THICK, + TY_AT, + TY_ATTACHMENT, + TY_ATTACHMENT_OUTLINE, + TY_BACKSPACE, + TY_BACKSPACE_OUTLINE, + TY_BATTERY_CHARGE, + TY_BATTERY_FULL, + TY_BATTERY_HIGH, + TY_BATTERY_LOW, + TY_BATTERY_MID, + TY_BEAKER, + TY_BEER, + TY_BELL, + TY_BOOK, + TY_BOOKMARK, + TY_BRIEFCASE, + TY_BRUSH, + TY_BUSINESS_CARD, + TY_CALCULATOR, + TY_CALENDAR, + TY_CALENDAR_OUTLINE, + TY_CAMERA, + TY_CAMERA_OUTLINE, + TY_CANCEL, + TY_CANCEL_OUTLINE, + TY_CHART_AREA, + TY_CHART_AREA_OUTLINE, + TY_CHART_BAR, + TY_CHART_BAR_OUTLINE, + TY_CHART_LINE, + TY_CHART_LINE_OUTLINE, + TY_CHART_PIE, + TY_CHART_PIE_OUTLINE, + TY_CHEVRON_LEFT, + TY_CHEVRON_LEFT_OUTLINE, + TY_CHEVRON_RIGHT, + TY_CHEVRON_RIGHT_OUTLINE, + TY_CLIPBOARD, + TY_CLOUD_STORAGE, + TY_CLOUD_STORAGE_OUTLINE, + TY_CODE, + TY_CODE_OUTLINE, + TY_COFFEE, + TY_COG, + TY_COG_OUTLINE, + TY_COMPASS, + TY_CONTACTS, + TY_CREDIT_CARD, + TY_CSS3, + TY_DATABASE, + TY_DELETE, + TY_DELETE_OUTLINE, + TY_DEVICE_DESKTOP, + TY_DEVICE_LAPTOP, + TY_DEVICE_PHONE, + TY_DEVICE_TABLET, + TY_DIRECTIONS, + TY_DIVIDE, + TY_DIVIDE_OUTLINE, + TY_DOCUMENT, + TY_DOCUMENT_ADD, + TY_DOCUMENT_DELETE, + TY_DOCUMENT_TEXT, + TY_DOWNLOAD, + TY_DOWNLOAD_OUTLINE, + TY_DROPBOX, + TY_EDIT, + TY_EJECT, + TY_EJECT_OUTLINE, + TY_EQUALS, + TY_EQUALS_OUTLINE, + TY_EXPORT, + TY_EXPORT_OUTLINE, + TY_EYE, + TY_EYE_OUTLINE, + TY_FEATHER, + TY_FILM, + TY_FILTER, + TY_FLAG, + TY_FLAG_OUTLINE, + TY_FLASH, + TY_FLASH_OUTLINE, + TY_FLOW_CHILDREN, + TY_FLOW_MERGE, + TY_FLOW_PARALLEL, + TY_FLOW_SWITCH, + TY_FOLDER, + TY_FOLDER_ADD, + TY_FOLDER_DELETE, + TY_FOLDER_OPEN, + TY_GIFT, + TY_GLOBE, + TY_GLOBE_OUTLINE, + TY_GROUP, + TY_GROUP_OUTLINE, + TY_HEADPHONES, + TY_HEART, + TY_HEART_FULL_OUTLINE, + TY_HEART_HALF_OUTLINE, + TY_HEART_OUTLINE, + TY_HOME, + TY_HOME_OUTLINE, + TY_HTML5, + TY_IMAGE, + TY_IMAGE_OUTLINE, + TY_INFINITY, + TY_INFINITY_OUTLINE, + TY_INFO, + TY_INFO_LARGE, + TY_INFO_LARGE_OUTLINE, + TY_INFO_OUTLINE, + TY_INPUT_CHECKED, + TY_INPUT_CHECKED_OUTLINE, + TY_KEY, + TY_KEY_OUTLINE, + TY_KEYBOARD, + TY_LEAF, + TY_LIGHTBULB, + TY_LINK, + TY_LINK_OUTLINE, + TY_LOCATION, + TY_LOCATION_ARROW, + TY_LOCATION_ARROW_OUTLINE, + TY_LOCATION_OUTLINE, + TY_LOCK_CLOSED, + TY_LOCK_CLOSED_OUTLINE, + TY_LOCK_OPEN, + TY_LOCK_OPEN_OUTLINE, + TY_MAIL, + TY_MAP, + TY_MEDIA_EJECT, + TY_MEDIA_EJECT_OUTLINE, + TY_MEDIA_FAST_FORWARD, + TY_MEDIA_FAST_FORWARD_OUTLINE, + TY_MEDIA_PAUSE, + TY_MEDIA_PAUSE_OUTLINE, + TY_MEDIA_PLAY, + TY_MEDIA_PLAY_OUTLINE, + TY_MEDIA_PLAY_REVERSE, + TY_MEDIA_PLAY_REVERSE_OUTLINE, + TY_MEDIA_RECORD, + TY_MEDIA_RECORD_OUTLINE, + TY_MEDIA_REWIND, + TY_MEDIA_REWIND_OUTLINE, + TY_MEDIA_STOP, + TY_MEDIA_STOP_OUTLINE, + TY_MESSAGE, + TY_MESSAGE_TYPING, + TY_MESSAGES, + TY_MICROPHONE, + TY_MICROPHONE_OUTLINE, + TY_MINUS, + TY_MINUS_OUTLINE, + TY_MORTAR_BOARD, + TY_NEWS, + TY_NOTES, + TY_NOTES_OUTLINE, + TY_PEN, + TY_PENCIL, + TY_PHONE, + TY_PHONE_OUTLINE, + TY_PI, + TY_PI_OUTLINE, + TY_PIN, + TY_PIN_OUTLINE, + TY_PIPETTE, + TY_PLANE, + TY_PLANE_OUTLINE, + TY_PLUG, + TY_PLUS, + TY_PLUS_OUTLINE, + TY_POINT_OF_INTEREST, + TY_POINT_OF_INTEREST_OUTLINE, + TY_POWER, + TY_POWER_OUTLINE, + TY_PRINTER, + TY_PUZZLE, + TY_PUZZLE_OUTLINE, + TY_RADAR, + TY_RADAR_OUTLINE, + TY_REFRESH, + TY_REFRESH_OUTLINE, + TY_RSS, + TY_RSS_OUTLINE, + TY_SCISSORS, + TY_SCISSORS_OUTLINE, + TY_SHOPPING_BAG, + TY_SHOPPING_CART, + TY_SOCIAL_AT_CIRCULAR, + TY_SOCIAL_DRIBBBLE, + TY_SOCIAL_DRIBBBLE_CIRCULAR, + TY_SOCIAL_FACEBOOK, + TY_SOCIAL_FACEBOOK_CIRCULAR, + TY_SOCIAL_FLICKR, + TY_SOCIAL_FLICKR_CIRCULAR, + TY_SOCIAL_GITHUB, + TY_SOCIAL_GITHUB_CIRCULAR, + TY_SOCIAL_GOOGLE_PLUS, + TY_SOCIAL_GOOGLE_PLUS_CIRCULAR, + TY_SOCIAL_INSTAGRAM, + TY_SOCIAL_INSTAGRAM_CIRCULAR, + TY_SOCIAL_LAST_FM, + TY_SOCIAL_LAST_FM_CIRCULAR, + TY_SOCIAL_LINKEDIN, + TY_SOCIAL_LINKEDIN_CIRCULAR, + TY_SOCIAL_PINTEREST, + TY_SOCIAL_PINTEREST_CIRCULAR, + TY_SOCIAL_SKYPE, + TY_SOCIAL_SKYPE_OUTLINE, + TY_SOCIAL_TUMBLER, + TY_SOCIAL_TUMBLER_CIRCULAR, + TY_SOCIAL_TWITTER, + TY_SOCIAL_TWITTER_CIRCULAR, + TY_SOCIAL_VIMEO, + TY_SOCIAL_VIMEO_CIRCULAR, + TY_SOCIAL_YOUTUBE, + TY_SOCIAL_YOUTUBE_CIRCULAR, + TY_SORT_ALPHABETICALLY, + TY_SORT_ALPHABETICALLY_OUTLINE, + TY_SORT_NUMERICALLY, + TY_SORT_NUMERICALLY_OUTLINE, + TY_SPANNER, + TY_SPANNER_OUTLINE, + TY_SPIRAL, + TY_STAR, + TY_STAR_FULL_OUTLINE, + TY_STAR_HALF, + TY_STAR_HALF_OUTLINE, + TY_STAR_OUTLINE, + TY_STARBURST, + TY_STARBURST_OUTLINE, + TY_STOPWATCH, + TY_SUPPORT, + TY_TABS_OUTLINE, + TY_TAG, + TY_TAGS, + TY_TH_LARGE, + TY_TH_LARGE_OUTLINE, + TY_TH_LIST, + TY_TH_LIST_OUTLINE, + TY_TH_MENU, + TY_TH_MENU_OUTLINE, + TY_TH_SMALL, + TY_TH_SMALL_OUTLINE, + TY_THERMOMETER, + TY_THUMBS_DOWN, + TY_THUMBS_OK, + TY_THUMBS_UP, + TY_TICK, + TY_TICK_OUTLINE, + TY_TICKET, + TY_TIME, + TY_TIMES, + TY_TIMES_OUTLINE, + TY_TRASH, + TY_TREE, + TY_UPLOAD, + TY_UPLOAD_OUTLINE, + TY_USER, + TY_USER_ADD, + TY_USER_ADD_OUTLINE, + TY_USER_DELETE, + TY_USER_DELETE_OUTLINE, + TY_USER_OUTLINE, + TY_VENDOR_ANDROID, + TY_VENDOR_APPLE, + TY_VENDOR_MICROSOFT, + TY_VIDEO, + TY_VIDEO_OUTLINE, + TY_VOLUME, + TY_VOLUME_DOWN, + TY_VOLUME_MUTE, + TY_VOLUME_UP, + TY_WARNING, + TY_WARNING_OUTLINE, + TY_WATCH, + TY_WAVES, + TY_WAVES_OUTLINE, + TY_WEATHER_CLOUDY, + TY_WEATHER_DOWNPOUR, + TY_WEATHER_NIGHT, + TY_WEATHER_PARTLY_SUNNY, + TY_WEATHER_SHOWER, + TY_WEATHER_SNOW, + TY_WEATHER_STORMY, + TY_WEATHER_SUNNY, + TY_WEATHER_WINDY, + TY_WEATHER_WINDY_CLOUDY, + TY_WI_FI, + TY_WI_FI_OUTLINE, + TY_WINE, + TY_WORLD, + TY_WORLD_OUTLINE, + TY_ZOOM, + TY_ZOOM_IN, + TY_ZOOM_IN_OUTLINE, + TY_ZOOM_OUT, + TY_ZOOM_OUT_OUTLINE, + TY_ZOOM_OUTLINE, + }) public @interface Icon { + } + + public static final String TY_ADJUST_BRIGHTNESS = "ty_adjust_brightness"; + public static final String TY_ADJUST_CONTRAST = "ty_adjust_contrast"; + public static final String TY_ANCHOR = "ty_anchor"; + public static final String TY_ANCHOR_OUTLINE = "ty_anchor_outline"; + public static final String TY_ARCHIVE = "ty_archive"; + public static final String TY_ARROW_BACK = "ty_arrow_back"; + public static final String TY_ARROW_BACK_OUTLINE = "ty_arrow_back_outline"; + public static final String TY_ARROW_DOWN = "ty_arrow_down"; + public static final String TY_ARROW_DOWN_OUTLINE = "ty_arrow_down_outline"; + public static final String TY_ARROW_DOWN_THICK = "ty_arrow_down_thick"; + public static final String TY_ARROW_FORWARD = "ty_arrow_forward"; + public static final String TY_ARROW_FORWARD_OUTLINE = "ty_arrow_forward_outline"; + public static final String TY_ARROW_LEFT = "ty_arrow_left"; + public static final String TY_ARROW_LEFT_OUTLINE = "ty_arrow_left_outline"; + public static final String TY_ARROW_LEFT_THICK = "ty_arrow_left_thick"; + public static final String TY_ARROW_LOOP = "ty_arrow_loop"; + public static final String TY_ARROW_LOOP_OUTLINE = "ty_arrow_loop_outline"; + public static final String TY_ARROW_MAXIMISE = "ty_arrow_maximise"; + public static final String TY_ARROW_MAXIMISE_OUTLINE = "ty_arrow_maximise_outline"; + public static final String TY_ARROW_MINIMISE = "ty_arrow_minimise"; + public static final String TY_ARROW_MINIMISE_OUTLINE = "ty_arrow_minimise_outline"; + public static final String TY_ARROW_MOVE = "ty_arrow_move"; + public static final String TY_ARROW_MOVE_OUTLINE = "ty_arrow_move_outline"; + public static final String TY_ARROW_REPEAT = "ty_arrow_repeat"; + public static final String TY_ARROW_REPEAT_OUTLINE = "ty_arrow_repeat_outline"; + public static final String TY_ARROW_RIGHT = "ty_arrow_right"; + public static final String TY_ARROW_RIGHT_OUTLINE = "ty_arrow_right_outline"; + public static final String TY_ARROW_RIGHT_THICK = "ty_arrow_right_thick"; + public static final String TY_ARROW_SHUFFLE = "ty_arrow_shuffle"; + public static final String TY_ARROW_SORTED_DOWN = "ty_arrow_sorted_down"; + public static final String TY_ARROW_SORTED_UP = "ty_arrow_sorted_up"; + public static final String TY_ARROW_SYNC = "ty_arrow_sync"; + public static final String TY_ARROW_SYNC_OUTLINE = "ty_arrow_sync_outline"; + public static final String TY_ARROW_UNSORTED = "ty_arrow_unsorted"; + public static final String TY_ARROW_UP = "ty_arrow_up"; + public static final String TY_ARROW_UP_OUTLINE = "ty_arrow_up_outline"; + public static final String TY_ARROW_UP_THICK = "ty_arrow_up_thick"; + public static final String TY_AT = "ty_at"; + public static final String TY_ATTACHMENT = "ty_attachment"; + public static final String TY_ATTACHMENT_OUTLINE = "ty_attachment_outline"; + public static final String TY_BACKSPACE = "ty_backspace"; + public static final String TY_BACKSPACE_OUTLINE = "ty_backspace_outline"; + public static final String TY_BATTERY_CHARGE = "ty_battery_charge"; + public static final String TY_BATTERY_FULL = "ty_battery_full"; + public static final String TY_BATTERY_HIGH = "ty_battery_high"; + public static final String TY_BATTERY_LOW = "ty_battery_low"; + public static final String TY_BATTERY_MID = "ty_battery_mid"; + public static final String TY_BEAKER = "ty_beaker"; + public static final String TY_BEER = "ty_beer"; + public static final String TY_BELL = "ty_bell"; + public static final String TY_BOOK = "ty_book"; + public static final String TY_BOOKMARK = "ty_bookmark"; + public static final String TY_BRIEFCASE = "ty_briefcase"; + public static final String TY_BRUSH = "ty_brush"; + public static final String TY_BUSINESS_CARD = "ty_business_card"; + public static final String TY_CALCULATOR = "ty_calculator"; + public static final String TY_CALENDAR = "ty_calendar"; + public static final String TY_CALENDAR_OUTLINE = "ty_calendar_outline"; + public static final String TY_CAMERA = "ty_camera"; + public static final String TY_CAMERA_OUTLINE = "ty_camera_outline"; + public static final String TY_CANCEL = "ty_cancel"; + public static final String TY_CANCEL_OUTLINE = "ty_cancel_outline"; + public static final String TY_CHART_AREA = "ty_chart_area"; + public static final String TY_CHART_AREA_OUTLINE = "ty_chart_area_outline"; + public static final String TY_CHART_BAR = "ty_chart_bar"; + public static final String TY_CHART_BAR_OUTLINE = "ty_chart_bar_outline"; + public static final String TY_CHART_LINE = "ty_chart_line"; + public static final String TY_CHART_LINE_OUTLINE = "ty_chart_line_outline"; + public static final String TY_CHART_PIE = "ty_chart_pie"; + public static final String TY_CHART_PIE_OUTLINE = "ty_chart_pie_outline"; + public static final String TY_CHEVRON_LEFT = "ty_chevron_left"; + public static final String TY_CHEVRON_LEFT_OUTLINE = "ty_chevron_left_outline"; + public static final String TY_CHEVRON_RIGHT = "ty_chevron_right"; + public static final String TY_CHEVRON_RIGHT_OUTLINE = "ty_chevron_right_outline"; + public static final String TY_CLIPBOARD = "ty_clipboard"; + public static final String TY_CLOUD_STORAGE = "ty_cloud_storage"; + public static final String TY_CLOUD_STORAGE_OUTLINE = "ty_cloud_storage_outline"; + public static final String TY_CODE = "ty_code"; + public static final String TY_CODE_OUTLINE = "ty_code_outline"; + public static final String TY_COFFEE = "ty_coffee"; + public static final String TY_COG = "ty_cog"; + public static final String TY_COG_OUTLINE = "ty_cog_outline"; + public static final String TY_COMPASS = "ty_compass"; + public static final String TY_CONTACTS = "ty_contacts"; + public static final String TY_CREDIT_CARD = "ty_credit_card"; + public static final String TY_CSS3 = "ty_css3"; + public static final String TY_DATABASE = "ty_database"; + public static final String TY_DELETE = "ty_delete"; + public static final String TY_DELETE_OUTLINE = "ty_delete_outline"; + public static final String TY_DEVICE_DESKTOP = "ty_device_desktop"; + public static final String TY_DEVICE_LAPTOP = "ty_device_laptop"; + public static final String TY_DEVICE_PHONE = "ty_device_phone"; + public static final String TY_DEVICE_TABLET = "ty_device_tablet"; + public static final String TY_DIRECTIONS = "ty_directions"; + public static final String TY_DIVIDE = "ty_divide"; + public static final String TY_DIVIDE_OUTLINE = "ty_divide_outline"; + public static final String TY_DOCUMENT = "ty_document"; + public static final String TY_DOCUMENT_ADD = "ty_document_add"; + public static final String TY_DOCUMENT_DELETE = "ty_document_delete"; + public static final String TY_DOCUMENT_TEXT = "ty_document_text"; + public static final String TY_DOWNLOAD = "ty_download"; + public static final String TY_DOWNLOAD_OUTLINE = "ty_download_outline"; + public static final String TY_DROPBOX = "ty_dropbox"; + public static final String TY_EDIT = "ty_edit"; + public static final String TY_EJECT = "ty_eject"; + public static final String TY_EJECT_OUTLINE = "ty_eject_outline"; + public static final String TY_EQUALS = "ty_equals"; + public static final String TY_EQUALS_OUTLINE = "ty_equals_outline"; + public static final String TY_EXPORT = "ty_export"; + public static final String TY_EXPORT_OUTLINE = "ty_export_outline"; + public static final String TY_EYE = "ty_eye"; + public static final String TY_EYE_OUTLINE = "ty_eye_outline"; + public static final String TY_FEATHER = "ty_feather"; + public static final String TY_FILM = "ty_film"; + public static final String TY_FILTER = "ty_filter"; + public static final String TY_FLAG = "ty_flag"; + public static final String TY_FLAG_OUTLINE = "ty_flag_outline"; + public static final String TY_FLASH = "ty_flash"; + public static final String TY_FLASH_OUTLINE = "ty_flash_outline"; + public static final String TY_FLOW_CHILDREN = "ty_flow_children"; + public static final String TY_FLOW_MERGE = "ty_flow_merge"; + public static final String TY_FLOW_PARALLEL = "ty_flow_parallel"; + public static final String TY_FLOW_SWITCH = "ty_flow_switch"; + public static final String TY_FOLDER = "ty_folder"; + public static final String TY_FOLDER_ADD = "ty_folder_add"; + public static final String TY_FOLDER_DELETE = "ty_folder_delete"; + public static final String TY_FOLDER_OPEN = "ty_folder_open"; + public static final String TY_GIFT = "ty_gift"; + public static final String TY_GLOBE = "ty_globe"; + public static final String TY_GLOBE_OUTLINE = "ty_globe_outline"; + public static final String TY_GROUP = "ty_group"; + public static final String TY_GROUP_OUTLINE = "ty_group_outline"; + public static final String TY_HEADPHONES = "ty_headphones"; + public static final String TY_HEART = "ty_heart"; + public static final String TY_HEART_FULL_OUTLINE = "ty_heart_full_outline"; + public static final String TY_HEART_HALF_OUTLINE = "ty_heart_half_outline"; + public static final String TY_HEART_OUTLINE = "ty_heart_outline"; + public static final String TY_HOME = "ty_home"; + public static final String TY_HOME_OUTLINE = "ty_home_outline"; + public static final String TY_HTML5 = "ty_html5"; + public static final String TY_IMAGE = "ty_image"; + public static final String TY_IMAGE_OUTLINE = "ty_image_outline"; + public static final String TY_INFINITY = "ty_infinity"; + public static final String TY_INFINITY_OUTLINE = "ty_infinity_outline"; + public static final String TY_INFO = "ty_info"; + public static final String TY_INFO_LARGE = "ty_info_large"; + public static final String TY_INFO_LARGE_OUTLINE = "ty_info_large_outline"; + public static final String TY_INFO_OUTLINE = "ty_info_outline"; + public static final String TY_INPUT_CHECKED = "ty_input_checked"; + public static final String TY_INPUT_CHECKED_OUTLINE = "ty_input_checked_outline"; + public static final String TY_KEY = "ty_key"; + public static final String TY_KEY_OUTLINE = "ty_key_outline"; + public static final String TY_KEYBOARD = "ty_keyboard"; + public static final String TY_LEAF = "ty_leaf"; + public static final String TY_LIGHTBULB = "ty_lightbulb"; + public static final String TY_LINK = "ty_link"; + public static final String TY_LINK_OUTLINE = "ty_link_outline"; + public static final String TY_LOCATION = "ty_location"; + public static final String TY_LOCATION_ARROW = "ty_location_arrow"; + public static final String TY_LOCATION_ARROW_OUTLINE = "ty_location_arrow_outline"; + public static final String TY_LOCATION_OUTLINE = "ty_location_outline"; + public static final String TY_LOCK_CLOSED = "ty_lock_closed"; + public static final String TY_LOCK_CLOSED_OUTLINE = "ty_lock_closed_outline"; + public static final String TY_LOCK_OPEN = "ty_lock_open"; + public static final String TY_LOCK_OPEN_OUTLINE = "ty_lock_open_outline"; + public static final String TY_MAIL = "ty_mail"; + public static final String TY_MAP = "ty_map"; + public static final String TY_MEDIA_EJECT = "ty_media_eject"; + public static final String TY_MEDIA_EJECT_OUTLINE = "ty_media_eject_outline"; + public static final String TY_MEDIA_FAST_FORWARD = "ty_media_fast_forward"; + public static final String TY_MEDIA_FAST_FORWARD_OUTLINE = "ty_media_fast_forward_outline"; + public static final String TY_MEDIA_PAUSE = "ty_media_pause"; + public static final String TY_MEDIA_PAUSE_OUTLINE = "ty_media_pause_outline"; + public static final String TY_MEDIA_PLAY = "ty_media_play"; + public static final String TY_MEDIA_PLAY_OUTLINE = "ty_media_play_outline"; + public static final String TY_MEDIA_PLAY_REVERSE = "ty_media_play_reverse"; + public static final String TY_MEDIA_PLAY_REVERSE_OUTLINE = "ty_media_play_reverse_outline"; + public static final String TY_MEDIA_RECORD = "ty_media_record"; + public static final String TY_MEDIA_RECORD_OUTLINE = "ty_media_record_outline"; + public static final String TY_MEDIA_REWIND = "ty_media_rewind"; + public static final String TY_MEDIA_REWIND_OUTLINE = "ty_media_rewind_outline"; + public static final String TY_MEDIA_STOP = "ty_media_stop"; + public static final String TY_MEDIA_STOP_OUTLINE = "ty_media_stop_outline"; + public static final String TY_MESSAGE = "ty_message"; + public static final String TY_MESSAGE_TYPING = "ty_message_typing"; + public static final String TY_MESSAGES = "ty_messages"; + public static final String TY_MICROPHONE = "ty_microphone"; + public static final String TY_MICROPHONE_OUTLINE = "ty_microphone_outline"; + public static final String TY_MINUS = "ty_minus"; + public static final String TY_MINUS_OUTLINE = "ty_minus_outline"; + public static final String TY_MORTAR_BOARD = "ty_mortar_board"; + public static final String TY_NEWS = "ty_news"; + public static final String TY_NOTES = "ty_notes"; + public static final String TY_NOTES_OUTLINE = "ty_notes_outline"; + public static final String TY_PEN = "ty_pen"; + public static final String TY_PENCIL = "ty_pencil"; + public static final String TY_PHONE = "ty_phone"; + public static final String TY_PHONE_OUTLINE = "ty_phone_outline"; + public static final String TY_PI = "ty_pi"; + public static final String TY_PI_OUTLINE = "ty_pi_outline"; + public static final String TY_PIN = "ty_pin"; + public static final String TY_PIN_OUTLINE = "ty_pin_outline"; + public static final String TY_PIPETTE = "ty_pipette"; + public static final String TY_PLANE = "ty_plane"; + public static final String TY_PLANE_OUTLINE = "ty_plane_outline"; + public static final String TY_PLUG = "ty_plug"; + public static final String TY_PLUS = "ty_plus"; + public static final String TY_PLUS_OUTLINE = "ty_plus_outline"; + public static final String TY_POINT_OF_INTEREST = "ty_point_of_interest"; + public static final String TY_POINT_OF_INTEREST_OUTLINE = "ty_point_of_interest_outline"; + public static final String TY_POWER = "ty_power"; + public static final String TY_POWER_OUTLINE = "ty_power_outline"; + public static final String TY_PRINTER = "ty_printer"; + public static final String TY_PUZZLE = "ty_puzzle"; + public static final String TY_PUZZLE_OUTLINE = "ty_puzzle_outline"; + public static final String TY_RADAR = "ty_radar"; + public static final String TY_RADAR_OUTLINE = "ty_radar_outline"; + public static final String TY_REFRESH = "ty_refresh"; + public static final String TY_REFRESH_OUTLINE = "ty_refresh_outline"; + public static final String TY_RSS = "ty_rss"; + public static final String TY_RSS_OUTLINE = "ty_rss_outline"; + public static final String TY_SCISSORS = "ty_scissors"; + public static final String TY_SCISSORS_OUTLINE = "ty_scissors_outline"; + public static final String TY_SHOPPING_BAG = "ty_shopping_bag"; + public static final String TY_SHOPPING_CART = "ty_shopping_cart"; + public static final String TY_SOCIAL_AT_CIRCULAR = "ty_social_at_circular"; + public static final String TY_SOCIAL_DRIBBBLE = "ty_social_dribbble"; + public static final String TY_SOCIAL_DRIBBBLE_CIRCULAR = "ty_social_dribbble_circular"; + public static final String TY_SOCIAL_FACEBOOK = "ty_social_facebook"; + public static final String TY_SOCIAL_FACEBOOK_CIRCULAR = "ty_social_facebook_circular"; + public static final String TY_SOCIAL_FLICKR = "ty_social_flickr"; + public static final String TY_SOCIAL_FLICKR_CIRCULAR = "ty_social_flickr_circular"; + public static final String TY_SOCIAL_GITHUB = "ty_social_github"; + public static final String TY_SOCIAL_GITHUB_CIRCULAR = "ty_social_github_circular"; + public static final String TY_SOCIAL_GOOGLE_PLUS = "ty_social_google_plus"; + public static final String TY_SOCIAL_GOOGLE_PLUS_CIRCULAR = "ty_social_google_plus_circular"; + public static final String TY_SOCIAL_INSTAGRAM = "ty_social_instagram"; + public static final String TY_SOCIAL_INSTAGRAM_CIRCULAR = "ty_social_instagram_circular"; + public static final String TY_SOCIAL_LAST_FM = "ty_social_last_fm"; + public static final String TY_SOCIAL_LAST_FM_CIRCULAR = "ty_social_last_fm_circular"; + public static final String TY_SOCIAL_LINKEDIN = "ty_social_linkedin"; + public static final String TY_SOCIAL_LINKEDIN_CIRCULAR = "ty_social_linkedin_circular"; + public static final String TY_SOCIAL_PINTEREST = "ty_social_pinterest"; + public static final String TY_SOCIAL_PINTEREST_CIRCULAR = "ty_social_pinterest_circular"; + public static final String TY_SOCIAL_SKYPE = "ty_social_skype"; + public static final String TY_SOCIAL_SKYPE_OUTLINE = "ty_social_skype_outline"; + public static final String TY_SOCIAL_TUMBLER = "ty_social_tumbler"; + public static final String TY_SOCIAL_TUMBLER_CIRCULAR = "ty_social_tumbler_circular"; + public static final String TY_SOCIAL_TWITTER = "ty_social_twitter"; + public static final String TY_SOCIAL_TWITTER_CIRCULAR = "ty_social_twitter_circular"; + public static final String TY_SOCIAL_VIMEO = "ty_social_vimeo"; + public static final String TY_SOCIAL_VIMEO_CIRCULAR = "ty_social_vimeo_circular"; + public static final String TY_SOCIAL_YOUTUBE = "ty_social_youtube"; + public static final String TY_SOCIAL_YOUTUBE_CIRCULAR = "ty_social_youtube_circular"; + public static final String TY_SORT_ALPHABETICALLY = "ty_sort_alphabetically"; + public static final String TY_SORT_ALPHABETICALLY_OUTLINE = "ty_sort_alphabetically_outline"; + public static final String TY_SORT_NUMERICALLY = "ty_sort_numerically"; + public static final String TY_SORT_NUMERICALLY_OUTLINE = "ty_sort_numerically_outline"; + public static final String TY_SPANNER = "ty_spanner"; + public static final String TY_SPANNER_OUTLINE = "ty_spanner_outline"; + public static final String TY_SPIRAL = "ty_spiral"; + public static final String TY_STAR = "ty_star"; + public static final String TY_STAR_FULL_OUTLINE = "ty_star_full_outline"; + public static final String TY_STAR_HALF = "ty_star_half"; + public static final String TY_STAR_HALF_OUTLINE = "ty_star_half_outline"; + public static final String TY_STAR_OUTLINE = "ty_star_outline"; + public static final String TY_STARBURST = "ty_starburst"; + public static final String TY_STARBURST_OUTLINE = "ty_starburst_outline"; + public static final String TY_STOPWATCH = "ty_stopwatch"; + public static final String TY_SUPPORT = "ty_support"; + public static final String TY_TABS_OUTLINE = "ty_tabs_outline"; + public static final String TY_TAG = "ty_tag"; + public static final String TY_TAGS = "ty_tags"; + public static final String TY_TH_LARGE = "ty_th_large"; + public static final String TY_TH_LARGE_OUTLINE = "ty_th_large_outline"; + public static final String TY_TH_LIST = "ty_th_list"; + public static final String TY_TH_LIST_OUTLINE = "ty_th_list_outline"; + public static final String TY_TH_MENU = "ty_th_menu"; + public static final String TY_TH_MENU_OUTLINE = "ty_th_menu_outline"; + public static final String TY_TH_SMALL = "ty_th_small"; + public static final String TY_TH_SMALL_OUTLINE = "ty_th_small_outline"; + public static final String TY_THERMOMETER = "ty_thermometer"; + public static final String TY_THUMBS_DOWN = "ty_thumbs_down"; + public static final String TY_THUMBS_OK = "ty_thumbs_ok"; + public static final String TY_THUMBS_UP = "ty_thumbs_up"; + public static final String TY_TICK = "ty_tick"; + public static final String TY_TICK_OUTLINE = "ty_tick_outline"; + public static final String TY_TICKET = "ty_ticket"; + public static final String TY_TIME = "ty_time"; + public static final String TY_TIMES = "ty_times"; + public static final String TY_TIMES_OUTLINE = "ty_times_outline"; + public static final String TY_TRASH = "ty_trash"; + public static final String TY_TREE = "ty_tree"; + public static final String TY_UPLOAD = "ty_upload"; + public static final String TY_UPLOAD_OUTLINE = "ty_upload_outline"; + public static final String TY_USER = "ty_user"; + public static final String TY_USER_ADD = "ty_user_add"; + public static final String TY_USER_ADD_OUTLINE = "ty_user_add_outline"; + public static final String TY_USER_DELETE = "ty_user_delete"; + public static final String TY_USER_DELETE_OUTLINE = "ty_user_delete_outline"; + public static final String TY_USER_OUTLINE = "ty_user_outline"; + public static final String TY_VENDOR_ANDROID = "ty_vendor_android"; + public static final String TY_VENDOR_APPLE = "ty_vendor_apple"; + public static final String TY_VENDOR_MICROSOFT = "ty_vendor_microsoft"; + public static final String TY_VIDEO = "ty_video"; + public static final String TY_VIDEO_OUTLINE = "ty_video_outline"; + public static final String TY_VOLUME = "ty_volume"; + public static final String TY_VOLUME_DOWN = "ty_volume_down"; + public static final String TY_VOLUME_MUTE = "ty_volume_mute"; + public static final String TY_VOLUME_UP = "ty_volume_up"; + public static final String TY_WARNING = "ty_warning"; + public static final String TY_WARNING_OUTLINE = "ty_warning_outline"; + public static final String TY_WATCH = "ty_watch"; + public static final String TY_WAVES = "ty_waves"; + public static final String TY_WAVES_OUTLINE = "ty_waves_outline"; + public static final String TY_WEATHER_CLOUDY = "ty_weather_cloudy"; + public static final String TY_WEATHER_DOWNPOUR = "ty_weather_downpour"; + public static final String TY_WEATHER_NIGHT = "ty_weather_night"; + public static final String TY_WEATHER_PARTLY_SUNNY = "ty_weather_partly_sunny"; + public static final String TY_WEATHER_SHOWER = "ty_weather_shower"; + public static final String TY_WEATHER_SNOW = "ty_weather_snow"; + public static final String TY_WEATHER_STORMY = "ty_weather_stormy"; + public static final String TY_WEATHER_SUNNY = "ty_weather_sunny"; + public static final String TY_WEATHER_WINDY = "ty_weather_windy"; + public static final String TY_WEATHER_WINDY_CLOUDY = "ty_weather_windy_cloudy"; + public static final String TY_WI_FI = "ty_wi_fi"; + public static final String TY_WI_FI_OUTLINE = "ty_wi_fi_outline"; + public static final String TY_WINE = "ty_wine"; + public static final String TY_WORLD = "ty_world"; + public static final String TY_WORLD_OUTLINE = "ty_world_outline"; + public static final String TY_ZOOM = "ty_zoom"; + public static final String TY_ZOOM_IN = "ty_zoom_in"; + public static final String TY_ZOOM_IN_OUTLINE = "ty_zoom_in_outline"; + public static final String TY_ZOOM_OUT = "ty_zoom_out"; + public static final String TY_ZOOM_OUT_OUTLINE = "ty_zoom_out_outline"; + public static final String TY_ZOOM_OUTLINE = "ty_zoom_outline"; + + static { + ICON_MAP.put(TY_ADJUST_BRIGHTNESS, "\ue000"); + ICON_MAP.put(TY_ADJUST_CONTRAST, "\ue001"); + ICON_MAP.put(TY_ANCHOR, "\ue003"); + ICON_MAP.put(TY_ANCHOR_OUTLINE, "\ue002"); + ICON_MAP.put(TY_ARCHIVE, "\ue004"); + ICON_MAP.put(TY_ARROW_BACK, "\ue006"); + ICON_MAP.put(TY_ARROW_BACK_OUTLINE, "\ue005"); + ICON_MAP.put(TY_ARROW_DOWN, "\ue009"); + ICON_MAP.put(TY_ARROW_DOWN_OUTLINE, "\ue007"); + ICON_MAP.put(TY_ARROW_DOWN_THICK, "\ue008"); + ICON_MAP.put(TY_ARROW_FORWARD, "\ue00b"); + ICON_MAP.put(TY_ARROW_FORWARD_OUTLINE, "\ue00a"); + ICON_MAP.put(TY_ARROW_LEFT, "\ue00e"); + ICON_MAP.put(TY_ARROW_LEFT_OUTLINE, "\ue00c"); + ICON_MAP.put(TY_ARROW_LEFT_THICK, "\ue00d"); + ICON_MAP.put(TY_ARROW_LOOP, "\ue010"); + ICON_MAP.put(TY_ARROW_LOOP_OUTLINE, "\ue00f"); + ICON_MAP.put(TY_ARROW_MAXIMISE, "\ue012"); + ICON_MAP.put(TY_ARROW_MAXIMISE_OUTLINE, "\ue011"); + ICON_MAP.put(TY_ARROW_MINIMISE, "\ue014"); + ICON_MAP.put(TY_ARROW_MINIMISE_OUTLINE, "\ue013"); + ICON_MAP.put(TY_ARROW_MOVE, "\ue016"); + ICON_MAP.put(TY_ARROW_MOVE_OUTLINE, "\ue015"); + ICON_MAP.put(TY_ARROW_REPEAT, "\ue018"); + ICON_MAP.put(TY_ARROW_REPEAT_OUTLINE, "\ue017"); + ICON_MAP.put(TY_ARROW_RIGHT, "\ue01b"); + ICON_MAP.put(TY_ARROW_RIGHT_OUTLINE, "\ue019"); + ICON_MAP.put(TY_ARROW_RIGHT_THICK, "\ue01a"); + ICON_MAP.put(TY_ARROW_SHUFFLE, "\ue01c"); + ICON_MAP.put(TY_ARROW_SORTED_DOWN, "\ue01d"); + ICON_MAP.put(TY_ARROW_SORTED_UP, "\ue01e"); + ICON_MAP.put(TY_ARROW_SYNC, "\ue020"); + ICON_MAP.put(TY_ARROW_SYNC_OUTLINE, "\ue01f"); + ICON_MAP.put(TY_ARROW_UNSORTED, "\ue021"); + ICON_MAP.put(TY_ARROW_UP, "\ue024"); + ICON_MAP.put(TY_ARROW_UP_OUTLINE, "\ue022"); + ICON_MAP.put(TY_ARROW_UP_THICK, "\ue023"); + ICON_MAP.put(TY_AT, "\ue025"); + ICON_MAP.put(TY_ATTACHMENT, "\ue027"); + ICON_MAP.put(TY_ATTACHMENT_OUTLINE, "\ue026"); + ICON_MAP.put(TY_BACKSPACE, "\ue029"); + ICON_MAP.put(TY_BACKSPACE_OUTLINE, "\ue028"); + ICON_MAP.put(TY_BATTERY_CHARGE, "\ue02a"); + ICON_MAP.put(TY_BATTERY_FULL, "\ue02b"); + ICON_MAP.put(TY_BATTERY_HIGH, "\ue02c"); + ICON_MAP.put(TY_BATTERY_LOW, "\ue02d"); + ICON_MAP.put(TY_BATTERY_MID, "\ue02e"); + ICON_MAP.put(TY_BEAKER, "\ue02f"); + ICON_MAP.put(TY_BEER, "\ue030"); + ICON_MAP.put(TY_BELL, "\ue031"); + ICON_MAP.put(TY_BOOK, "\ue032"); + ICON_MAP.put(TY_BOOKMARK, "\ue033"); + ICON_MAP.put(TY_BRIEFCASE, "\ue034"); + ICON_MAP.put(TY_BRUSH, "\ue035"); + ICON_MAP.put(TY_BUSINESS_CARD, "\ue036"); + ICON_MAP.put(TY_CALCULATOR, "\ue037"); + ICON_MAP.put(TY_CALENDAR, "\ue039"); + ICON_MAP.put(TY_CALENDAR_OUTLINE, "\ue038"); + ICON_MAP.put(TY_CAMERA, "\ue03b"); + ICON_MAP.put(TY_CAMERA_OUTLINE, "\ue03a"); + ICON_MAP.put(TY_CANCEL, "\ue03d"); + ICON_MAP.put(TY_CANCEL_OUTLINE, "\ue03c"); + ICON_MAP.put(TY_CHART_AREA, "\ue03f"); + ICON_MAP.put(TY_CHART_AREA_OUTLINE, "\ue03e"); + ICON_MAP.put(TY_CHART_BAR, "\ue041"); + ICON_MAP.put(TY_CHART_BAR_OUTLINE, "\ue040"); + ICON_MAP.put(TY_CHART_LINE, "\ue043"); + ICON_MAP.put(TY_CHART_LINE_OUTLINE, "\ue042"); + ICON_MAP.put(TY_CHART_PIE, "\ue045"); + ICON_MAP.put(TY_CHART_PIE_OUTLINE, "\ue044"); + ICON_MAP.put(TY_CHEVRON_LEFT, "\ue047"); + ICON_MAP.put(TY_CHEVRON_LEFT_OUTLINE, "\ue046"); + ICON_MAP.put(TY_CHEVRON_RIGHT, "\ue049"); + ICON_MAP.put(TY_CHEVRON_RIGHT_OUTLINE, "\ue048"); + ICON_MAP.put(TY_CLIPBOARD, "\ue04a"); + ICON_MAP.put(TY_CLOUD_STORAGE, "\ue04b"); + ICON_MAP.put(TY_CLOUD_STORAGE_OUTLINE, "\ue054"); + ICON_MAP.put(TY_CODE, "\ue04d"); + ICON_MAP.put(TY_CODE_OUTLINE, "\ue04c"); + ICON_MAP.put(TY_COFFEE, "\ue04e"); + ICON_MAP.put(TY_COG, "\ue050"); + ICON_MAP.put(TY_COG_OUTLINE, "\ue04f"); + ICON_MAP.put(TY_COMPASS, "\ue051"); + ICON_MAP.put(TY_CONTACTS, "\ue052"); + ICON_MAP.put(TY_CREDIT_CARD, "\ue053"); + ICON_MAP.put(TY_CSS3, "\ue055"); + ICON_MAP.put(TY_DATABASE, "\ue056"); + ICON_MAP.put(TY_DELETE, "\ue058"); + ICON_MAP.put(TY_DELETE_OUTLINE, "\ue057"); + ICON_MAP.put(TY_DEVICE_DESKTOP, "\ue059"); + ICON_MAP.put(TY_DEVICE_LAPTOP, "\ue05a"); + ICON_MAP.put(TY_DEVICE_PHONE, "\ue05b"); + ICON_MAP.put(TY_DEVICE_TABLET, "\ue05c"); + ICON_MAP.put(TY_DIRECTIONS, "\ue05d"); + ICON_MAP.put(TY_DIVIDE, "\ue05f"); + ICON_MAP.put(TY_DIVIDE_OUTLINE, "\ue05e"); + ICON_MAP.put(TY_DOCUMENT, "\ue063"); + ICON_MAP.put(TY_DOCUMENT_ADD, "\ue060"); + ICON_MAP.put(TY_DOCUMENT_DELETE, "\ue061"); + ICON_MAP.put(TY_DOCUMENT_TEXT, "\ue062"); + ICON_MAP.put(TY_DOWNLOAD, "\ue065"); + ICON_MAP.put(TY_DOWNLOAD_OUTLINE, "\ue064"); + ICON_MAP.put(TY_DROPBOX, "\ue066"); + ICON_MAP.put(TY_EDIT, "\ue067"); + ICON_MAP.put(TY_EJECT, "\ue069"); + ICON_MAP.put(TY_EJECT_OUTLINE, "\ue068"); + ICON_MAP.put(TY_EQUALS, "\ue06b"); + ICON_MAP.put(TY_EQUALS_OUTLINE, "\ue06a"); + ICON_MAP.put(TY_EXPORT, "\ue06d"); + ICON_MAP.put(TY_EXPORT_OUTLINE, "\ue06c"); + ICON_MAP.put(TY_EYE, "\ue06f"); + ICON_MAP.put(TY_EYE_OUTLINE, "\ue06e"); + ICON_MAP.put(TY_FEATHER, "\ue070"); + ICON_MAP.put(TY_FILM, "\ue071"); + ICON_MAP.put(TY_FILTER, "\ue072"); + ICON_MAP.put(TY_FLAG, "\ue074"); + ICON_MAP.put(TY_FLAG_OUTLINE, "\ue073"); + ICON_MAP.put(TY_FLASH, "\ue076"); + ICON_MAP.put(TY_FLASH_OUTLINE, "\ue075"); + ICON_MAP.put(TY_FLOW_CHILDREN, "\ue077"); + ICON_MAP.put(TY_FLOW_MERGE, "\ue078"); + ICON_MAP.put(TY_FLOW_PARALLEL, "\ue079"); + ICON_MAP.put(TY_FLOW_SWITCH, "\ue07a"); + ICON_MAP.put(TY_FOLDER, "\ue07e"); + ICON_MAP.put(TY_FOLDER_ADD, "\ue07b"); + ICON_MAP.put(TY_FOLDER_DELETE, "\ue07c"); + ICON_MAP.put(TY_FOLDER_OPEN, "\ue07d"); + ICON_MAP.put(TY_GIFT, "\ue07f"); + ICON_MAP.put(TY_GLOBE, "\ue081"); + ICON_MAP.put(TY_GLOBE_OUTLINE, "\ue080"); + ICON_MAP.put(TY_GROUP, "\ue083"); + ICON_MAP.put(TY_GROUP_OUTLINE, "\ue082"); + ICON_MAP.put(TY_HEADPHONES, "\ue084"); + ICON_MAP.put(TY_HEART, "\ue088"); + ICON_MAP.put(TY_HEART_FULL_OUTLINE, "\ue085"); + ICON_MAP.put(TY_HEART_HALF_OUTLINE, "\ue086"); + ICON_MAP.put(TY_HEART_OUTLINE, "\ue087"); + ICON_MAP.put(TY_HOME, "\ue08a"); + ICON_MAP.put(TY_HOME_OUTLINE, "\ue089"); + ICON_MAP.put(TY_HTML5, "\ue08b"); + ICON_MAP.put(TY_IMAGE, "\ue08d"); + ICON_MAP.put(TY_IMAGE_OUTLINE, "\ue08c"); + ICON_MAP.put(TY_INFINITY, "\ue08f"); + ICON_MAP.put(TY_INFINITY_OUTLINE, "\ue08e"); + ICON_MAP.put(TY_INFO, "\ue093"); + ICON_MAP.put(TY_INFO_LARGE, "\ue091"); + ICON_MAP.put(TY_INFO_LARGE_OUTLINE, "\ue090"); + ICON_MAP.put(TY_INFO_OUTLINE, "\ue092"); + ICON_MAP.put(TY_INPUT_CHECKED, "\ue095"); + ICON_MAP.put(TY_INPUT_CHECKED_OUTLINE, "\ue094"); + ICON_MAP.put(TY_KEY, "\ue097"); + ICON_MAP.put(TY_KEY_OUTLINE, "\ue096"); + ICON_MAP.put(TY_KEYBOARD, "\ue098"); + ICON_MAP.put(TY_LEAF, "\ue099"); + ICON_MAP.put(TY_LIGHTBULB, "\ue09a"); + ICON_MAP.put(TY_LINK, "\ue09c"); + ICON_MAP.put(TY_LINK_OUTLINE, "\ue09b"); + ICON_MAP.put(TY_LOCATION, "\ue0a0"); + ICON_MAP.put(TY_LOCATION_ARROW, "\ue09e"); + ICON_MAP.put(TY_LOCATION_ARROW_OUTLINE, "\ue09d"); + ICON_MAP.put(TY_LOCATION_OUTLINE, "\ue09f"); + ICON_MAP.put(TY_LOCK_CLOSED, "\ue0a2"); + ICON_MAP.put(TY_LOCK_CLOSED_OUTLINE, "\ue0a1"); + ICON_MAP.put(TY_LOCK_OPEN, "\ue0a4"); + ICON_MAP.put(TY_LOCK_OPEN_OUTLINE, "\ue0a3"); + ICON_MAP.put(TY_MAIL, "\ue0a5"); + ICON_MAP.put(TY_MAP, "\ue0a6"); + ICON_MAP.put(TY_MEDIA_EJECT, "\ue0a8"); + ICON_MAP.put(TY_MEDIA_EJECT_OUTLINE, "\ue0a7"); + ICON_MAP.put(TY_MEDIA_FAST_FORWARD, "\ue0aa"); + ICON_MAP.put(TY_MEDIA_FAST_FORWARD_OUTLINE, "\ue0a9"); + ICON_MAP.put(TY_MEDIA_PAUSE, "\ue0ac"); + ICON_MAP.put(TY_MEDIA_PAUSE_OUTLINE, "\ue0ab"); + ICON_MAP.put(TY_MEDIA_PLAY, "\ue0b0"); + ICON_MAP.put(TY_MEDIA_PLAY_OUTLINE, "\ue0ad"); + ICON_MAP.put(TY_MEDIA_PLAY_REVERSE, "\ue0af"); + ICON_MAP.put(TY_MEDIA_PLAY_REVERSE_OUTLINE, "\ue0ae"); + ICON_MAP.put(TY_MEDIA_RECORD, "\ue0b2"); + ICON_MAP.put(TY_MEDIA_RECORD_OUTLINE, "\ue0b1"); + ICON_MAP.put(TY_MEDIA_REWIND, "\ue0b4"); + ICON_MAP.put(TY_MEDIA_REWIND_OUTLINE, "\ue0b3"); + ICON_MAP.put(TY_MEDIA_STOP, "\ue0b6"); + ICON_MAP.put(TY_MEDIA_STOP_OUTLINE, "\ue0b5"); + ICON_MAP.put(TY_MESSAGE, "\ue0b8"); + ICON_MAP.put(TY_MESSAGE_TYPING, "\ue0b7"); + ICON_MAP.put(TY_MESSAGES, "\ue0b9"); + ICON_MAP.put(TY_MICROPHONE, "\ue0bb"); + ICON_MAP.put(TY_MICROPHONE_OUTLINE, "\ue0ba"); + ICON_MAP.put(TY_MINUS, "\ue0bd"); + ICON_MAP.put(TY_MINUS_OUTLINE, "\ue0bc"); + ICON_MAP.put(TY_MORTAR_BOARD, "\ue0be"); + ICON_MAP.put(TY_NEWS, "\ue0bf"); + ICON_MAP.put(TY_NOTES, "\ue0c1"); + ICON_MAP.put(TY_NOTES_OUTLINE, "\ue0c0"); + ICON_MAP.put(TY_PEN, "\ue0c2"); + ICON_MAP.put(TY_PENCIL, "\ue0c3"); + ICON_MAP.put(TY_PHONE, "\ue0c5"); + ICON_MAP.put(TY_PHONE_OUTLINE, "\ue0c4"); + ICON_MAP.put(TY_PI, "\ue0c7"); + ICON_MAP.put(TY_PI_OUTLINE, "\ue0c6"); + ICON_MAP.put(TY_PIN, "\ue0c9"); + ICON_MAP.put(TY_PIN_OUTLINE, "\ue0c8"); + ICON_MAP.put(TY_PIPETTE, "\ue0ca"); + ICON_MAP.put(TY_PLANE, "\ue0cc"); + ICON_MAP.put(TY_PLANE_OUTLINE, "\ue0cb"); + ICON_MAP.put(TY_PLUG, "\ue0cd"); + ICON_MAP.put(TY_PLUS, "\ue0cf"); + ICON_MAP.put(TY_PLUS_OUTLINE, "\ue0ce"); + ICON_MAP.put(TY_POINT_OF_INTEREST, "\ue0d1"); + ICON_MAP.put(TY_POINT_OF_INTEREST_OUTLINE, "\ue0d0"); + ICON_MAP.put(TY_POWER, "\ue0d3"); + ICON_MAP.put(TY_POWER_OUTLINE, "\ue0d2"); + ICON_MAP.put(TY_PRINTER, "\ue0d4"); + ICON_MAP.put(TY_PUZZLE, "\ue0d6"); + ICON_MAP.put(TY_PUZZLE_OUTLINE, "\ue0d5"); + ICON_MAP.put(TY_RADAR, "\ue0d8"); + ICON_MAP.put(TY_RADAR_OUTLINE, "\ue0d7"); + ICON_MAP.put(TY_REFRESH, "\ue0da"); + ICON_MAP.put(TY_REFRESH_OUTLINE, "\ue0d9"); + ICON_MAP.put(TY_RSS, "\ue0dc"); + ICON_MAP.put(TY_RSS_OUTLINE, "\ue0db"); + ICON_MAP.put(TY_SCISSORS, "\ue0de"); + ICON_MAP.put(TY_SCISSORS_OUTLINE, "\ue0dd"); + ICON_MAP.put(TY_SHOPPING_BAG, "\ue0df"); + ICON_MAP.put(TY_SHOPPING_CART, "\ue0e0"); + ICON_MAP.put(TY_SOCIAL_AT_CIRCULAR, "\ue0e1"); + ICON_MAP.put(TY_SOCIAL_DRIBBBLE, "\ue0e3"); + ICON_MAP.put(TY_SOCIAL_DRIBBBLE_CIRCULAR, "\ue0e2"); + ICON_MAP.put(TY_SOCIAL_FACEBOOK, "\ue0e5"); + ICON_MAP.put(TY_SOCIAL_FACEBOOK_CIRCULAR, "\ue0e4"); + ICON_MAP.put(TY_SOCIAL_FLICKR, "\ue0e7"); + ICON_MAP.put(TY_SOCIAL_FLICKR_CIRCULAR, "\ue0e6"); + ICON_MAP.put(TY_SOCIAL_GITHUB, "\ue0e9"); + ICON_MAP.put(TY_SOCIAL_GITHUB_CIRCULAR, "\ue0e8"); + ICON_MAP.put(TY_SOCIAL_GOOGLE_PLUS, "\ue0eb"); + ICON_MAP.put(TY_SOCIAL_GOOGLE_PLUS_CIRCULAR, "\ue0ea"); + ICON_MAP.put(TY_SOCIAL_INSTAGRAM, "\ue0ed"); + ICON_MAP.put(TY_SOCIAL_INSTAGRAM_CIRCULAR, "\ue0ec"); + ICON_MAP.put(TY_SOCIAL_LAST_FM, "\ue0ef"); + ICON_MAP.put(TY_SOCIAL_LAST_FM_CIRCULAR, "\ue0ee"); + ICON_MAP.put(TY_SOCIAL_LINKEDIN, "\ue0f1"); + ICON_MAP.put(TY_SOCIAL_LINKEDIN_CIRCULAR, "\ue0f0"); + ICON_MAP.put(TY_SOCIAL_PINTEREST, "\ue0f3"); + ICON_MAP.put(TY_SOCIAL_PINTEREST_CIRCULAR, "\ue0f2"); + ICON_MAP.put(TY_SOCIAL_SKYPE, "\ue0f5"); + ICON_MAP.put(TY_SOCIAL_SKYPE_OUTLINE, "\ue0f4"); + ICON_MAP.put(TY_SOCIAL_TUMBLER, "\ue0f7"); + ICON_MAP.put(TY_SOCIAL_TUMBLER_CIRCULAR, "\ue0f6"); + ICON_MAP.put(TY_SOCIAL_TWITTER, "\ue0f9"); + ICON_MAP.put(TY_SOCIAL_TWITTER_CIRCULAR, "\ue0f8"); + ICON_MAP.put(TY_SOCIAL_VIMEO, "\ue0fb"); + ICON_MAP.put(TY_SOCIAL_VIMEO_CIRCULAR, "\ue0fa"); + ICON_MAP.put(TY_SOCIAL_YOUTUBE, "\ue0fd"); + ICON_MAP.put(TY_SOCIAL_YOUTUBE_CIRCULAR, "\ue0fc"); + ICON_MAP.put(TY_SORT_ALPHABETICALLY, "\ue0ff"); + ICON_MAP.put(TY_SORT_ALPHABETICALLY_OUTLINE, "\ue0fe"); + ICON_MAP.put(TY_SORT_NUMERICALLY, "\ue101"); + ICON_MAP.put(TY_SORT_NUMERICALLY_OUTLINE, "\ue100"); + ICON_MAP.put(TY_SPANNER, "\ue103"); + ICON_MAP.put(TY_SPANNER_OUTLINE, "\ue102"); + ICON_MAP.put(TY_SPIRAL, "\ue104"); + ICON_MAP.put(TY_STAR, "\ue109"); + ICON_MAP.put(TY_STAR_FULL_OUTLINE, "\ue105"); + ICON_MAP.put(TY_STAR_HALF, "\ue107"); + ICON_MAP.put(TY_STAR_HALF_OUTLINE, "\ue106"); + ICON_MAP.put(TY_STAR_OUTLINE, "\ue108"); + ICON_MAP.put(TY_STARBURST, "\ue10b"); + ICON_MAP.put(TY_STARBURST_OUTLINE, "\ue10a"); + ICON_MAP.put(TY_STOPWATCH, "\ue10c"); + ICON_MAP.put(TY_SUPPORT, "\ue10d"); + ICON_MAP.put(TY_TABS_OUTLINE, "\ue10e"); + ICON_MAP.put(TY_TAG, "\ue10f"); + ICON_MAP.put(TY_TAGS, "\ue110"); + ICON_MAP.put(TY_TH_LARGE, "\ue112"); + ICON_MAP.put(TY_TH_LARGE_OUTLINE, "\ue111"); + ICON_MAP.put(TY_TH_LIST, "\ue114"); + ICON_MAP.put(TY_TH_LIST_OUTLINE, "\ue113"); + ICON_MAP.put(TY_TH_MENU, "\ue116"); + ICON_MAP.put(TY_TH_MENU_OUTLINE, "\ue115"); + ICON_MAP.put(TY_TH_SMALL, "\ue118"); + ICON_MAP.put(TY_TH_SMALL_OUTLINE, "\ue117"); + ICON_MAP.put(TY_THERMOMETER, "\ue119"); + ICON_MAP.put(TY_THUMBS_DOWN, "\ue11a"); + ICON_MAP.put(TY_THUMBS_OK, "\ue11b"); + ICON_MAP.put(TY_THUMBS_UP, "\ue11c"); + ICON_MAP.put(TY_TICK, "\ue11e"); + ICON_MAP.put(TY_TICK_OUTLINE, "\ue11d"); + ICON_MAP.put(TY_TICKET, "\ue11f"); + ICON_MAP.put(TY_TIME, "\ue120"); + ICON_MAP.put(TY_TIMES, "\ue122"); + ICON_MAP.put(TY_TIMES_OUTLINE, "\ue121"); + ICON_MAP.put(TY_TRASH, "\ue123"); + ICON_MAP.put(TY_TREE, "\ue124"); + ICON_MAP.put(TY_UPLOAD, "\ue126"); + ICON_MAP.put(TY_UPLOAD_OUTLINE, "\ue125"); + ICON_MAP.put(TY_USER, "\ue12c"); + ICON_MAP.put(TY_USER_ADD, "\ue128"); + ICON_MAP.put(TY_USER_ADD_OUTLINE, "\ue127"); + ICON_MAP.put(TY_USER_DELETE, "\ue12a"); + ICON_MAP.put(TY_USER_DELETE_OUTLINE, "\ue129"); + ICON_MAP.put(TY_USER_OUTLINE, "\ue12b"); + ICON_MAP.put(TY_VENDOR_ANDROID, "\ue12d"); + ICON_MAP.put(TY_VENDOR_APPLE, "\ue12e"); + ICON_MAP.put(TY_VENDOR_MICROSOFT, "\ue12f"); + ICON_MAP.put(TY_VIDEO, "\ue131"); + ICON_MAP.put(TY_VIDEO_OUTLINE, "\ue130"); + ICON_MAP.put(TY_VOLUME, "\ue135"); + ICON_MAP.put(TY_VOLUME_DOWN, "\ue132"); + ICON_MAP.put(TY_VOLUME_MUTE, "\ue133"); + ICON_MAP.put(TY_VOLUME_UP, "\ue134"); + ICON_MAP.put(TY_WARNING, "\ue137"); + ICON_MAP.put(TY_WARNING_OUTLINE, "\ue136"); + ICON_MAP.put(TY_WATCH, "\ue138"); + ICON_MAP.put(TY_WAVES, "\ue13a"); + ICON_MAP.put(TY_WAVES_OUTLINE, "\ue139"); + ICON_MAP.put(TY_WEATHER_CLOUDY, "\ue13b"); + ICON_MAP.put(TY_WEATHER_DOWNPOUR, "\ue13c"); + ICON_MAP.put(TY_WEATHER_NIGHT, "\ue13d"); + ICON_MAP.put(TY_WEATHER_PARTLY_SUNNY, "\ue13e"); + ICON_MAP.put(TY_WEATHER_SHOWER, "\ue13f"); + ICON_MAP.put(TY_WEATHER_SNOW, "\ue140"); + ICON_MAP.put(TY_WEATHER_STORMY, "\ue141"); + ICON_MAP.put(TY_WEATHER_SUNNY, "\ue142"); + ICON_MAP.put(TY_WEATHER_WINDY, "\ue144"); + ICON_MAP.put(TY_WEATHER_WINDY_CLOUDY, "\ue143"); + ICON_MAP.put(TY_WI_FI, "\ue146"); + ICON_MAP.put(TY_WI_FI_OUTLINE, "\ue145"); + ICON_MAP.put(TY_WINE, "\ue147"); + ICON_MAP.put(TY_WORLD, "\ue149"); + ICON_MAP.put(TY_WORLD_OUTLINE, "\ue148"); + ICON_MAP.put(TY_ZOOM, "\ue14f"); + ICON_MAP.put(TY_ZOOM_IN, "\ue14b"); + ICON_MAP.put(TY_ZOOM_IN_OUTLINE, "\ue14a"); + ICON_MAP.put(TY_ZOOM_OUT, "\ue14d"); + ICON_MAP.put(TY_ZOOM_OUT_OUTLINE, "\ue14c"); + ICON_MAP.put(TY_ZOOM_OUTLINE, "\ue14e"); + + ATTR_MAP.put(0, TY_ADJUST_BRIGHTNESS); + ATTR_MAP.put(1, TY_ADJUST_CONTRAST); + ATTR_MAP.put(2, TY_ANCHOR); + ATTR_MAP.put(3, TY_ANCHOR_OUTLINE); + ATTR_MAP.put(4, TY_ARCHIVE); + ATTR_MAP.put(5, TY_ARROW_BACK); + ATTR_MAP.put(6, TY_ARROW_BACK_OUTLINE); + ATTR_MAP.put(7, TY_ARROW_DOWN); + ATTR_MAP.put(8, TY_ARROW_DOWN_OUTLINE); + ATTR_MAP.put(9, TY_ARROW_DOWN_THICK); + ATTR_MAP.put(10, TY_ARROW_FORWARD); + ATTR_MAP.put(11, TY_ARROW_FORWARD_OUTLINE); + ATTR_MAP.put(12, TY_ARROW_LEFT); + ATTR_MAP.put(13, TY_ARROW_LEFT_OUTLINE); + ATTR_MAP.put(14, TY_ARROW_LEFT_THICK); + ATTR_MAP.put(15, TY_ARROW_LOOP); + ATTR_MAP.put(16, TY_ARROW_LOOP_OUTLINE); + ATTR_MAP.put(17, TY_ARROW_MAXIMISE); + ATTR_MAP.put(18, TY_ARROW_MAXIMISE_OUTLINE); + ATTR_MAP.put(19, TY_ARROW_MINIMISE); + ATTR_MAP.put(20, TY_ARROW_MINIMISE_OUTLINE); + ATTR_MAP.put(21, TY_ARROW_MOVE); + ATTR_MAP.put(22, TY_ARROW_MOVE_OUTLINE); + ATTR_MAP.put(23, TY_ARROW_REPEAT); + ATTR_MAP.put(24, TY_ARROW_REPEAT_OUTLINE); + ATTR_MAP.put(25, TY_ARROW_RIGHT); + ATTR_MAP.put(26, TY_ARROW_RIGHT_OUTLINE); + ATTR_MAP.put(27, TY_ARROW_RIGHT_THICK); + ATTR_MAP.put(28, TY_ARROW_SHUFFLE); + ATTR_MAP.put(29, TY_ARROW_SORTED_DOWN); + ATTR_MAP.put(30, TY_ARROW_SORTED_UP); + ATTR_MAP.put(31, TY_ARROW_SYNC); + ATTR_MAP.put(32, TY_ARROW_SYNC_OUTLINE); + ATTR_MAP.put(33, TY_ARROW_UNSORTED); + ATTR_MAP.put(34, TY_ARROW_UP); + ATTR_MAP.put(35, TY_ARROW_UP_OUTLINE); + ATTR_MAP.put(36, TY_ARROW_UP_THICK); + ATTR_MAP.put(37, TY_AT); + ATTR_MAP.put(38, TY_ATTACHMENT); + ATTR_MAP.put(39, TY_ATTACHMENT_OUTLINE); + ATTR_MAP.put(40, TY_BACKSPACE); + ATTR_MAP.put(41, TY_BACKSPACE_OUTLINE); + ATTR_MAP.put(42, TY_BATTERY_CHARGE); + ATTR_MAP.put(43, TY_BATTERY_FULL); + ATTR_MAP.put(44, TY_BATTERY_HIGH); + ATTR_MAP.put(45, TY_BATTERY_LOW); + ATTR_MAP.put(46, TY_BATTERY_MID); + ATTR_MAP.put(47, TY_BEAKER); + ATTR_MAP.put(48, TY_BEER); + ATTR_MAP.put(49, TY_BELL); + ATTR_MAP.put(50, TY_BOOK); + ATTR_MAP.put(51, TY_BOOKMARK); + ATTR_MAP.put(52, TY_BRIEFCASE); + ATTR_MAP.put(53, TY_BRUSH); + ATTR_MAP.put(54, TY_BUSINESS_CARD); + ATTR_MAP.put(55, TY_CALCULATOR); + ATTR_MAP.put(56, TY_CALENDAR); + ATTR_MAP.put(57, TY_CALENDAR_OUTLINE); + ATTR_MAP.put(58, TY_CAMERA); + ATTR_MAP.put(59, TY_CAMERA_OUTLINE); + ATTR_MAP.put(60, TY_CANCEL); + ATTR_MAP.put(61, TY_CANCEL_OUTLINE); + ATTR_MAP.put(62, TY_CHART_AREA); + ATTR_MAP.put(63, TY_CHART_AREA_OUTLINE); + ATTR_MAP.put(64, TY_CHART_BAR); + ATTR_MAP.put(65, TY_CHART_BAR_OUTLINE); + ATTR_MAP.put(66, TY_CHART_LINE); + ATTR_MAP.put(67, TY_CHART_LINE_OUTLINE); + ATTR_MAP.put(68, TY_CHART_PIE); + ATTR_MAP.put(69, TY_CHART_PIE_OUTLINE); + ATTR_MAP.put(70, TY_CHEVRON_LEFT); + ATTR_MAP.put(71, TY_CHEVRON_LEFT_OUTLINE); + ATTR_MAP.put(72, TY_CHEVRON_RIGHT); + ATTR_MAP.put(73, TY_CHEVRON_RIGHT_OUTLINE); + ATTR_MAP.put(74, TY_CLIPBOARD); + ATTR_MAP.put(75, TY_CLOUD_STORAGE); + ATTR_MAP.put(76, TY_CLOUD_STORAGE_OUTLINE); + ATTR_MAP.put(77, TY_CODE); + ATTR_MAP.put(78, TY_CODE_OUTLINE); + ATTR_MAP.put(79, TY_COFFEE); + ATTR_MAP.put(80, TY_COG); + ATTR_MAP.put(81, TY_COG_OUTLINE); + ATTR_MAP.put(82, TY_COMPASS); + ATTR_MAP.put(83, TY_CONTACTS); + ATTR_MAP.put(84, TY_CREDIT_CARD); + ATTR_MAP.put(85, TY_CSS3); + ATTR_MAP.put(86, TY_DATABASE); + ATTR_MAP.put(87, TY_DELETE); + ATTR_MAP.put(88, TY_DELETE_OUTLINE); + ATTR_MAP.put(89, TY_DEVICE_DESKTOP); + ATTR_MAP.put(90, TY_DEVICE_LAPTOP); + ATTR_MAP.put(91, TY_DEVICE_PHONE); + ATTR_MAP.put(92, TY_DEVICE_TABLET); + ATTR_MAP.put(93, TY_DIRECTIONS); + ATTR_MAP.put(94, TY_DIVIDE); + ATTR_MAP.put(95, TY_DIVIDE_OUTLINE); + ATTR_MAP.put(96, TY_DOCUMENT); + ATTR_MAP.put(97, TY_DOCUMENT_ADD); + ATTR_MAP.put(98, TY_DOCUMENT_DELETE); + ATTR_MAP.put(99, TY_DOCUMENT_TEXT); + ATTR_MAP.put(100, TY_DOWNLOAD); + ATTR_MAP.put(101, TY_DOWNLOAD_OUTLINE); + ATTR_MAP.put(102, TY_DROPBOX); + ATTR_MAP.put(103, TY_EDIT); + ATTR_MAP.put(104, TY_EJECT); + ATTR_MAP.put(105, TY_EJECT_OUTLINE); + ATTR_MAP.put(106, TY_EQUALS); + ATTR_MAP.put(107, TY_EQUALS_OUTLINE); + ATTR_MAP.put(108, TY_EXPORT); + ATTR_MAP.put(109, TY_EXPORT_OUTLINE); + ATTR_MAP.put(110, TY_EYE); + ATTR_MAP.put(111, TY_EYE_OUTLINE); + ATTR_MAP.put(112, TY_FEATHER); + ATTR_MAP.put(113, TY_FILM); + ATTR_MAP.put(114, TY_FILTER); + ATTR_MAP.put(115, TY_FLAG); + ATTR_MAP.put(116, TY_FLAG_OUTLINE); + ATTR_MAP.put(117, TY_FLASH); + ATTR_MAP.put(118, TY_FLASH_OUTLINE); + ATTR_MAP.put(119, TY_FLOW_CHILDREN); + ATTR_MAP.put(120, TY_FLOW_MERGE); + ATTR_MAP.put(121, TY_FLOW_PARALLEL); + ATTR_MAP.put(122, TY_FLOW_SWITCH); + ATTR_MAP.put(123, TY_FOLDER); + ATTR_MAP.put(124, TY_FOLDER_ADD); + ATTR_MAP.put(125, TY_FOLDER_DELETE); + ATTR_MAP.put(126, TY_FOLDER_OPEN); + ATTR_MAP.put(127, TY_GIFT); + ATTR_MAP.put(128, TY_GLOBE); + ATTR_MAP.put(129, TY_GLOBE_OUTLINE); + ATTR_MAP.put(130, TY_GROUP); + ATTR_MAP.put(131, TY_GROUP_OUTLINE); + ATTR_MAP.put(132, TY_HEADPHONES); + ATTR_MAP.put(133, TY_HEART); + ATTR_MAP.put(134, TY_HEART_FULL_OUTLINE); + ATTR_MAP.put(135, TY_HEART_HALF_OUTLINE); + ATTR_MAP.put(136, TY_HEART_OUTLINE); + ATTR_MAP.put(137, TY_HOME); + ATTR_MAP.put(138, TY_HOME_OUTLINE); + ATTR_MAP.put(139, TY_HTML5); + ATTR_MAP.put(140, TY_IMAGE); + ATTR_MAP.put(141, TY_IMAGE_OUTLINE); + ATTR_MAP.put(142, TY_INFINITY); + ATTR_MAP.put(143, TY_INFINITY_OUTLINE); + ATTR_MAP.put(144, TY_INFO); + ATTR_MAP.put(145, TY_INFO_LARGE); + ATTR_MAP.put(146, TY_INFO_LARGE_OUTLINE); + ATTR_MAP.put(147, TY_INFO_OUTLINE); + ATTR_MAP.put(148, TY_INPUT_CHECKED); + ATTR_MAP.put(149, TY_INPUT_CHECKED_OUTLINE); + ATTR_MAP.put(150, TY_KEY); + ATTR_MAP.put(151, TY_KEY_OUTLINE); + ATTR_MAP.put(152, TY_KEYBOARD); + ATTR_MAP.put(153, TY_LEAF); + ATTR_MAP.put(154, TY_LIGHTBULB); + ATTR_MAP.put(155, TY_LINK); + ATTR_MAP.put(156, TY_LINK_OUTLINE); + ATTR_MAP.put(157, TY_LOCATION); + ATTR_MAP.put(158, TY_LOCATION_ARROW); + ATTR_MAP.put(159, TY_LOCATION_ARROW_OUTLINE); + ATTR_MAP.put(160, TY_LOCATION_OUTLINE); + ATTR_MAP.put(161, TY_LOCK_CLOSED); + ATTR_MAP.put(162, TY_LOCK_CLOSED_OUTLINE); + ATTR_MAP.put(163, TY_LOCK_OPEN); + ATTR_MAP.put(164, TY_LOCK_OPEN_OUTLINE); + ATTR_MAP.put(165, TY_MAIL); + ATTR_MAP.put(166, TY_MAP); + ATTR_MAP.put(167, TY_MEDIA_EJECT); + ATTR_MAP.put(168, TY_MEDIA_EJECT_OUTLINE); + ATTR_MAP.put(169, TY_MEDIA_FAST_FORWARD); + ATTR_MAP.put(170, TY_MEDIA_FAST_FORWARD_OUTLINE); + ATTR_MAP.put(171, TY_MEDIA_PAUSE); + ATTR_MAP.put(172, TY_MEDIA_PAUSE_OUTLINE); + ATTR_MAP.put(173, TY_MEDIA_PLAY); + ATTR_MAP.put(174, TY_MEDIA_PLAY_OUTLINE); + ATTR_MAP.put(175, TY_MEDIA_PLAY_REVERSE); + ATTR_MAP.put(176, TY_MEDIA_PLAY_REVERSE_OUTLINE); + ATTR_MAP.put(177, TY_MEDIA_RECORD); + ATTR_MAP.put(178, TY_MEDIA_RECORD_OUTLINE); + ATTR_MAP.put(179, TY_MEDIA_REWIND); + ATTR_MAP.put(180, TY_MEDIA_REWIND_OUTLINE); + ATTR_MAP.put(181, TY_MEDIA_STOP); + ATTR_MAP.put(182, TY_MEDIA_STOP_OUTLINE); + ATTR_MAP.put(183, TY_MESSAGE); + ATTR_MAP.put(184, TY_MESSAGE_TYPING); + ATTR_MAP.put(185, TY_MESSAGES); + ATTR_MAP.put(186, TY_MICROPHONE); + ATTR_MAP.put(187, TY_MICROPHONE_OUTLINE); + ATTR_MAP.put(188, TY_MINUS); + ATTR_MAP.put(189, TY_MINUS_OUTLINE); + ATTR_MAP.put(190, TY_MORTAR_BOARD); + ATTR_MAP.put(191, TY_NEWS); + ATTR_MAP.put(192, TY_NOTES); + ATTR_MAP.put(193, TY_NOTES_OUTLINE); + ATTR_MAP.put(194, TY_PEN); + ATTR_MAP.put(195, TY_PENCIL); + ATTR_MAP.put(196, TY_PHONE); + ATTR_MAP.put(197, TY_PHONE_OUTLINE); + ATTR_MAP.put(198, TY_PI); + ATTR_MAP.put(199, TY_PI_OUTLINE); + ATTR_MAP.put(200, TY_PIN); + ATTR_MAP.put(201, TY_PIN_OUTLINE); + ATTR_MAP.put(202, TY_PIPETTE); + ATTR_MAP.put(203, TY_PLANE); + ATTR_MAP.put(204, TY_PLANE_OUTLINE); + ATTR_MAP.put(205, TY_PLUG); + ATTR_MAP.put(206, TY_PLUS); + ATTR_MAP.put(207, TY_PLUS_OUTLINE); + ATTR_MAP.put(208, TY_POINT_OF_INTEREST); + ATTR_MAP.put(209, TY_POINT_OF_INTEREST_OUTLINE); + ATTR_MAP.put(210, TY_POWER); + ATTR_MAP.put(211, TY_POWER_OUTLINE); + ATTR_MAP.put(212, TY_PRINTER); + ATTR_MAP.put(213, TY_PUZZLE); + ATTR_MAP.put(214, TY_PUZZLE_OUTLINE); + ATTR_MAP.put(215, TY_RADAR); + ATTR_MAP.put(216, TY_RADAR_OUTLINE); + ATTR_MAP.put(217, TY_REFRESH); + ATTR_MAP.put(218, TY_REFRESH_OUTLINE); + ATTR_MAP.put(219, TY_RSS); + ATTR_MAP.put(220, TY_RSS_OUTLINE); + ATTR_MAP.put(221, TY_SCISSORS); + ATTR_MAP.put(222, TY_SCISSORS_OUTLINE); + ATTR_MAP.put(223, TY_SHOPPING_BAG); + ATTR_MAP.put(224, TY_SHOPPING_CART); + ATTR_MAP.put(225, TY_SOCIAL_AT_CIRCULAR); + ATTR_MAP.put(226, TY_SOCIAL_DRIBBBLE); + ATTR_MAP.put(227, TY_SOCIAL_DRIBBBLE_CIRCULAR); + ATTR_MAP.put(228, TY_SOCIAL_FACEBOOK); + ATTR_MAP.put(229, TY_SOCIAL_FACEBOOK_CIRCULAR); + ATTR_MAP.put(230, TY_SOCIAL_FLICKR); + ATTR_MAP.put(231, TY_SOCIAL_FLICKR_CIRCULAR); + ATTR_MAP.put(232, TY_SOCIAL_GITHUB); + ATTR_MAP.put(233, TY_SOCIAL_GITHUB_CIRCULAR); + ATTR_MAP.put(234, TY_SOCIAL_GOOGLE_PLUS); + ATTR_MAP.put(235, TY_SOCIAL_GOOGLE_PLUS_CIRCULAR); + ATTR_MAP.put(236, TY_SOCIAL_INSTAGRAM); + ATTR_MAP.put(237, TY_SOCIAL_INSTAGRAM_CIRCULAR); + ATTR_MAP.put(238, TY_SOCIAL_LAST_FM); + ATTR_MAP.put(239, TY_SOCIAL_LAST_FM_CIRCULAR); + ATTR_MAP.put(240, TY_SOCIAL_LINKEDIN); + ATTR_MAP.put(241, TY_SOCIAL_LINKEDIN_CIRCULAR); + ATTR_MAP.put(242, TY_SOCIAL_PINTEREST); + ATTR_MAP.put(243, TY_SOCIAL_PINTEREST_CIRCULAR); + ATTR_MAP.put(244, TY_SOCIAL_SKYPE); + ATTR_MAP.put(245, TY_SOCIAL_SKYPE_OUTLINE); + ATTR_MAP.put(246, TY_SOCIAL_TUMBLER); + ATTR_MAP.put(247, TY_SOCIAL_TUMBLER_CIRCULAR); + ATTR_MAP.put(248, TY_SOCIAL_TWITTER); + ATTR_MAP.put(249, TY_SOCIAL_TWITTER_CIRCULAR); + ATTR_MAP.put(250, TY_SOCIAL_VIMEO); + ATTR_MAP.put(251, TY_SOCIAL_VIMEO_CIRCULAR); + ATTR_MAP.put(252, TY_SOCIAL_YOUTUBE); + ATTR_MAP.put(253, TY_SOCIAL_YOUTUBE_CIRCULAR); + ATTR_MAP.put(254, TY_SORT_ALPHABETICALLY); + ATTR_MAP.put(255, TY_SORT_ALPHABETICALLY_OUTLINE); + ATTR_MAP.put(256, TY_SORT_NUMERICALLY); + ATTR_MAP.put(257, TY_SORT_NUMERICALLY_OUTLINE); + ATTR_MAP.put(258, TY_SPANNER); + ATTR_MAP.put(259, TY_SPANNER_OUTLINE); + ATTR_MAP.put(260, TY_SPIRAL); + ATTR_MAP.put(261, TY_STAR); + ATTR_MAP.put(262, TY_STAR_FULL_OUTLINE); + ATTR_MAP.put(263, TY_STAR_HALF); + ATTR_MAP.put(264, TY_STAR_HALF_OUTLINE); + ATTR_MAP.put(265, TY_STAR_OUTLINE); + ATTR_MAP.put(266, TY_STARBURST); + ATTR_MAP.put(267, TY_STARBURST_OUTLINE); + ATTR_MAP.put(268, TY_STOPWATCH); + ATTR_MAP.put(269, TY_SUPPORT); + ATTR_MAP.put(270, TY_TABS_OUTLINE); + ATTR_MAP.put(271, TY_TAG); + ATTR_MAP.put(272, TY_TAGS); + ATTR_MAP.put(273, TY_TH_LARGE); + ATTR_MAP.put(274, TY_TH_LARGE_OUTLINE); + ATTR_MAP.put(275, TY_TH_LIST); + ATTR_MAP.put(276, TY_TH_LIST_OUTLINE); + ATTR_MAP.put(277, TY_TH_MENU); + ATTR_MAP.put(278, TY_TH_MENU_OUTLINE); + ATTR_MAP.put(279, TY_TH_SMALL); + ATTR_MAP.put(280, TY_TH_SMALL_OUTLINE); + ATTR_MAP.put(281, TY_THERMOMETER); + ATTR_MAP.put(282, TY_THUMBS_DOWN); + ATTR_MAP.put(283, TY_THUMBS_OK); + ATTR_MAP.put(284, TY_THUMBS_UP); + ATTR_MAP.put(285, TY_TICK); + ATTR_MAP.put(286, TY_TICK_OUTLINE); + ATTR_MAP.put(287, TY_TICKET); + ATTR_MAP.put(288, TY_TIME); + ATTR_MAP.put(289, TY_TIMES); + ATTR_MAP.put(290, TY_TIMES_OUTLINE); + ATTR_MAP.put(291, TY_TRASH); + ATTR_MAP.put(292, TY_TREE); + ATTR_MAP.put(293, TY_UPLOAD); + ATTR_MAP.put(294, TY_UPLOAD_OUTLINE); + ATTR_MAP.put(295, TY_USER); + ATTR_MAP.put(296, TY_USER_ADD); + ATTR_MAP.put(297, TY_USER_ADD_OUTLINE); + ATTR_MAP.put(298, TY_USER_DELETE); + ATTR_MAP.put(299, TY_USER_DELETE_OUTLINE); + ATTR_MAP.put(300, TY_USER_OUTLINE); + ATTR_MAP.put(301, TY_VENDOR_ANDROID); + ATTR_MAP.put(302, TY_VENDOR_APPLE); + ATTR_MAP.put(303, TY_VENDOR_MICROSOFT); + ATTR_MAP.put(304, TY_VIDEO); + ATTR_MAP.put(305, TY_VIDEO_OUTLINE); + ATTR_MAP.put(306, TY_VOLUME); + ATTR_MAP.put(307, TY_VOLUME_DOWN); + ATTR_MAP.put(308, TY_VOLUME_MUTE); + ATTR_MAP.put(309, TY_VOLUME_UP); + ATTR_MAP.put(310, TY_WARNING); + ATTR_MAP.put(311, TY_WARNING_OUTLINE); + ATTR_MAP.put(312, TY_WATCH); + ATTR_MAP.put(313, TY_WAVES); + ATTR_MAP.put(314, TY_WAVES_OUTLINE); + ATTR_MAP.put(315, TY_WEATHER_CLOUDY); + ATTR_MAP.put(316, TY_WEATHER_DOWNPOUR); + ATTR_MAP.put(317, TY_WEATHER_NIGHT); + ATTR_MAP.put(318, TY_WEATHER_PARTLY_SUNNY); + ATTR_MAP.put(319, TY_WEATHER_SHOWER); + ATTR_MAP.put(320, TY_WEATHER_SNOW); + ATTR_MAP.put(321, TY_WEATHER_STORMY); + ATTR_MAP.put(322, TY_WEATHER_SUNNY); + ATTR_MAP.put(323, TY_WEATHER_WINDY); + ATTR_MAP.put(324, TY_WEATHER_WINDY_CLOUDY); + ATTR_MAP.put(325, TY_WI_FI); + ATTR_MAP.put(326, TY_WI_FI_OUTLINE); + ATTR_MAP.put(327, TY_WINE); + ATTR_MAP.put(328, TY_WORLD); + ATTR_MAP.put(329, TY_WORLD_OUTLINE); + ATTR_MAP.put(330, TY_ZOOM); + ATTR_MAP.put(331, TY_ZOOM_IN); + ATTR_MAP.put(332, TY_ZOOM_IN_OUTLINE); + ATTR_MAP.put(333, TY_ZOOM_OUT); + ATTR_MAP.put(334, TY_ZOOM_OUT_OUTLINE); + ATTR_MAP.put(335, TY_ZOOM_OUTLINE); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/utils/ColorUtils.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/utils/ColorUtils.java new file mode 100644 index 0000000..b6751f7 --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/utils/ColorUtils.java @@ -0,0 +1,76 @@ +package com.beardedhen.androidbootstrap.utils; + +import android.content.Context; +import android.graphics.Color; +import android.os.Build; +import android.support.annotation.ColorInt; +import android.support.annotation.ColorRes; + +/** + * Utils class for manipulating Bootstrap colors, and resolving colors from resource values. + */ +public class ColorUtils { + + public static final int DISABLED_ALPHA_FILL = 165; + public static final int DISABLED_ALPHA_EDGE = 190; + public static final float ACTIVE_OPACITY_FACTOR_FILL = 0.125f; + public static final float ACTIVE_OPACITY_FACTOR_EDGE = 0.025f; + + /** + * Resolves a color resource. + * + * @param color the color resource + * @param context the current context + * @return a color int + */ + public static @ColorInt int resolveColor(@ColorRes int color, Context context) { + if (Build.VERSION.SDK_INT >= 23) { + return context.getResources().getColor(color, context.getTheme()); + } + else { + return context.getResources().getColor(color); + } + } + + /** + * Darkens a color by reducing its RGB channel values. + * + * @param context the current context + * @param res the color resource + * @param percent the percent to decrease + * @return a color int + */ + @ColorInt public static int decreaseRgbChannels(Context context, + @ColorRes int res, float percent) { + int c = resolveColor(res, context); + + // reduce rgb channel values to produce box shadow effect + int red = (Color.red(c)); + red -= (red * percent); + red = red > 0 ? red : 0; + + int green = (Color.green(c)); + green -= (green * percent); + green = green > 0 ? green : 0; + + int blue = (Color.blue(c)); + blue -= (blue * percent); + blue = blue > 0 ? blue : 0; + + return Color.argb(Color.alpha(c), red, green, blue); + } + + /** + * Lightens a color by increasing its alpha channel value + * + * @param context the current context + * @param res the color resource + * @param alpha the alpha to set + * @return a color int + */ + @ColorInt public static int increaseOpacity(Context context, @ColorRes int res, int alpha) { + int c = resolveColor(res, context); + return Color.argb(alpha, Color.red(c), Color.green(c), Color.blue(c)); + } + +} diff --git a/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/utils/DimenUtils.java b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/utils/DimenUtils.java new file mode 100644 index 0000000..912103f --- /dev/null +++ b/AndroidBootstrap/src/main/java/com/beardedhen/androidbootstrap/utils/DimenUtils.java @@ -0,0 +1,36 @@ +package com.beardedhen.androidbootstrap.utils; + +import android.content.Context; +import android.content.res.Resources; +import android.support.annotation.DimenRes; + +/** + * Utils class for resolving color resource values. + */ +public class DimenUtils { + + /** + * Resolves a dimension resource that uses scaled pixels + * + * @param context the current context + * @param sizeRes the dimension resource holding an SP value + * @return the text size in pixels + */ + public static float pixelsFromSpResource(Context context, @DimenRes int sizeRes) { + final Resources res = context.getResources(); + return res.getDimension(sizeRes) / res.getDisplayMetrics().density; + } + + /** + * Resolves a dimension resource that uses density-independent pixels + * + * @param context the current context + * @param res the dimension resource holding a DP value + * @return the size in pixels + */ + public static float pixelsFromDpResource(Context context, @DimenRes int res) { + return context.getResources().getDimension(res); + } + + +} diff --git a/AndroidBootstrap/src/main/res/values/attrs.xml b/AndroidBootstrap/src/main/res/values/attrs.xml new file mode 100644 index 0000000..6a9462a --- /dev/null +++ b/AndroidBootstrap/src/main/res/values/attrs.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AndroidBootstrap/src/main/res/values/attrs_font_awesome.xml b/AndroidBootstrap/src/main/res/values/attrs_font_awesome.xml new file mode 100644 index 0000000..5ef854a --- /dev/null +++ b/AndroidBootstrap/src/main/res/values/attrs_font_awesome.xml @@ -0,0 +1,680 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidBootstrap/src/main/res/values/attrs_typicons.xml b/AndroidBootstrap/src/main/res/values/attrs_typicons.xml new file mode 100644 index 0000000..b245f20 --- /dev/null +++ b/AndroidBootstrap/src/main/res/values/attrs_typicons.xml @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/AndroidBootstrap/src/main/res/values/colors.xml b/AndroidBootstrap/src/main/res/values/colors.xml new file mode 100644 index 0000000..8b19990 --- /dev/null +++ b/AndroidBootstrap/src/main/res/values/colors.xml @@ -0,0 +1,31 @@ + + + + + + + #373a3c + #55595c + #818a91 + #eceeef + #f7f7f9 + + + #0275d8 + #5cb85c + #5bc0de + #f0ad4e + #d9534f + + + + + #ffffff + #cccccc + #373a3c + + + #ffe0e0e0 + #ffffffff + + diff --git a/AndroidBootstrap/src/main/res/values/dimens.xml b/AndroidBootstrap/src/main/res/values/dimens.xml new file mode 100644 index 0000000..b608d71 --- /dev/null +++ b/AndroidBootstrap/src/main/res/values/dimens.xml @@ -0,0 +1,51 @@ + + + + 14sp + 5.75dp + 14dp + 4dp + 1dp + + + 14sp + 8dp + 5.75dp + 6dp + 1.5dp + + + 8dp + 8dp + 2dp + + + 31.5sp + 7.875dp + 12.6dp + + 28sp + 7dp + 11.2dp + + 24.5sp + 6.125dp + 9.8dp + + 21sp + 5.25dp + 8.4dp + + 17.5sp + 4.375dp + 7dp + + 14dp + 3.5dp + 5.6dp + + + 3dp + 14dp + + diff --git a/LICENSE b/LICENSE.txt similarity index 96% rename from LICENSE rename to LICENSE.txt index a25885c..bad8e4d 100644 --- a/LICENSE +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013 Bearded Hen +Copyright (c) 2013-2015 Bearded Hen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md index 6fd414c..72ae4b2 100644 --- a/README.md +++ b/README.md @@ -1,124 +1,188 @@ Android-Bootstrap ================= - - -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/device_image.png "Device Image") - - -Getting Started -============= - -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.beardedhen/androidbootstrap/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.beardedhen/androidbootstrap) -### Gradle -Add the following to your build.gradle: - -```java -dependencies { - compile 'com.beardedhen:androidbootstrap:+' -} -``` - -### Library Project -Alternatively you can download the source and link to it as a library project in Eclipse, or import as a module in Android Studio. - -### Sample Code -Please checkout the [sample project](https://github.com/Bearded-Hen/AndroidBootstrapSample), as it contains example code for most usecases. - -### Usage - -1. Paste the following XML into a layout file to create a BootstrapButton: - +Android Bootstrap is a library which provides several custom views styled according to the + [Twitter Bootstrap Specification](http://getbootstrap.com/). This allows you to spend more time + on development rather than trying to get a consistent theme across your app. + + +Quick Start +=========== + [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.beardedhen/androidbootstrap/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.beardedhen/androidbootstrap) + + Add the following dependency to your build.gradle: + + ```java + dependencies { + compile 'com.beardedhen:androidbootstrap:LATEST_VERSION_HERE' + } + ``` + + You should also override your application class with the following: + + ```java + public class SampleApplication extends Application { + @Override public void onCreate() { + super.onCreate(); + TypefaceProvider.registerDefaultIconSets(); + } + } + ``` + + You should then checkout the library and investigate the sample code, which covers most of the features. + The sample app is also available on [Google Play](https://play.google.com/store/apps/details?id=com.fractalwrench.androidbootstrap.sample). + + +Contributing +============ +Contributions are very welcome! There are 3 main ways you can help out: + +1. Add more Icon Typefaces, using the instructions [here](https://github.com/Bearded-Hen/Android-Bootstrap/blob/master/ADD_FONT.md) +2. Help implement views which are present in the [Twitter Bootstrap Specification](http://getbootstrap.com/) but are not yet in this library. +3. Raise an issue if you see a bug or are unsure on how something works, or even better - send a pull-request with a fix! + +Versioning +========== +This project uses [Semantic Versioning](http://semver.org/). There are several breaking changes in V2.X of the library, including: + +- AwesomeTextView replaces FontAwesomeText +- Various altered method signatures/attributes for views +- Global BootstrapBrand/BootstrapSize attributes replace view-specific enums + +Please consider what effect these changes might have on your app before upgrading! + +Contact +======= +If you have any questions, issues, or just want to let us know where you're using Android Bootstrap + tweet us at [@BeardedHen](https://twitter.com/beardedhen), email support@beardedhen.com, + or head over to our [website](http://beardedhen.com/) to see more of our creations. + + +Examples +============ + +###BootstrapButton +A button that supports Glyph icons, and is themeable using Bootstrap Brands. ```xml - + android:text="BootstrapButton" + app:bootstrapBrand="success" + app:bootstrapSize="lg" + app:buttonMode="regular" + app:showOutline="false" + app:roundedCorners="true" + /> ``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_button.png "BootstrapButton") -2. Add the bootstrap namespace to the root view of your layout: - + +###BootstrapButtonGroup +Allows BootstrapButtons to be grouped together and their attributes controlled en masse. ```xml -xmlns:bootstrap="http://schemas.android.com/apk/res-auto" + + + + ``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_button_group.png "BootstrapButtonGroup") -3. Build and run the app. - -## More Information - -Feel free to inspect the library source or look at the [wiki] for further information(https://github.com/Bearded-Hen/Android-Bootstrap/wiki): -* [bootstrap buttons](https://github.com/Bearded-Hen/Android-Bootstrap/wiki/Bootstrap-Button) -* [font awesome texts](https://github.com/Bearded-Hen/Android-Bootstrap/wiki/Font-Awesome-Text) -* [bootstrap edit texts](https://github.com/Bearded-Hen/Android-Bootstrap/wiki/Bootstrap-Edit-Text) -* [boostrap thumbnails](https://github.com/Bearded-Hen/Android-Bootstrap/wiki/Bootstrap-Thumbnail) - - -If you have any questions, issues, or just want to let us know where you're using Android Bootstrap tweet us at [@BeardedHen](https://twitter.com/beardedhen), email support@beardedhen.com, or head over to our [website](http://beardedhen.com/) to see more of our creations. - -#Apps Using Android-Bootstrap - -- [Forms on Mobile - Lite](https://play.google.com/store/apps/details?id=com.formsonmobile.lite.contactsdetails) -- [BHFileBrowser](https://github.com/Bearded-Hen/BHFileBrowser) - - -#Features -* Uses min SDK 7 which is Android 2.1 (Tested on a device running Android 2.2) -* Bootstrap buttons as per Bootstrap v3 -* Rounded buttons -* Disabled buttons -* Various sized buttons (large to extra small) -* Just text buttons -* Left, right, left and right, or just icon button -* Font Awesome text as per Font Awesome v4.3 -* Animations to Font Awesome Text items -* EditText backgrounds and states - -Bootstrap Buttons - -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/buttons.png "regular bootstrap buttons") - -Rounded Bootstrap Button - -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/buttons_rounded.png "rounded bootstrap buttons") - -Others - -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/buttons_others.png "other bootstrap buttons") -Sizes - -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/buttons_sizes.png "sized bootstrap buttons") - -Disabled - -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/buttons_disabled.png "disabled bootstrap buttons") +###AwesomeTextView +A text widget that displays Glyph icons, and is themeable using Bootstrap Brands. + ```xml + +``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/awesome_text_view.png "AwesomeTextView") -Font Awesome Text -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/font_awesome_text.png "font_awesome_text") +###BootstrapProgressBar +Displays progress in a bar from 0-100, and animates updates to the current progress. + ```xml + +``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_progress_bar.png "BootstrapProgressBar") -EditText -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_edit_text.png "edit text backgrounds") +###BootstrapLabel +Displays non-clickable text in a widget similar to the BootstrapButton, sizable using H1-H6 elements. + ```xml + +``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_label.png "BootstrapLabel") -Rounded Edit text -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_edit_text_rounded.png "edit text backgrounds rounded") -Thumbnail Square -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/thumbnail_square.png "edit text backgrounds rounded") +###BootstrapEditText +Allows editing of text in a widget themed using BootstrapBrand. + ```xml + +``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_edit_text.png "BootstrapEditText") -Thumbnails Rounded -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/thumbnail_rounded.png "edit text backgrounds rounded") -Thumbnails Rounded -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/thumbnail_rounded.png "edit text backgrounds rounded") +###BootstrapCircleThumbnail +Displays images in a center-cropped Circular View, themed with BootstrapBrand. + ```xml + +``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_circle_thumbnail.png "BootstrapCircleThumbnail") -Circle Thumbnails -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/thumbnails_circle.png "circle thumbnails") -Circle Thumbnails Minimal -![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/thumbnails_circle_minimal.png "circle thumbnails minimal") +###BootstrapThumbnail +Displays images in a rectangular View, themed with BootstrapBrand. + ```xml + +``` +![alt text](https://raw.github.com/Bearded-Hen/Android-Bootstrap/master/images/bootstrap_thumbnail.png "BootstrapThumbnail") diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..f21cf85 --- /dev/null +++ b/TODO.md @@ -0,0 +1,6 @@ +Feature (Wish)List +============= +* More Views in Bootstrap Spec +* Add Bootstrap input groups +* Add BootstrapCardView and BootstrapCardGroupView to replace BootstrapThumbnail +* Generate gh-pages diff --git a/build.gradle b/build.gradle index ec6b6b5..d2d3f7e 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.2.3' + classpath 'com.android.tools.build:gradle:1.3.0' } } diff --git a/gradle.properties b/gradle.properties index 267b0d9..53225b5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ -VERSION_NAME=1.2.3 -VERSION_CODE=123 +VERSION_NAME=2.0.0 +VERSION_CODE=200 GROUP=com.beardedhen -POM_DESCRIPTION=Bootstrap style buttons with Font Awesome +POM_DESCRIPTION=Bootstrap style widgets for Android, with Glyph Icons POM_URL=https://github.com/Bearded-Hen/Android-Bootstrap POM_SCM_URL=https://github.com/Bearded-Hen/Android-Bootstrap POM_SCM_CONNECTION=scm:git@github.com:Bearded-Hen/Android-Bootstrap.git diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index aea9155..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Tue Dec 09 15:08:23 GMT 2014 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip diff --git a/images/android_bootstrap_installation.png b/images/android_bootstrap_installation.png deleted file mode 100644 index 01f2700..0000000 Binary files a/images/android_bootstrap_installation.png and /dev/null differ diff --git a/images/awesome_text_view.png b/images/awesome_text_view.png new file mode 100644 index 0000000..4455dc6 Binary files /dev/null and b/images/awesome_text_view.png differ diff --git a/images/bg_hr.png b/images/bg_hr.png deleted file mode 100644 index 7973bd6..0000000 Binary files a/images/bg_hr.png and /dev/null differ diff --git a/images/blacktocat.png b/images/blacktocat.png deleted file mode 100644 index 6e264fe..0000000 Binary files a/images/blacktocat.png and /dev/null differ diff --git a/images/bootstrap_button.png b/images/bootstrap_button.png new file mode 100644 index 0000000..394fd5e Binary files /dev/null and b/images/bootstrap_button.png differ diff --git a/images/bootstrap_button_group.png b/images/bootstrap_button_group.png new file mode 100644 index 0000000..24b77e1 Binary files /dev/null and b/images/bootstrap_button_group.png differ diff --git a/images/bootstrap_circle_thumbnail.png b/images/bootstrap_circle_thumbnail.png new file mode 100644 index 0000000..bc7308b Binary files /dev/null and b/images/bootstrap_circle_thumbnail.png differ diff --git a/images/bootstrap_edit_text.png b/images/bootstrap_edit_text.png index 8998c89..3dc5eae 100644 Binary files a/images/bootstrap_edit_text.png and b/images/bootstrap_edit_text.png differ diff --git a/images/bootstrap_edit_text_rounded.png b/images/bootstrap_edit_text_rounded.png deleted file mode 100644 index 50b7e05..0000000 Binary files a/images/bootstrap_edit_text_rounded.png and /dev/null differ diff --git a/images/bootstrap_label.png b/images/bootstrap_label.png new file mode 100644 index 0000000..ce2b54f Binary files /dev/null and b/images/bootstrap_label.png differ diff --git a/images/bootstrap_progress_bar.png b/images/bootstrap_progress_bar.png new file mode 100644 index 0000000..5ebc3f2 Binary files /dev/null and b/images/bootstrap_progress_bar.png differ diff --git a/images/bootstrap_thumbnail.png b/images/bootstrap_thumbnail.png new file mode 100644 index 0000000..38cd4ad Binary files /dev/null and b/images/bootstrap_thumbnail.png differ diff --git a/images/buttons.png b/images/buttons.png deleted file mode 100644 index 4188a3d..0000000 Binary files a/images/buttons.png and /dev/null differ diff --git a/images/buttons_disabled.png b/images/buttons_disabled.png deleted file mode 100644 index 5155902..0000000 Binary files a/images/buttons_disabled.png and /dev/null differ diff --git a/images/buttons_others.png b/images/buttons_others.png deleted file mode 100644 index 936c6e3..0000000 Binary files a/images/buttons_others.png and /dev/null differ diff --git a/images/buttons_rounded.png b/images/buttons_rounded.png deleted file mode 100644 index ab44172..0000000 Binary files a/images/buttons_rounded.png and /dev/null differ diff --git a/images/buttons_sizes.png b/images/buttons_sizes.png deleted file mode 100644 index 24a4446..0000000 Binary files a/images/buttons_sizes.png and /dev/null differ diff --git a/images/circle_thumbnail_minimal_solo.png b/images/circle_thumbnail_minimal_solo.png deleted file mode 100644 index 63dbc1a..0000000 Binary files a/images/circle_thumbnail_minimal_solo.png and /dev/null differ diff --git a/images/circle_thumbnail_solo.png b/images/circle_thumbnail_solo.png deleted file mode 100644 index d52dbab..0000000 Binary files a/images/circle_thumbnail_solo.png and /dev/null differ diff --git a/images/device_image.png b/images/device_image.png deleted file mode 100644 index 4c69d56..0000000 Binary files a/images/device_image.png and /dev/null differ diff --git a/images/edittext_background.png b/images/edittext_background.png deleted file mode 100644 index 60dba96..0000000 Binary files a/images/edittext_background.png and /dev/null differ diff --git a/images/font_awesome_text.png b/images/font_awesome_text.png deleted file mode 100644 index 9497d8a..0000000 Binary files a/images/font_awesome_text.png and /dev/null differ diff --git a/images/icon_download.png b/images/icon_download.png deleted file mode 100644 index a2a287f..0000000 Binary files a/images/icon_download.png and /dev/null differ diff --git a/images/sprite_download.png b/images/sprite_download.png deleted file mode 100644 index f2babd5..0000000 Binary files a/images/sprite_download.png and /dev/null differ diff --git a/images/thumbnail_rounded.png b/images/thumbnail_rounded.png deleted file mode 100644 index 4b8ac75..0000000 Binary files a/images/thumbnail_rounded.png and /dev/null differ diff --git a/images/thumbnail_square.png b/images/thumbnail_square.png deleted file mode 100644 index f074267..0000000 Binary files a/images/thumbnail_square.png and /dev/null differ diff --git a/images/thumbnails_circle.png b/images/thumbnails_circle.png deleted file mode 100644 index 32eb922..0000000 Binary files a/images/thumbnails_circle.png and /dev/null differ diff --git a/images/thumbnails_circle_minimal.png b/images/thumbnails_circle_minimal.png deleted file mode 100644 index de1de2a..0000000 Binary files a/images/thumbnails_circle_minimal.png and /dev/null differ diff --git a/sample/.gitignore b/sample/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/sample/.gitignore @@ -0,0 +1 @@ +/build diff --git a/sample/build.gradle b/sample/build.gradle new file mode 100644 index 0000000..2a97d1e --- /dev/null +++ b/sample/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" + + defaultConfig { + applicationId "com.fractalwrench.androidbootstrap.sample" + minSdkVersion 11 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + lintOptions { + disable 'InvalidPackage' + } + packagingOptions { + exclude 'META-INF/services/javax.annotation.processing.Processor' + } + buildTypes { + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile project (':AndroidBootstrap') // replace with Maven dependency in your app + + compile 'com.jakewharton:butterknife:7.0.1' + compile 'com.android.support:appcompat-v7:23.0.1' + compile 'com.android.support:support-annotations:23.0.1' +} diff --git a/sample/proguard-rules.pro b/sample/proguard-rules.pro new file mode 100644 index 0000000..af7ae25 --- /dev/null +++ b/sample/proguard-rules.pro @@ -0,0 +1,13 @@ +# Butterknife + +-keep class butterknife.** { *; } +-dontwarn butterknife.internal.** +-keep class **$$ViewBinder { *; } + +-keepclasseswithmembernames class * { + @butterknife.* ; +} + +-keepclasseswithmembernames class * { + @butterknife.* ; +} \ No newline at end of file diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml new file mode 100644 index 0000000..726f47d --- /dev/null +++ b/sample/src/main/AndroidManifest.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/AwesomeTextViewExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/AwesomeTextViewExample.java new file mode 100644 index 0000000..a25970d --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/AwesomeTextViewExample.java @@ -0,0 +1,69 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.os.Bundle; + +import com.beardedhen.androidbootstrap.AwesomeTextView; +import com.beardedhen.androidbootstrap.BootstrapText; + +import butterknife.Bind; +import butterknife.OnClick; + +import static com.beardedhen.androidbootstrap.font.FontAwesome.FA_ANCHOR; +import static com.beardedhen.androidbootstrap.font.FontAwesome.FA_ANDROID; +import static com.beardedhen.androidbootstrap.font.FontAwesome.FA_APPLE; +import static com.beardedhen.androidbootstrap.font.FontAwesome.FA_HEART; +import static com.beardedhen.androidbootstrap.font.FontAwesome.FA_TWITTER; +import static com.beardedhen.androidbootstrap.font.Typicon.TY_CODE; + +public class AwesomeTextViewExample extends BaseActivity { + + @Override protected int getContentLayoutId() { + return R.layout.example_awesome_text_view; + } + + @Bind(R.id.example_fa_text_change) AwesomeTextView exampleChange; + @Bind(R.id.example_fa_text_flash) AwesomeTextView exampleFlash; + @Bind(R.id.example_fa_text_rotate) AwesomeTextView exampleRotate; + @Bind(R.id.example_fa_text_multi_change) AwesomeTextView exampleMultiChange; + @Bind(R.id.example_fa_text_builder) AwesomeTextView exampleBuilder; + @Bind(R.id.example_mix_and_match) AwesomeTextView mixAndMatch; + + private boolean android = true; + private boolean wikipedia = true; + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setupFontAwesomeText(); + } + + private void setupFontAwesomeText() { + exampleFlash.startFlashing(true, AwesomeTextView.AnimationSpeed.FAST); + exampleRotate.startRotate(true, AwesomeTextView.AnimationSpeed.SLOW); + + BootstrapText text = new BootstrapText.Builder(this) + .addText("I ") + .addFontAwesomeIcon(FA_HEART) + .addText(" going on ") + .addFontAwesomeIcon(FA_TWITTER) + .build(); + + exampleBuilder.setBootstrapText(text); + + mixAndMatch.setBootstrapText(new BootstrapText.Builder(this) + .addFontAwesomeIcon(FA_ANCHOR) + .addTypicon(TY_CODE) + .build()); + } + + @OnClick(R.id.example_fa_text_change) void onChangeClicked() { + android = !android; + exampleChange.setFontAwesomeIcon(android ? FA_ANDROID : FA_APPLE); + } + + @OnClick(R.id.example_fa_text_multi_change) void onMultiChangeClicked() { + wikipedia = !wikipedia; + String text = wikipedia ? "{fa_image} is in the {fa_cloud}" : "{fa_bank} are on {fa_globe}"; + exampleMultiChange.setMarkdownText(text); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BaseActivity.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BaseActivity.java new file mode 100644 index 0000000..4f8f7a7 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BaseActivity.java @@ -0,0 +1,28 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.os.Bundle; +import android.support.annotation.LayoutRes; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.widget.ScrollView; + +import butterknife.ButterKnife; + +/** + * Performs ButterKnife binding after adding example views to the root ScrollView + */ +abstract class BaseActivity extends AppCompatActivity { + + @LayoutRes protected abstract int getContentLayoutId(); + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_base); + + ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); + scrollView.addView(LayoutInflater.from(this).inflate(getContentLayoutId(), scrollView, false)); + + ButterKnife.bind(this); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapButtonExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapButtonExample.java new file mode 100644 index 0000000..c5953cf --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapButtonExample.java @@ -0,0 +1,132 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.content.Context; +import android.os.Bundle; + +import com.beardedhen.androidbootstrap.BootstrapButton; +import com.beardedhen.androidbootstrap.api.attributes.BootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; + +import butterknife.Bind; +import butterknife.OnClick; + +public class BootstrapButtonExample extends BaseActivity { + + @Override protected int getContentLayoutId() { + return R.layout.example_bootstrap_button; + } + + private DefaultBootstrapSize size = DefaultBootstrapSize.LG; + + @Bind(R.id.bbutton_example_corners) BootstrapButton exampleCorners; + @Bind(R.id.bbutton_example_outline) BootstrapButton exampleOutline; + @Bind(R.id.bbutton_example_size) BootstrapButton exampleSize; + @Bind(R.id.bbutton_example_theme) BootstrapButton exampleTheme; + @Bind(R.id.example_bbutton_custom_style) BootstrapButton exampleCustomStyle; + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setupCustomStyle(); + } + + @OnClick(R.id.bbutton_example_corners) void onCornersExampleClicked() { + exampleCorners.setRounded(!exampleCorners.isRounded()); + } + + @OnClick(R.id.bbutton_example_outline) void onOutlineExampleClicked() { + exampleOutline.setShowOutline(!exampleOutline.isShowOutline()); + } + + @OnClick(R.id.bbutton_example_size) void onSizeExampleClicked() { + switch (size) { + case XS: + size = DefaultBootstrapSize.SM; + break; + case SM: + size = DefaultBootstrapSize.MD; + break; + case MD: + size = DefaultBootstrapSize.LG; + break; + case LG: + size = DefaultBootstrapSize.XL; + break; + case XL: + size = DefaultBootstrapSize.XS; + break; + } + exampleSize.setBootstrapSize(size); + } + + @OnClick(R.id.bbutton_example_theme) void onThemeExampleClicked() { + switch ((DefaultBootstrapBrand) exampleTheme.getBootstrapBrand()) { + case PRIMARY: + exampleTheme.setBootstrapBrand(DefaultBootstrapBrand.SUCCESS); + break; + case SUCCESS: + exampleTheme.setBootstrapBrand(DefaultBootstrapBrand.WARNING); + break; + case WARNING: + exampleTheme.setBootstrapBrand(DefaultBootstrapBrand.DANGER); + break; + case DANGER: + exampleTheme.setBootstrapBrand(DefaultBootstrapBrand.INFO); + break; + case INFO: + exampleTheme.setBootstrapBrand(DefaultBootstrapBrand.SECONDARY); + break; + case SECONDARY: + exampleTheme.setBootstrapBrand(DefaultBootstrapBrand.REGULAR); + break; + case REGULAR: + exampleTheme.setBootstrapBrand(DefaultBootstrapBrand.PRIMARY); + break; + } + } + + private void setupCustomStyle() { + // create a custom bootstrap size + exampleCustomStyle.setBootstrapSize(3.0f); + + // create a Bootstrap Theme with holo colors + exampleCustomStyle.setBootstrapBrand(new BootstrapBrand() { + @Override public int defaultFill(Context context) { + return context.getResources().getColor(R.color.custom_default_fill); + } + + @Override public int defaultEdge(Context context) { + return context.getResources().getColor(R.color.custom_default_edge); + } + + @Override public int defaultTextColor(Context context) { + return context.getResources().getColor(android.R.color.white); + } + + @Override public int activeFill(Context context) { + return context.getResources().getColor(R.color.custom_active_fill); + } + + @Override public int activeEdge(Context context) { + return context.getResources().getColor(R.color.custom_active_edge); + } + + @Override public int activeTextColor(Context context) { + return context.getResources().getColor(android.R.color.black); + } + + @Override public int disabledFill(Context context) { + return context.getResources().getColor(R.color.custom_disabled_fill); + } + + @Override public int disabledEdge(Context context) { + return context.getResources().getColor(R.color.custom_disabled_edge); + } + + @Override public int disabledTextColor(Context context) { + return context.getResources().getColor(R.color.bootstrap_gray); + } + }); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapButtonGroupExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapButtonGroupExample.java new file mode 100644 index 0000000..87c64a1 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapButtonGroupExample.java @@ -0,0 +1,107 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.widget.LinearLayout; + +import com.beardedhen.androidbootstrap.BootstrapButton; +import com.beardedhen.androidbootstrap.BootstrapButtonGroup; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; + +import butterknife.Bind; +import butterknife.OnClick; + +public class BootstrapButtonGroupExample extends BaseActivity { + + @Override protected int getContentLayoutId() { + return R.layout.example_bootstrap_button_group; + } + + private DefaultBootstrapSize size = DefaultBootstrapSize.MD; + + @Bind(R.id.bbutton_group_orientation_change) BootstrapButtonGroup orientationChange; + @Bind(R.id.bbutton_group_size_change) BootstrapButtonGroup sizeChange; + @Bind(R.id.bbutton_group_outline_change) BootstrapButtonGroup outlineChange; + @Bind(R.id.bbutton_group_rounded_change) BootstrapButtonGroup roundedChange; + @Bind(R.id.bbutton_group_brand_change) BootstrapButtonGroup brandChange; + @Bind(R.id.bbutton_group_child_change) BootstrapButtonGroup childChange; + + @OnClick(R.id.bbutton_group_orientation_change_btn) void onOrientationChangeExampleClicked() { + boolean isHorizontal = orientationChange.getOrientation() == LinearLayout.HORIZONTAL; + int newOrientation = isHorizontal ? LinearLayout.VERTICAL : LinearLayout.HORIZONTAL; + orientationChange.setOrientation(newOrientation); + } + + @OnClick(R.id.bbutton_group_outline_change_btn) void onOutlineChangeExampleClicked() { + outlineChange.setShowOutline(!outlineChange.isShowOutline()); + } + + @OnClick(R.id.bbutton_group_rounded_change_btn) void onRoundedChangeExampleClicked() { + roundedChange.setRounded(!roundedChange.isRounded()); + } + + @OnClick(R.id.bbutton_group_child_add_btn) void onChildAddExampleClicked() { + int count = childChange.getChildCount(); + + BootstrapButton button = new BootstrapButton(this); + button.setText(String.format("%d", count + 1)); + + childChange.addView(button); + } + + @OnClick(R.id.bbutton_group_child_remove_btn) void onChildRemoveExampleClicked() { + int count = childChange.getChildCount(); + + if (count > 0) { + childChange.removeViewAt(count - 1); + } + } + + @OnClick(R.id.bbutton_group_brand_change_btn) void onBrandChangeExampleClicked() { + switch ((DefaultBootstrapBrand) brandChange.getBootstrapBrand()) { + + case PRIMARY: + brandChange.setBootstrapBrand(DefaultBootstrapBrand.SUCCESS); + break; + case SUCCESS: + brandChange.setBootstrapBrand(DefaultBootstrapBrand.INFO); + break; + case INFO: + brandChange.setBootstrapBrand(DefaultBootstrapBrand.WARNING); + break; + case WARNING: + brandChange.setBootstrapBrand(DefaultBootstrapBrand.DANGER); + break; + case DANGER: + brandChange.setBootstrapBrand(DefaultBootstrapBrand.SECONDARY); + break; + case SECONDARY: + brandChange.setBootstrapBrand(DefaultBootstrapBrand.REGULAR); + break; + case REGULAR: + brandChange.setBootstrapBrand(DefaultBootstrapBrand.PRIMARY); + break; + } + } + + @OnClick(R.id.bbutton_group_size_change_btn) void onSizeChangeExampleClicked() { + switch (size) { + case XS: + size = DefaultBootstrapSize.SM; + break; + case SM: + size = DefaultBootstrapSize.MD; + break; + case MD: + size = DefaultBootstrapSize.LG; + break; + case LG: + size = DefaultBootstrapSize.XL; + break; + case XL: + size = DefaultBootstrapSize.XS; + break; + } + sizeChange.setBootstrapSize(size); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapCircleThumbnailExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapCircleThumbnailExample.java new file mode 100644 index 0000000..18db742 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapCircleThumbnailExample.java @@ -0,0 +1,125 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.widget.LinearLayout; + +import com.beardedhen.androidbootstrap.BootstrapCircleThumbnail; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; + +import butterknife.Bind; +import butterknife.OnClick; + +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.DANGER; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.INFO; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.PRIMARY; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.REGULAR; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.SECONDARY; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.SUCCESS; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.WARNING; + +public class BootstrapCircleThumbnailExample extends BaseActivity { + + private int resId = R.drawable.ladybird; + private final float baselineSize = 300; + private DefaultBootstrapSize size = DefaultBootstrapSize.MD; + + @Override protected int getContentLayoutId() { + return R.layout.example_bootstrap_circle_thumbnail; + } + + @Bind(R.id.bcircle_image_change_example) BootstrapCircleThumbnail imageChange; + @Bind(R.id.bcircle_theme_change_example) BootstrapCircleThumbnail themeChange; + @Bind(R.id.bcircle_border_change_example) BootstrapCircleThumbnail borderChange; + @Bind(R.id.bcircle_size_change_example) BootstrapCircleThumbnail sizeChange; + @Bind(R.id.bcircle_set_image_bitmap_example) BootstrapCircleThumbnail setBitmapExample; + @Bind(R.id.bcircle_set_image_drawable_example) BootstrapCircleThumbnail setDrawableExample; + @Bind(R.id.bcircle_set_image_resource_example) BootstrapCircleThumbnail setResourceExample; + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.small_daffodils); + setBitmapExample.setImageBitmap(bm); + + setDrawableExample.setImageDrawable(getResources().getDrawable(R.drawable.ladybird)); + setResourceExample.setImageResource(R.drawable.caterpillar); + + sizeChange.setLayoutParams(getLayoutParams(size.scaleFactor())); + } + + private LinearLayout.LayoutParams getLayoutParams(float factor) { + float size = baselineSize * factor; + return new LinearLayout.LayoutParams((int)size, (int)size); + } + + @OnClick(R.id.bcircle_theme_change_example) void onThemeChangeExampleClicked() { + switch ((DefaultBootstrapBrand) themeChange.getBootstrapBrand()) { + case PRIMARY: + themeChange.setBootstrapBrand(SUCCESS); + break; + case SUCCESS: + themeChange.setBootstrapBrand(INFO); + break; + case INFO: + themeChange.setBootstrapBrand(WARNING); + break; + case WARNING: + themeChange.setBootstrapBrand(DANGER); + break; + case DANGER: + themeChange.setBootstrapBrand(SECONDARY); + break; + case SECONDARY: + themeChange.setBootstrapBrand(REGULAR); + break; + case REGULAR: + themeChange.setBootstrapBrand(PRIMARY); + break; + } + } + + @OnClick(R.id.bcircle_image_change_example) void onImageChangeExampleClicked() { + switch (resId) { + case R.drawable.ladybird: + resId = R.drawable.caterpillar; + break; + case R.drawable.caterpillar: + resId = 0; + break; + case 0: + resId = R.drawable.ladybird; + break; + } + imageChange.setImageResource(resId); + } + + @OnClick(R.id.bcircle_border_change_example) void onBorderChangeExampleClicked() { + borderChange.setBorderDisplayed(!borderChange.isBorderDisplayed()); + } + + @OnClick(R.id.bcircle_size_change_example) void onSizeChangeExampleClicked() { + switch (size) { + case XS: + size = DefaultBootstrapSize.SM; + break; + case SM: + size = DefaultBootstrapSize.MD; + break; + case MD: + size = DefaultBootstrapSize.LG; + break; + case LG: + size = DefaultBootstrapSize.XL; + break; + case XL: + size = DefaultBootstrapSize.XS; + break; + } + sizeChange.setBootstrapSize(size); + sizeChange.setLayoutParams(getLayoutParams(size.scaleFactor())); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapEditTextExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapEditTextExample.java new file mode 100644 index 0000000..6b7fac8 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapEditTextExample.java @@ -0,0 +1,86 @@ +package com.fractalwrench.androidbootstrap.sample; + +import com.beardedhen.androidbootstrap.BootstrapEditText; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; + +import butterknife.Bind; +import butterknife.OnClick; + +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.DANGER; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.INFO; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.PRIMARY; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.REGULAR; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.SECONDARY; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.SUCCESS; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.WARNING; + +public class BootstrapEditTextExample extends BaseActivity { + + @Override protected int getContentLayoutId() { + return R.layout.example_bootstrap_edit_text_view; + } + + private DefaultBootstrapSize size = DefaultBootstrapSize.MD; + + @Bind(R.id.bedit_text_change_enabled) BootstrapEditText changeEnabled; + @Bind(R.id.bedit_text_change_round) BootstrapEditText changeRound; + @Bind(R.id.bedit_text_change_theme) BootstrapEditText changeTheme; + @Bind(R.id.bedit_text_change_size) BootstrapEditText sizeExample; + + @OnClick(R.id.bedit_text_change_enabled_btn) void onChangeEnabledExampleClicked() { + changeEnabled.setEnabled(!changeEnabled.isEnabled()); + } + + @OnClick(R.id.bedit_text_change_round_btn) void onChangeRoundExampleClicked() { + changeRound.setRounded(!changeRound.isRounded()); + } + + @OnClick(R.id.bedit_text_change_theme_btn) void onChangeThemeExampleClicked() { + switch((DefaultBootstrapBrand) changeTheme.getBootstrapBrand()) { + case PRIMARY: + changeTheme.setBootstrapBrand(SUCCESS); + break; + case SUCCESS: + changeTheme.setBootstrapBrand(INFO); + break; + case INFO: + changeTheme.setBootstrapBrand(WARNING); + break; + case WARNING: + changeTheme.setBootstrapBrand(DANGER); + break; + case DANGER: + changeTheme.setBootstrapBrand(SECONDARY); + break; + case SECONDARY: + changeTheme.setBootstrapBrand(REGULAR); + break; + case REGULAR: + changeTheme.setBootstrapBrand(PRIMARY); + break; + } + } + + @OnClick(R.id.bedit_text_change_size_btn) void onSizeExampleClicked() { + switch (size) { + case XS: + size = DefaultBootstrapSize.SM; + break; + case SM: + size = DefaultBootstrapSize.MD; + break; + case MD: + size = DefaultBootstrapSize.LG; + break; + case LG: + size = DefaultBootstrapSize.XL; + break; + case XL: + size = DefaultBootstrapSize.XS; + break; + } + sizeExample.setBootstrapSize(size); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapLabelExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapLabelExample.java new file mode 100644 index 0000000..d45b022 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapLabelExample.java @@ -0,0 +1,86 @@ +package com.fractalwrench.androidbootstrap.sample; + +import com.beardedhen.androidbootstrap.BootstrapLabel; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading; + +import butterknife.Bind; +import butterknife.OnClick; + +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading.H1; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading.H2; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading.H3; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading.H4; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading.H5; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapHeading.H6; + +public class BootstrapLabelExample extends BaseActivity { + + @Override protected int getContentLayoutId() { + return R.layout.example_bootstrap_label; + } + + @Bind(R.id.example_blabel_change_color) BootstrapLabel lblChangeColor; + @Bind(R.id.example_blabel_change_heading) BootstrapLabel lblChangeHeading; + @Bind(R.id.example_blabel_change_rounded) BootstrapLabel lblChangeRounded; + + @OnClick(R.id.example_blabel_change_heading) void onHeadingChangeClicked() { + switch ((DefaultBootstrapHeading) lblChangeHeading.getBootstrapHeading()) { + case H1: + lblChangeHeading.setBootstrapHeading(H2); + break; + case H2: + lblChangeHeading.setBootstrapHeading(H3); + break; + case H3: + lblChangeHeading.setBootstrapHeading(H4); + break; + case H4: + lblChangeHeading.setBootstrapHeading(H5); + break; + case H5: + lblChangeHeading.setBootstrapHeading(H6); + break; + case H6: + lblChangeHeading.setBootstrapHeading(H1); + break; + default: + lblChangeHeading.setBootstrapHeading(H1); + break; + } + } + + @OnClick(R.id.example_blabel_change_color) void onColorChangeClicked() { + switch ((DefaultBootstrapBrand) lblChangeColor.getBootstrapBrand()) { + case PRIMARY: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.SUCCESS); + break; + case SUCCESS: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.INFO); + break; + case INFO: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.WARNING); + break; + case WARNING: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.DANGER); + break; + case DANGER: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.SECONDARY); + break; + case SECONDARY: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.REGULAR); + break; + case REGULAR: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.PRIMARY); + break; + default: + lblChangeColor.setBootstrapBrand(DefaultBootstrapBrand.PRIMARY); + break; + } + } + + @OnClick(R.id.example_blabel_change_rounded) void onRoundedChangeClicked() { + lblChangeRounded.setRounded(!lblChangeRounded.isRounded()); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapProgressBarExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapProgressBarExample.java new file mode 100644 index 0000000..23c9c13 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapProgressBarExample.java @@ -0,0 +1,144 @@ +package com.fractalwrench.androidbootstrap.sample; + +import com.beardedhen.androidbootstrap.BootstrapProgressBar; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; + +import java.util.Random; + +import butterknife.Bind; +import butterknife.OnClick; + +public class BootstrapProgressBarExample extends BaseActivity { + + enum ChangeState { + FIRST(false, false), + SECOND(false, true), + THIRD(true, false), + FOURTH(true, true); + + private final boolean animated; + private final boolean striped; + + ChangeState(boolean animated, boolean striped) { + this.animated = animated; + this.striped = striped; + } + + public ChangeState next() { + switch (this) { + case FIRST: + return SECOND; + case SECOND: + return THIRD; + case THIRD: + return FOURTH; + case FOURTH: + return FIRST; + default: + return FIRST; + } + } + } + + private Random random; + private ChangeState changeState = ChangeState.FIRST; + private DefaultBootstrapSize size = DefaultBootstrapSize.MD; + + @Override protected int getContentLayoutId() { + return R.layout.example_bootstrap_progress_bar; + } + + @Bind(R.id.example_progress_default) BootstrapProgressBar defaultExample; + @Bind(R.id.example_progress_animated) BootstrapProgressBar animatedExample; + @Bind(R.id.example_progress_striped) BootstrapProgressBar stripedExample; + @Bind(R.id.example_progress_striped_animated) BootstrapProgressBar stripedAnimExample; + @Bind(R.id.example_progress_change) BootstrapProgressBar changeExample; + @Bind(R.id.example_size_change) BootstrapProgressBar sizeExample; + + @OnClick(R.id.example_progress_default_btn) void onDefaultClicked() { + defaultExample.setProgress(randomProgress(defaultExample.getProgress())); + } + + @OnClick(R.id.example_progress_animated_btn) void onAnimatedClicked() { + animatedExample.setProgress(randomProgress(animatedExample.getProgress())); + } + + @OnClick(R.id.example_progress_striped_btn) void onStripedClicked() { + stripedExample.setProgress(randomProgress(stripedExample.getProgress())); + } + + @OnClick(R.id.example_progress_striped_animated_btn) void onStripedAnimClicked() { + stripedAnimExample.setProgress(randomProgress(stripedAnimExample.getProgress())); + } + + @OnClick(R.id.example_progress_change_type_btn) void onAlterProgressBarParameters() { + changeState = changeState.next(); + changeExample.setStriped(changeState.striped); + changeExample.setAnimated(changeState.animated); + } + + @OnClick(R.id.example_progress_change_rounded_btn) void onChangeRoundedProgressBar() { + changeExample.setRounded(!changeExample.isRounded()); + } + + @OnClick(R.id.example_progress_change_color_btn) void onAlterProgressBarColor() { + switch ((DefaultBootstrapBrand) changeExample.getBootstrapBrand()) { + case PRIMARY: + changeExample.setBootstrapBrand(DefaultBootstrapBrand.SUCCESS); + break; + case SUCCESS: + changeExample.setBootstrapBrand(DefaultBootstrapBrand.INFO); + break; + case INFO: + changeExample.setBootstrapBrand(DefaultBootstrapBrand.WARNING); + break; + case WARNING: + changeExample.setBootstrapBrand(DefaultBootstrapBrand.DANGER); + break; + case DANGER: + changeExample.setBootstrapBrand(DefaultBootstrapBrand.SECONDARY); + break; + case SECONDARY: + changeExample.setBootstrapBrand(DefaultBootstrapBrand.REGULAR); + case REGULAR: + changeExample.setBootstrapBrand(DefaultBootstrapBrand.PRIMARY); + break; + } + } + + @OnClick(R.id.example_size_change_btn) void onSizeExampleChangeClicked() { + switch (size) { + case XS: + size = DefaultBootstrapSize.SM; + break; + case SM: + size = DefaultBootstrapSize.MD; + break; + case MD: + size = DefaultBootstrapSize.LG; + break; + case LG: + size = DefaultBootstrapSize.XL; + break; + case XL: + size = DefaultBootstrapSize.XS; + break; + } + sizeExample.setBootstrapSize(size); + } + + private int randomProgress(int currentProgress) { + if (random == null) { + random = new Random(); + } + + int prog = currentProgress + random.nextInt(20); + + if (prog > 100) { + prog -= 100; + } + + return prog; + } +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapThumbnailExample.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapThumbnailExample.java new file mode 100644 index 0000000..465a1f2 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/BootstrapThumbnailExample.java @@ -0,0 +1,129 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.widget.LinearLayout; + +import com.beardedhen.androidbootstrap.BootstrapThumbnail; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand; +import com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapSize; + +import butterknife.Bind; +import butterknife.OnClick; + +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.DANGER; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.INFO; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.PRIMARY; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.REGULAR; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.SECONDARY; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.SUCCESS; +import static com.beardedhen.androidbootstrap.api.defaults.DefaultBootstrapBrand.WARNING; + +public class BootstrapThumbnailExample extends BaseActivity { + + private int resId = R.drawable.ladybird; + private DefaultBootstrapSize size = DefaultBootstrapSize.MD; + + @Override protected int getContentLayoutId() { + return R.layout.example_bootstrap_thumbnail; + } + + @Bind(R.id.bthumb_image_change_example) BootstrapThumbnail imageChange; + @Bind(R.id.bthumb_theme_change_example) BootstrapThumbnail themeChange; + @Bind(R.id.bthumb_border_change_example) BootstrapThumbnail borderChange; + @Bind(R.id.bthumb_rounded_change_example) BootstrapThumbnail roundedChange; + @Bind(R.id.bthumb_size_change_example) BootstrapThumbnail sizeChange; + @Bind(R.id.bthumb_set_image_bitmap_example) BootstrapThumbnail setBitmapExample; + @Bind(R.id.bthumb_set_image_drawable_example) BootstrapThumbnail setDrawableExample; + @Bind(R.id.bthumb_set_image_resource_example) BootstrapThumbnail setResourceExample; + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.small_daffodils); + setBitmapExample.setImageBitmap(bm); + + setDrawableExample.setImageDrawable(getResources().getDrawable(R.drawable.ladybird)); + setResourceExample.setImageResource(R.drawable.caterpillar); + sizeChange.setLayoutParams(getLayoutParams(size.scaleFactor())); + } + + private LinearLayout.LayoutParams getLayoutParams(float factor) { + float baselineSize = 300; + float size = baselineSize * factor; + return new LinearLayout.LayoutParams((int)size, (int)size); + } + + @OnClick(R.id.bthumb_theme_change_example) void onThemeChangeExampleClicked() { + switch ((DefaultBootstrapBrand) themeChange.getBootstrapBrand()) { + case PRIMARY: + themeChange.setBootstrapBrand(SUCCESS); + break; + case SUCCESS: + themeChange.setBootstrapBrand(INFO); + break; + case INFO: + themeChange.setBootstrapBrand(WARNING); + break; + case WARNING: + themeChange.setBootstrapBrand(DANGER); + break; + case DANGER: + themeChange.setBootstrapBrand(SECONDARY); + break; + case SECONDARY: + themeChange.setBootstrapBrand(REGULAR); + break; + case REGULAR: + themeChange.setBootstrapBrand(PRIMARY); + break; + } + } + + @OnClick(R.id.bthumb_image_change_example) void onImageChangeExampleClicked() { + switch (resId) { + case R.drawable.ladybird: + resId = R.drawable.caterpillar; + break; + case R.drawable.caterpillar: + resId = 0; + break; + case 0: + resId = R.drawable.ladybird; + break; + } + imageChange.setImageResource(resId); + } + + @OnClick(R.id.bthumb_rounded_change_example) void onRoundedChangeExampleClicked() { + roundedChange.setRounded(!roundedChange.isRounded()); + } + + @OnClick(R.id.bthumb_border_change_example) void onBorderChangeExampleClicked() { + borderChange.setBorderDisplayed(!borderChange.isBorderDisplayed()); + } + + @OnClick(R.id.bthumb_size_change_example) void onSizeChangeExampleClicked() { + switch (size) { + case XS: + size = DefaultBootstrapSize.SM; + break; + case SM: + size = DefaultBootstrapSize.MD; + break; + case MD: + size = DefaultBootstrapSize.LG; + break; + case LG: + size = DefaultBootstrapSize.XL; + break; + case XL: + size = DefaultBootstrapSize.XS; + break; + } + sizeChange.setBootstrapSize(size); + sizeChange.setLayoutParams(getLayoutParams(size.scaleFactor())); + } + +} diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/HomeActivity.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/HomeActivity.java new file mode 100644 index 0000000..6b43fe3 --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/HomeActivity.java @@ -0,0 +1,50 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; + +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class HomeActivity extends AppCompatActivity { + + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + ButterKnife.bind(this); + } + + @OnClick(R.id.example_bootstrap_button) void onBootstrapButtonExampleClicked() { + startActivity(new Intent(this, BootstrapButtonExample.class)); + } + + @OnClick(R.id.example_fontawesometext) void onFontAwesomeTextExampleClicked() { + startActivity(new Intent(this, AwesomeTextViewExample.class)); + } + + @OnClick(R.id.example_bootstrap_label) void onBootstrapLabelExampleClicked() { + startActivity(new Intent(this, BootstrapLabelExample.class)); + } + + @OnClick(R.id.example_bootstrap_progress) void onBootstrapProgressExampleClicked() { + startActivity(new Intent(this, BootstrapProgressBarExample.class)); + } + + @OnClick(R.id.example_bootstrap_btn_group) void onBootstrapButtonGroupExampleClicked() { + startActivity(new Intent(this, BootstrapButtonGroupExample.class)); + } + + @OnClick(R.id.example_bootstrap_cricle_thumbnail) void onBootstrapCircleThumbnailExampleClicked() { + startActivity(new Intent(this, BootstrapCircleThumbnailExample.class)); + } + + @OnClick(R.id.example_bootstrap_edit_text) void onBootstrapEditTextExampleClicked() { + startActivity(new Intent(this, BootstrapEditTextExample.class)); + } + + @OnClick(R.id.example_bootstrap_thumbnail) void onBootstrapThumbnailExampleClicked() { + startActivity(new Intent(this, BootstrapThumbnailExample.class)); + } + +} \ No newline at end of file diff --git a/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/SampleApplication.java b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/SampleApplication.java new file mode 100644 index 0000000..09c1e7e --- /dev/null +++ b/sample/src/main/java/com/fractalwrench/androidbootstrap/sample/SampleApplication.java @@ -0,0 +1,19 @@ +package com.fractalwrench.androidbootstrap.sample; + +import android.app.Application; + +import com.beardedhen.androidbootstrap.TypefaceProvider; + +/** + * A custom application class, which performs setup of the Typefaces used as Icon Sets. + */ +public class SampleApplication extends Application { + + @Override public void onCreate() { + super.onCreate(); + + // setup default typefaces + TypefaceProvider.registerDefaultIconSets(); + } + +} diff --git a/sample/src/main/res/drawable/alpha.png b/sample/src/main/res/drawable/alpha.png new file mode 100644 index 0000000..627552e Binary files /dev/null and b/sample/src/main/res/drawable/alpha.png differ diff --git a/sample/src/main/res/drawable/author.jpeg b/sample/src/main/res/drawable/author.jpeg new file mode 100644 index 0000000..2590f66 Binary files /dev/null and b/sample/src/main/res/drawable/author.jpeg differ diff --git a/sample/src/main/res/drawable/author_small.jpeg b/sample/src/main/res/drawable/author_small.jpeg new file mode 100644 index 0000000..96aa20e Binary files /dev/null and b/sample/src/main/res/drawable/author_small.jpeg differ diff --git a/sample/src/main/res/drawable/caterpillar.jpg b/sample/src/main/res/drawable/caterpillar.jpg new file mode 100644 index 0000000..d44b36f Binary files /dev/null and b/sample/src/main/res/drawable/caterpillar.jpg differ diff --git a/sample/src/main/res/drawable/daffodil_large.jpg b/sample/src/main/res/drawable/daffodil_large.jpg new file mode 100644 index 0000000..94c236c Binary files /dev/null and b/sample/src/main/res/drawable/daffodil_large.jpg differ diff --git a/sample/src/main/res/drawable/flower.jpg b/sample/src/main/res/drawable/flower.jpg new file mode 100644 index 0000000..c17b25b Binary files /dev/null and b/sample/src/main/res/drawable/flower.jpg differ diff --git a/sample/src/main/res/drawable/ladybird.jpg b/sample/src/main/res/drawable/ladybird.jpg new file mode 100644 index 0000000..6e28ea7 Binary files /dev/null and b/sample/src/main/res/drawable/ladybird.jpg differ diff --git a/sample/src/main/res/drawable/landscape_image.png b/sample/src/main/res/drawable/landscape_image.png new file mode 100644 index 0000000..d9ddb67 Binary files /dev/null and b/sample/src/main/res/drawable/landscape_image.png differ diff --git a/sample/src/main/res/drawable/perfect_square.png b/sample/src/main/res/drawable/perfect_square.png new file mode 100644 index 0000000..f349f0e Binary files /dev/null and b/sample/src/main/res/drawable/perfect_square.png differ diff --git a/sample/src/main/res/drawable/portrait_image.png b/sample/src/main/res/drawable/portrait_image.png new file mode 100644 index 0000000..0ad249b Binary files /dev/null and b/sample/src/main/res/drawable/portrait_image.png differ diff --git a/sample/src/main/res/drawable/small_daffodils.jpeg b/sample/src/main/res/drawable/small_daffodils.jpeg new file mode 100644 index 0000000..257fbd2 Binary files /dev/null and b/sample/src/main/res/drawable/small_daffodils.jpeg differ diff --git a/sample/src/main/res/drawable/stars.jpg b/sample/src/main/res/drawable/stars.jpg new file mode 100644 index 0000000..73d61ab Binary files /dev/null and b/sample/src/main/res/drawable/stars.jpg differ diff --git a/sample/src/main/res/layout/activity_base.xml b/sample/src/main/res/layout/activity_base.xml new file mode 100644 index 0000000..711aaf4 --- /dev/null +++ b/sample/src/main/res/layout/activity_base.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..be39fdc --- /dev/null +++ b/sample/src/main/res/layout/activity_main.xml @@ -0,0 +1,65 @@ + + + + + + +