diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/BUCK new file mode 100644 index 00000000000..757acc069e0 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/BUCK @@ -0,0 +1,23 @@ +load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library") + +rn_android_library( + name = "unimplementedview", + srcs = glob(["*.java"]), + is_androidx = True, + provided_deps = [ + react_native_dep("third-party/android/support/v4:lib-support-v4"), + react_native_dep("third-party/android/support/v7/appcompat:appcompat"), + ], + visibility = [ + "PUBLIC", + ], + deps = [ + react_native_dep("third-party/java/jsr-305:jsr-305"), + react_native_target("java/com/facebook/react/bridge:bridge"), + react_native_target("java/com/facebook/react/common:common"), + react_native_target("java/com/facebook/react/module/annotations:annotations"), + react_native_target("java/com/facebook/react/touch:touch"), + react_native_target("java/com/facebook/react/uimanager:uimanager"), + react_native_target("java/com/facebook/react/uimanager/annotations:annotations"), + ], +) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedView.java b/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedView.java new file mode 100644 index 00000000000..f32e6eb0428 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedView.java @@ -0,0 +1,35 @@ +/** + * 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.views.unimplementedview; + +import android.content.Context; +import android.graphics.Color; +import android.view.Gravity; +import android.widget.LinearLayout; +import androidx.appcompat.widget.AppCompatTextView; + +public class ReactUnimplementedView extends LinearLayout { + private AppCompatTextView mTextView; + + public ReactUnimplementedView(Context context) { + super(context); + mTextView = new AppCompatTextView(context); + mTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT)); + mTextView.setGravity(Gravity.CENTER); + mTextView.setTextColor(Color.WHITE); + + setBackgroundColor(0x55ff0000); + setGravity(Gravity.CENTER_HORIZONTAL); + setOrientation(LinearLayout.VERTICAL); + addView(mTextView); + } + + public void setName(String name) { + mTextView.setText("'" + name + "' is not Fabric compatible yet."); + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedViewManager.java new file mode 100644 index 00000000000..9d8f685d2b4 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedViewManager.java @@ -0,0 +1,41 @@ +/** + * 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.views.unimplementedview; + +import static com.facebook.react.views.unimplementedview.ReactUnimplementedViewManager.REACT_CLASS; + +import com.facebook.react.module.annotations.ReactModule; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.ViewGroupManager; +import com.facebook.react.uimanager.annotations.ReactProp; +import javax.annotation.Nullable; + +/** + * ViewManager for {@link ReactUnimplementedView} to represent a component that is not + * yet supported. + */ +@ReactModule(name = ReactUnimplementedViewManager.REACT_CLASS) +public class ReactUnimplementedViewManager extends ViewGroupManager { + + public static final String REACT_CLASS = "UnimplementedNativeView"; + + @Override + protected ReactUnimplementedView createViewInstance(ThemedReactContext reactContext) { + return new ReactUnimplementedView(reactContext); + } + + @Override + public String getName() { + return REACT_CLASS; + } + + @ReactProp(name = "name") + public void setName(ReactUnimplementedView view, @Nullable String name) { + view.setName(name); + } +}