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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_awesome_text_view.xml b/sample/src/main/res/layout/example_awesome_text_view.xml
new file mode 100644
index 0000000..08b847e
--- /dev/null
+++ b/sample/src/main/res/layout/example_awesome_text_view.xml
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_bootstrap_button.xml b/sample/src/main/res/layout/example_bootstrap_button.xml
new file mode 100644
index 0000000..77348f3
--- /dev/null
+++ b/sample/src/main/res/layout/example_bootstrap_button.xml
@@ -0,0 +1,512 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_bootstrap_button_group.xml b/sample/src/main/res/layout/example_bootstrap_button_group.xml
new file mode 100644
index 0000000..b656d80
--- /dev/null
+++ b/sample/src/main/res/layout/example_bootstrap_button_group.xml
@@ -0,0 +1,403 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_bootstrap_circle_thumbnail.xml b/sample/src/main/res/layout/example_bootstrap_circle_thumbnail.xml
new file mode 100644
index 0000000..725fcbb
--- /dev/null
+++ b/sample/src/main/res/layout/example_bootstrap_circle_thumbnail.xml
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_bootstrap_edit_text_view.xml b/sample/src/main/res/layout/example_bootstrap_edit_text_view.xml
new file mode 100644
index 0000000..776385f
--- /dev/null
+++ b/sample/src/main/res/layout/example_bootstrap_edit_text_view.xml
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_bootstrap_label.xml b/sample/src/main/res/layout/example_bootstrap_label.xml
new file mode 100644
index 0000000..5bae3f4
--- /dev/null
+++ b/sample/src/main/res/layout/example_bootstrap_label.xml
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_bootstrap_progress_bar.xml b/sample/src/main/res/layout/example_bootstrap_progress_bar.xml
new file mode 100644
index 0000000..f2d1ead
--- /dev/null
+++ b/sample/src/main/res/layout/example_bootstrap_progress_bar.xml
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/example_bootstrap_thumbnail.xml b/sample/src/main/res/layout/example_bootstrap_thumbnail.xml
new file mode 100644
index 0000000..3f6154c
--- /dev/null
+++ b/sample/src/main/res/layout/example_bootstrap_thumbnail.xml
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/mipmap-hdpi/ic_launcher.png b/sample/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100755
index 0000000..688cfe0
Binary files /dev/null and b/sample/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/mipmap-mdpi/ic_launcher.png b/sample/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100755
index 0000000..67d5fb5
Binary files /dev/null and b/sample/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/mipmap-xhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..b47e541
Binary files /dev/null and b/sample/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..89e90aa
Binary files /dev/null and b/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100755
index 0000000..65f1fc1
Binary files /dev/null and b/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/sample/src/main/res/values/colors.xml b/sample/src/main/res/values/colors.xml
new file mode 100644
index 0000000..799b1ef
--- /dev/null
+++ b/sample/src/main/res/values/colors.xml
@@ -0,0 +1,11 @@
+
+
+
+ #33bbaa
+ #119999
+ #119999
+ #008888
+ #8833bbaa
+ #bb33bbaa
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/values/dimens.xml b/sample/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..acf733e
--- /dev/null
+++ b/sample/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+
+ 16dp
+ 4dp
+ 250dp
+
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
new file mode 100644
index 0000000..14edf15
--- /dev/null
+++ b/sample/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Android Bootstrap
+
diff --git a/sample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml
new file mode 100644
index 0000000..409fa97
--- /dev/null
+++ b/sample/src/main/res/values/styles.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/settings.gradle b/settings.gradle
index cdc16ee..b6977f1 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':AndroidBootstrap'
+include ':AndroidBootstrap', ':sample'