package com.reactnativenavigation.views.utils; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.support.v4.graphics.drawable.DrawableCompat; import com.reactnativenavigation.params.StyleParams; import com.reactnativenavigation.views.TopTabs; public class TopTabsIconColorHelper { private final TopTabs topTabs; private final StyleParams styleParams; public TopTabsIconColorHelper(TopTabs topTabs, StyleParams styleParams) { this.topTabs = topTabs; this.styleParams = styleParams; } public void colorIcons(int selectedIconColor, int unselectedIconColor) { ColorStateList colorStateList = getIconColorStateList(styleParams, selectedIconColor, unselectedIconColor); colorIcons(colorStateList); } private ColorStateList getIconColorStateList(StyleParams style, int selectedIconColor, int unselectedIconColor) { int selectedColor = selectedIconColor; int unselectedColor = unselectedIconColor; if (style.topTabIconColor.hasColor()) { unselectedColor = style.topTabIconColor.getColor(); } if (style.selectedTopTabIconColor.hasColor()) { selectedColor = style.selectedTopTabIconColor.getColor(); } return createColorStateList(selectedColor, unselectedColor); } private ColorStateList createColorStateList(int selectedColor, int unselectedIconColor) { int[][] states = new int[][] { new int[]{android.R.attr.state_pressed}, new int[]{android.R.attr.state_selected}, new int[]{android.R.attr.state_enabled}, new int[]{android.R.attr.state_focused, android.R.attr.state_pressed}, new int[]{-android.R.attr.state_enabled}, new int[]{} }; int[] colors = new int[]{ selectedColor, selectedColor, unselectedIconColor, unselectedIconColor, unselectedIconColor, unselectedIconColor }; return new ColorStateList(states, colors); } private void colorIcons(ColorStateList colorStateList) { for (int i = 0; i < topTabs.getTabCount(); i++) { Drawable icon = topTabs.getTabAt(i).getIcon(); if (icon != null) { icon = DrawableCompat.wrap(icon); DrawableCompat.setTintList(icon, colorStateList); } } } }