package br.com.ilhasoft.support.validation.util;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* Created by john-mac on 5/21/16.
*/
public class ViewTagHelper {
public static <Type> void appendValue(int tagId, View view, Type value) {
Object object = view.getTag(tagId);
if(object != null && object instanceof List) {
((List<Type>)object).add(value);
} else {
List<Type> typeList = new ArrayList<>();
typeList.add(value);
view.setTag(tagId, typeList);
}
}
public static List<View> getViewsByTag(ViewGroup root, int tagId) {
List<View> views = new ArrayList<>();
final int childCount = root.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = root.getChildAt(i);
if (child instanceof ViewGroup) {
views.addAll(getViewsByTag((ViewGroup) child, tagId));
}
addViewWhenContainsTag(tagId, views, child);
}
return views;
}
public static List<View> filterViewWithTag(int tagId, View view) {
List<View> viewsWithTags = new ArrayList<>();
addViewWhenContainsTag(tagId, viewsWithTags, view);
return viewsWithTags;
}
public static <ViewType extends View> List<View> filterViewsWithTag(int tagId, List<ViewType> views) {
List<View> viewsWithTags = new ArrayList<>();
for (View view : views) {
addViewWhenContainsTag(tagId, viewsWithTags, view);
}
return viewsWithTags;
}
private static void addViewWhenContainsTag(int tagId, List<View> views, View view) {
final Object tagValue = view.getTag(tagId);
if (tagValue != null) {
views.add(view);
}
}
}