package treehou.se.habit.util; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.support.v7.app.AppCompatDialog; import android.support.v7.graphics.Palette; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import com.mattyork.colours.Colour; import com.mikepenz.community_material_typeface_library.CommunityMaterial; import com.mikepenz.google_material_typeface_library.GoogleMaterial; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.iconics.typeface.FontAwesome; import com.mikepenz.iconics.typeface.IIcon; import com.mikepenz.octicons_typeface_library.Octicons; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import treehou.se.habit.R; import treehou.se.habit.core.db.settings.WidgetSettingsDB; import treehou.se.habit.ui.adapter.IconAdapter; public class Util { private final static Map<String, IIcon> CELL_ICON_MAP = new HashMap<>(); private final static List<IIcon> CELL_ICONS = new ArrayList<>(); static { CELL_ICONS.addAll(Arrays.asList(CommunityMaterial.Icon.values())); CELL_ICONS.addAll(Arrays.asList(GoogleMaterial.Icon.values())); CELL_ICONS.addAll(Arrays.asList(Octicons.Icon.values())); CELL_ICONS.addAll(Arrays.asList(FontAwesome.Icon.values())); for(IIcon icon : CELL_ICONS){ CELL_ICON_MAP.put(icon.getName(), icon); } } public enum IconCategory { EMPTY, SENSORS, MEDIA, COMMANDS, ARROWS, ALL } public final static Map<IconCategory, List<IIcon>> CAT_ICONS = new HashMap<>(); static { List<IIcon> sensors = new ArrayList<>(); sensors.add(CommunityMaterial.Icon.cmd_alarm); sensors.add(CommunityMaterial.Icon.cmd_alarm_plus); sensors.add(CommunityMaterial.Icon.cmd_alert); sensors.add(CommunityMaterial.Icon.cmd_bell); sensors.add(CommunityMaterial.Icon.cmd_bell_off); sensors.add(CommunityMaterial.Icon.cmd_bell_ring); sensors.add(CommunityMaterial.Icon.cmd_brightness_5); sensors.add(CommunityMaterial.Icon.cmd_brightness_6); sensors.add(CommunityMaterial.Icon.cmd_brightness_7); CAT_ICONS.put(IconCategory.SENSORS, sensors); List<IIcon> arrows = new ArrayList<>(); arrows.add(CommunityMaterial.Icon.cmd_arrow_down); arrows.add(CommunityMaterial.Icon.cmd_arrow_down_bold); arrows.add(CommunityMaterial.Icon.cmd_chevron_down); arrows.add(CommunityMaterial.Icon.cmd_arrow_up); arrows.add(CommunityMaterial.Icon.cmd_arrow_up_bold); arrows.add(CommunityMaterial.Icon.cmd_chevron_up); arrows.add(CommunityMaterial.Icon.cmd_arrow_left); arrows.add(CommunityMaterial.Icon.cmd_arrow_left_bold); arrows.add(CommunityMaterial.Icon.cmd_chevron_left); arrows.add(CommunityMaterial.Icon.cmd_arrow_right); arrows.add(CommunityMaterial.Icon.cmd_arrow_right_bold); arrows.add(CommunityMaterial.Icon.cmd_chevron_right); CAT_ICONS.put(IconCategory.ARROWS, arrows); List<IIcon> media = new ArrayList<>(); media.add(CommunityMaterial.Icon.cmd_play); media.add(CommunityMaterial.Icon.cmd_pause); media.add(CommunityMaterial.Icon.cmd_stop); media.add(CommunityMaterial.Icon.cmd_forward); media.add(CommunityMaterial.Icon.cmd_rewind); media.add(CommunityMaterial.Icon.cmd_skip_next); media.add(CommunityMaterial.Icon.cmd_skip_previous); media.add(CommunityMaterial.Icon.cmd_microphone_off); media.add(CommunityMaterial.Icon.cmd_microphone); media.add(CommunityMaterial.Icon.cmd_microphone_off); media.add(CommunityMaterial.Icon.cmd_volume_off); media.add(CommunityMaterial.Icon.cmd_volume_low); media.add(CommunityMaterial.Icon.cmd_volume_medium); media.add(CommunityMaterial.Icon.cmd_volume_high); CAT_ICONS.put(IconCategory.MEDIA, media); List<IIcon> commands = new ArrayList<>(); commands.add(CommunityMaterial.Icon.cmd_airplane); commands.add(CommunityMaterial.Icon.cmd_airplane_off); commands.add(CommunityMaterial.Icon.cmd_bell_ring); commands.add(CommunityMaterial.Icon.cmd_lock); commands.add(CommunityMaterial.Icon.cmd_lock_open); commands.add(CommunityMaterial.Icon.cmd_power); commands.add(CommunityMaterial.Icon.cmd_coffee); commands.add(CommunityMaterial.Icon.cmd_beer); CAT_ICONS.put(IconCategory.COMMANDS, commands); CAT_ICONS.put(IconCategory.ALL, getIcons()); } /** * Get a shallow copy of all available icons. * * @return list of icons. */ public static List<IIcon> getIcons(){ return new ArrayList<>(CELL_ICONS); } /** * Get icon from icon name. * * @param value name of icon * @return Icon coresponding to the name. Null if no match found */ public static IIcon getIcon(String value){ IIcon icon = CELL_ICON_MAP.get(value); return icon; } /** * Get bitmap for icon based on icon name * * @param context * @param value icon name * @return bitmap for icon. Null if no bitmap found */ public static Bitmap getIconBitmap(Context context, String value){ IconicsDrawable drawable = getIconDrawable(context, value); if(drawable == null){ return null; } return drawable.toBitmap(); } /** * TODO move to dialog fragment * Create select icon dialog. * * @param context * @param listener triggers when icon is selected */ public static void crateIconSelected(Context context, final IconAdapter.IconSelectListener listener){ final AppCompatDialog dialog = new AppCompatDialog(context); LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.icon_picker, null); RecyclerView iconList = (RecyclerView) view.findViewById(R.id.list); iconList.setItemAnimator(new DefaultItemAnimator()); iconList.setLayoutManager(new GridLayoutManager(context, 4)); IconAdapter adapter = new IconAdapter(context); adapter.setIconSelectListener(new IconAdapter.IconSelectListener() { @Override public void iconSelected(IIcon icon) { listener.iconSelected(icon); dialog.dismiss(); } }); iconList.setAdapter(adapter); dialog.setContentView(view); dialog.show(); } /** * Get drawable for icon. * * @param context * @param value name of icon * @return drawable for icon. Null if not found */ public static IconicsDrawable getIconDrawable(Context context, String value){ IIcon icon = Util.getIcon(value); if(icon == null){ return null; } IconicsDrawable drawableIcon = new IconicsDrawable(context, icon).color(Color.BLACK).sizeDp(24); return drawableIcon; } public static int getBackground(Context context, Bitmap bitmap){ return getBackground(context, bitmap, WidgetSettingsDB.NO_COLOR); } public static int getBackground(Context context, Bitmap bitmap, int type){ if(type == WidgetSettingsDB.MUTED_COLOR) { return Palette.from(bitmap).generate().getMutedColor(context.getResources().getColor(R.color.image_background)); }else if(type == WidgetSettingsDB.LIGHT_MUTED_COLOR) { return Palette.from(bitmap).generate().getLightMutedColor(context.getResources().getColor(R.color.image_background)); }else if(type == WidgetSettingsDB.DARK_MUTED_COLOR) { return Palette.from(bitmap).generate().getDarkMutedColor(context.getResources().getColor(R.color.image_background)); }else if(type == WidgetSettingsDB.VIBRANT_COLOR) { return Palette.from(bitmap).generate().getVibrantColor(context.getResources().getColor(R.color.image_background)); }else if(type == WidgetSettingsDB.LIGHT_VIBRANT_COLOR) { return Palette.from(bitmap).generate().getLightVibrantColor(context.getResources().getColor(R.color.image_background)); }else if(type == WidgetSettingsDB.DARK_VIBRANT_COLOR) { return Palette.from(bitmap).generate().getDarkVibrantColor(context.getResources().getColor(R.color.image_background)); }else { return Color.TRANSPARENT; } } public static float toPercentage(int percentage){ return ((float)percentage)/100; } public static int[] generatePallete(int color){ return Colour.colorSchemeOfType(color, Colour.ColorScheme.ColorSchemeAnalagous); } }