diff --git a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerDelegate.java new file mode 100644 index 00000000000..2f7b5d0853d --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerDelegate.java @@ -0,0 +1,56 @@ +/** +* 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. +* +* @generated by codegen project: GeneratePropsJavaDelegate.js +*/ + +package com.facebook.react.viewmanagers; + +import android.view.View; +import androidx.annotation.Nullable; +import com.facebook.react.bridge.ReadableArray; +import com.facebook.react.uimanager.BaseViewManagerDelegate; +import com.facebook.react.uimanager.BaseViewManagerInterface; +import com.facebook.react.uimanager.LayoutShadowNode; + +public class AndroidViewPagerManagerDelegate & AndroidViewPagerManagerInterface> extends BaseViewManagerDelegate { + public AndroidViewPagerManagerDelegate(U viewManager) { + super(viewManager); + } + @Override + public void setProperty(T view, String propName, @Nullable Object value) { + switch (propName) { + case "initialPage": + mViewManager.setInitialPage(view, value == null ? 0 : ((Double) value).intValue()); + break; + case "pageMargin": + mViewManager.setPageMargin(view, value == null ? 0 : ((Double) value).intValue()); + break; + case "peekEnabled": + mViewManager.setPeekEnabled(view, value == null ? false : (boolean) value); + break; + case "keyboardDismissMode": + mViewManager.setKeyboardDismissMode(view, (String) value); + break; + case "scrollEnabled": + mViewManager.setScrollEnabled(view, value == null ? true : (boolean) value); + break; + default: + super.setProperty(view, propName, value); + } + } + + public void receiveCommand(AndroidViewPagerManagerInterface viewManager, T view, String commandName, ReadableArray args) { + switch (commandName) { + case "setPage": + viewManager.setPage(view, args.getInt(0)); + break; + case "setPageWithoutAnimation": + viewManager.setPageWithoutAnimation(view, args.getInt(0)); + break; + } + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerInterface.java b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerInterface.java new file mode 100644 index 00000000000..2f9e892400e --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidViewPagerManagerInterface.java @@ -0,0 +1,23 @@ +/** +* 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. +* +* @generated by codegen project: GeneratePropsJavaInterface.js +*/ + +package com.facebook.react.viewmanagers; + +import android.view.View; +import androidx.annotation.Nullable; + +public interface AndroidViewPagerManagerInterface { + void setInitialPage(T view, int value); + void setPageMargin(T view, int value); + void setPeekEnabled(T view, boolean value); + void setKeyboardDismissMode(T view, @Nullable String value); + void setScrollEnabled(T view, boolean value); + void setPage(T view, int page); + void setPageWithoutAnimation(T view, int page); +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/BUCK index b05735a98ab..bcde344867c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/BUCK @@ -25,5 +25,6 @@ rn_android_library( react_native_target("java/com/facebook/react/uimanager:uimanager"), react_native_target("java/com/facebook/react/uimanager/annotations:annotations"), react_native_target("java/com/facebook/react/views/scroll:scroll"), + react_native_target("java/com/facebook/react/viewmanagers:viewmanagers"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPagerManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPagerManager.java index 41215245a67..010cdfa2872 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPagerManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/viewpager/ReactViewPagerManager.java @@ -16,18 +16,28 @@ import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.PixelUtil; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ViewGroupManager; +import com.facebook.react.uimanager.ViewManagerDelegate; import com.facebook.react.uimanager.annotations.ReactProp; +import com.facebook.react.viewmanagers.AndroidViewPagerManagerDelegate; +import com.facebook.react.viewmanagers.AndroidViewPagerManagerInterface; import java.util.Map; /** Instance of {@link ViewManager} that provides native {@link ViewPager} view. */ @ReactModule(name = ReactViewPagerManager.REACT_CLASS) -public class ReactViewPagerManager extends ViewGroupManager { +public class ReactViewPagerManager extends ViewGroupManager + implements AndroidViewPagerManagerInterface { public static final String REACT_CLASS = "AndroidViewPager"; public static final int COMMAND_SET_PAGE = 1; public static final int COMMAND_SET_PAGE_WITHOUT_ANIMATION = 2; + private final ViewManagerDelegate mDelegate; + + public ReactViewPagerManager() { + mDelegate = new AndroidViewPagerManagerDelegate<>(this); + } + @Override public String getName() { return REACT_CLASS; @@ -38,6 +48,7 @@ public class ReactViewPagerManager extends ViewGroupManager { return new ReactViewPager(reactContext); } + @Override @ReactProp(name = "scrollEnabled", defaultBoolean = true) public void setScrollEnabled(ReactViewPager viewPager, boolean value) { viewPager.setScrollEnabled(value); @@ -129,13 +140,36 @@ public class ReactViewPagerManager extends ViewGroupManager { parent.removeViewFromAdapter(index); } - @ReactProp(name = "pageMargin", defaultFloat = 0) - public void setPageMargin(ReactViewPager pager, float margin) { + @Override + @ReactProp(name = "pageMargin", defaultInt = 0) + public void setPageMargin(ReactViewPager pager, int margin) { pager.setPageMargin((int) PixelUtil.toPixelFromDIP(margin)); } + @Override @ReactProp(name = "peekEnabled", defaultBoolean = false) public void setPeekEnabled(ReactViewPager pager, boolean peekEnabled) { pager.setClipToPadding(!peekEnabled); } + + @Override + public void setInitialPage(ReactViewPager view, int value) {} + + @Override + public void setKeyboardDismissMode(ReactViewPager view, @Nullable String value) {} + + @Override + public void setPage(ReactViewPager view, int page) { + // TODO(T52835863): Implement when view commands start using delegates generated by JS. + } + + @Override + public void setPageWithoutAnimation(ReactViewPager view, int page) { + // TODO(T52835863): Implement when view commands start using delegates generated by JS. + } + + @Override + public ViewManagerDelegate getDelegate() { + return mDelegate; + } }