package com.mozz.htmlnative.css.stylehandler;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.flexbox.FlexboxLayout;
import com.mozz.htmlnative.dom.DomElement;
import com.mozz.htmlnative.exception.AttrApplyException;
import com.mozz.htmlnative.view.LayoutParamsLazyCreator;
/**
* @author Yang Tao, 17/3/3.
*/
class FlexBoxLayoutStyleHandler extends LayoutStyleHandler {
@Override
public void apply(Context context, View v, DomElement domElement, View parent, LayoutParamsLazyCreator paramsLazyCreator, String params, Object value, boolean isParent) throws
AttrApplyException {
FlexboxLayout flexboxLayout = (FlexboxLayout) v;
if (isParent) {
return;
}
switch (params) {
case "flex-direction": {
String val = value.toString();
flexboxLayout.setFlexDirection(flexDirection(val));
break;
}
case "flex-wrap": {
String val = value.toString();
flexboxLayout.setFlexWrap(flexWrap(val));
break;
}
case "justify-content": {
String val = value.toString();
flexboxLayout.setJustifyContent(justContent(val));
break;
}
}
}
@Override
public void applyToChild(Context context, View v, DomElement domElement, View parent, LayoutParamsLazyCreator paramsLazyCreator, String params, Object value, boolean isParent) throws AttrApplyException {
}
@Override
public void setDefault(Context context, View v, DomElement domElement, LayoutParamsLazyCreator paramsLazyCreator, View parent) throws AttrApplyException {
super.setDefault(context, v, domElement, paramsLazyCreator, parent);
paramsLazyCreator.width = ViewGroup.LayoutParams.MATCH_PARENT;
}
@FlexboxLayout.FlexDirection
private static int flexDirection(@NonNull java.lang.String direction) {
switch (direction) {
case "column-reverse":
return FlexboxLayout.FLEX_DIRECTION_COLUMN_REVERSE;
case "row-reverse":
return FlexboxLayout.FLEX_DIRECTION_ROW_REVERSE;
case "column":
return FlexboxLayout.FLEX_DIRECTION_COLUMN;
default:
return FlexboxLayout.FLEX_DIRECTION_ROW;
}
}
@FlexboxLayout.FlexWrap
private static int flexWrap(java.lang.String wrap) {
switch (wrap) {
case "nowrap":
return FlexboxLayout.FLEX_WRAP_NOWRAP;
case "wrap":
return FlexboxLayout.FLEX_WRAP_WRAP;
case "wrap-reverse":
return FlexboxLayout.FLEX_WRAP_WRAP_REVERSE;
default:
return FlexboxLayout.FLEX_WRAP_NOWRAP;
}
}
@FlexboxLayout.JustifyContent
private static int justContent(java.lang.String content) {
switch (content) {
case "flex-start":
return FlexboxLayout.JUSTIFY_CONTENT_FLEX_START;
case "flex-end":
return FlexboxLayout.JUSTIFY_CONTENT_FLEX_END;
case "center":
return FlexboxLayout.JUSTIFY_CONTENT_CENTER;
case "space-between":
return FlexboxLayout.JUSTIFY_CONTENT_SPACE_BETWEEN;
case "space-around":
return FlexboxLayout.JUSTIFY_CONTENT_SPACE_AROUND;
default:
return FlexboxLayout.JUSTIFY_CONTENT_FLEX_START;
}
}
}