/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.react.views.art;
import android.view.View;
import com.facebook.react.uimanager.ReactShadowNode;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewManager;
/**
* ViewManager for all shadowed ART views: Group, Shape and Text. Since these never get rendered
* into native views and don't need any logic (all the logic is in {@link ARTSurfaceView}), this
* "stubbed" ViewManager is used for all of them.
*/
public class ARTRenderableViewManager extends ViewManager<View, ReactShadowNode> {
/* package */ static final String CLASS_GROUP = "ARTGroup";
/* package */ static final String CLASS_SHAPE = "ARTShape";
/* package */ static final String CLASS_TEXT = "ARTText";
private final String mClassName;
public static ARTRenderableViewManager createARTGroupViewManager() {
return new ARTGroupViewManager();
}
public static ARTRenderableViewManager createARTShapeViewManager() {
return new ARTShapeViewManager();
}
public static ARTRenderableViewManager createARTTextViewManager() {
return new ARTTextViewManager();
}
/* package */ ARTRenderableViewManager(String className) {
mClassName = className;
}
@Override
public String getName() {
return mClassName;
}
@Override
public ReactShadowNode createShadowNodeInstance() {
if (CLASS_GROUP.equals(mClassName)) {
return new ARTGroupShadowNode();
} else if (CLASS_SHAPE.equals(mClassName)) {
return new ARTShapeShadowNode();
} else if (CLASS_TEXT.equals(mClassName)) {
return new ARTTextShadowNode();
} else {
throw new IllegalStateException("Unexpected type " + mClassName);
}
}
@Override
public Class<? extends ReactShadowNode> getShadowNodeClass() {
if (CLASS_GROUP.equals(mClassName)) {
return ARTGroupShadowNode.class;
} else if (CLASS_SHAPE.equals(mClassName)) {
return ARTShapeShadowNode.class;
} else if (CLASS_TEXT.equals(mClassName)) {
return ARTTextShadowNode.class;
} else {
throw new IllegalStateException("Unexpected type " + mClassName);
}
}
@Override
protected View createViewInstance(ThemedReactContext reactContext) {
throw new IllegalStateException("ARTShape does not map into a native view");
}
@Override
public void updateExtraData(View root, Object extraData) {
throw new IllegalStateException("ARTShape does not map into a native view");
}
}