com.facebook.react.uimanager.ViewProps.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.react.uimanager.ViewProps.java

Source

/*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

package com.facebook.react.uimanager;

import android.graphics.Color;
import com.facebook.react.bridge.ReadableMap;
import java.util.Arrays;
import java.util.HashSet;

/** Keys for props that need to be shared across multiple classes. */
public class ViewProps {

    public static final String VIEW_CLASS_NAME = "RCTView";

    // Layout only (only affect positions of children, causes no drawing)
    // !!! Keep in sync with LAYOUT_ONLY_PROPS below
    public static final String ALIGN_ITEMS = "alignItems";
    public static final String ALIGN_SELF = "alignSelf";
    public static final String ALIGN_CONTENT = "alignContent";
    public static final String DISPLAY = "display";
    public static final String BOTTOM = "bottom";
    public static final String COLLAPSABLE = "collapsable";
    public static final String FLEX = "flex";
    public static final String FLEX_GROW = "flexGrow";
    public static final String FLEX_SHRINK = "flexShrink";
    public static final String FLEX_BASIS = "flexBasis";
    public static final String FLEX_DIRECTION = "flexDirection";
    public static final String FLEX_WRAP = "flexWrap";
    public static final String HEIGHT = "height";
    public static final String JUSTIFY_CONTENT = "justifyContent";
    public static final String LEFT = "left";

    public static final String MARGIN = "margin";
    public static final String MARGIN_VERTICAL = "marginVertical";
    public static final String MARGIN_HORIZONTAL = "marginHorizontal";
    public static final String MARGIN_LEFT = "marginLeft";
    public static final String MARGIN_RIGHT = "marginRight";
    public static final String MARGIN_TOP = "marginTop";
    public static final String MARGIN_BOTTOM = "marginBottom";
    public static final String MARGIN_START = "marginStart";
    public static final String MARGIN_END = "marginEnd";

    public static final String PADDING = "padding";
    public static final String PADDING_VERTICAL = "paddingVertical";
    public static final String PADDING_HORIZONTAL = "paddingHorizontal";
    public static final String PADDING_LEFT = "paddingLeft";
    public static final String PADDING_RIGHT = "paddingRight";
    public static final String PADDING_TOP = "paddingTop";
    public static final String PADDING_BOTTOM = "paddingBottom";
    public static final String PADDING_START = "paddingStart";
    public static final String PADDING_END = "paddingEnd";

    public static final String POSITION = "position";
    public static final String RIGHT = "right";
    public static final String TOP = "top";
    public static final String WIDTH = "width";
    public static final String START = "start";
    public static final String END = "end";

    public static final String AUTO = "auto";
    public static final String NONE = "none";
    public static final String BOX_NONE = "box-none";

    public static final String MIN_WIDTH = "minWidth";
    public static final String MAX_WIDTH = "maxWidth";
    public static final String MIN_HEIGHT = "minHeight";
    public static final String MAX_HEIGHT = "maxHeight";

    public static final String ASPECT_RATIO = "aspectRatio";

    // Props that sometimes may prevent us from collapsing views
    public static final String POINTER_EVENTS = "pointerEvents";

    // Props that affect more than just layout
    public static final String ENABLED = "enabled";
    public static final String BACKGROUND_COLOR = "backgroundColor";
    public static final String COLOR = "color";
    public static final String FONT_SIZE = "fontSize";
    public static final String FONT_WEIGHT = "fontWeight";
    public static final String FONT_STYLE = "fontStyle";
    public static final String FONT_VARIANT = "fontVariant";
    public static final String FONT_FAMILY = "fontFamily";
    public static final String LINE_HEIGHT = "lineHeight";
    public static final String LETTER_SPACING = "letterSpacing";
    public static final String NEEDS_OFFSCREEN_ALPHA_COMPOSITING = "needsOffscreenAlphaCompositing";
    public static final String NUMBER_OF_LINES = "numberOfLines";
    public static final String ELLIPSIZE_MODE = "ellipsizeMode";
    public static final String ON = "on";
    public static final String RESIZE_MODE = "resizeMode";
    public static final String RESIZE_METHOD = "resizeMethod";
    public static final String TEXT_ALIGN = "textAlign";
    public static final String TEXT_ALIGN_VERTICAL = "textAlignVertical";
    public static final String TEXT_DECORATION_LINE = "textDecorationLine";
    public static final String TEXT_BREAK_STRATEGY = "textBreakStrategy";
    public static final String OPACITY = "opacity";
    public static final String OVERFLOW = "overflow";

