diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index ab4c7e7f..22dd6f85 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -37,15 +37,6 @@ jobs: java-version: '17' cache: 'gradle' - - name: Install Maestro CLI - run: | - export MAESTRO_VERSION=1.31.0; curl -Ls "https://get.maestro.mobile.dev" | bash - brew tap facebook/fb - brew install facebook/fb/idb-companion - - - name: Add Maestro to path - run: echo "${HOME}/.maestro/bin" >> $GITHUB_PATH - - name: Bundle app run: bun run build:android working-directory: example @@ -73,22 +64,3 @@ jobs: disable-animations: false script: | bun example:android:release - bun test:e2e:android - - - name: Upload report - if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: E2E Report - path: | - ${{ github.workspace }}/*.mp4 - ${{ github.workspace }}/*.png - ${{ github.workspace }}/report*.xml - ~/.maestro/tests/**/* - - - name: Store tests result - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: e2e_android_report - path: | - report.xml diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 7cbf53c0..e67ff470 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -49,19 +49,6 @@ jobs: run: bun pods working-directory: example - - name: Install Maestro CLI - run: | - export MAESTRO_VERSION=1.31.0; curl -Ls "https://get.maestro.mobile.dev" | bash - brew tap facebook/fb - brew install facebook/fb/idb-companion - - - name: Add Maestro to path - run: echo "${HOME}/.maestro/bin" >> $GITHUB_PATH - - name: Build iOS App run: | bun example:ios:release - - - name: Run tests - run: | - bun test:e2e:ios diff --git a/android/src/main/java/com/reactnativepagerview/Helper.kt b/android/src/main/java/com/reactnativepagerview/Helper.kt deleted file mode 100644 index 9c6bd8c1..00000000 --- a/android/src/main/java/com/reactnativepagerview/Helper.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.reactnativepagerview - -import android.content.Context -import android.content.ContextWrapper -import android.view.View -import com.facebook.react.bridge.ReactContext - - -class Helper { - companion object { - // https://github.com/facebook/react-native/blob/v0.64.2/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java#L138 - fun getReactContext(view: View): ReactContext? { - var context: Context = view.getContext() - if (context !is ReactContext && context is ContextWrapper) { - context = context.baseContext - } - return if (context is ReactContext) context else null; - } - } - -} \ No newline at end of file diff --git a/android/src/fabric/java/com/reactnativepagerview/PagerViewViewManager.kt b/android/src/main/java/com/reactnativepagerview/PagerViewViewManager.kt similarity index 100% rename from android/src/fabric/java/com/reactnativepagerview/PagerViewViewManager.kt rename to android/src/main/java/com/reactnativepagerview/PagerViewViewManager.kt diff --git a/android/src/paper/java/com/reactnativepagerview/PagerViewViewManager.kt b/android/src/paper/java/com/reactnativepagerview/PagerViewViewManager.kt deleted file mode 100644 index 66ad7b60..00000000 --- a/android/src/paper/java/com/reactnativepagerview/PagerViewViewManager.kt +++ /dev/null @@ -1,172 +0,0 @@ -package com.reactnativepagerview - -import android.view.View -import android.view.ViewGroup -import androidx.viewpager2.widget.ViewPager2 -import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback -import com.facebook.infer.annotation.Assertions -import com.facebook.react.bridge.ReadableArray -import com.facebook.react.common.MapBuilder -import com.facebook.react.uimanager.PixelUtil -import com.facebook.react.uimanager.ThemedReactContext -import com.facebook.react.uimanager.UIManagerModule -import com.facebook.react.uimanager.ViewGroupManager -import com.facebook.react.uimanager.annotations.ReactProp -import com.facebook.react.uimanager.events.EventDispatcher -import com.reactnativepagerview.event.PageScrollEvent -import com.reactnativepagerview.event.PageScrollStateChangedEvent -import com.reactnativepagerview.event.PageSelectedEvent - - -class PagerViewViewManager : ViewGroupManager() { - private lateinit var eventDispatcher: EventDispatcher - - override fun getName(): String { - return PagerViewViewManagerImpl.NAME - } - - override fun createViewInstance(reactContext: ThemedReactContext): NestedScrollableHost { - val host = NestedScrollableHost(reactContext) - host.id = View.generateViewId() - host.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) - host.isSaveEnabled = false - val vp = ViewPager2(reactContext) - vp.adapter = ViewPagerAdapter() - //https://github.com/callstack/react-native-viewpager/issues/183 - vp.isSaveEnabled = false - eventDispatcher = reactContext.getNativeModule(UIManagerModule::class.java)!!.eventDispatcher - - vp.post { - vp.registerOnPageChangeCallback(object : OnPageChangeCallback() { - override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) { - super.onPageScrolled(position, positionOffset, positionOffsetPixels) - eventDispatcher.dispatchEvent( - PageScrollEvent(host.id, position, positionOffset)) - } - - override fun onPageSelected(position: Int) { - super.onPageSelected(position) - eventDispatcher.dispatchEvent( - PageSelectedEvent(host.id, position)) - } - - override fun onPageScrollStateChanged(state: Int) { - super.onPageScrollStateChanged(state) - val pageScrollState: String = when (state) { - ViewPager2.SCROLL_STATE_IDLE -> "idle" - ViewPager2.SCROLL_STATE_DRAGGING -> "dragging" - ViewPager2.SCROLL_STATE_SETTLING -> "settling" - else -> throw IllegalStateException("Unsupported pageScrollState") - } - eventDispatcher.dispatchEvent( - PageScrollStateChangedEvent(host.id, pageScrollState)) - } - }) - - eventDispatcher.dispatchEvent(PageSelectedEvent(host.id, vp.currentItem)) - } - host.addView(vp) - return host - } - - override fun addView(host: NestedScrollableHost, child: View, index: Int) { - PagerViewViewManagerImpl.addView(host, child, index) - } - - override fun getChildCount(parent: NestedScrollableHost) = PagerViewViewManagerImpl.getChildCount(parent) - - override fun getChildAt(parent: NestedScrollableHost, index: Int): View { - return PagerViewViewManagerImpl.getChildAt(parent, index) - } - - override fun removeView(parent: NestedScrollableHost, view: View) { - PagerViewViewManagerImpl.removeView(parent, view) - } - - override fun removeAllViews(parent: NestedScrollableHost) { - PagerViewViewManagerImpl.removeAllViews(parent) - } - - override fun removeViewAt(parent: NestedScrollableHost, index: Int) { - PagerViewViewManagerImpl.removeViewAt(parent, index) - } - - override fun needsCustomLayoutForChildren(): Boolean { - return PagerViewViewManagerImpl.needsCustomLayoutForChildren() - } - - @ReactProp(name = "scrollEnabled", defaultBoolean = true) - fun setScrollEnabled(host: NestedScrollableHost, value: Boolean) { - PagerViewViewManagerImpl.setScrollEnabled(host, value) - } - - @ReactProp(name = "initialPage", defaultInt = 0) - fun setInitialPage(host: NestedScrollableHost, value: Int) { - PagerViewViewManagerImpl.setInitialPage(host, value) - } - - @ReactProp(name = "orientation") - fun setOrientation(host: NestedScrollableHost, value: String) { - PagerViewViewManagerImpl.setOrientation(host, value) - } - - @ReactProp(name = "offscreenPageLimit", defaultInt = ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT) - operator fun set(host: NestedScrollableHost, value: Int) { - PagerViewViewManagerImpl.setOffscreenPageLimit(host, value) - } - - @ReactProp(name = "overScrollMode") - fun setOverScrollMode(host: NestedScrollableHost, value: String) { - PagerViewViewManagerImpl.setOverScrollMode(host, value) - } - - @ReactProp(name = "layoutDirection") - fun setLayoutDirection(host: NestedScrollableHost, value: String) { - PagerViewViewManagerImpl.setLayoutDirection(host, value) - } - - override fun getExportedCustomDirectEventTypeConstants(): MutableMap> { - return MapBuilder.of( - PageScrollEvent.EVENT_NAME, MapBuilder.of("registrationName", "onPageScroll"), - PageScrollStateChangedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onPageScrollStateChanged"), - PageSelectedEvent.EVENT_NAME, MapBuilder.of("registrationName", "onPageSelected")) - } - - override fun receiveCommand(root: NestedScrollableHost, commandId: String, args: ReadableArray?) { - super.receiveCommand(root, commandId, args) - val view = PagerViewViewManagerImpl.getViewPager(root) - Assertions.assertNotNull(view) - Assertions.assertNotNull(args) - val childCount = view.adapter?.itemCount - - when (commandId) { - COMMAND_SET_PAGE, COMMAND_SET_PAGE_WITHOUT_ANIMATION -> { - val pageIndex = args!!.getInt(0) - val canScroll = childCount != null && childCount > 0 && pageIndex >= 0 && pageIndex < childCount - if (canScroll) { - val scrollWithAnimation = commandId == COMMAND_SET_PAGE - PagerViewViewManagerImpl.setCurrentItem(view, pageIndex, scrollWithAnimation) - } - } - COMMAND_SET_SCROLL_ENABLED -> { - view.isUserInputEnabled = args!!.getBoolean(0) - } - else -> throw IllegalArgumentException(String.format( - "Unsupported command %d received by %s.", - commandId, - javaClass.simpleName)) - } - } - - @ReactProp(name = "pageMargin", defaultInt = 0) - fun setPageMargin(host: NestedScrollableHost, margin: Int) { - PagerViewViewManagerImpl.setPageMargin(host, margin) - } - - companion object { - private const val COMMAND_SET_PAGE = "setPage" - private const val COMMAND_SET_PAGE_WITHOUT_ANIMATION = "setPageWithoutAnimation" - private const val COMMAND_SET_SCROLL_ENABLED = "setScrollEnabledImperatively" - } -} - diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 0a2cb8f7..27891d05 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1332,7 +1332,7 @@ PODS: - React-jsiexecutor - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - react-native-pager-view (6.7.1): + - react-native-pager-view (6.8.1): - DoubleConversion - glog - hermes-engine @@ -2321,7 +2321,7 @@ SPEC CHECKSUMS: React-logger: 8edfcedc100544791cd82692ca5a574240a16219 React-Mapbuffer: c3f4b608e4a59dd2f6a416ef4d47a14400194468 React-microtasksnativemodule: 054f34e9b82f02bd40f09cebd4083828b5b2beb6 - react-native-pager-view: f238ed7fb53458bd03366944a33686f067c83e9a + react-native-pager-view: 919534782a0489f7e2aeeb9a8b8959edfd3f067a react-native-safe-area-context: 562163222d999b79a51577eda2ea8ad2c32b4d06 React-NativeModulesApple: 2c4377e139522c3d73f5df582e4f051a838ff25e React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c diff --git a/example/src/App.tsx b/example/src/App.tsx index a755a9da..eb33e443 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -107,9 +107,6 @@ export function Navigation() { name="PagerView Example" component={App} options={{ - title: global?.nativeFabricUIManager - ? 'PagerView Example (Fabric)' - : 'PagerView Example', headerRight: () => (