{
sign(publishing.publications.getByName("release"))
}
project.extra.set("signing.keyId", "1131CBA5")
project.extra.set("signing.password", passphrase)
project.extra.set("signing.secretKeyRingFile", "${project.rootProject.rootDir}/.buildsystem/secring.gpg")
}
}
================================================
FILE: android-material-icons/src/main/AndroidManifest.xml
================================================
================================================
FILE: android-material-icons/src/main/java/com/malinskiy/materialicons/IconDrawable.java
================================================
package com.malinskiy.materialicons;
import android.content.Context;
import android.graphics.*;
import android.graphics.drawable.Drawable;
import android.text.TextPaint;
import static java.lang.String.valueOf;
/**
* Embed an icon into a Drawable that can be used as TextView icons, or ActionBar icons.
*
*
* new IconDrawable(context, IconValue.icon_star)
* .colorRes(R.color.white)
* .actionBarSize();
*
* If you don't set the size of the drawable, it will use the size
* that is given to him. Note that in an ActionBar, if you don't
* set the size explicitly it uses 0, so please use actionBarSize().
*/
public class IconDrawable extends Drawable {
public static final int ANDROID_ACTIONBAR_ICON_SIZE_DP = 24;
private final Context context;
private final Iconify.IconValue icon;
private TextPaint paint;
private int size = -1;
private int alpha = 255;
/**
* Create an IconDrawable.
*
* @param context Your activity or application context.
* @param icon The icon you want this drawable to display.
*/
public IconDrawable(Context context, Iconify.IconValue icon) {
this.context = context;
this.icon = icon;
paint = new TextPaint();
paint.setTypeface(Iconify.getTypeface(context));
paint.setStyle(Paint.Style.STROKE);
paint.setTextAlign(Paint.Align.CENTER);
paint.setUnderlineText(false);
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
}
/**
* Set the size of this icon to the standard Android ActionBar.
*
* @return The current IconDrawable for chaining.
*/
public IconDrawable actionBarSize() {
return sizeDp(ANDROID_ACTIONBAR_ICON_SIZE_DP);
}
/**
* Set the size of the drawable.
*
* @param dimenRes The dimension resource.
* @return The current IconDrawable for chaining.
*/
public IconDrawable sizeRes(int dimenRes) {
return sizePx(context.getResources().getDimensionPixelSize(dimenRes));
}
/**
* Set the size of the drawable.
*
* @param size The size in density-independent pixels (dp).
* @return The current IconDrawable for chaining.
*/
public IconDrawable sizeDp(int size) {
return sizePx(Utils.convertDpToPx(context, size));
}
/**
* Set the size of the drawable.
*
* @param size The size in pixels (px).
* @return The current IconDrawable for chaining.
*/
public IconDrawable sizePx(int size) {
this.size = size;
setBounds(0, 0, size, size);
invalidateSelf();
return this;
}
/**
* Set the color of the drawable.
*
* @param color The color, usually from android.graphics.Color or 0xFF012345.
* @return The current IconDrawable for chaining.
*/
public IconDrawable color(int color) {
paint.setColor(color);
invalidateSelf();
return this;
}
/**
* Set the color of the drawable.
*
* @param colorRes The color resource, from your R file.
* @return The current IconDrawable for chaining.
*/
public IconDrawable colorRes(int colorRes) {
paint.setColor(context.getResources().getColor(colorRes));
invalidateSelf();
return this;
}
/**
* Set the alpha of this drawable.
*
* @param alpha The alpha, between 0 (transparent) and 255 (opaque).
* @return The current IconDrawable for chaining.
*/
public IconDrawable alpha(int alpha) {
setAlpha(alpha);
invalidateSelf();
return this;
}
@Override
public int getIntrinsicHeight() {
return size;
}
@Override
public int getIntrinsicWidth() {
return size;
}
@Override
public void draw(Canvas canvas) {
paint.setTextSize(getBounds().height());
Rect textBounds = new Rect();
String textValue = valueOf(icon.character);
paint.getTextBounds(textValue, 0, 1, textBounds);
float textBottom = (getBounds().height() - textBounds.height()) / 2f + textBounds.height() - textBounds.bottom;
canvas.drawText(textValue, getBounds().width() / 2f, textBottom, paint);
}
@Override
public boolean isStateful() {
return true;
}
@Override
public boolean setState(int[] stateSet) {
int oldValue = paint.getAlpha();
int newValue = Utils.isEnabled(stateSet) ? alpha : alpha / 2;
paint.setAlpha(newValue);
return oldValue != newValue;
}
@Override
public void setAlpha(int alpha) {
this.alpha = alpha;
paint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter cf) {
paint.setColorFilter(cf);
}
@Override
public void clearColorFilter() {
paint.setColorFilter(null);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
/**
* Sets paint style.
*
* @param style to be applied
*/
public void setStyle(Paint.Style style) {
paint.setStyle(style);
}
}
================================================
FILE: android-material-icons/src/main/java/com/malinskiy/materialicons/Iconify.java
================================================
package com.malinskiy.materialicons;
import android.content.Context;
import android.graphics.Typeface;
import android.text.Spanned;
import android.widget.TextView;
import java.io.File;
import java.io.IOException;
import static android.text.Html.fromHtml;
import static android.text.Html.toHtml;
import static java.lang.String.valueOf;
public final class Iconify {
private static final String TTF_FILE = "material-design-iconic-font-2.2.0.ttf";
public static final String TAG = Iconify.class.getSimpleName();
private static Typeface typeface = null;
private Iconify() {
// Prevent instantiation
}
/**
* Transform the given TextViews replacing {icon_xxx} texts with icons.
*/
public static final void addIcons(TextView... textViews) {
for (TextView textView : textViews) {
textView.setTypeface(getTypeface(textView.getContext()));
textView.setText(compute(textView.getText()));
}
}
public static void addIconsEditMode(TextView... textViews) {
for (TextView textView : textViews) {
textView.setTypeface(getTypefaceEditMode());
textView.setText(compute(textView.getText()));
}
}
public static CharSequence compute(CharSequence charSequence) {
if (charSequence instanceof Spanned) {
String text = toHtml((Spanned) charSequence);
return fromHtml(Utils.replaceIcons(new StringBuilder((text))).toString());
}
String text = charSequence.toString();
return Utils.replaceIcons(new StringBuilder(text));
}
public static final void setIcon(TextView textView, IconValue value) {
textView.setTypeface(getTypeface(textView.getContext()));
textView.setText(valueOf(value.character));
}
/**
* The typeface that contains FontAwesome icons.
*
* @return the typeface, or null if something goes wrong.
*/
public static final Typeface getTypeface(Context context) {
if (typeface == null) {
try {
typeface = Typeface.createFromFile(Utils.resourceToFile(context, TTF_FILE));
} catch (IOException e) {
return null;
}
}
return typeface;
}
private static Typeface getTypefaceEditMode() {
if (typeface == null) {
File file = new File("/system/fonts/" + TTF_FILE);
typeface = Typeface.createFromFile(file);
}
return typeface;
}
public static enum IconValue {
zmdi_3d_rotation('\uf101'),
zmdi_airplane_off('\uf102'),
zmdi_airplane('\uf103'),
zmdi_album('\uf104'),
zmdi_archive('\uf105'),
zmdi_assignment_account('\uf106'),
zmdi_assignment_alert('\uf107'),
zmdi_assignment_check('\uf108'),
zmdi_assignment_o('\uf109'),
zmdi_assignment_return('\uf10a'),
zmdi_assignment_returned('\uf10b'),
zmdi_assignment('\uf10c'),
zmdi_attachment_alt('\uf10d'),
zmdi_attachment('\uf10e'),
zmdi_audio('\uf10f'),
zmdi_badge_check('\uf110'),
zmdi_balance_wallet('\uf111'),
zmdi_balance('\uf112'),
zmdi_battery_alert('\uf113'),
zmdi_battery_flash('\uf114'),
zmdi_battery_unknown('\uf115'),
zmdi_battery('\uf116'),
zmdi_bike('\uf117'),
zmdi_block_alt('\uf118'),
zmdi_block('\uf119'),
zmdi_boat('\uf11a'),
zmdi_book_image('\uf11b'),
zmdi_book('\uf11c'),
zmdi_bookmark_outline('\uf11d'),
zmdi_bookmark('\uf11e'),
zmdi_brush('\uf11f'),
zmdi_bug('\uf120'),
zmdi_bus('\uf121'),
zmdi_cake('\uf122'),
zmdi_car_taxi('\uf123'),
zmdi_car_wash('\uf124'),
zmdi_car('\uf125'),
zmdi_card_giftcard('\uf126'),
zmdi_card_membership('\uf127'),
zmdi_card_travel('\uf128'),
zmdi_card('\uf129'),
zmdi_case_check('\uf12a'),
zmdi_case_download('\uf12b'),
zmdi_case_play('\uf12c'),
zmdi_case('\uf12d'),
zmdi_cast_connected('\uf12e'),
zmdi_cast('\uf12f'),
zmdi_chart_donut('\uf130'),
zmdi_chart('\uf131'),
zmdi_city_alt('\uf132'),
zmdi_city('\uf133'),
zmdi_close_circle_o('\uf134'),
zmdi_close_circle('\uf135'),
zmdi_close('\uf136'),
zmdi_cocktail('\uf137'),
zmdi_code_setting('\uf138'),
zmdi_code_smartphone('\uf139'),
zmdi_code('\uf13a'),
zmdi_coffee('\uf13b'),
zmdi_collection_bookmark('\uf13c'),
zmdi_collection_case_play('\uf13d'),
zmdi_collection_folder_image('\uf13e'),
zmdi_collection_image_o('\uf13f'),
zmdi_collection_image('\uf140'),
zmdi_collection_item_1('\uf141'),
zmdi_collection_item_2('\uf142'),
zmdi_collection_item_3('\uf143'),
zmdi_collection_item_4('\uf144'),
zmdi_collection_item_5('\uf145'),
zmdi_collection_item_6('\uf146'),
zmdi_collection_item_7('\uf147'),
zmdi_collection_item_8('\uf148'),
zmdi_collection_item_9_plus('\uf149'),
zmdi_collection_item_9('\uf14a'),
zmdi_collection_item('\uf14b'),
zmdi_collection_music('\uf14c'),
zmdi_collection_pdf('\uf14d'),
zmdi_collection_plus('\uf14e'),
zmdi_collection_speaker('\uf14f'),
zmdi_collection_text('\uf150'),
zmdi_collection_video('\uf151'),
zmdi_compass('\uf152'),
zmdi_cutlery('\uf153'),
zmdi_delete('\uf154'),
zmdi_dialpad('\uf155'),
zmdi_dns('\uf156'),
zmdi_drink('\uf157'),
zmdi_edit('\uf158'),
zmdi_email_open('\uf159'),
zmdi_email('\uf15a'),
zmdi_eye_off('\uf15b'),
zmdi_eye('\uf15c'),
zmdi_eyedropper('\uf15d'),
zmdi_favorite_outline('\uf15e'),
zmdi_favorite('\uf15f'),
zmdi_filter_list('\uf160'),
zmdi_fire('\uf161'),
zmdi_flag('\uf162'),
zmdi_flare('\uf163'),
zmdi_flash_auto('\uf164'),
zmdi_flash_off('\uf165'),
zmdi_flash('\uf166'),
zmdi_flip('\uf167'),
zmdi_flower_alt('\uf168'),
zmdi_flower('\uf169'),
zmdi_font('\uf16a'),
zmdi_fullscreen_alt('\uf16b'),
zmdi_fullscreen_exit('\uf16c'),
zmdi_fullscreen('\uf16d'),
zmdi_functions('\uf16e'),
zmdi_gas_station('\uf16f'),
zmdi_gesture('\uf170'),
zmdi_globe_alt('\uf171'),
zmdi_globe_lock('\uf172'),
zmdi_globe('\uf173'),
zmdi_graduation_cap('\uf174'),
zmdi_home('\uf175'),
zmdi_hospital_alt('\uf176'),
zmdi_hospital('\uf177'),
zmdi_hotel('\uf178'),
zmdi_hourglass_alt('\uf179'),
zmdi_hourglass_outline('\uf17a'),
zmdi_hourglass('\uf17b'),
zmdi_http('\uf17c'),
zmdi_image_alt('\uf17d'),
zmdi_image_o('\uf17e'),
zmdi_image('\uf17f'),
zmdi_inbox('\uf180'),
zmdi_invert_colors_off('\uf181'),
zmdi_invert_colors('\uf182'),
zmdi_key('\uf183'),
zmdi_label_alt_outline('\uf184'),
zmdi_label_alt('\uf185'),
zmdi_label_heart('\uf186'),
zmdi_label('\uf187'),
zmdi_labels('\uf188'),
zmdi_lamp('\uf189'),
zmdi_landscape('\uf18a'),
zmdi_layers_off('\uf18b'),
zmdi_layers('\uf18c'),
zmdi_library('\uf18d'),
zmdi_link('\uf18e'),
zmdi_lock_open('\uf18f'),
zmdi_lock_outline('\uf190'),
zmdi_lock('\uf191'),
zmdi_mail_reply_all('\uf192'),
zmdi_mail_reply('\uf193'),
zmdi_mail_send('\uf194'),
zmdi_mall('\uf195'),
zmdi_map('\uf196'),
zmdi_menu('\uf197'),
zmdi_money_box('\uf198'),
zmdi_money_off('\uf199'),
zmdi_money('\uf19a'),
zmdi_more_vert('\uf19b'),
zmdi_more('\uf19c'),
zmdi_movie_alt('\uf19d'),
zmdi_movie('\uf19e'),
zmdi_nature_people('\uf19f'),
zmdi_nature('\uf1a0'),
zmdi_navigation('\uf1a1'),
zmdi_open_in_browser('\uf1a2'),
zmdi_open_in_new('\uf1a3'),
zmdi_palette('\uf1a4'),
zmdi_parking('\uf1a5'),
zmdi_pin_account('\uf1a6'),
zmdi_pin_assistant('\uf1a7'),
zmdi_pin_drop('\uf1a8'),
zmdi_pin_help('\uf1a9'),
zmdi_pin_off('\uf1aa'),
zmdi_pin('\uf1ab'),
zmdi_pizza('\uf1ac'),
zmdi_plaster('\uf1ad'),
zmdi_power_setting('\uf1ae'),
zmdi_power('\uf1af'),
zmdi_print('\uf1b0'),
zmdi_puzzle_piece('\uf1b1'),
zmdi_quote('\uf1b2'),
zmdi_railway('\uf1b3'),
zmdi_receipt('\uf1b4'),
zmdi_refresh_alt('\uf1b5'),
zmdi_refresh_sync_alert('\uf1b6'),
zmdi_refresh_sync_off('\uf1b7'),
zmdi_refresh_sync('\uf1b8'),
zmdi_refresh('\uf1b9'),
zmdi_roller('\uf1ba'),
zmdi_ruler('\uf1bb'),
zmdi_scissors('\uf1bc'),
zmdi_screen_rotation_lock('\uf1bd'),
zmdi_screen_rotation('\uf1be'),
zmdi_search_for('\uf1bf'),
zmdi_search_in_file('\uf1c0'),
zmdi_search_in_page('\uf1c1'),
zmdi_search_replace('\uf1c2'),
zmdi_search('\uf1c3'),
zmdi_seat('\uf1c4'),
zmdi_settings_square('\uf1c5'),
zmdi_settings('\uf1c6'),
zmdi_shield_check('\uf1c7'),
zmdi_shield_security('\uf1c8'),
zmdi_shopping_basket('\uf1c9'),
zmdi_shopping_cart_plus('\uf1ca'),
zmdi_shopping_cart('\uf1cb'),
zmdi_sign_in('\uf1cc'),
zmdi_sort_amount_asc('\uf1cd'),
zmdi_sort_amount_desc('\uf1ce'),
zmdi_sort_asc('\uf1cf'),
zmdi_sort_desc('\uf1d0'),
zmdi_spellcheck('\uf1d1'),
zmdi_storage('\uf1d2'),
zmdi_store_24('\uf1d3'),
zmdi_store('\uf1d4'),
zmdi_subway('\uf1d5'),
zmdi_sun('\uf1d6'),
zmdi_tab_unselected('\uf1d7'),
zmdi_tab('\uf1d8'),
zmdi_tag_close('\uf1d9'),
zmdi_tag_more('\uf1da'),
zmdi_tag('\uf1db'),
zmdi_thumb_down('\uf1dc'),
zmdi_thumb_up_down('\uf1dd'),
zmdi_thumb_up('\uf1de'),
zmdi_ticket_star('\uf1df'),
zmdi_toll('\uf1e0'),
zmdi_toys('\uf1e1'),
zmdi_traffic('\uf1e2'),
zmdi_translate('\uf1e3'),
zmdi_triangle_down('\uf1e4'),
zmdi_triangle_up('\uf1e5'),
zmdi_truck('\uf1e6'),
zmdi_turning_sign('\uf1e7'),
zmdi_wallpaper('\uf1e8'),
zmdi_washing_machine('\uf1e9'),
zmdi_window_maximize('\uf1ea'),
zmdi_window_minimize('\uf1eb'),
zmdi_window_restore('\uf1ec'),
zmdi_wrench('\uf1ed'),
zmdi_zoom_in('\uf1ee'),
zmdi_zoom_out('\uf1ef'),
zmdi_alert_circle_o('\uf1f0'),
zmdi_alert_circle('\uf1f1'),
zmdi_alert_octagon('\uf1f2'),
zmdi_alert_polygon('\uf1f3'),
zmdi_alert_triangle('\uf1f4'),
zmdi_help_outline('\uf1f5'),
zmdi_help('\uf1f6'),
zmdi_info_outline('\uf1f7'),
zmdi_info('\uf1f8'),
zmdi_notifications_active('\uf1f9'),
zmdi_notifications_add('\uf1fa'),
zmdi_notifications_none('\uf1fb'),
zmdi_notifications_off('\uf1fc'),
zmdi_notifications_paused('\uf1fd'),
zmdi_notifications('\uf1fe'),
zmdi_account_add('\uf1ff'),
zmdi_account_box_mail('\uf200'),
zmdi_account_box_o('\uf201'),
zmdi_account_box_phone('\uf202'),
zmdi_account_box('\uf203'),
zmdi_account_calendar('\uf204'),
zmdi_account_circle('\uf205'),
zmdi_account_o('\uf206'),
zmdi_account('\uf207'),
zmdi_accounts_add('\uf208'),
zmdi_accounts_alt('\uf209'),
zmdi_accounts_list_alt('\uf20a'),
zmdi_accounts_list('\uf20b'),
zmdi_accounts_outline('\uf20c'),
zmdi_accounts('\uf20d'),
zmdi_face('\uf20e'),
zmdi_female('\uf20f'),
zmdi_male_alt('\uf210'),
zmdi_male_female('\uf211'),
zmdi_male('\uf212'),
zmdi_mood_bad('\uf213'),
zmdi_mood('\uf214'),
zmdi_run('\uf215'),
zmdi_walk('\uf216'),
zmdi_cloud_box('\uf217'),
zmdi_cloud_circle('\uf218'),
zmdi_cloud_done('\uf219'),
zmdi_cloud_download('\uf21a'),
zmdi_cloud_off('\uf21b'),
zmdi_cloud_outline_alt('\uf21c'),
zmdi_cloud_outline('\uf21d'),
zmdi_cloud_upload('\uf21e'),
zmdi_cloud('\uf21f'),
zmdi_download('\uf220'),
zmdi_file_plus('\uf221'),
zmdi_file_text('\uf222'),
zmdi_file('\uf223'),
zmdi_folder_outline('\uf224'),
zmdi_folder_person('\uf225'),
zmdi_folder_star_alt('\uf226'),
zmdi_folder_star('\uf227'),
zmdi_folder('\uf228'),
zmdi_gif('\uf229'),
zmdi_upload('\uf22a'),
zmdi_border_all('\uf22b'),
zmdi_border_bottom('\uf22c'),
zmdi_border_clear('\uf22d'),
zmdi_border_color('\uf22e'),
zmdi_border_horizontal('\uf22f'),
zmdi_border_inner('\uf230'),
zmdi_border_left('\uf231'),
zmdi_border_outer('\uf232'),
zmdi_border_right('\uf233'),
zmdi_border_style('\uf234'),
zmdi_border_top('\uf235'),
zmdi_border_vertical('\uf236'),
zmdi_copy('\uf237'),
zmdi_crop('\uf238'),
zmdi_format_align_center('\uf239'),
zmdi_format_align_justify('\uf23a'),
zmdi_format_align_left('\uf23b'),
zmdi_format_align_right('\uf23c'),
zmdi_format_bold('\uf23d'),
zmdi_format_clear_all('\uf23e'),
zmdi_format_clear('\uf23f'),
zmdi_format_color_fill('\uf240'),
zmdi_format_color_reset('\uf241'),
zmdi_format_color_text('\uf242'),
zmdi_format_indent_decrease('\uf243'),
zmdi_format_indent_increase('\uf244'),
zmdi_format_italic('\uf245'),
zmdi_format_line_spacing('\uf246'),
zmdi_format_list_bulleted('\uf247'),
zmdi_format_list_numbered('\uf248'),
zmdi_format_ltr('\uf249'),
zmdi_format_rtl('\uf24a'),
zmdi_format_size('\uf24b'),
zmdi_format_strikethrough_s('\uf24c'),
zmdi_format_strikethrough('\uf24d'),
zmdi_format_subject('\uf24e'),
zmdi_format_underlined('\uf24f'),
zmdi_format_valign_bottom('\uf250'),
zmdi_format_valign_center('\uf251'),
zmdi_format_valign_top('\uf252'),
zmdi_redo('\uf253'),
zmdi_select_all('\uf254'),
zmdi_space_bar('\uf255'),
zmdi_text_format('\uf256'),
zmdi_transform('\uf257'),
zmdi_undo('\uf258'),
zmdi_wrap_text('\uf259'),
zmdi_comment_alert('\uf25a'),
zmdi_comment_alt_text('\uf25b'),
zmdi_comment_alt('\uf25c'),
zmdi_comment_edit('\uf25d'),
zmdi_comment_image('\uf25e'),
zmdi_comment_list('\uf25f'),
zmdi_comment_more('\uf260'),
zmdi_comment_outline('\uf261'),
zmdi_comment_text_alt('\uf262'),
zmdi_comment_text('\uf263'),
zmdi_comment_video('\uf264'),
zmdi_comment('\uf265'),
zmdi_comments('\uf266'),
zmdi_check_all('\uf267'),
zmdi_check_circle_u('\uf268'),
zmdi_check_circle('\uf269'),
zmdi_check_square('\uf26a'),
zmdi_check('\uf26b'),
zmdi_circle_o('\uf26c'),
zmdi_circle('\uf26d'),
zmdi_dot_circle_alt('\uf26e'),
zmdi_dot_circle('\uf26f'),
zmdi_minus_circle_outline('\uf270'),
zmdi_minus_circle('\uf271'),
zmdi_minus_square('\uf272'),
zmdi_minus('\uf273'),
zmdi_plus_circle_o_duplicate('\uf274'),
zmdi_plus_circle_o('\uf275'),
zmdi_plus_circle('\uf276'),
zmdi_plus_square('\uf277'),
zmdi_plus('\uf278'),
zmdi_square_o('\uf279'),
zmdi_star_circle('\uf27a'),
zmdi_star_half('\uf27b'),
zmdi_star_outline('\uf27c'),
zmdi_star('\uf27d'),
zmdi_bluetooth_connected('\uf27e'),
zmdi_bluetooth_off('\uf27f'),
zmdi_bluetooth_search('\uf280'),
zmdi_bluetooth_setting('\uf281'),
zmdi_bluetooth('\uf282'),
zmdi_camera_add('\uf283'),
zmdi_camera_alt('\uf284'),
zmdi_camera_bw('\uf285'),
zmdi_camera_front('\uf286'),
zmdi_camera_mic('\uf287'),
zmdi_camera_party_mode('\uf288'),
zmdi_camera_rear('\uf289'),
zmdi_camera_roll('\uf28a'),
zmdi_camera_switch('\uf28b'),
zmdi_camera('\uf28c'),
zmdi_card_alert('\uf28d'),
zmdi_card_off('\uf28e'),
zmdi_card_sd('\uf28f'),
zmdi_card_sim('\uf290'),
zmdi_desktop_mac('\uf291'),
zmdi_desktop_windows('\uf292'),
zmdi_device_hub('\uf293'),
zmdi_devices_off('\uf294'),
zmdi_devices('\uf295'),
zmdi_dock('\uf296'),
zmdi_floppy('\uf297'),
zmdi_gamepad('\uf298'),
zmdi_gps_dot('\uf299'),
zmdi_gps_off('\uf29a'),
zmdi_gps('\uf29b'),
zmdi_headset_mic('\uf29c'),
zmdi_headset('\uf29d'),
zmdi_input_antenna('\uf29e'),
zmdi_input_composite('\uf29f'),
zmdi_input_hdmi('\uf2a0'),
zmdi_input_power('\uf2a1'),
zmdi_input_svideo('\uf2a2'),
zmdi_keyboard_hide('\uf2a3'),
zmdi_keyboard('\uf2a4'),
zmdi_laptop_chromebook('\uf2a5'),
zmdi_laptop_mac('\uf2a6'),
zmdi_laptop('\uf2a7'),
zmdi_mic_off('\uf2a8'),
zmdi_mic_outline('\uf2a9'),
zmdi_mic_setting('\uf2aa'),
zmdi_mic('\uf2ab'),
zmdi_mouse('\uf2ac'),
zmdi_network_alert('\uf2ad'),
zmdi_network_locked('\uf2ae'),
zmdi_network_off('\uf2af'),
zmdi_network_outline('\uf2b0'),
zmdi_network_setting('\uf2b1'),
zmdi_network('\uf2b2'),
zmdi_phone_bluetooth('\uf2b3'),
zmdi_phone_end('\uf2b4'),
zmdi_phone_forwarded('\uf2b5'),
zmdi_phone_in_talk('\uf2b6'),
zmdi_phone_locked('\uf2b7'),
zmdi_phone_missed('\uf2b8'),
zmdi_phone_msg('\uf2b9'),
zmdi_phone_paused('\uf2ba'),
zmdi_phone_ring('\uf2bb'),
zmdi_phone_setting('\uf2bc'),
zmdi_phone_sip('\uf2bd'),
zmdi_phone('\uf2be'),
zmdi_portable_wifi_changes('\uf2bf'),
zmdi_portable_wifi_off('\uf2c0'),
zmdi_portable_wifi('\uf2c1'),
zmdi_radio('\uf2c2'),
zmdi_reader('\uf2c3'),
zmdi_remote_control_alt('\uf2c4'),
zmdi_remote_control('\uf2c5'),
zmdi_router('\uf2c6'),
zmdi_scanner('\uf2c7'),
zmdi_smartphone_android('\uf2c8'),
zmdi_smartphone_download('\uf2c9'),
zmdi_smartphone_erase('\uf2ca'),
zmdi_smartphone_info('\uf2cb'),
zmdi_smartphone_iphone('\uf2cc'),
zmdi_smartphone_landscape_lock('\uf2cd'),
zmdi_smartphone_landscape('\uf2ce'),
zmdi_smartphone_lock('\uf2cf'),
zmdi_smartphone_portrait_lock('\uf2d0'),
zmdi_smartphone_ring('\uf2d1'),
zmdi_smartphone_setting('\uf2d2'),
zmdi_smartphone_setup('\uf2d3'),
zmdi_smartphone('\uf2d4'),
zmdi_speaker('\uf2d5'),
zmdi_tablet_android('\uf2d6'),
zmdi_tablet_mac('\uf2d7'),
zmdi_tablet('\uf2d8'),
zmdi_tv_alt_play('\uf2d9'),
zmdi_tv_list('\uf2da'),
zmdi_tv_play('\uf2db'),
zmdi_tv('\uf2dc'),
zmdi_usb('\uf2dd'),
zmdi_videocam_off('\uf2de'),
zmdi_videocam_switch('\uf2df'),
zmdi_videocam('\uf2e0'),
zmdi_watch('\uf2e1'),
zmdi_wifi_alt_2('\uf2e2'),
zmdi_wifi_alt('\uf2e3'),
zmdi_wifi_info('\uf2e4'),
zmdi_wifi_lock('\uf2e5'),
zmdi_wifi_off('\uf2e6'),
zmdi_wifi_outline('\uf2e7'),
zmdi_wifi('\uf2e8'),
zmdi_arrow_left_bottom('\uf2e9'),
zmdi_arrow_left('\uf2ea'),
zmdi_arrow_merge('\uf2eb'),
zmdi_arrow_missed('\uf2ec'),
zmdi_arrow_right_top('\uf2ed'),
zmdi_arrow_right('\uf2ee'),
zmdi_arrow_split('\uf2ef'),
zmdi_arrows('\uf2f0'),
zmdi_caret_down_circle('\uf2f1'),
zmdi_caret_down('\uf2f2'),
zmdi_caret_left_circle('\uf2f3'),
zmdi_caret_left('\uf2f4'),
zmdi_caret_right_circle('\uf2f5'),
zmdi_caret_right('\uf2f6'),
zmdi_caret_up_circle('\uf2f7'),
zmdi_caret_up('\uf2f8'),
zmdi_chevron_down('\uf2f9'),
zmdi_chevron_left('\uf2fa'),
zmdi_chevron_right('\uf2fb'),
zmdi_chevron_up('\uf2fc'),
zmdi_forward('\uf2fd'),
zmdi_long_arrow_down('\uf2fe'),
zmdi_long_arrow_left('\uf2ff'),
zmdi_long_arrow_return('\uf300'),
zmdi_long_arrow_right('\uf301'),
zmdi_long_arrow_tab('\uf302'),
zmdi_long_arrow_up('\uf303'),
zmdi_rotate_ccw('\uf304'),
zmdi_rotate_cw('\uf305'),
zmdi_rotate_left('\uf306'),
zmdi_rotate_right('\uf307'),
zmdi_square_down('\uf308'),
zmdi_square_right('\uf309'),
zmdi_swap_alt('\uf30a'),
zmdi_swap_vertical_circle('\uf30b'),
zmdi_swap_vertical('\uf30c'),
zmdi_swap('\uf30d'),
zmdi_trending_down('\uf30e'),
zmdi_trending_flat('\uf30f'),
zmdi_trending_up('\uf310'),
zmdi_unfold_less('\uf311'),
zmdi_unfold_more('\uf312'),
zmdi_apps('\uf313'),
zmdi_grid_off('\uf314'),
zmdi_grid('\uf315'),
zmdi_view_agenda('\uf316'),
zmdi_view_array('\uf317'),
zmdi_view_carousel('\uf318'),
zmdi_view_column('\uf319'),
zmdi_view_comfy('\uf31a'),
zmdi_view_compact('\uf31b'),
zmdi_view_dashboard('\uf31c'),
zmdi_view_day('\uf31d'),
zmdi_view_headline('\uf31e'),
zmdi_view_list_alt('\uf31f'),
zmdi_view_list('\uf320'),
zmdi_view_module('\uf321'),
zmdi_view_quilt('\uf322'),
zmdi_view_stream('\uf323'),
zmdi_view_subtitles('\uf324'),
zmdi_view_toc('\uf325'),
zmdi_view_web('\uf326'),
zmdi_view_week('\uf327'),
zmdi_widgets('\uf328'),
zmdi_alarm_check('\uf329'),
zmdi_alarm_off('\uf32a'),
zmdi_alarm_plus('\uf32b'),
zmdi_alarm_snooze('\uf32c'),
zmdi_alarm('\uf32d'),
zmdi_calendar_alt('\uf32e'),
zmdi_calendar_check('\uf32f'),
zmdi_calendar_close('\uf330'),
zmdi_calendar_note('\uf331'),
zmdi_calendar('\uf332'),
zmdi_time_countdown('\uf333'),
zmdi_time_interval('\uf334'),
zmdi_time_restore_setting('\uf335'),
zmdi_time_restore('\uf336'),
zmdi_time('\uf337'),
zmdi_timer_off('\uf338'),
zmdi_timer('\uf339'),
zmdi_android_alt('\uf33a'),
zmdi_android('\uf33b'),
zmdi_apple('\uf33c'),
zmdi_behance('\uf33d'),
zmdi_codepen('\uf33e'),
zmdi_dribbble('\uf33f'),
zmdi_dropbox('\uf340'),
zmdi_evernote('\uf341'),
zmdi_facebook_box('\uf342'),
zmdi_facebook('\uf343'),
zmdi_github_box('\uf344'),
zmdi_github('\uf345'),
zmdi_google_drive('\uf346'),
zmdi_google_earth('\uf347'),
zmdi_google_glass('\uf348'),
zmdi_google_maps('\uf349'),
zmdi_google_pages('\uf34a'),
zmdi_google_play('\uf34b'),
zmdi_google_plus_box('\uf34c'),
zmdi_google_plus('\uf34d'),
zmdi_google('\uf34e'),
zmdi_instagram('\uf34f'),
zmdi_language_css3('\uf350'),
zmdi_language_html5('\uf351'),
zmdi_language_javascript('\uf352'),
zmdi_language_python_alt('\uf353'),
zmdi_language_python('\uf354'),
zmdi_lastfm('\uf355'),
zmdi_linkedin_box('\uf356'),
zmdi_paypal('\uf357'),
zmdi_pinterest_box('\uf358'),
zmdi_pocket('\uf359'),
zmdi_polymer('\uf35a'),
zmdi_share('\uf35b'),
zmdi_stackoverflow('\uf35c'),
zmdi_steam_square('\uf35d'),
zmdi_steam('\uf35e'),
zmdi_twitter_box('\uf35f'),
zmdi_twitter('\uf360'),
zmdi_vk('\uf361'),
zmdi_wikipedia('\uf362'),
zmdi_windows('\uf363'),
zmdi_aspect_ratio_alt('\uf364'),
zmdi_aspect_ratio('\uf365'),
zmdi_blur_circular('\uf366'),
zmdi_blur_linear('\uf367'),
zmdi_blur_off('\uf368'),
zmdi_blur('\uf369'),
zmdi_brightness_2('\uf36a'),
zmdi_brightness_3('\uf36b'),
zmdi_brightness_4('\uf36c'),
zmdi_brightness_5('\uf36d'),
zmdi_brightness_6('\uf36e'),
zmdi_brightness_7('\uf36f'),
zmdi_brightness_auto('\uf370'),
zmdi_brightness_setting('\uf371'),
zmdi_broken_image('\uf372'),
zmdi_center_focus_strong('\uf373'),
zmdi_center_focus_weak('\uf374'),
zmdi_compare('\uf375'),
zmdi_crop_16_9('\uf376'),
zmdi_crop_3_2('\uf377'),
zmdi_crop_5_4('\uf378'),
zmdi_crop_7_5('\uf379'),
zmdi_crop_din('\uf37a'),
zmdi_crop_free('\uf37b'),
zmdi_crop_landscape('\uf37c'),
zmdi_crop_portrait('\uf37d'),
zmdi_crop_square('\uf37e'),
zmdi_exposure_alt('\uf37f'),
zmdi_exposure('\uf380'),
zmdi_filter_b_and_w('\uf381'),
zmdi_filter_center_focus('\uf382'),
zmdi_filter_frames('\uf383'),
zmdi_filter_tilt_shift('\uf384'),
zmdi_gradient('\uf385'),
zmdi_grain('\uf386'),
zmdi_graphic_eq('\uf387'),
zmdi_hdr_off('\uf388'),
zmdi_hdr_strong('\uf389'),
zmdi_hdr_weak('\uf38a'),
zmdi_hdr('\uf38b'),
zmdi_iridescent('\uf38c'),
zmdi_leak_off('\uf38d'),
zmdi_leak('\uf38e'),
zmdi_looks('\uf38f'),
zmdi_loupe('\uf390'),
zmdi_panorama_horizontal('\uf391'),
zmdi_panorama_vertical('\uf392'),
zmdi_panorama_wide_angle('\uf393'),
zmdi_photo_size_select_large('\uf394'),
zmdi_photo_size_select_small('\uf395'),
zmdi_picture_in_picture('\uf396'),
zmdi_slideshow('\uf397'),
zmdi_texture('\uf398'),
zmdi_tonality('\uf399'),
zmdi_vignette('\uf39a'),
zmdi_wb_auto('\uf39b'),
zmdi_eject_alt('\uf39c'),
zmdi_eject('\uf39d'),
zmdi_equalizer('\uf39e'),
zmdi_fast_forward('\uf39f'),
zmdi_fast_rewind('\uf3a0'),
zmdi_forward_10('\uf3a1'),
zmdi_forward_30('\uf3a2'),
zmdi_forward_5('\uf3a3'),
zmdi_hearing('\uf3a4'),
zmdi_pause_circle_outline('\uf3a5'),
zmdi_pause_circle('\uf3a6'),
zmdi_pause('\uf3a7'),
zmdi_play_circle_outline('\uf3a8'),
zmdi_play_circle('\uf3a9'),
zmdi_play('\uf3aa'),
zmdi_playlist_audio('\uf3ab'),
zmdi_playlist_plus('\uf3ac'),
zmdi_repeat_one('\uf3ad'),
zmdi_repeat('\uf3ae'),
zmdi_replay_10('\uf3af'),
zmdi_replay_30('\uf3b0'),
zmdi_replay_5('\uf3b1'),
zmdi_replay('\uf3b2'),
zmdi_shuffle('\uf3b3'),
zmdi_skip_next('\uf3b4'),
zmdi_skip_previous('\uf3b5'),
zmdi_stop('\uf3b6'),
zmdi_surround_sound('\uf3b7'),
zmdi_tune('\uf3b8'),
zmdi_volume_down('\uf3b9'),
zmdi_volume_mute('\uf3ba'),
zmdi_volume_off('\uf3bb'),
zmdi_volume_up('\uf3bc'),
zmdi_n_1_square('\uf3bd'),
zmdi_n_2_square('\uf3be'),
zmdi_n_3_square('\uf3bf'),
zmdi_n_4_square('\uf3c0'),
zmdi_n_5_square('\uf3c1'),
zmdi_n_6_square('\uf3c2'),
zmdi_neg_1('\uf3c3'),
zmdi_neg_2('\uf3c4'),
zmdi_plus_1('\uf3c5'),
zmdi_plus_2('\uf3c6'),
zmdi_sec_10('\uf3c7'),
zmdi_sec_3('\uf3c8'),
zmdi_zero('\uf3c9'),
zmdi_airline_seat_flat_angled('\uf3ca'),
zmdi_airline_seat_flat('\uf3cb'),
zmdi_airline_seat_individual_suite('\uf3cc'),
zmdi_airline_seat_legroom_extra('\uf3cd'),
zmdi_airline_seat_legroom_normal('\uf3ce'),
zmdi_airline_seat_legroom_reduced('\uf3cf'),
zmdi_airline_seat_recline_extra('\uf3d0'),
zmdi_airline_seat_recline_normal('\uf3d1'),
zmdi_airplay('\uf3d2'),
zmdi_closed_caption('\uf3d3'),
zmdi_confirmation_number('\uf3d4'),
zmdi_developer_board('\uf3d5'),
zmdi_disc_full('\uf3d6'),
zmdi_explicit('\uf3d7'),
zmdi_flight_land('\uf3d8'),
zmdi_flight_takeoff('\uf3d9'),
zmdi_flip_to_back('\uf3da'),
zmdi_flip_to_front('\uf3db'),
zmdi_group_work('\uf3dc'),
zmdi_hd('\uf3dd'),
zmdi_hq('\uf3de'),
zmdi_markunread_mailbox('\uf3df'),
zmdi_memory('\uf3e0'),
zmdi_nfc('\uf3e1'),
zmdi_play_for_work('\uf3e2'),
zmdi_power_input('\uf3e3'),
zmdi_present_to_all('\uf3e4'),
zmdi_satellite('\uf3e5'),
zmdi_tap_and_play('\uf3e6'),
zmdi_vibration('\uf3e7'),
zmdi_voicemail('\uf3e8'),
zmdi_group('\uf3e9'),
zmdi_rss('\uf3ea'),
zmdi_shape('\uf3eb'),
zmdi_spinner('\uf3ec'),
zmdi_ungroup('\uf3ed'),
zmdi_500px('\uf3ee'),
zmdi_8tracks('\uf3ef'),
zmdi_amazon('\uf3f0'),
zmdi_blogger('\uf3f1'),
zmdi_delicious('\uf3f2'),
zmdi_disqus('\uf3f3'),
zmdi_flattr('\uf3f4'),
zmdi_flickr('\uf3f5'),
zmdi_github_alt('\uf3f6'),
zmdi_google_old('\uf3f7'),
zmdi_linkedin('\uf3f8'),
zmdi_odnoklassniki('\uf3f9'),
zmdi_outlook('\uf3fa'),
zmdi_paypal_alt('\uf3fb'),
zmdi_pinterest('\uf3fc'),
zmdi_playstation('\uf3fd'),
zmdi_reddit('\uf3fe'),
zmdi_skype('\uf3ff'),
zmdi_slideshare('\uf400'),
zmdi_soundcloud('\uf401'),
zmdi_tumblr('\uf402'),
zmdi_twitch('\uf403'),
zmdi_vimeo('\uf404'),
zmdi_whatsapp('\uf405'),
zmdi_xbox('\uf406'),
zmdi_yahoo('\uf407'),
zmdi_youtube_play('\uf408'),
zmdi_youtube('\uf409'),
zmdi_import_export('\uf30c'),
zmdi_swap_vertical_('\uf30c'),
zmdi_airplanemode_inactive('\uf102'),
zmdi_airplanemode_active('\uf103'),
zmdi_rate_review('\uf103'),
zmdi_comment_sign('\uf25a'),
zmdi_network_warning('\uf2ad'),
zmdi_shopping_cart_add('\uf1ca'),
zmdi_file_add('\uf221'),
zmdi_network_wifi_scan('\uf2e4'),
zmdi_collection_add('\uf14e'),
zmdi_format_playlist_add('\uf3ac'),
zmdi_format_queue_music('\uf3ab'),
zmdi_plus_box('\uf277'),
zmdi_tag_backspace('\uf1d9'),
zmdi_alarm_add('\uf32b'),
zmdi_battery_charging('\uf114'),
zmdi_daydream_setting('\uf217'),
zmdi_more_horiz('\uf19c'),
zmdi_book_photo('\uf11b'),
zmdi_incandescent('\uf189'),
zmdi_wb_iridescent('\uf38c'),
zmdi_calendar_remove('\uf330'),
zmdi_refresh_sync_disabled('\uf1b7'),
zmdi_refresh_sync_problem('\uf1b6'),
zmdi_crop_original('\uf17e'),
zmdi_power_off('\uf1af'),
zmdi_power_off_setting('\uf1ae'),
zmdi_leak_remove('\uf38d'),
zmdi_star_border('\uf27c'),
zmdi_brightness_low('\uf36d'),
zmdi_brightness_medium('\uf36e'),
zmdi_brightness_high('\uf36f'),
zmdi_smartphone_portrait('\uf2d4'),
zmdi_live_tv('\uf2d9'),
zmdi_format_textdirection_l_to_r('\uf249'),
zmdi_format_textdirection_r_to_l('\uf24a'),
zmdi_arrow_back('\uf2ea'),
zmdi_arrow_forward('\uf2ee'),
zmdi_arrow_in('\uf2e9'),
zmdi_arrow_out('\uf2ed'),
zmdi_rotate_90_degrees_ccw('\uf304'),
zmdi_adb('\uf33a'),
zmdi_network_wifi('\uf2e8'),
zmdi_network_wifi_alt('\uf2e3'),
zmdi_network_wifi_lock('\uf2e5'),
zmdi_network_wifi_off('\uf2e6'),
zmdi_network_wifi_outline('\uf2e7'),
zmdi_network_wifi_info('\uf2e4'),
zmdi_layers_clear('\uf18b'),
zmdi_colorize('\uf15d'),
zmdi_format_paint('\uf1ba'),
zmdi_format_quote('\uf1b2'),
zmdi_camera_monochrome_photos('\uf285'),
zmdi_sort_by_alpha('\uf1cf'),
zmdi_folder_shared('\uf225'),
zmdi_folder_special('\uf226'),
zmdi_comment_dots('\uf260'),
zmdi_reorder('\uf31e'),
zmdi_dehaze('\uf197'),
zmdi_sort('\uf1ce'),
zmdi_pages('\uf34a'),
zmdi_stack_overflow('\uf35c'),
zmdi_calendar_account('\uf204'),
zmdi_paste('\uf109'),
zmdi_cut('\uf1bc'),
zmdi_save('\uf297'),
zmdi_smartphone_code('\uf139'),
zmdi_directions_bike('\uf117'),
zmdi_directions_boat('\uf11a'),
zmdi_directions_bus('\uf121'),
zmdi_directions_car('\uf125'),
zmdi_directions_railway('\uf1b3'),
zmdi_directions_run('\uf215'),
zmdi_directions_subway('\uf1d5'),
zmdi_directions_walk('\uf216'),
zmdi_local_hotel('\uf178'),
zmdi_local_activity('\uf1df'),
zmdi_local_play('\uf1df'),
zmdi_local_airport('\uf103'),
zmdi_local_atm('\uf198'),
zmdi_local_bar('\uf137'),
zmdi_local_cafe('\uf13b'),
zmdi_local_car_wash('\uf124'),
zmdi_local_convenience_store('\uf1d3'),
zmdi_local_dining('\uf153'),
zmdi_local_drink('\uf157'),
zmdi_local_florist('\uf168'),
zmdi_local_gas_station('\uf16f'),
zmdi_local_grocery_store('\uf1cb'),
zmdi_local_hospital('\uf177'),
zmdi_local_laundry_service('\uf1e9'),
zmdi_local_library('\uf18d'),
zmdi_local_mall('\uf195'),
zmdi_local_movies('\uf19d'),
zmdi_local_offer('\uf187'),
zmdi_local_parking('\uf1a5'),
zmdi_local_pharmacy('\uf176'),
zmdi_local_phone('\uf2be'),
zmdi_local_pizza('\uf1ac'),
zmdi_local_post_office('\uf15a'),
zmdi_local_printshop('\uf1b0'),
zmdi_local_see('\uf28c'),
zmdi_local_shipping('\uf1e6'),
zmdi_local_store('\uf1d4'),
zmdi_local_taxi('\uf123'),
zmdi_local_wc('\uf211'),
zmdi_my_location('\uf299'),
zmdi_directions('\uf1e7');
char character;
IconValue(char character) {
this.character = character;
}
public String formattedName() {
return "{" + name() + "}";
}
public char character() {
return character;
}
}
}
================================================
FILE: android-material-icons/src/main/java/com/malinskiy/materialicons/Utils.java
================================================
package com.malinskiy.materialicons;
import android.R;
import android.content.Context;
import android.util.Log;
import java.io.*;
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.util.TypedValue.applyDimension;
import static com.malinskiy.materialicons.Iconify.IconValue;
class Utils {
public static final String ICON_FONT_FOLDER = "icon_tmp";
public static final String NAME_PREFIX = "{zmdi";
private Utils() {
// Prevents instantiation
}
static int convertDpToPx(Context context, float dp) {
return (int) applyDimension(COMPLEX_UNIT_DIP, dp,
context.getResources().getDisplayMetrics());
}
static boolean isEnabled(int[] stateSet) {
for (int state : stateSet)
if (state == R.attr.state_enabled)
return true;
return false;
}
static File resourceToFile(Context context, String resourceName) throws IOException {
File f = null;
if (context.getFilesDir() == null)
f = new File(context.getCacheDir(), ICON_FONT_FOLDER);
else
f = new File(context.getFilesDir(), ICON_FONT_FOLDER);
if (!f.exists())
if (!f.mkdirs()) {
Log.e(Iconify.TAG, "Font folder creation failed");
throw new IllegalStateException("Cannot create Iconify font destination folder");
}
File outPath = new File(f, resourceName);
if (outPath.exists()) return outPath;
BufferedOutputStream bos = null;
InputStream inputStream = null;
try {
inputStream = Iconify.class.getClassLoader().getResourceAsStream(resourceName);
byte[] buffer = new byte[inputStream.available()];
bos = new BufferedOutputStream(new FileOutputStream(outPath));
int l = 0;
while ((l = inputStream.read(buffer)) > 0) {
bos.write(buffer, 0, l);
}
return outPath;
} finally {
closeQuietly(bos);
closeQuietly(inputStream);
}
}
private static void closeQuietly(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
// Don't care
}
}
}
public static StringBuilder replaceIcons(StringBuilder text) {
int startIndex = text.indexOf(NAME_PREFIX);
if (startIndex == -1) {
return text;
}
int endIndex = text.substring(startIndex).indexOf("}") + startIndex + 1;
String iconString = text.substring(startIndex + 1, endIndex - 1);
iconString = iconString.replaceAll("-", "_");
try {
IconValue value = IconValue.valueOf(iconString);
String iconValue = String.valueOf(value.character);
text = text.replace(startIndex, endIndex, iconValue);
return replaceIcons(text);
} catch (IllegalArgumentException e) {
Log.w(Iconify.TAG, "Wrong icon name: " + iconString);
return text;
}
}
}
================================================
FILE: android-material-icons/src/main/java/com/malinskiy/materialicons/widget/IconButton.java
================================================
package com.malinskiy.materialicons.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.Button;
import com.malinskiy.materialicons.Iconify;
import com.malinskiy.materialicons.R;
public class IconButton extends Button {
public IconButton(Context context) {
super(context);
init(null);
}
public IconButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public IconButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
private void init(AttributeSet attrs) {
boolean hackyPreview = false;
TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.IconButton, 0, 0);
try {
hackyPreview = a.getBoolean(R.styleable.IconButton_hacky_preview, false);
} finally {
a.recycle();
}
if (!isInEditMode())
Iconify.addIcons(this);
else if (hackyPreview) {
Iconify.addIconsEditMode(this);
} else {
this.setText(this.getText());
}
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(Iconify.compute(text), type);
}
}
================================================
FILE: android-material-icons/src/main/java/com/malinskiy/materialicons/widget/IconTextView.java
================================================
package com.malinskiy.materialicons.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.TextView;
import com.malinskiy.materialicons.Iconify;
import com.malinskiy.materialicons.R;
public class IconTextView extends TextView {
public IconTextView(Context context) {
super(context);
init(null);
}
public IconTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public IconTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
private void init(AttributeSet attrs) {
boolean hackyPreview = false;
TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.IconTextView, 0, 0);
try {
hackyPreview = a.getBoolean(R.styleable.IconTextView_hacky_preview, false);
} finally {
a.recycle();
}
if (!isInEditMode())
Iconify.addIcons(this);
else if (hackyPreview) {
Iconify.addIconsEditMode(this);
} else {
this.setText(this.getText());
}
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(Iconify.compute(text), type);
}
}
================================================
FILE: android-material-icons/src/main/res/values/attrs.xml
================================================
================================================
FILE: android-material-icons/src/test/java/com/malinskiy/materialicons/UtilsTest.java
================================================
package com.malinskiy.materialicons;
import org.junit.Test;
import static com.malinskiy.materialicons.Iconify.IconValue.zmdi_account_add;
import static org.junit.Assert.assertEquals;
public class UtilsTest {
@Test
public void test_replaceIcons() {
test("A{zmdi-account-add}A", "A" + zmdi_account_add.character + "A");
}
@Test
public void test_replaceIcons_noIcons() {
test("A A", "A A");
}
@Test
public void test_replaceIcons_manyIcons() {
test("A{zmdi-account-add}A{zmdi-account-add}A", "A" + zmdi_account_add.character + "A" + zmdi_account_add.character + "A");
}
@Test
public void test_replaceIcons_withDash() {
test("A{zmdi-account-add}A{zmdi-account-add}A", "A" + zmdi_account_add.character + "A" + zmdi_account_add.character + "A");
}
@Test
public void test_replaceIcons_wrong() {
test("A{icon-okA{icon-camera}A", "A{icon-okA{icon-camera}A");
}
@Test
public void test_replaceIcons_empty() {
test("A{}A", "A{}A");
}
private void test(String in, String out) {
assertEquals(out, Utils.replaceIcons(new StringBuilder(in)).toString());
}
}
================================================
FILE: android-material-icons-sample/build.gradle.kts
================================================
plugins {
id("com.android.application")
}
android {
compileSdk = 31
defaultConfig {
minSdk = 14
targetSdk = 22
applicationId = "com.malinskiy.materialicons.sample"
}
}
dependencies {
implementation(project(":android-material-icons"))
implementation("androidx.appcompat:appcompat:1.4.1")
implementation("androidx.cardview:cardview:1.0.0")
implementation("androidx.recyclerview:recyclerview:1.2.1")
}
================================================
FILE: android-material-icons-sample/src/main/AndroidManifest.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/java/com/malinskiy/materialicons/sample/IconDetailsActivity.java
================================================
package com.malinskiy.materialicons.sample;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.malinskiy.materialicons.IconDrawable;
import com.malinskiy.materialicons.Iconify;
public class IconDetailsActivity extends AppCompatActivity {
public static final String ARG_POSITION = "position";
public int position;
public static Intent intent(MainActivity activity, int position) {
Intent intent = new Intent(activity, IconDetailsActivity.class);
intent.putExtra(ARG_POSITION, position);
return intent;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_icon_details);
ImageView iconView = findViewById(R.id.item_icon);
TextView nameView = findViewById(R.id.item_text);
position = getIntent().getExtras().getInt(ARG_POSITION);
Iconify.IconValue iconValue = Iconify.IconValue.values()[position];
iconView.setImageDrawable(new IconDrawable(this, iconValue).sizeRes(R.dimen.icon_detailed_size).colorRes(R.color.primary_dark_material_light));
nameView.setText(iconValue.name());
}
}
================================================
FILE: android-material-icons-sample/src/main/java/com/malinskiy/materialicons/sample/IconsAdapter.java
================================================
package com.malinskiy.materialicons.sample;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.malinskiy.materialicons.IconDrawable;
import com.malinskiy.materialicons.Iconify;
public class IconsAdapter extends RecyclerView.Adapter {
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView iconView;
public TextView nameView;
public ViewHolder(View itemView, ImageView iconView, TextView nameView) {
super(itemView);
this.iconView = iconView;
this.nameView = nameView;
}
}
public IconsAdapter() {
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_icon, parent, false);
ImageView textView = view.findViewById(R.id.item_icon);
TextView nameView = view.findViewById(R.id.item_text);
return new ViewHolder(view, textView, nameView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Iconify.IconValue iconValue = Iconify.IconValue.values()[position];
holder.iconView.setImageDrawable(new IconDrawable(holder.iconView.getContext(), iconValue).sizeRes(R.dimen.icon_size).colorRes(R.color.primary_dark_material_light));
holder.nameView.setText(iconValue.name());
}
@Override
public int getItemCount() {
return Iconify.IconValue.values().length;
}
}
================================================
FILE: android-material-icons-sample/src/main/java/com/malinskiy/materialicons/sample/MainActivity.java
================================================
package com.malinskiy.materialicons.sample;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.view.GestureDetectorCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
public class MainActivity extends AppCompatActivity implements RecyclerView.OnItemTouchListener {
protected RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
private GestureDetectorCompat gestureDetector;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_icons);
setupViews();
}
public void setupViews() {
recyclerView.setHasFixedSize(true);
layoutManager = new GridLayoutManager(this, getResources().getInteger(R.integer.icon_columns));
recyclerView.setLayoutManager(layoutManager);
recyclerView.addOnItemTouchListener(this);
adapter = new IconsAdapter();
recyclerView.setAdapter(adapter);
gestureDetector = new GestureDetectorCompat(this, new RecyclerViewOnGestureListener());
}
@Override
public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
gestureDetector.onTouchEvent(motionEvent);
return false;
}
@Override
public void onTouchEvent(RecyclerView recyclerView, MotionEvent motionEvent) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
private class RecyclerViewOnGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
View view = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (view == null) return false;
int position = recyclerView.getChildLayoutPosition(view);
MainActivity activity = MainActivity.this;
View iconElement = view.findViewById(R.id.item_icon);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
activity, iconElement, getResources().getString(R.string.transition_icon));
ActivityCompat.startActivity(activity, IconDetailsActivity.intent(activity, position),
options.toBundle());
return true;
}
}
}
================================================
FILE: android-material-icons-sample/src/main/res/layout/activity_icon_details.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/res/layout/activity_main.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/res/layout/item_icon.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/res/layout-v21/item_icon.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/res/values/dimens.xml
================================================
96dp
192dp
================================================
FILE: android-material-icons-sample/src/main/res/values/ids.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/res/values/integers.xml
================================================
2
================================================
FILE: android-material-icons-sample/src/main/res/values/strings.xml
================================================
Material Icons
transition_icon
Icon details
================================================
FILE: android-material-icons-sample/src/main/res/values/styles.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/res/values-v21/styles.xml
================================================
================================================
FILE: android-material-icons-sample/src/main/res/values-w312dp/integers.xml
================================================
3
================================================
FILE: android-material-icons-sample/src/main/res/values-w416dp/integers.xml
================================================
4
================================================
FILE: android-material-icons-sample/src/main/res/values-w520dp/integers.xml
================================================
5
================================================
FILE: android-material-icons-sample/src/main/res/values-w624dp/integers.xml
================================================
5
================================================
FILE: android-material-icons-sample/src/main/res/values-w728dp/integers.xml
================================================
6
================================================
FILE: android-material-icons-sample/src/main/res/values-w832dp/integers.xml
================================================
7
================================================
FILE: android-material-icons-sample/src/main/res/values-w936dp/integers.xml
================================================
8
================================================
FILE: build.gradle.kts
================================================
buildscript {
repositories {
mavenCentral()
google()
}
dependencies {
classpath("com.android.tools.build:gradle:7.0.4")
}
}
allprojects {
repositories {
mavenCentral()
google()
}
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Mon Jul 06 13:14:13 MSK 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-all.zip
================================================
FILE: gradle.properties
================================================
android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs=-Xmx2500m -XX:MaxMetaspaceSize=512m
================================================
FILE: gradlew
================================================
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle.kts
================================================
include(":android-material-icons")
include(":android-material-icons-sample")
================================================
FILE: utils/parse-css-to-enum-value.sh
================================================
#!/bin/bash
iconDefinitions=($(tr -d '\n ' < $1 | egrep -o "zmdi-[^: ]+[^}]+}"))
echo "Found ${#iconDefinitions[@]} icons"
rm -f enum.txt
for i in "${iconDefinitions[@]}"
do
:
name=$(echo $i | egrep -o "zmdi-[^:]+" | tr '-' '_')
value=$(echo $i | egrep -o "content[^;]+" | egrep -o "[0-9a-f]{4}")
echo "$name('\u$value')," >> enum.txt
done