    public static final String HIDDEN = "hidden";
    public static final String SCROLL = "scroll";
    public static final String VISIBLE = "visible";

    public static final String ALLOW_FONT_SCALING = "allowFontScaling";
    public static final String MAX_FONT_SIZE_MULTIPLIER = "maxFontSizeMultiplier";
    public static final String INCLUDE_FONT_PADDING = "includeFontPadding";

    public static final String BORDER_WIDTH = "borderWidth";
    public static final String BORDER_LEFT_WIDTH = "borderLeftWidth";
    public static final String BORDER_START_WIDTH = "borderStartWidth";
    public static final String BORDER_END_WIDTH = "borderEndWidth";
    public static final String BORDER_TOP_WIDTH = "borderTopWidth";
    public static final String BORDER_RIGHT_WIDTH = "borderRightWidth";
    public static final String BORDER_BOTTOM_WIDTH = "borderBottomWidth";
    public static final String BORDER_RADIUS = "borderRadius";
    public static final String BORDER_TOP_LEFT_RADIUS = "borderTopLeftRadius";
    public static final String BORDER_TOP_RIGHT_RADIUS = "borderTopRightRadius";
    public static final String BORDER_BOTTOM_LEFT_RADIUS = "borderBottomLeftRadius";
    public static final String BORDER_BOTTOM_RIGHT_RADIUS = "borderBottomRightRadius";
    public static final String BORDER_COLOR = "borderColor";
    public static final String BORDER_LEFT_COLOR = "borderLeftColor";
    public static final String BORDER_RIGHT_COLOR = "borderRightColor";
    public static final String BORDER_TOP_COLOR = "borderTopColor";
    public static final String BORDER_BOTTOM_COLOR = "borderBottomColor";
    public static final String BORDER_TOP_START_RADIUS = "borderTopStartRadius";
    public static final String BORDER_TOP_END_RADIUS = "borderTopEndRadius";
    public static final String BORDER_BOTTOM_START_RADIUS = "borderBottomStartRadius";
    public static final String BORDER_BOTTOM_END_RADIUS = "borderBottomEndRadius";
    public static final String BORDER_START_COLOR = "borderStartColor";
    public static final String BORDER_END_COLOR = "borderEndColor";
    public static final String ON_LAYOUT = "onLayout";

    public static final String TRANSFORM = "transform";
    public static final String ELEVATION = "elevation";
    public static final String Z_INDEX = "zIndex";
    public static final String RENDER_TO_HARDWARE_TEXTURE = "renderToHardwareTextureAndroid";
    public static final String ACCESSIBILITY_LABEL = "accessibilityLabel";
    public static final String ACCESSIBILITY_HINT = "accessibilityHint";
    public static final String ACCESSIBILITY_LIVE_REGION = "accessibilityLiveRegion";
    public static final String ACCESSIBILITY_ROLE = "accessibilityRole";
    public static final String ACCESSIBILITY_STATE = "accessibilityState";
    public static final String ACCESSIBILITY_ACTIONS = "accessibilityActions";
    public static final String ACCESSIBILITY_VALUE = "accessibilityValue";
    public static final String IMPORTANT_FOR_ACCESSIBILITY = "importantForAccessibility";

    // DEPRECATED
    public static final String ROTATION = "rotation";
    public static final String SCALE_X = "scaleX";
    public static final String SCALE_Y = "scaleY";
    public static final String TRANSLATE_X = "translateX";
    public static final String TRANSLATE_Y = "translateY";

    /** Used to locate views in end-to-end (UI) tests. */
    public static final String TEST_ID = "testID";

    public static final String NATIVE_ID = "nativeID";

    public static final int[] BORDER_SPACING_TYPES = { Spacing.ALL, Spacing.START, Spacing.END, Spacing.TOP,
            Spacing.BOTTOM, Spacing.LEFT, Spacing.RIGHT };
    public static final int[] PADDING_MARGIN_SPACING_TYPES = { Spacing.ALL, Spacing.VERTICAL, Spacing.HORIZONTAL,
            Spacing.START, Spacing.END, Spacing.TOP, Spacing.BOTTOM, Spacing.LEFT, Spacing.RIGHT, };
    public static final int[] POSITION_SPACING_TYPES = { Spacing.START, Spacing.END, Spacing.TOP, Spacing.BOTTOM };

