From f5dcc5678c05398eaf818a9c6d0d088560c06c78 Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Thu, 16 Jul 2026 15:53:05 -0700 Subject: [PATCH 1/8] Android: opt-in screen snapshot during removal transition (snapshotOnRemoval) When a screen opts in, freeze its last presented frame (one bounded PixelCopy, <=50ms, measured 6-15ms) into the Screen's ViewOverlay at removal-transition start, so the pop animation always shows real pixels even if surface-backed content (e.g. a mid-fling WebView) stops rendering mid-transition. Released at transition end, animation cancel, or detach. Opt-in only (default false): the capture reads the composited window, which is only correct for opaque full-window screens. Ordering is anchored by the synchronous main-thread capture in ScreenStack.onUpdate immediately before the removal transaction; Fabric-thread callers get a posted early capture (first successful capture wins). Timeout bitmap ownership uses an atomic handoff so a timed-out PixelCopy can never race a recycle. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../java/com/swmansion/rnscreens/Screen.kt | 147 ++++++++++++++++++ .../com/swmansion/rnscreens/ScreenStack.kt | 7 + .../swmansion/rnscreens/ScreenViewManager.kt | 8 + .../events/ScreenAnimationDelegate.kt | 6 +- lib/typescript/types.d.ts | 7 + src/fabric/ScreenNativeComponent.ts | 1 + src/types.tsx | 9 ++ 7 files changed, 184 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index 2b7dcff5..aa7ef19b 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -2,15 +2,27 @@ package com.swmansion.rnscreens import android.annotation.SuppressLint import android.content.pm.ActivityInfo +import android.graphics.Bitmap import android.graphics.Paint +import android.graphics.Rect +import android.graphics.drawable.BitmapDrawable +import android.os.Build +import android.os.Handler +import android.os.HandlerThread +import android.os.Looper import android.os.Parcelable +import android.util.Log import android.util.SparseArray import android.view.MotionEvent +import android.view.PixelCopy import android.view.View import android.view.ViewGroup import android.view.WindowManager import android.webkit.WebView import android.widget.ImageView +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicBoolean import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.children import androidx.fragment.app.Fragment @@ -459,12 +471,127 @@ class Screen( fun startRemovalTransition() { if (!isBeingRemoved) { + captureScreenSnapshotForRemoval() isBeingRemoved = true startTransitionRecursive(this) } } + // --- Screen-level removal snapshot ------------------------------------------------------- + // The exit animation renders this screen while surface-backed content (e.g. a mid-fling + // WebView) may stop producing pixels, which flashes the window background through. When a + // screen opts in via the `snapshotOnRemoval` prop, freeze its last presented frame into its + // ViewOverlay for the duration of the removal transition so the pop animates real pixels. + // Opt-in only: the capture reads the composited window, which is only correct for opaque, + // full-window screens (e.g. the Reader) — never enable it for translucent/partial screens. + + /** Set from JS via the `snapshotOnRemoval` prop; default off. */ + var snapshotOnRemoval: Boolean = false + + private var removalSnapshotBitmap: Bitmap? = null + private var removalSnapshotDrawable: BitmapDrawable? = null + + // Ordering note: Fabric may call startRemovalTransition() from its mounting thread, where the + // capture is posted to the main looper. The ordering guarantee (capture happens before the + // removal transaction's animation) does not rest on that post: ScreenStack.onUpdate() invokes + // captureScreenSnapshotForRemoval() synchronously on the main thread immediately before it + // creates the removal transaction, and whichever call runs first wins via the bitmap guard. + fun captureScreenSnapshotForRemoval() { + if (!snapshotOnRemoval) return + if (removalSnapshotBitmap != null) return + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return + if (Looper.myLooper() == Looper.getMainLooper()) { + captureScreenSnapshotOnMain() + } else { + post { captureScreenSnapshotOnMain() } + } + } + + private fun captureScreenSnapshotOnMain() { + // Recheck the opt-in: a posted capture can outlive a prop flip on a recycled screen. + if (!snapshotOnRemoval) return + if (removalSnapshotBitmap != null) return + if (!isAttachedToWindow || width <= 0 || height <= 0) return + val activity = reactContext.currentActivity ?: return + val window = activity.window + val decor = window.decorView + + val location = IntArray(2) + getLocationInWindow(location) + val srcRect = Rect(location[0], location[1], location[0] + width, location[1] + height) + // Only capture a fully on-window screen; a clipped rect would be stretched over the + // screen's full bounds when displayed. + if (!srcRect.intersect(0, 0, decor.width, decor.height)) return + if (srcRect.width() != width || srcRect.height() != height) return + + val bitmap = + try { + Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) + } catch (e: OutOfMemoryError) { + Log.w(TAG, "removal snapshot allocation failed", e) + return + } + + val latch = CountDownLatch(1) + val resultHolder = intArrayOf(PixelCopy.ERROR_UNKNOWN) + // Bitmap ownership on timeout: PixelCopy cannot be cancelled, so the copy may still be + // writing into the bitmap after the bounded wait expires. Whoever finishes second (the + // callback, or the timed-out waiter observing the callback already ran) recycles it; + // recycling from the waiter while the copy is in flight would be a native UAF. + val loserRecycles = AtomicBoolean(false) + try { + PixelCopy.request(window, srcRect, bitmap, { copyResult -> + resultHolder[0] = copyResult + latch.countDown() + if (loserRecycles.getAndSet(true)) { + // The waiter already timed out and abandoned the bitmap — we own cleanup. + bitmap.recycle() + } + }, snapshotHandler()) + } catch (e: IllegalArgumentException) { + bitmap.recycle() + return + } + + val completed = + try { + latch.await(SNAPSHOT_TIMEOUT_MS, TimeUnit.MILLISECONDS) + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + false + } + + if (!completed) { + // Abandon: if the callback already finished in the meantime we recycle, otherwise + // the callback sees the flag and recycles when the copy completes. + if (loserRecycles.getAndSet(true)) { + bitmap.recycle() + } + return + } + if (resultHolder[0] != PixelCopy.SUCCESS) { + // Copy finished (callback ran) but failed; the bitmap is no longer being written. + bitmap.recycle() + return + } + + val drawable = BitmapDrawable(resources, bitmap) + drawable.setBounds(0, 0, width, height) + removalSnapshotBitmap = bitmap + removalSnapshotDrawable = drawable + overlay.add(drawable) + invalidate() + } + + fun releaseRemovalSnapshot() { + removalSnapshotDrawable?.let { overlay.remove(it) } + removalSnapshotDrawable = null + removalSnapshotBitmap = null + } + // --- end screen-level removal snapshot ---------------------------------------------------- + fun endRemovalTransition() { + releaseRemovalSnapshot() if (!isBeingRemoved) { return } @@ -563,6 +690,11 @@ class Screen( } } + override fun onDetachedFromWindow() { + releaseRemovalSnapshot() + super.onDetachedFromWindow() + } + private fun dispatchSheetDetentChanged( detentIndex: Int, isStable: Boolean, @@ -650,6 +782,21 @@ class Screen( * This value describes value in sheet detents array that will be treated as `fitToContents` option. */ const val SHEET_FIT_TO_CONTENTS = -1.0 + + private const val SNAPSHOT_TIMEOUT_MS = 50L + + private var sSnapshotThread: HandlerThread? = null + private var sSnapshotHandler: Handler? = null + + @JvmStatic + private fun snapshotHandler(): Handler { + sSnapshotHandler?.let { return it } + val thread = HandlerThread("RNSScreenSnapshot").also { it.start() } + val handler = Handler(thread.looper) + sSnapshotThread = thread + sSnapshotHandler = handler + return handler + } } } diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt index 9894cd4b..6368a5c1 100644 --- a/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt @@ -220,6 +220,13 @@ class ScreenStack( } } + if (!shouldUseOpenAnimation && topScreenWillChange) { + // Close animation: the current top screen is outgoing. Freeze its last presented + // frame before the removal transaction starts animating it (covers dismissal paths + // where Fabric's removeViewAt — and thus startRemovalTransition — runs later). + topScreenWrapper?.screen?.captureScreenSnapshotForRemoval() + } + createTransaction().let { transaction -> if (stackAnimation != null) { transaction.setTweenAnimations(stackAnimation, shouldUseOpenAnimation) diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt index b1021f17..4366efcb 100644 --- a/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt @@ -162,6 +162,14 @@ open class ScreenViewManager : view.isGestureEnabled = gestureEnabled } + @ReactProp(name = "snapshotOnRemoval", defaultBoolean = false) + override fun setSnapshotOnRemoval( + view: Screen, + snapshotOnRemoval: Boolean, + ) { + view.snapshotOnRemoval = snapshotOnRemoval + } + @ReactProp(name = "replaceAnimation") override fun setReplaceAnimation( view: Screen, diff --git a/android/src/main/java/com/swmansion/rnscreens/events/ScreenAnimationDelegate.kt b/android/src/main/java/com/swmansion/rnscreens/events/ScreenAnimationDelegate.kt index 5855d536..0fda69b2 100644 --- a/android/src/main/java/com/swmansion/rnscreens/events/ScreenAnimationDelegate.kt +++ b/android/src/main/java/com/swmansion/rnscreens/events/ScreenAnimationDelegate.kt @@ -71,7 +71,11 @@ class ScreenAnimationDelegate( } } - override fun onAnimationCancel(animation: Animator) = Unit + override fun onAnimationCancel(animation: Animator) { + // A cancelled exit can leave the screen attached and live; drop the frozen removal + // snapshot so the user never returns to a stale frame covering real content. + wrapper.screen.releaseRemovalSnapshot() + } override fun onAnimationRepeat(animation: Animator) = Unit diff --git a/lib/typescript/types.d.ts b/lib/typescript/types.d.ts index 04e65527..55ad711e 100644 --- a/lib/typescript/types.d.ts +++ b/lib/typescript/types.d.ts @@ -93,6 +93,13 @@ export interface ScreenProps extends ViewProps { * @platform ios */ gestureEnabled?: boolean; + /** + * When `true`, the screen freezes its last presented frame into a native overlay at the start + * of its removal transition (Android). Only for opaque, full-window screens. Defaults to `false`. + * + * @platform android + */ + snapshotOnRemoval?: boolean; /** * Use it to restrict the distance from the edges of screen in which the gesture should be recognized. To be used alongside `fullScreenSwipeEnabled`. * diff --git a/src/fabric/ScreenNativeComponent.ts b/src/fabric/ScreenNativeComponent.ts index 08c5608f..b18fd799 100644 --- a/src/fabric/ScreenNativeComponent.ts +++ b/src/fabric/ScreenNativeComponent.ts @@ -103,6 +103,7 @@ export interface NativeProps extends ViewProps { homeIndicatorHidden?: boolean; preventNativeDismiss?: boolean; gestureEnabled?: WithDefault; + snapshotOnRemoval?: WithDefault; statusBarColor?: ColorValue; statusBarHidden?: boolean; screenOrientation?: string; diff --git a/src/types.tsx b/src/types.tsx index d663c9b6..d2d564f9 100644 --- a/src/types.tsx +++ b/src/types.tsx @@ -169,6 +169,15 @@ export interface ScreenProps extends ViewProps { * @platform ios */ gestureEnabled?: boolean; + /** + * When `true`, the screen freezes its last presented frame into a native overlay at the start + * of its removal transition, so the exit animation shows real pixels even if surface-backed + * content (e.g. a WebView) stops rendering mid-transition. Only enable for opaque, full-window + * screens — the capture reads the composited window. Defaults to `false`. + * + * @platform android + */ + snapshotOnRemoval?: boolean; /** * Use it to restrict the distance from the edges of screen in which the gesture should be recognized. To be used alongside `fullScreenSwipeEnabled`. * From 5879b1629197859e097a1263dfbf2dbed542c61a Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Thu, 16 Jul 2026 17:34:25 -0700 Subject: [PATCH 2/8] Review fixes: sync Paper codegen, one-attempt-per-removal, import order - Regenerate checked-in Paper RNSScreenManagerInterface/Delegate via sync-architectures so Paper builds get the snapshotOnRemoval setter (architectures-consistency-check passes). - Guard the capture with a per-removal attempted flag instead of only successful-bitmap ownership: if the pre-transaction attempt fails, later entry points must not retry mid-transition and capture an already-translated window. Reset with the snapshot in releaseRemovalSnapshot() (end/cancel/detach). - Move java.util.concurrent imports to their lexicographic position (spotlessCheck passes). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../java/com/swmansion/rnscreens/Screen.kt | 19 ++++++++++++++----- .../RNSScreenManagerDelegate.java | 3 +++ .../RNSScreenManagerInterface.java | 1 + 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index aa7ef19b..40b2dcb1 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -20,9 +20,6 @@ import android.view.ViewGroup import android.view.WindowManager import android.webkit.WebView import android.widget.ImageView -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit -import java.util.concurrent.atomic.AtomicBoolean import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.children import androidx.fragment.app.Fragment @@ -46,6 +43,9 @@ import com.swmansion.rnscreens.events.SheetDetentChangedEvent import com.swmansion.rnscreens.ext.asScreenStackFragment import com.swmansion.rnscreens.ext.parentAsViewGroup import com.swmansion.rnscreens.gamma.common.FragmentProviding +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicBoolean @SuppressLint("ViewConstructor") // Only we construct this view, it is never inflated. class Screen( @@ -491,15 +491,23 @@ class Screen( private var removalSnapshotBitmap: Bitmap? = null private var removalSnapshotDrawable: BitmapDrawable? = null + // One capture attempt per removal: a snapshot is only valid if taken before the removal + // transaction starts animating. If the pre-transaction attempt fails (timeout etc.), a later + // entry point must NOT retry — it could capture an already-translated, mid-exit window. + // Reset alongside the snapshot itself in releaseRemovalSnapshot(). + @Volatile + private var removalSnapshotAttempted: Boolean = false + // Ordering note: Fabric may call startRemovalTransition() from its mounting thread, where the // capture is posted to the main looper. The ordering guarantee (capture happens before the // removal transaction's animation) does not rest on that post: ScreenStack.onUpdate() invokes // captureScreenSnapshotForRemoval() synchronously on the main thread immediately before it - // creates the removal transaction, and whichever call runs first wins via the bitmap guard. + // creates the removal transaction, and whichever call runs first wins the single attempt. fun captureScreenSnapshotForRemoval() { if (!snapshotOnRemoval) return - if (removalSnapshotBitmap != null) return + if (removalSnapshotAttempted) return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return + removalSnapshotAttempted = true if (Looper.myLooper() == Looper.getMainLooper()) { captureScreenSnapshotOnMain() } else { @@ -587,6 +595,7 @@ class Screen( removalSnapshotDrawable?.let { overlay.remove(it) } removalSnapshotDrawable = null removalSnapshotBitmap = null + removalSnapshotAttempted = false } // --- end screen-level removal snapshot ---------------------------------------------------- diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java b/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java index c66aa70b..b28cbaf3 100644 --- a/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +++ b/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java @@ -73,6 +73,9 @@ public void setProperty(T view, String propName, @Nullable Object value) { case "gestureEnabled": mViewManager.setGestureEnabled(view, value == null ? true : (boolean) value); break; + case "snapshotOnRemoval": + mViewManager.setSnapshotOnRemoval(view, value == null ? false : (boolean) value); + break; case "statusBarColor": mViewManager.setStatusBarColor(view, ColorPropConverter.getColor(value, view.getContext())); break; diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java b/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java index 01fdc0c8..be64ca6d 100644 --- a/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +++ b/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java @@ -32,6 +32,7 @@ public interface RNSScreenManagerInterface { void setHomeIndicatorHidden(T view, boolean value); void setPreventNativeDismiss(T view, boolean value); void setGestureEnabled(T view, boolean value); + void setSnapshotOnRemoval(T view, boolean value); void setStatusBarColor(T view, @Nullable Integer value); void setStatusBarHidden(T view, boolean value); void setScreenOrientation(T view, @Nullable String value); From 16b8ea44c1d7d0794de25ef5ec4f9066c3207ccb Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Thu, 16 Jul 2026 17:59:13 -0700 Subject: [PATCH 3/8] Review round 2: main-thread-owned capture arbitration + naming - The single attempted flag conflated scheduled/attempted/lifecycle and could be claimed off-main before any capture, starving the authoritative pre-transaction capture and letting the queued request run mid-transition. Attempt state is now owned by the main thread and claimed only at actual capture time, so the synchronous ScreenStack.onUpdate() call always wins; off-main requests carry a removal-generation token and no-op if their removal was already cleaned up (a delayed post can never touch a later lifecycle). - snapshotHandler(): replace one-use method + two backing fields with a lazy companion property. - Rename resultHolder -> pixelCopyResult and loserRecycles -> oneCleanupParticipantFinished; comments rephrased around the actual invariant (whichever cleanup participant arrives second recycles). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../java/com/swmansion/rnscreens/Screen.kt | 71 ++++++++++--------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index 40b2dcb1..032c0294 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -494,31 +494,38 @@ class Screen( // One capture attempt per removal: a snapshot is only valid if taken before the removal // transaction starts animating. If the pre-transaction attempt fails (timeout etc.), a later // entry point must NOT retry — it could capture an already-translated, mid-exit window. - // Reset alongside the snapshot itself in releaseRemovalSnapshot(). - @Volatile + // + // Attempt state is owned by the MAIN thread and claimed only at actual capture time, so the + // synchronous pre-transaction call in ScreenStack.onUpdate() always wins over queued off-main + // requests: a queued request that runs after it no-ops on the claimed attempt. private var removalSnapshotAttempted: Boolean = false - // Ordering note: Fabric may call startRemovalTransition() from its mounting thread, where the - // capture is posted to the main looper. The ordering guarantee (capture happens before the - // removal transaction's animation) does not rest on that post: ScreenStack.onUpdate() invokes - // captureScreenSnapshotForRemoval() synchronously on the main thread immediately before it - // creates the removal transaction, and whichever call runs first wins the single attempt. + // Incremented (on main) whenever the snapshot lifecycle resets. An off-main request carries + // the generation it was posted under and no-ops if its removal has already been cleaned up, + // so a delayed post can never install an overlay into a later lifecycle. + @Volatile + private var removalSnapshotGeneration: Int = 0 + fun captureScreenSnapshotForRemoval() { if (!snapshotOnRemoval) return - if (removalSnapshotAttempted) return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return - removalSnapshotAttempted = true if (Looper.myLooper() == Looper.getMainLooper()) { captureScreenSnapshotOnMain() } else { - post { captureScreenSnapshotOnMain() } + val requestGeneration = removalSnapshotGeneration + post { + if (requestGeneration == removalSnapshotGeneration) { + captureScreenSnapshotOnMain() + } + } } } private fun captureScreenSnapshotOnMain() { // Recheck the opt-in: a posted capture can outlive a prop flip on a recycled screen. if (!snapshotOnRemoval) return - if (removalSnapshotBitmap != null) return + if (removalSnapshotAttempted) return + removalSnapshotAttempted = true if (!isAttachedToWindow || width <= 0 || height <= 0) return val activity = reactContext.currentActivity ?: return val window = activity.window @@ -541,21 +548,22 @@ class Screen( } val latch = CountDownLatch(1) - val resultHolder = intArrayOf(PixelCopy.ERROR_UNKNOWN) + val pixelCopyResult = intArrayOf(PixelCopy.ERROR_UNKNOWN) // Bitmap ownership on timeout: PixelCopy cannot be cancelled, so the copy may still be - // writing into the bitmap after the bounded wait expires. Whoever finishes second (the - // callback, or the timed-out waiter observing the callback already ran) recycles it; - // recycling from the waiter while the copy is in flight would be a native UAF. - val loserRecycles = AtomicBoolean(false) + // writing into the bitmap after the bounded wait expires. Two cleanup participants exist + // (the PixelCopy callback and the timed-out waiter); this flag records that one of them + // has finished, and whichever arrives second owns recycling. Recycling from the waiter + // while the copy is in flight would be a native use-after-free. + val oneCleanupParticipantFinished = AtomicBoolean(false) try { PixelCopy.request(window, srcRect, bitmap, { copyResult -> - resultHolder[0] = copyResult + pixelCopyResult[0] = copyResult latch.countDown() - if (loserRecycles.getAndSet(true)) { - // The waiter already timed out and abandoned the bitmap — we own cleanup. + if (oneCleanupParticipantFinished.getAndSet(true)) { + // The waiter already timed out and abandoned the bitmap — we arrive second. bitmap.recycle() } - }, snapshotHandler()) + }, snapshotHandler) } catch (e: IllegalArgumentException) { bitmap.recycle() return @@ -570,14 +578,14 @@ class Screen( } if (!completed) { - // Abandon: if the callback already finished in the meantime we recycle, otherwise - // the callback sees the flag and recycles when the copy completes. - if (loserRecycles.getAndSet(true)) { + // Abandon: if the callback already finished in the meantime we arrive second and + // recycle; otherwise the callback arrives second and recycles when the copy ends. + if (oneCleanupParticipantFinished.getAndSet(true)) { bitmap.recycle() } return } - if (resultHolder[0] != PixelCopy.SUCCESS) { + if (pixelCopyResult[0] != PixelCopy.SUCCESS) { // Copy finished (callback ran) but failed; the bitmap is no longer being written. bitmap.recycle() return @@ -592,6 +600,7 @@ class Screen( } fun releaseRemovalSnapshot() { + removalSnapshotGeneration++ removalSnapshotDrawable?.let { overlay.remove(it) } removalSnapshotDrawable = null removalSnapshotBitmap = null @@ -794,17 +803,9 @@ class Screen( private const val SNAPSHOT_TIMEOUT_MS = 50L - private var sSnapshotThread: HandlerThread? = null - private var sSnapshotHandler: Handler? = null - - @JvmStatic - private fun snapshotHandler(): Handler { - sSnapshotHandler?.let { return it } - val thread = HandlerThread("RNSScreenSnapshot").also { it.start() } - val handler = Handler(thread.looper) - sSnapshotThread = thread - sSnapshotHandler = handler - return handler + // Shared thread PixelCopy callbacks land on; one idle thread for the process lifetime. + private val snapshotHandler: Handler by lazy { + Handler(HandlerThread("RNSScreenSnapshot").also { it.start() }.looper) } } } From 84db10583a8631ddeaa80d59238692ee4dd34795 Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Thu, 16 Jul 2026 18:23:04 -0700 Subject: [PATCH 4/8] =?UTF-8?q?Review=20round=203:=20nonblocking=20capture?= =?UTF-8?q?=20=E2=80=94=20main=20thread=20never=20waits=20on=20PixelCopy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bounded latch stalled the UI thread up to 50ms right before the removal animation. The copy is still requested pre-transaction (it reads the pre-transition presented frame) but completion now posts the overlay install back to main instead of being awaited: install only if the removal is still live (generation token) and the screen attached, otherwise drop the bitmap and the pop runs with stock behavior. Measured completion is 6-16ms, within the first animation frame. This dissolves the latch, the timeout constant, and the entire two-participant recycle protocol (the main-thread continuation is the single install/recycle owner), and removes the dead removalSnapshotBitmap field — the drawable is the one owner. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../java/com/swmansion/rnscreens/Screen.kt | 75 +++++++------------ 1 file changed, 25 insertions(+), 50 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index 032c0294..37afe46c 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -43,9 +43,6 @@ import com.swmansion.rnscreens.events.SheetDetentChangedEvent import com.swmansion.rnscreens.ext.asScreenStackFragment import com.swmansion.rnscreens.ext.parentAsViewGroup import com.swmansion.rnscreens.gamma.common.FragmentProviding -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit -import java.util.concurrent.atomic.AtomicBoolean @SuppressLint("ViewConstructor") // Only we construct this view, it is never inflated. class Screen( @@ -488,7 +485,6 @@ class Screen( /** Set from JS via the `snapshotOnRemoval` prop; default off. */ var snapshotOnRemoval: Boolean = false - private var removalSnapshotBitmap: Bitmap? = null private var removalSnapshotDrawable: BitmapDrawable? = null // One capture attempt per removal: a snapshot is only valid if taken before the removal @@ -547,63 +543,40 @@ class Screen( return } - val latch = CountDownLatch(1) - val pixelCopyResult = intArrayOf(PixelCopy.ERROR_UNKNOWN) - // Bitmap ownership on timeout: PixelCopy cannot be cancelled, so the copy may still be - // writing into the bitmap after the bounded wait expires. Two cleanup participants exist - // (the PixelCopy callback and the timed-out waiter); this flag records that one of them - // has finished, and whichever arrives second owns recycling. Recycling from the waiter - // while the copy is in flight would be a native use-after-free. - val oneCleanupParticipantFinished = AtomicBoolean(false) + // Fully asynchronous: the copy is requested before the removal transaction is created + // (so it reads the pre-transition presented frame) but the main thread never waits on + // it. Completion posts back to main, which is the single owner of the install/recycle + // decision: install only if this removal is still live (generation) and the screen is + // still attached; in every other case the bitmap is dropped and the pop simply runs + // with today's stock behavior. Measured completion is 6-16ms — within the first + // animation frame — and the transition itself is never delayed. + val requestGeneration = removalSnapshotGeneration try { PixelCopy.request(window, srcRect, bitmap, { copyResult -> - pixelCopyResult[0] = copyResult - latch.countDown() - if (oneCleanupParticipantFinished.getAndSet(true)) { - // The waiter already timed out and abandoned the bitmap — we arrive second. - bitmap.recycle() + mainHandler.post { + if (copyResult == PixelCopy.SUCCESS && + requestGeneration == removalSnapshotGeneration && + isAttachedToWindow + ) { + val drawable = BitmapDrawable(resources, bitmap) + drawable.setBounds(0, 0, width, height) + removalSnapshotDrawable = drawable + overlay.add(drawable) + invalidate() + } else { + bitmap.recycle() + } } }, snapshotHandler) } catch (e: IllegalArgumentException) { bitmap.recycle() - return - } - - val completed = - try { - latch.await(SNAPSHOT_TIMEOUT_MS, TimeUnit.MILLISECONDS) - } catch (e: InterruptedException) { - Thread.currentThread().interrupt() - false - } - - if (!completed) { - // Abandon: if the callback already finished in the meantime we arrive second and - // recycle; otherwise the callback arrives second and recycles when the copy ends. - if (oneCleanupParticipantFinished.getAndSet(true)) { - bitmap.recycle() - } - return - } - if (pixelCopyResult[0] != PixelCopy.SUCCESS) { - // Copy finished (callback ran) but failed; the bitmap is no longer being written. - bitmap.recycle() - return } - - val drawable = BitmapDrawable(resources, bitmap) - drawable.setBounds(0, 0, width, height) - removalSnapshotBitmap = bitmap - removalSnapshotDrawable = drawable - overlay.add(drawable) - invalidate() } fun releaseRemovalSnapshot() { removalSnapshotGeneration++ removalSnapshotDrawable?.let { overlay.remove(it) } removalSnapshotDrawable = null - removalSnapshotBitmap = null removalSnapshotAttempted = false } // --- end screen-level removal snapshot ---------------------------------------------------- @@ -801,12 +774,14 @@ class Screen( */ const val SHEET_FIT_TO_CONTENTS = -1.0 - private const val SNAPSHOT_TIMEOUT_MS = 50L - // Shared thread PixelCopy callbacks land on; one idle thread for the process lifetime. private val snapshotHandler: Handler by lazy { Handler(HandlerThread("RNSScreenSnapshot").also { it.start() }.looper) } + + // Main-thread continuation for snapshot installs. A plain handler (not View.post) so the + // decision always runs even if the view detaches while the copy is in flight. + private val mainHandler: Handler by lazy { Handler(Looper.getMainLooper()) } } } From 9ff816caf028c06c01e179f683b2faa6c4a6a644 Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Thu, 16 Jul 2026 19:03:00 -0700 Subject: [PATCH 5/8] Round 3 follow-up: one-frame-bounded install with async fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Empirical result from the fully-async variant: 1-2 fully black frames on every mid-fling pop (30+ cycle A/B against the blocking build's zero). The app's own teardown blank presents inside any async install gap — and deferring the removal transaction cannot prevent it, since the blank is driven by the app's React commit, not the transaction. The install must therefore be synchronous in the pre-transaction main-thread turn when possible. The main thread now waits at most one frame period (17ms; measured copies are 6-16ms) and otherwise moves on, with the completion posting the install instead — the single install/drop decision stays main-thread-owned. Worst case is one frame of jank or one late frame, never a 50ms stall and never a guaranteed flash. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../java/com/swmansion/rnscreens/Screen.kt | 76 ++++++++++++++----- 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index 37afe46c..bfc3de50 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -43,6 +43,8 @@ import com.swmansion.rnscreens.events.SheetDetentChangedEvent import com.swmansion.rnscreens.ext.asScreenStackFragment import com.swmansion.rnscreens.ext.parentAsViewGroup import com.swmansion.rnscreens.gamma.common.FragmentProviding +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit @SuppressLint("ViewConstructor") // Only we construct this view, it is never inflated. class Screen( @@ -543,33 +545,67 @@ class Screen( return } - // Fully asynchronous: the copy is requested before the removal transaction is created - // (so it reads the pre-transition presented frame) but the main thread never waits on - // it. Completion posts back to main, which is the single owner of the install/recycle - // decision: install only if this removal is still live (generation) and the screen is - // still attached; in every other case the bitmap is dropped and the pop simply runs - // with today's stock behavior. Measured completion is 6-16ms — within the first - // animation frame — and the transition itself is never delayed. + // The copy is requested before the removal transaction is created, so it reads the + // pre-transition presented frame. The main thread waits at most ONE frame period for it + // (measured completion is 6-16ms, so the typical install is synchronous — which matters: + // the overlay must be up before the next frame can present the app's own teardown blank, + // or one black frame slips through). If the copy is slower, the main thread moves on and + // the completion posts the install instead: worst case is one frame of jank or one late + // frame, never a long stall and never a dropped snapshot. + // + // The install/drop decision runs exactly once, always on the main thread (`handled` is + // only touched there): the synchronous path claims it when the copy beats the bounded + // wait; otherwise the posted continuation claims it. Install only if this removal is + // still live (generation) and the screen attached; otherwise the bitmap is dropped. val requestGeneration = removalSnapshotGeneration + val handled = booleanArrayOf(false) + val latch = CountDownLatch(1) + val pixelCopyResult = intArrayOf(PixelCopy.ERROR_UNKNOWN) try { PixelCopy.request(window, srcRect, bitmap, { copyResult -> + pixelCopyResult[0] = copyResult + latch.countDown() mainHandler.post { - if (copyResult == PixelCopy.SUCCESS && - requestGeneration == removalSnapshotGeneration && - isAttachedToWindow - ) { - val drawable = BitmapDrawable(resources, bitmap) - drawable.setBounds(0, 0, width, height) - removalSnapshotDrawable = drawable - overlay.add(drawable) - invalidate() - } else { - bitmap.recycle() + if (!handled[0]) { + handled[0] = true + installOrDropRemovalSnapshot(copyResult, bitmap, requestGeneration) } } }, snapshotHandler) } catch (e: IllegalArgumentException) { bitmap.recycle() + return + } + + val completed = + try { + latch.await(SNAPSHOT_SYNC_WAIT_MS, TimeUnit.MILLISECONDS) + } catch (e: InterruptedException) { + Thread.currentThread().interrupt() + false + } + if (completed && !handled[0]) { + handled[0] = true + installOrDropRemovalSnapshot(pixelCopyResult[0], bitmap, requestGeneration) + } + } + + private fun installOrDropRemovalSnapshot( + copyResult: Int, + bitmap: Bitmap, + requestGeneration: Int, + ) { + if (copyResult == PixelCopy.SUCCESS && + requestGeneration == removalSnapshotGeneration && + isAttachedToWindow + ) { + val drawable = BitmapDrawable(resources, bitmap) + drawable.setBounds(0, 0, width, height) + removalSnapshotDrawable = drawable + overlay.add(drawable) + invalidate() + } else { + bitmap.recycle() } } @@ -774,6 +810,10 @@ class Screen( */ const val SHEET_FIT_TO_CONTENTS = -1.0 + // One 60Hz frame period: the most the main thread will wait for a PixelCopy before + // handing the install to the async continuation. + private const val SNAPSHOT_SYNC_WAIT_MS = 17L + // Shared thread PixelCopy callbacks land on; one idle thread for the process lifetime. private val snapshotHandler: Handler by lazy { Handler(HandlerThread("RNSScreenSnapshot").also { it.start() }.looper) From f5a1e8a7cdfa8b9c9339c84740b0d2b2e4c3ef2a Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Thu, 16 Jul 2026 19:36:04 -0700 Subject: [PATCH 6/8] Round 4: regenerate shipped Fabric/type declarations; comment precision - bob build regenerates the packaged TypeScript contract for the new prop: lib/typescript/fabric/ScreenNativeComponent.d.ts(.map), lib/typescript/types.d.ts(.map), and the module/commonjs source maps. - Comment fixes: distinguish outright failure from asynchronous completion in the one-attempt rule; state the fallback guarantee precisely (an in-flight successful copy is never abandoned merely because the synchronous wait elapsed; failure/generation/detach still drop); describe the 17ms wait as ~one 60Hz frame rather than a device-independent frame period. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../java/com/swmansion/rnscreens/Screen.kt | 23 +++++++++++-------- .../fabric/ScreenNativeComponent.js.map | 2 +- lib/commonjs/types.js.map | 2 +- .../fabric/ScreenNativeComponent.js.map | 2 +- lib/module/types.js.map | 2 +- .../fabric/ScreenNativeComponent.d.ts | 1 + .../fabric/ScreenNativeComponent.d.ts.map | 2 +- lib/typescript/types.d.ts | 4 +++- lib/typescript/types.d.ts.map | 2 +- 9 files changed, 23 insertions(+), 17 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/android/src/main/java/com/swmansion/rnscreens/Screen.kt index bfc3de50..d93e5a1e 100644 --- a/android/src/main/java/com/swmansion/rnscreens/Screen.kt +++ b/android/src/main/java/com/swmansion/rnscreens/Screen.kt @@ -490,8 +490,10 @@ class Screen( private var removalSnapshotDrawable: BitmapDrawable? = null // One capture attempt per removal: a snapshot is only valid if taken before the removal - // transaction starts animating. If the pre-transaction attempt fails (timeout etc.), a later - // entry point must NOT retry — it could capture an already-translated, mid-exit window. + // transaction starts animating. Whether the attempt fails outright or merely completes + // asynchronously (the bounded wait elapsing does not fail it — the same PixelCopy stays + // live and may install from its posted continuation), later entry points must not issue + // another capture: a retry could photograph an already-translated, mid-exit window. // // Attempt state is owned by the MAIN thread and claimed only at actual capture time, so the // synchronous pre-transaction call in ScreenStack.onUpdate() always wins over queued off-main @@ -546,12 +548,13 @@ class Screen( } // The copy is requested before the removal transaction is created, so it reads the - // pre-transition presented frame. The main thread waits at most ONE frame period for it - // (measured completion is 6-16ms, so the typical install is synchronous — which matters: - // the overlay must be up before the next frame can present the app's own teardown blank, - // or one black frame slips through). If the copy is slower, the main thread moves on and - // the completion posts the install instead: worst case is one frame of jank or one late - // frame, never a long stall and never a dropped snapshot. + // pre-transition presented frame. The main thread waits briefly for it (measured + // completion is 6-16ms, so the typical install is synchronous — which matters: the + // overlay must be up before the next frame can present the app's own teardown blank, + // or one black frame slips through). If the copy is slower, the main thread moves on + // and the completion posts the install instead: an in-flight successful copy is never + // abandoned merely because the synchronous wait elapsed. (The posted continuation still + // drops the bitmap on copy failure, generation change, or detach.) // // The install/drop decision runs exactly once, always on the main thread (`handled` is // only touched there): the synchronous path claims it when the copy beats the bounded @@ -810,8 +813,8 @@ class Screen( */ const val SHEET_FIT_TO_CONTENTS = -1.0 - // One 60Hz frame period: the most the main thread will wait for a PixelCopy before - // handing the install to the async continuation. + // Bounded synchronous wait for the PixelCopy before handing the install to the async + // continuation. ~One frame at 60Hz (more than one at 90/120Hz refresh rates). private const val SNAPSHOT_SYNC_WAIT_MS = 17L // Shared thread PixelCopy callbacks land on; one idle thread for the process lifetime. diff --git a/lib/commonjs/fabric/ScreenNativeComponent.js.map b/lib/commonjs/fabric/ScreenNativeComponent.js.map index 7d8158ad..5ab8339c 100644 --- a/lib/commonjs/fabric/ScreenNativeComponent.js.map +++ b/lib/commonjs/fabric/ScreenNativeComponent.js.map @@ -1 +1 @@ -{"version":3,"names":["Object","defineProperty","exports","value","default","_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","_default","codegenNativeComponent","interfaceOnly"],"sourceRoot":"../../../src","sources":["fabric/ScreenNativeComponent.ts"],"mappings":";AAAA,YAAY;;AAEZ;AAAAA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AACA,IAAAC,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAJ,OAAA,EAAAI,CAAA;AAU7F;AAAA,IAAAE,QAAA,GAAAR,OAAA,CAAAE,OAAA,GA4He,IAAAO,+BAAsB,EAAc,WAAW,EAAE;EAC9DC,aAAa,EAAE;AACjB,CAAC,CAAC","ignoreList":[]} +{"version":3,"names":["Object","defineProperty","exports","value","default","_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","_default","codegenNativeComponent","interfaceOnly"],"sourceRoot":"../../../src","sources":["fabric/ScreenNativeComponent.ts"],"mappings":";AAAA,YAAY;;AAEZ;AAAAA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AACA,IAAAC,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAJ,OAAA,EAAAI,CAAA;AAU7F;AAAA,IAAAE,QAAA,GAAAR,OAAA,CAAAE,OAAA,GA6He,IAAAO,+BAAsB,EAAc,WAAW,EAAE;EAC9DC,aAAa,EAAE;AACjB,CAAC,CAAC","ignoreList":[]} diff --git a/lib/commonjs/types.js.map b/lib/commonjs/types.js.map index bc121330..eeade93c 100644 --- a/lib/commonjs/types.js.map +++ b/lib/commonjs/types.js.map @@ -1 +1 @@ -{"version":3,"names":["_BottomTabs","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_BottomTabsScreen","_SplitViewHost","_SplitViewScreen"],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":";;;;;AA2jCA,IAAAA,WAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,WAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,WAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,WAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAM,cAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,cAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,cAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,gBAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,gBAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,gBAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,gBAAA,CAAAP,GAAA;IAAA;EAAA;AAAA","ignoreList":[]} +{"version":3,"names":["_BottomTabs","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_BottomTabsScreen","_SplitViewHost","_SplitViewScreen"],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":";;;;;AAokCA,IAAAA,WAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,WAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,WAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,WAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAM,cAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,cAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,cAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,gBAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,gBAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,gBAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,gBAAA,CAAAP,GAAA;IAAA;EAAA;AAAA","ignoreList":[]} diff --git a/lib/module/fabric/ScreenNativeComponent.js.map b/lib/module/fabric/ScreenNativeComponent.js.map index ce154149..e0c3d093 100644 --- a/lib/module/fabric/ScreenNativeComponent.js.map +++ b/lib/module/fabric/ScreenNativeComponent.js.map @@ -1 +1 @@ -{"version":3,"names":["codegenNativeComponent","interfaceOnly"],"sourceRoot":"../../../src","sources":["fabric/ScreenNativeComponent.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAU5F;;AA4HA,eAAeA,sBAAsB,CAAc,WAAW,EAAE;EAC9DC,aAAa,EAAE;AACjB,CAAC,CAAC","ignoreList":[]} +{"version":3,"names":["codegenNativeComponent","interfaceOnly"],"sourceRoot":"../../../src","sources":["fabric/ScreenNativeComponent.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAU5F;;AA6HA,eAAeA,sBAAsB,CAAc,WAAW,EAAE;EAC9DC,aAAa,EAAE;AACjB,CAAC,CAAC","ignoreList":[]} diff --git a/lib/module/types.js.map b/lib/module/types.js.map index 218d4f92..27351ee2 100644 --- a/lib/module/types.js.map +++ b/lib/module/types.js.map @@ -1 +1 @@ -{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":"AA0/BA;AACA;AACA;;AAEA;AACA;AACA;;AAYA;AACA;AACA;;AA6CA,cAAc,2CAA2C;AACzD,cAAc,iDAAiD;AAE/D,cAAc,wCAAwC;AACtD,cAAc,0CAA0C;AAAC","ignoreList":[]} +{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":"AAmgCA;AACA;AACA;;AAEA;AACA;AACA;;AAYA;AACA;AACA;;AA6CA,cAAc,2CAA2C;AACzD,cAAc,iDAAiD;AAE/D,cAAc,wCAAwC;AACtD,cAAc,0CAA0C;AAAC","ignoreList":[]} diff --git a/lib/typescript/fabric/ScreenNativeComponent.d.ts b/lib/typescript/fabric/ScreenNativeComponent.d.ts index a4311776..462792e4 100644 --- a/lib/typescript/fabric/ScreenNativeComponent.d.ts +++ b/lib/typescript/fabric/ScreenNativeComponent.d.ts @@ -60,6 +60,7 @@ export interface NativeProps extends ViewProps { homeIndicatorHidden?: boolean; preventNativeDismiss?: boolean; gestureEnabled?: WithDefault; + snapshotOnRemoval?: WithDefault; statusBarColor?: ColorValue; statusBarHidden?: boolean; screenOrientation?: string; diff --git a/lib/typescript/fabric/ScreenNativeComponent.d.ts.map b/lib/typescript/fabric/ScreenNativeComponent.d.ts.map index eae2e1f4..3c6f1c28 100644 --- a/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +++ b/lib/typescript/fabric/ScreenNativeComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ScreenNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/fabric/ScreenNativeComponent.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ScreenNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/fabric/ScreenNativeComponent.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/typescript/types.d.ts b/lib/typescript/types.d.ts index 55ad711e..6a3ec085 100644 --- a/lib/typescript/types.d.ts +++ b/lib/typescript/types.d.ts @@ -95,7 +95,9 @@ export interface ScreenProps extends ViewProps { gestureEnabled?: boolean; /** * When `true`, the screen freezes its last presented frame into a native overlay at the start - * of its removal transition (Android). Only for opaque, full-window screens. Defaults to `false`. + * of its removal transition, so the exit animation shows real pixels even if surface-backed + * content (e.g. a WebView) stops rendering mid-transition. Only enable for opaque, full-window + * screens — the capture reads the composited window. Defaults to `false`. * * @platform android */ diff --git a/lib/typescript/types.d.ts.map b/lib/typescript/types.d.ts.map index 73e33c5e..5bebe831 100644 --- a/lib/typescript/types.d.ts.map +++ b/lib/typescript/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.tsx"],"names":[],"mappings":"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"} \ No newline at end of file From cc9ab08f8736e87fbb3805226f147c98ae464384 Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Thu, 16 Jul 2026 21:33:01 -0700 Subject: [PATCH 7/8] Android: port interactive edge-swipe-back (gesture only, no back-path changes) Ports PR #3's EdgeSwipeBackController with every programmatic-back concern removed: dismissTopWithAnimation() is deleted, ScreenStackFragment is untouched (no OnBackPressedCallback), and hardware/system/header back stay on the existing snapshot-on-removal path. ACTION_DOWN is tightened to cheapest-first rejection (state guards, edge band, isGestureEnabled, push check, then pair resolution) so disabled screens never pay for pair work. Arming stays on Screen.isGestureEnabled exactly as PR #3: native-stack maps androidEdgeSwipeBack + gestureEnabled + usePreventRemove into it and passes false on Android otherwise, so the gesture is opt-in per screen. Co-Authored-By: Claude Fable 5 --- .../rnscreens/EdgeSwipeBackController.kt | 340 ++++++++++++++++++ .../com/swmansion/rnscreens/ScreenStack.kt | 43 +++ 2 files changed, 383 insertions(+) create mode 100644 android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt diff --git a/android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt b/android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt new file mode 100644 index 00000000..867d2415 --- /dev/null +++ b/android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt @@ -0,0 +1,340 @@ +package com.swmansion.rnscreens + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.ValueAnimator +import android.util.Log +import android.view.MotionEvent +import android.view.VelocityTracker +import android.view.ViewConfiguration +import android.view.animation.DecelerateInterpolator +import com.swmansion.rnscreens.utils.RNSLog +import kotlin.math.abs + +/** + * Readwise: native interactive edge-swipe-back for Android, mirroring the iOS + * interactive pop (RNSScreenStack.mm). + * + * Detection: DOWN within the edge band (50dp — master's reader gesture + * hitSlop) on a screen whose [Screen.isGestureEnabled] is set (native-stack + * maps androidEdgeSwipeBack/gestureEnabled/usePreventRemove into it), + * activation after a platform-touch-slop pull (~8dp) of horizontal-dominant + * travel. + * Tracking: top screen translationX 1:1; screen below parallaxes from + * -0.3*width to 0 (RNSScreenStackAnimator.mm:542). + * Commit: translation + 0.3*velocity > width/2 (RNSScreenStack.mm:1139-1140), + * then notifyTopDetached() -> ScreenDismissedEvent -> JS StackActions.pop(). + * Cancel: settle back, detachBelowTop(), transforms reset. + */ +internal class EdgeSwipeBackController( + private val stack: ScreenStack, +) { + private enum class State { IDLE, ARMED, DRAGGING, SETTLING, AWAITING_REMOVAL } + + private var state = State.IDLE + private var downX = 0f + private var downY = 0f + private var velocityTracker: VelocityTracker? = null + private var topScreenView: Screen? = null + private var belowScreenView: Screen? = null + private var settleAnimator: ValueAnimator? = null + + // Force-release AWAITING_REMOVAL if JS never reconciles a committed pop, so + // the gesture can't wedge input permanently. Cancelled in the normal path + // by onStackChildrenChanged(). + private val releaseAwaitingRemoval = + Runnable { + if (state == State.AWAITING_REMOVAL) { + Log.w(TAG, "awaiting-removal safeguard fired; JS never reconciled the pop") + state = State.IDLE + } + } + + private val density = stack.resources.displayMetrics.density + private val edgeRegionPx = EDGE_REGION_DP * density + + // Activation distance: the platform drag threshold (~8dp), matching how + // eagerly UIKit's pan hysteresis (~10pt) engages on iOS. The + // horizontal-dominance check below keeps scroll intents safe. + private val touchSlopPx = ViewConfiguration.get(stack.context).scaledTouchSlop.toFloat() + private val activationPx = touchSlopPx + + val isInteracting: Boolean + get() = state == State.DRAGGING || state == State.SETTLING + + fun onInterceptTouchEvent(ev: MotionEvent): Boolean { + when (ev.actionMasked) { + MotionEvent.ACTION_DOWN -> { + if (state == State.SETTLING) { + // Eat taps while the settle animation finishes. + return true + } + if (state == State.AWAITING_REMOVAL) { + // A committed dismissal is awaiting JS reconciliation of the + // pop. Don't arm a new gesture (a second swipe here would + // over-pop), but let the below screen keep receiving touches. + // Released from onStackChildrenChanged() when the pop lands. + return false + } + state = State.IDLE + // Cheapest-first rejection after the state guards above: nearly + // every touch is outside the band, and pair resolution (a filter + // pass over screenWrappers) must stay dead last so disabled + // screens and mid-screen touches never pay for it. + if (ev.x > edgeRegionPx) { + return false + } + val top = stack.topScreen + // isGestureEnabled is the arming signal: native-stack maps + // androidEdgeSwipeBack + gestureEnabled + usePreventRemove into it. + if (top?.isGestureEnabled != true) { + RNSLog.d(TAG, "down in band but not armed: gesture disabled") + return false + } + if (top.stackPresentation != Screen.StackPresentation.PUSH) { + RNSLog.d(TAG, "down in band but not armed: non-push presentation") + return false + } + if (stack.resolveEdgeSwipeScreenPair() == null) { + RNSLog.d(TAG, "down in band but not armed: active pair unresolvable") + return false + } + state = State.ARMED + downX = ev.x + downY = ev.y + velocityTracker?.recycle() + velocityTracker = VelocityTracker.obtain() + velocityTracker?.addMovement(ev) + RNSLog.d(TAG, "armed at x=${ev.x} (edge=${edgeRegionPx}px)") + } + MotionEvent.ACTION_MOVE -> { + velocityTracker?.addMovement(ev) + if (state == State.ARMED) { + val dx = ev.x - downX + val dy = ev.y - downY + if (dx >= activationPx && dx > abs(dy)) { + // Deliberate horizontal pull from the edge — steal the + // stream (children get ACTION_CANCEL, like UIKit). + startDrag() + } else if (abs(dy) > touchSlopPx && abs(dy) > dx) { + // Vertical intent — the content scroll wins. + RNSLog.d(TAG, "vertical bail dx=$dx dy=$dy") + disarm() + } + } + } + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> + if (state == State.ARMED) { + // UP = lifted without an activating pull; CANCEL = an ancestor + // or the system claimed the stream before we activated. + RNSLog.d( + TAG, + "armed released without activation (${if (ev.actionMasked == MotionEvent.ACTION_CANCEL) "cancelled" else "lifted"})", + ) + disarm() + } + } + return state == State.DRAGGING + } + + fun onTouchEvent(ev: MotionEvent): Boolean { + if (state != State.DRAGGING) { + return state == State.SETTLING + } + velocityTracker?.addMovement(ev) + when (ev.actionMasked) { + MotionEvent.ACTION_MOVE -> track(ev.x - downX) + MotionEvent.ACTION_UP -> { + velocityTracker?.computeCurrentVelocity(1000) + val vx = velocityTracker?.xVelocity ?: 0f + val dx = (ev.x - downX).coerceIn(0f, stack.width.toFloat()) + // iOS commit rule — RNSScreenStack.mm:1139-1140. + val commit = dx + 0.3f * vx > stack.width / 2f + RNSLog.d(TAG, "release dx=$dx vx=$vx commit=$commit") + settle(dx, commit) + } + MotionEvent.ACTION_CANCEL -> { + RNSLog.d(TAG, "cancelled by ancestor/system mid-drag") + settle((ev.x - downX).coerceIn(0f, stack.width.toFloat()), false) + } + } + return true + } + + private fun startDrag() { + // Resolving the pair also revalidates the positional invariant + // attachBelowTop() relies on (it may have changed since ARMED). + val (top, below) = + stack.resolveEdgeSwipeScreenPair() ?: run { + RNSLog.d(TAG, "active pair unresolvable at activation; aborting drag") + disarm() + return + } + try { + stack.attachBelowTop() + } catch (e: RuntimeException) { + Log.w(TAG, "attachBelowTop failed; aborting drag", e) + disarm() + return + } + // The Screen views persist across attachBelowTop's fragment re-add + // (view recycling), so the pair resolved above stays valid. + topScreenView = top + belowScreenView = below + state = State.DRAGGING + // Keep ancestors (incl. the RNGH root) from intercepting mid-drag. + stack.parent?.requestDisallowInterceptTouchEvent(true) + track(0f) + RNSLog.d(TAG, "drag started top=${topScreenView?.id} below=${belowScreenView?.id}") + } + + private fun recycleTracker() { + velocityTracker?.recycle() + velocityTracker = null + } + + /** + * Reset an ARMED-but-not-yet-dragging gesture back to idle, recycling the + * tracker. Every ARMED abort (vertical bail, UP/CANCEL, activation failure) + * routes through here so the pooled VelocityTracker is never leaked — DOWN + * accumulates into it before the state check, so a bare `state = IDLE` would + * strand it until the next arm. + */ + private fun disarm() { + recycleTracker() + state = State.IDLE + } + + private fun track(rawDx: Float) { + val width = stack.width.toFloat() + val dx = rawDx.coerceIn(0f, width) + topScreenView?.translationX = dx + // Below screen parallax — RNSScreenStackAnimator.mm:542. + belowScreenView?.translationX = -PARALLAX_FACTOR * (width - dx) + } + + private fun settle( + fromDx: Float, + commit: Boolean, + ) { + state = State.SETTLING + val width = stack.width.toFloat() + val target = if (commit) width else 0f + // Base 0.5s (RNSDefaultTransitionDuration), proportional to remaining distance. + val remaining = abs(target - fromDx) / width + val duration = (BASE_DURATION_MS * remaining).toLong().coerceIn(80L, BASE_DURATION_MS.toLong()) + settleAnimator?.cancel() + settleAnimator = + ValueAnimator.ofFloat(fromDx, target).apply { + this.duration = duration + // Approximates iOS's overdamped nav spring (ratio ~4.56). + interpolator = DecelerateInterpolator(1.5f) + addUpdateListener { track(it.animatedValue as Float) } + addListener( + object : AnimatorListenerAdapter() { + // cancel() still delivers onAnimationEnd; the abort path + // (onStackChildrenChanged) does its own cleanup and must + // not double-dispatch finish(): a committed finish would + // fire a second ScreenDismissedEvent against a stack + // React is already mutating. + private var cancelled = false + + override fun onAnimationCancel(animation: Animator) { + cancelled = true + } + + override fun onAnimationEnd(animation: Animator) { + if (!cancelled) { + finish(commit) + } + } + }, + ) + start() + } + } + + private fun finish(commit: Boolean) { + RNSLog.d(TAG, "finish commit=$commit") + recycleTracker() + settleAnimator = null + if (commit) { + // ScreenDismissedEvent -> native-stack onDismissed -> StackActions.pop(). + // The JS pop removes the top fragment; reset the below screen so it + // sits at identity when it becomes top. + stack.notifyTopDetached() + belowScreenView?.translationX = 0f + } else { + try { + stack.detachBelowTop() + } catch (e: RuntimeException) { + Log.w(TAG, "detachBelowTop failed on cancel", e) + } + topScreenView?.translationX = 0f + belowScreenView?.translationX = 0f + } + topScreenView = null + belowScreenView = null + if (commit) { + // The pop is dispatched to JS, but the top fragment isn't gone until + // JS reconciles. Hold ownership in AWAITING_REMOVAL so a second + // swipe in that window can't begin an overlapping dismissal (which + // would over-pop). Released from onStackChildrenChanged() when the + // stack updates; the delayed safeguard covers a pop that never lands. + state = State.AWAITING_REMOVAL + stack.removeCallbacks(releaseAwaitingRemoval) + stack.postDelayed(releaseAwaitingRemoval, AWAITING_REMOVAL_TIMEOUT_MS) + } else { + state = State.IDLE + } + } + + /** + * The stack's children changed under an active gesture (e.g. hardware back + * popped mid-drag). Abort and restore consistent transforms. + */ + fun onStackChildrenChanged() { + if (state == State.AWAITING_REMOVAL) { + // JS reconciled the committed pop; release ownership so the next + // gesture is accepted. Deliberately does NOT reset translations — + // the dismissed screen is off-window and restoring it here would + // flash it back onscreen for a frame before removal. + stack.removeCallbacks(releaseAwaitingRemoval) + state = State.IDLE + return + } + if (state == State.DRAGGING || state == State.SETTLING) { + RNSLog.d(TAG, "stack changed mid-gesture; aborting") + settleAnimator?.cancel() + settleAnimator = null + topScreenView?.translationX = 0f + belowScreenView?.translationX = 0f + topScreenView = null + belowScreenView = null + recycleTracker() + state = State.IDLE + } + } + + companion object { + private const val TAG = "[EdgeSwipeBack]" + + // Master's reader gesture band: useNavigationGestures hitSlop + // {left: 0, width: 50}. The Android system back gesture owns the + // outermost ~30dp of this on gesture-nav devices (by design — we + // don't fight it; a bezel swipe does a plain system back, which + // also pops); the strip beyond it is the interactive drag. + private const val EDGE_REGION_DP = 50f + + // RNSScreenStackAnimator.mm:542. + private const val PARALLAX_FACTOR = 0.3f + + // RNSDefaultTransitionDuration — RNSScreenStackAnimator.mm:11. + private const val BASE_DURATION_MS = 500f + + // Safety valve for AWAITING_REMOVAL: a committed pop normally reconciles + // within a frame or two. If it never does, force-release so input can't + // wedge permanently. + private const val AWAITING_REMOVAL_TIMEOUT_MS = 1000L + } +} diff --git a/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt b/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt index 6368a5c1..c1e4965c 100644 --- a/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +++ b/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt @@ -3,6 +3,7 @@ package com.swmansion.rnscreens import android.content.Context import android.graphics.Canvas import android.os.Build +import android.view.MotionEvent import android.view.View import com.facebook.react.bridge.ReactContext import com.facebook.react.uimanager.UIManagerHelper @@ -33,6 +34,43 @@ class ScreenStack( var goingForward = false + // Readwise: native interactive edge-swipe-back (iOS-style). See + // EdgeSwipeBackController for the full behavior contract. + private val edgeSwipeBackController = EdgeSwipeBackController(this) + + override fun onInterceptTouchEvent(ev: MotionEvent): Boolean = + edgeSwipeBackController.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev) + + override fun onTouchEvent(ev: MotionEvent): Boolean = + if (edgeSwipeBackController.isInteracting) { + edgeSwipeBackController.onTouchEvent(ev) + } else { + super.onTouchEvent(ev) + } + + // Readwise: the (top, below) pair the edge-swipe transition animates. + // screenWrappers can carry preloaded (INACTIVE) or dismissed wrappers at its + // tail, and attachBelowTop()/detachBelowTop() index that raw list positionally + // — so refuse (null) unless the raw tail IS the active pair, in which case + // those transactions are guaranteed to act on the screens we animate. + internal fun resolveEdgeSwipeScreenPair(): Pair? { + val top = topScreen ?: return null + val active = + screenWrappers.filter { + !dismissedWrappers.contains(it) && it.screen.activityState !== Screen.ActivityState.INACTIVE + } + if (active.size < 2 || screenWrappers.size < 2) { + return null + } + if (active.last().screen !== top || + screenWrappers[screenWrappers.size - 1] !== active[active.size - 1] || + screenWrappers[screenWrappers.size - 2] !== active[active.size - 2] + ) { + return null + } + return top to active[active.size - 2].screen + } + /** * Marks given fragment as to-be-dismissed and performs updates on container * @@ -118,6 +156,11 @@ class ScreenStack( super.hasScreen(screenFragmentWrapper) && !dismissedWrappers.contains(screenFragmentWrapper) override fun onUpdate() { + // Readwise: React is mutating the stack — abort any in-flight edge + // swipe so transforms/fragment attachment stay consistent (or release + // AWAITING_REMOVAL if this update is the committed pop reconciling). + edgeSwipeBackController.onStackChildrenChanged() + // When going back from a nested stack with a single screen on it, we may hit an edge case // when all screens are dismissed and no screen is to be displayed on top. We need to gracefully // handle the case of newTop being NULL, which happens in several places below From d08577975e078dc059c3078d30e2b919caf4cd6e Mon Sep 17 00:00:00 2001 From: Artem Litchmanov Date: Fri, 17 Jul 2026 08:21:31 -0700 Subject: [PATCH 8/8] Address review: timeout rollback restores the stack; doc/comment precision - The AWAITING_REMOVAL safeguard now rolls the native stack back instead of only releasing state: the committed (top, below) pair is retained through AWAITING_REMOVAL, and on timeout the top screen's transform is restored, the below fragment detached, and the refs cleared. Reconciliation (onStackChildrenChanged) drops the retained pair without touching transforms, exactly as before. Device-verified by freezing the app's JS thread via the Hermes debugger during a committed swipe: the rollback fires at 1s with the Reader restored on screen, and the queued dismissal pops normally once JS resumes. - EdgeSwipeBackController header now names the downstream arming contract durably (readwiseio/rekindled native-stack patch) instead of implying the mapping exists in this repository; the 50dp band comment no longer uses app/branch-specific terminology. - snapshotOnRemoval is documented as a best-effort capture requested at removal start (async completion possible, dropped on PixelCopy failure or off-window views); shipped declarations regenerated via bob. Co-Authored-By: Claude Fable 5 --- .../rnscreens/EdgeSwipeBackController.kt | 74 ++++++++++++------- lib/commonjs/types.js.map | 2 +- lib/module/types.js.map | 2 +- lib/typescript/types.d.ts | 11 ++- lib/typescript/types.d.ts.map | 2 +- src/types.tsx | 11 ++- 6 files changed, 63 insertions(+), 39 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt b/android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt index 867d2415..c539721e 100644 --- a/android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt +++ b/android/src/main/java/com/swmansion/rnscreens/EdgeSwipeBackController.kt @@ -15,11 +15,16 @@ import kotlin.math.abs * Readwise: native interactive edge-swipe-back for Android, mirroring the iOS * interactive pop (RNSScreenStack.mm). * - * Detection: DOWN within the edge band (50dp — master's reader gesture - * hitSlop) on a screen whose [Screen.isGestureEnabled] is set (native-stack - * maps androidEdgeSwipeBack/gestureEnabled/usePreventRemove into it), - * activation after a platform-touch-slop pull (~8dp) of horizontal-dominant - * travel. + * Detection: DOWN within the controller's 50dp edge band on a screen whose + * [Screen.isGestureEnabled] is set. Arming contract: upstream + * `@react-navigation/native-stack` forces `gestureEnabled=false` on Android, so + * this controller stays disarmed unless the consumer ships a native-stack + * patch mapping it — the readwiseio/rekindled fork pins this library together + * with `patches/@react-navigation__native-stack@7.12.0.patch`, which computes + * `androidEdgeSwipeBack === true && gestureEnabled !== false && + * isRemovePrevented !== true` into the native prop (the prevent-remove + * guarantee lives in that patch, not here). Activation after a + * platform-touch-slop pull (~8dp) of horizontal-dominant travel. * Tracking: top screen translationX 1:1; screen below parallaxes from * -0.3*width to 0 (RNSScreenStackAnimator.mm:542). * Commit: translation + 0.3*velocity > width/2 (RNSScreenStack.mm:1139-1140), @@ -39,13 +44,26 @@ internal class EdgeSwipeBackController( private var belowScreenView: Screen? = null private var settleAnimator: ValueAnimator? = null - // Force-release AWAITING_REMOVAL if JS never reconciles a committed pop, so - // the gesture can't wedge input permanently. Cancelled in the normal path - // by onStackChildrenChanged(). + // Roll back a committed dismissal whose pop JS never reconciled, so the gesture + // can't wedge input permanently AND the stack returns to a consistent shape: + // finish(true) left the top screen translated fully off-window with the below + // fragment attached, so releasing state alone would leave the next gesture + // running against a stack whose visible top isn't its logical top. The committed + // pair is retained through AWAITING_REMOVAL precisely so this rollback can + // restore it. Cancelled in the normal path by onStackChildrenChanged(). private val releaseAwaitingRemoval = Runnable { if (state == State.AWAITING_REMOVAL) { - Log.w(TAG, "awaiting-removal safeguard fired; JS never reconciled the pop") + Log.w(TAG, "awaiting-removal safeguard fired; JS never reconciled the pop — rolling back") + topScreenView?.translationX = 0f + belowScreenView?.translationX = 0f + try { + stack.detachBelowTop() + } catch (e: RuntimeException) { + Log.w(TAG, "detachBelowTop failed on rollback", e) + } + topScreenView = null + belowScreenView = null state = State.IDLE } } @@ -264,6 +282,15 @@ internal class EdgeSwipeBackController( // sits at identity when it becomes top. stack.notifyTopDetached() belowScreenView?.translationX = 0f + // The pop is dispatched to JS, but the top fragment isn't gone until + // JS reconciles. Hold ownership in AWAITING_REMOVAL so a second + // swipe in that window can't begin an overlapping dismissal (which + // would over-pop), and RETAIN the committed pair so the timeout + // safeguard can roll the stack back if JS never reconciles. The refs + // are cleared on reconciliation (onStackChildrenChanged) or rollback. + state = State.AWAITING_REMOVAL + stack.removeCallbacks(releaseAwaitingRemoval) + stack.postDelayed(releaseAwaitingRemoval, AWAITING_REMOVAL_TIMEOUT_MS) } else { try { stack.detachBelowTop() @@ -272,19 +299,8 @@ internal class EdgeSwipeBackController( } topScreenView?.translationX = 0f belowScreenView?.translationX = 0f - } - topScreenView = null - belowScreenView = null - if (commit) { - // The pop is dispatched to JS, but the top fragment isn't gone until - // JS reconciles. Hold ownership in AWAITING_REMOVAL so a second - // swipe in that window can't begin an overlapping dismissal (which - // would over-pop). Released from onStackChildrenChanged() when the - // stack updates; the delayed safeguard covers a pop that never lands. - state = State.AWAITING_REMOVAL - stack.removeCallbacks(releaseAwaitingRemoval) - stack.postDelayed(releaseAwaitingRemoval, AWAITING_REMOVAL_TIMEOUT_MS) - } else { + topScreenView = null + belowScreenView = null state = State.IDLE } } @@ -298,8 +314,11 @@ internal class EdgeSwipeBackController( // JS reconciled the committed pop; release ownership so the next // gesture is accepted. Deliberately does NOT reset translations — // the dismissed screen is off-window and restoring it here would - // flash it back onscreen for a frame before removal. + // flash it back onscreen for a frame before removal. The retained + // committed pair is only for the timeout rollback; drop it now. stack.removeCallbacks(releaseAwaitingRemoval) + topScreenView = null + belowScreenView = null state = State.IDLE return } @@ -319,11 +338,10 @@ internal class EdgeSwipeBackController( companion object { private const val TAG = "[EdgeSwipeBack]" - // Master's reader gesture band: useNavigationGestures hitSlop - // {left: 0, width: 50}. The Android system back gesture owns the - // outermost ~30dp of this on gesture-nav devices (by design — we - // don't fight it; a bezel swipe does a plain system back, which - // also pops); the strip beyond it is the interactive drag. + // The controller's Android edge region. The system back gesture owns + // the outermost ~30dp of this on gesture-nav devices (by design — we + // don't fight it; a bezel swipe does a plain system back, which also + // pops); the strip beyond it is the interactive drag. private const val EDGE_REGION_DP = 50f // RNSScreenStackAnimator.mm:542. diff --git a/lib/commonjs/types.js.map b/lib/commonjs/types.js.map index cf9c4bcc..4059ce18 100644 --- a/lib/commonjs/types.js.map +++ b/lib/commonjs/types.js.map @@ -1 +1 @@ -{"version":3,"names":["_BottomTabs","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_BottomTabsScreen","_SplitViewHost","_SplitViewScreen"],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":";;;;;AAglCA,IAAAA,WAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,WAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,WAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,WAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAM,cAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,cAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,cAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,gBAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,gBAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,gBAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,gBAAA,CAAAP,GAAA;IAAA;EAAA;AAAA","ignoreList":[]} +{"version":3,"names":["_BottomTabs","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_BottomTabsScreen","_SplitViewHost","_SplitViewScreen"],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":";;;;;AAmlCA,IAAAA,WAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,WAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,WAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,WAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,iBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,iBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,iBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,iBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAM,cAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,cAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,cAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,gBAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,gBAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,gBAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,gBAAA,CAAAP,GAAA;IAAA;EAAA;AAAA","ignoreList":[]} diff --git a/lib/module/types.js.map b/lib/module/types.js.map index 5fde5d3c..619cd845 100644 --- a/lib/module/types.js.map +++ b/lib/module/types.js.map @@ -1 +1 @@ -{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":"AA+gCA;AACA;AACA;;AAEA;AACA;AACA;;AAYA;AACA;AACA;;AA6CA,cAAc,2CAA2C;AACzD,cAAc,iDAAiD;AAE/D,cAAc,wCAAwC;AACtD,cAAc,0CAA0C;AAAC","ignoreList":[]} +{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.tsx"],"mappings":"AAkhCA;AACA;AACA;;AAEA;AACA;AACA;;AAYA;AACA;AACA;;AA6CA,cAAc,2CAA2C;AACzD,cAAc,iDAAiD;AAE/D,cAAc,wCAAwC;AACtD,cAAc,0CAA0C;AAAC","ignoreList":[]} diff --git a/lib/typescript/types.d.ts b/lib/typescript/types.d.ts index f604776c..9ac45a26 100644 --- a/lib/typescript/types.d.ts +++ b/lib/typescript/types.d.ts @@ -97,10 +97,13 @@ export interface ScreenProps extends ViewProps { */ gestureEnabled?: boolean; /** - * When `true`, the screen freezes its last presented frame into a native overlay at the start - * of its removal transition, so the exit animation shows real pixels even if surface-backed - * content (e.g. a WebView) stops rendering mid-transition. Only enable for opaque, full-window - * screens — the capture reads the composited window. Defaults to `false`. + * When `true`, a best-effort capture of the screen's last presented frame is requested at the + * start of its removal transition and installed into a native overlay, so the exit animation + * shows real pixels even if surface-backed content (e.g. a WebView) stops rendering + * mid-transition. Best-effort: the capture may complete asynchronously shortly after the + * transition starts, and is dropped if PixelCopy fails or the view has left the window. Only + * enable for opaque, full-window screens — the capture reads the composited window. + * Defaults to `false`. * * @platform android */ diff --git a/lib/typescript/types.d.ts.map b/lib/typescript/types.d.ts.map index 43a34baf..1ac26193 100644 --- a/lib/typescript/types.d.ts.map +++ b/lib/typescript/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,SAAS,EACT,IAAI,EACJ,aAAa,EACb,uBAAuB,EACvB,UAAU,EACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,OAAO,GACP,kBAAkB,GAClB,gBAAgB,GAChB,2BAA2B,GAC3B,iBAAiB,GACjB,WAAW,GACX,WAAW,CAAC;AAChB,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,MAAM,GACN,kBAAkB,GAClB,MAAM,GACN,MAAM,GACN,aAAa,GACb,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,MAAM,CAAC;AACX,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,YAAY,GACZ,OAAO,GACP,MAAM,GACN,SAAS,GACT,WAAW,GACX,yBAAyB,GACzB,oBAAoB,GACpB,gBAAgB,GAChB,qBAAqB,GACrB,sBAAsB,GACtB,8BAA8B,GAC9B,yBAAyB,GACzB,qBAAqB,GACrB,0BAA0B,GAC1B,2BAA2B,GAC3B,6BAA6B,GAC7B,wBAAwB,GACxB,oBAAoB,GACpB,yBAAyB,GACzB,0BAA0B,CAAC;AAC/B,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,CAAC;AAChD,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,YAAY,CAAC;AAC5D,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,KAAK,GACL,UAAU,GACV,aAAa,GACb,eAAe,GACf,WAAW,GACX,gBAAgB,GAChB,iBAAiB,CAAC;AACtB,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,MAAM,GACN,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,MAAM,2BAA2B,GAAG;IACxC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,kBAAkB,GAClB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACxD,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACnE;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;;OAQG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,2BAA2B,CAAC;IACtD;;;;;OAKG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;OAMG;IACH,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC;;;;;;;;;OASG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IAC5D,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IAC/D;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC1E;;OAEG;IACH,oBAAoB,CAAC,EAAE,CACrB,CAAC,EAAE,oBAAoB,CAAC,2BAA2B,CAAC,KACjD,IAAI,CAAC;IACV;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC1D;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,CACzB,CAAC,EAAE,oBAAoB,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,KAC9C,IAAI,CAAC;IACV;;OAEG;IACH,oBAAoB,CAAC,EAAE,CACrB,CAAC,EAAE,oBAAoB,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,KAC1D,IAAI,CAAC;IACV;;OAEG;IACH,oBAAoB,CAAC,EAAE,CACrB,CAAC,EAAE,oBAAoB,CAAC,2BAA2B,CAAC,KACjD,IAAI,CAAC;IACV;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAChB,CAAC,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,KAC5C,IAAI,CAAC;IACV;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IAChE;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACnE;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;IACtC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAC9E;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,+BAA+B,CAAC,EAC5B,MAAM,GACN,MAAM,GACN,MAAM,GACN,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C;;;;;;;;;;;;;;;OAeG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACxD;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,oBAAoB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,sBAAsB,EAAE,CACtB,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,KACnE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,gBAAiB,SAAQ,SAAS,EAAE,YAAY;IAC/D,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACzE,GAAG,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,4BAA6B,SAAQ,SAAS;IAC7D;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;;;OASG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,yBAAyB,CAAC,EAAE,UAAU,CAAC;IACvC;;;OAGG;IACH,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAEzC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,CAAC;IAC/D;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClD;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IAC1D;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IAEvE;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;IAE1E;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IAC3D;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,mBAAmB,CAAC,EAAE,CACpB,CAAC,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,KAC7C,IAAI,CAAC;IACV;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B;;;;;;;;;;;OAWG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B;;;;OAIG;IACH,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,WAAW,GACX,SAAS,GACT,WAAW,GACX,eAAe,GACf,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,EAAE,CACd,KAAK,EAAE,6BAA6B,EACpC,UAAU,EAAE,kBAAkB,KAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,mBAAmB,EAAE,CACnB,KAAK,EAAE,6BAA6B,EACpC,UAAU,EAAE,kBAAkB,KAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB,EAAE,KAAK,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;CACtE;AAED,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iDAAiD,CAAC;AAEhE,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/types.tsx b/src/types.tsx index 0eacb2d0..139495e0 100644 --- a/src/types.tsx +++ b/src/types.tsx @@ -174,10 +174,13 @@ export interface ScreenProps extends ViewProps { */ gestureEnabled?: boolean; /** - * When `true`, the screen freezes its last presented frame into a native overlay at the start - * of its removal transition, so the exit animation shows real pixels even if surface-backed - * content (e.g. a WebView) stops rendering mid-transition. Only enable for opaque, full-window - * screens — the capture reads the composited window. Defaults to `false`. + * When `true`, a best-effort capture of the screen's last presented frame is requested at the + * start of its removal transition and installed into a native overlay, so the exit animation + * shows real pixels even if surface-backed content (e.g. a WebView) stops rendering + * mid-transition. Best-effort: the capture may complete asynchronously shortly after the + * transition starts, and is dropped if PixelCopy fails or the view has left the window. Only + * enable for opaque, full-window screens — the capture reads the composited window. + * Defaults to `false`. * * @platform android */