package org.robobinding.widgetaddon;
import org.robobinding.viewattribute.ViewTag;
import org.robobinding.viewattribute.ViewTags;
import android.view.View;
/**
* @since 1.0
* @author Cheng Wei
*
*/
class ViewTagsBasedViewAddOns implements ViewAddOns{
private final ViewAddOnFactories viewAddOnFactories;
private final ViewTags<ViewAddOn> viewTags;
public ViewTagsBasedViewAddOns(ViewAddOnFactories viewAddOnFactories, ViewTags<ViewAddOn> viewTags) {
this.viewAddOnFactories = viewAddOnFactories;
this.viewTags = viewTags;
}
@Override
public ViewAddOn getMostSuitable(Object view) {
if(supportsViewTag(view)) {
return retrieveFromViewTag((View)view);
} else {
return viewAddOnFactories.createViewAddOn(view);
}
}
private boolean supportsViewTag(Object view) {
return view instanceof View;
}
private ViewAddOn retrieveFromViewTag(View view) {
ViewTag<ViewAddOn> viewTag = viewTags.tagFor(view);
if(viewTag.has()) {
return viewTag.get();
} else {
ViewAddOn viewAddOn = viewAddOnFactories.createViewAddOn(view);
viewTag.set(viewAddOn);
return viewAddOn;
}
}
}