    private static final HashSet<String> LAYOUT_ONLY_PROPS = new HashSet<>(
            Arrays.asList(ALIGN_SELF, ALIGN_ITEMS, COLLAPSABLE, FLEX, FLEX_BASIS, FLEX_DIRECTION, FLEX_GROW,
                    FLEX_SHRINK, FLEX_WRAP, JUSTIFY_CONTENT, ALIGN_CONTENT, DISPLAY,

                    /* position */
                    POSITION, RIGHT, TOP, BOTTOM, LEFT, START, END,

                    /* dimensions */
                    WIDTH, HEIGHT, MIN_WIDTH, MAX_WIDTH, MIN_HEIGHT, MAX_HEIGHT,

                    /* margins */
                    MARGIN, MARGIN_VERTICAL, MARGIN_HORIZONTAL, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP,
                    MARGIN_BOTTOM, MARGIN_START, MARGIN_END,

                    /* paddings */
                    PADDING, PADDING_VERTICAL, PADDING_HORIZONTAL, PADDING_LEFT, PADDING_RIGHT, PADDING_TOP,
                    PADDING_BOTTOM, PADDING_START, PADDING_END));

    public static boolean isLayoutOnly(ReadableMap map, String prop) {
        if (LAYOUT_ONLY_PROPS.contains(prop)) {
            return true;
        } else if (POINTER_EVENTS.equals(prop)) {
            String value = map.getString(prop);
            return AUTO.equals(value) || BOX_NONE.equals(value);
        }

        switch (prop) {
        case OPACITY:
            // null opacity behaves like opacity = 1
            // Ignore if explicitly set to default opacity.
            return map.isNull(OPACITY) || map.getDouble(OPACITY) == 1d;
        case BORDER_RADIUS: // Without a background color or border width set, a border won't show.
            if (map.hasKey(BACKGROUND_COLOR) && map.getInt(BACKGROUND_COLOR) != Color.TRANSPARENT) {
                return false;
            }
            if (map.hasKey(BORDER_WIDTH) && !map.isNull(BORDER_WIDTH) && map.getDouble(BORDER_WIDTH) != 0d) {
                return false;
            }
            return true;
        case BORDER_LEFT_COLOR:
            return !map.isNull(BORDER_LEFT_COLOR) && map.getInt(BORDER_LEFT_COLOR) == Color.TRANSPARENT;
        case BORDER_RIGHT_COLOR:
            return !map.isNull(BORDER_RIGHT_COLOR) && map.getInt(BORDER_RIGHT_COLOR) == Color.TRANSPARENT;
        case BORDER_TOP_COLOR:
            return !map.isNull(BORDER_TOP_COLOR) && map.getInt(BORDER_TOP_COLOR) == Color.TRANSPARENT;
        case BORDER_BOTTOM_COLOR:
            return !map.isNull(BORDER_BOTTOM_COLOR) && map.getInt(BORDER_BOTTOM_COLOR) == Color.TRANSPARENT;
        case BORDER_WIDTH:
            return map.isNull(BORDER_WIDTH) || map.getDouble(BORDER_WIDTH) == 0d;
        case BORDER_LEFT_WIDTH:
            return map.isNull(BORDER_LEFT_WIDTH) || map.getDouble(BORDER_LEFT_WIDTH) == 0d;
        case BORDER_TOP_WIDTH:
            return map.isNull(BORDER_TOP_WIDTH) || map.getDouble(BORDER_TOP_WIDTH) == 0d;
        case BORDER_RIGHT_WIDTH:
            return map.isNull(BORDER_RIGHT_WIDTH) || map.getDouble(BORDER_RIGHT_WIDTH) == 0d;
        case BORDER_BOTTOM_WIDTH:
            return map.isNull(BORDER_BOTTOM_WIDTH) || map.getDouble(BORDER_BOTTOM_WIDTH) == 0d;
        case OVERFLOW:
            return map.isNull(OVERFLOW) || VISIBLE.equals(map.getString(OVERFLOW));
        default:
            return false;
        }
    }
}