Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Browser upgrades #6269

Merged
merged 34 commits into from
Dec 4, 2024
Merged

Browser upgrades #6269

merged 34 commits into from
Dec 4, 2024

Conversation

christianbaroni
Copy link
Member

@christianbaroni christianbaroni commented Nov 19, 2024

Fixes APP-1283
Fixes APP-1329
Fixes APP-1417
Fixes APP-1424
Fixes APP-1441
Fixes APP-1451
Fixes APP-1480

What changed (plus any additional context for devs)

ScreenRecording_11-25-2024.14.mov

New Gesture System

  • This PR refactors the way gestures work in the browser. Previously, we created independent gesture handlers for every tab — now there’s one. It wraps the browser and is allowed to activate only when the tab grid view is visible.
    • gestureManager
      • Controls the gesture system (see: gestureManager)
      • It’s a Simultaneous gesture that contains both a manually activated Pan gesture and the Native scroll gesture. The Native gesture is connected to an Animated.ScrollView.
        • Tabs are rendered outside of the ScrollView itself, and the ScrollView's offset is tracked and applied to the tabs via an animated style (see: TabViewScrollView, useBrowserScrollView) — this resolved a bug causing the WebView content to occasionally become clipped until the page was scrolled
        • The ScrollView has a single child, an empty Animated.View that animates to match the aggregate height of the open tabs
      • When a touch begins, the system first enters a pending state and determines if the initial touch was within the bounds of any of the tabs on the screen. To do this, currentlyOpenTabIds and scrollViewOffset are used to build a map of the tab grid layout. The “map” is necessary because the gesture handlers have no direct connection to the tab views themselves (see: gestureUtils, tabHitTest).
      • The Pan gesture then makes the decision of whether it’s a scroll, tap, or tab close interaction, based on the touch data.
        • For scrolls: the Pan gesture deactivates, and the Native gesture is allowed to activate, taking over gesture handling until all pointers are off the screen
        • For taps and tab closes: if a tab was found at the initial touch location and tap/swipe activation criteria are met, then either:
          • A tab tap is triggered (unless the tap was within the bounds of the tab’s close button, in which case the tab is closed)
          • A tab close interaction begins, which fully activates the Pan gesture and deactivates the Native gesture until the end of the interaction
            • The tab's gestureScale and gestureX values are controlled via an entry in activeTabCloseGestures (SharedValue<Record<TabId, TabCloseGesture | undefined>>)
    • These two handlers replace what was previously, per tab:
      • + 1 tap handler
      • + 1 pan handler
      • + 1 close button tap handler
      • + additional wrapper views and all handler-associated logic

Tab Switching Gestures

  • Adds a recreation of iOS Safari’s interaction system
  • Now possible to switch tabs by swiping horizontally on the address bar. You can also create a new tab with this gesture if you’re on the last tab.
  • Swiping up from the address bar allows you to enter the tab view
  • You can move fluidly between these different tab switching gestures

New Forward/Back Navigation

  • The browser tab bar icon now transitions into forward/back buttons when it’s possible to go forward or back in the active tab
    • To support this functionality, canGoBack and canGoForward are now tracked in the browser store within each tab’s TabData (forward/back state isn’t persisted)

GestureHandlerButton

  • Removes the ButtonPressAnimation wrapper that was used for the button scale animation and haptic feedback on iOS
  • Now using turbo-haptics for haptic feedback
  • Added a cross-platform button scale animation, so GestureHandlerButton now does everything ButtonPressAnimation does
    • Still should be used somewhat selectively (maybe not in lists) — I think it’s slightly heavier than the native ButtonPressAnimation
  • Exposes more of the Gesture configuration options, e.g., blocksExternalGesture, requireExternalGestureToFail, simultaneousWithExternalGesture
  • Adds additional props for controlling haptics and button scale

Bug Fixes

  • Improves page background color handling on iOS. WKWebView has a built-in underPageBackgroundColor property which is less error-prone than our background color detection script — that property is now sent through the WebView messaging system to the RN side where it’s applied via animated style. This resolves background color issues on iOS on sites like Foundation. For Android we’ll need to tweak the existing script.
  • When the WebView process dies, the WebView calls onContentProcessDidTerminate (iOS) or onRenderProcessGone (Android). Previously when this occurred, we were simply reloading the page by calling reload() on the WebView ref, which didn't successfully restart the WebView. This was allowing tabs to occasionally become blank after the app sat backgrounded for long enough, and upon returning to the app they'd be stuck. Now when the WebView process dies, its key is updated to force a new WebView instance, which allows the page to reload.
  • Fixes an issue with how URL updates are propagated when a URL is entered into the address input. In specific cases it would mistakenly reload the current page, or go back to a previous page, due to the WebView’s source prop possibly being stale. Issue and fix detailed here.
  • Patches a bug in RNGH causing manually activated gestures to ignore the first gesture after the app returns to the foreground
  • Lots of small fixes around screenshot display, screenshot triggering (should be slightly better at not capturing loading/empty pages)

Performance

  • Inactive homepage tabs are now deleted on app relaunch, to prevent unnecessary buildup of empty tabs
  • Cleans up useAnimatedReaction dependency arrays where only values in the prepare function need to be reacted to (empty dependency array = reacts only to prepare function values)
  • Simplifies the code that controls which homepage favorites grid is made reorderable, by replacing the previous complex per-tab conditions with a lastActiveHomepageTab Shared Value. This was previously causing some stutters when switching between homepage tabs due to the homepage re-renders being poorly timed.

Additional Improvements

  • When a webpage is tall enough to scroll, scrolling down now expands the tab vertically, hiding the tab bar — scrolling back up or tapping in the empty space around the search bar re-collapses the tab
  • Re-adds WebView shadows in light mode which gives light-colored tabs a bit more background contrast
  • Now possible to return to the homepage from the ••• menu in the address bar
  • Now able to dismiss the search view by swiping down. Can also be dismissed with a tap if no search results are visible.
  • Long pressing the tab button in the bottom right of the browser now pops open a context menu with options to close the active tab, close all tabs, or create a new tab

Code Cleanup

  • Checks off some of the TODOs in the browser codebase
  • Simplifies some of the operation queue/tab index logic in BrowserWorkletsContext — resolves a couple of superficial bugs that were possible when rapidly closing/opening tabs
  • Cleans up redundant functions in the address bar input code
  • Centralizes more of the shared browser types into types.ts
  • Improves how URLs are set when new tabs are opened programmatically via deep link or from elsewhere in the app, removing the previous reliance on setTimeout
  • Adds extra validation during browserStore deserialization to ensure the restored activeTabIndex always points to a valid tab
  • Deletes useSmoothScrollView — no longer needed as in the new structure, the ScrollView isn’t subject to any heavy React-level changes in its children

Misc.

  • Adds support for AnimatedText in TextShadow
  • Adjusts height and width props on Box to allow plain numbers
  • Adds navigationStore which exposes basic navigation state with Shared Value equivalents:
    • activeRoute
    • activeSwipeRoute
    • animatedActiveRoute ← Shared Value
    • animatedActiveSwipeRoute ← Shared Value
  • Resolves all patch versioning warnings
  • Removes duplicate yarn postinstall step in yarn setup to avoid redundant runs

Package Upgrades

(All tested on iOS and Android)

  • Expo: patch
  • FlashList: patch
  • Reanimated: minor
  • RNGH: minor
  • Sentry: minor
  • Skia: minor
  • @react-native-community/blur: patch
  • react-freeze: patch
  • react-native-safe-area-context: minor
  • react-native-screens: minor
  • react-native-svg: minor
  • react-native-viewshot: major
  • sonner-native: minor
  • zustand: patch

Copy link

socket-security bot commented Nov 19, 2024

New and removed dependencies detected. Learn more about Socket for GitHub ↗︎

Package New capabilities Transitives Size Publisher
npm/@expo/[email protected] environment, filesystem, network, shell, unsafe +7 10.3 MB brentvatne
npm/@expo/[email protected] environment, filesystem +2 257 kB brentvatne
npm/@expo/[email protected] filesystem 0 381 kB alanhughes, aleqsio, betoatexpo, ...24 more
npm/@react-native-community/[email protected] None 0 109 kB titozzz
npm/@sentry-internal/[email protected] None 0 363 kB billyvg, evanpurkhiser, haza, ...6 more
npm/@sentry-internal/[email protected] None 0 504 kB sentry-bot
npm/@sentry-internal/[email protected] network 0 1.39 MB sentry-bot
npm/@sentry/[email protected] network +1 1.02 MB sentry-bot
npm/@sentry/[email protected] None 0 17.1 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 10.6 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 11.4 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 12.1 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 14.5 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 7.42 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 8.63 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 64.3 kB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@sentry/[email protected] None 0 1.92 MB sentry-bot
npm/@sentry/[email protected] None 0 1.56 MB sentry-bot
npm/@sentry/[email protected] None 0 341 kB sentry-bot
npm/@sentry/[email protected] None 0 3.78 MB sentry-bot
npm/@sentry/[email protected] None 0 314 kB sentry-bot
npm/@sentry/[email protected] None 0 1.28 MB benvinegar, billyvg, evanpurkhiser, ...8 more
npm/@shopify/[email protected] None 0 740 kB shopify-dep
npm/@shopify/[email protected] None 0 270 MB shopify-dep
npm/[email protected] environment, filesystem, unsafe Transitive: shell +2 619 kB alanhughes, aleqsio, betoatexpo, ...24 more
npm/[email protected] None 0 1.66 MB lukmccall
npm/[email protected] environment Transitive: filesystem +1 1.34 MB lukmccall
npm/[email protected] None 0 17.2 kB kmag
npm/[email protected] None 0 4.11 MB jakub.piasecki
npm/[email protected] environment, eval 0 3.38 MB tjzel
npm/[email protected] None 0 241 kB janicduplessis
npm/[email protected] None 0 1.38 MB jgonet, kacperkapusciak, kkafar, ...4 more
npm/[email protected] network +3 4.53 MB jake7
npm/[email protected] None 0 1.72 MB brentvatne
npm/[email protected] None 0 293 kB gunnartorfis
npm/[email protected] environment 0 326 kB daishi

🚮 Removed packages: npm/@expo/[email protected], npm/@expo/[email protected], npm/@react-native-community/[email protected], npm/@sentry-internal/[email protected], npm/@sentry-internal/[email protected], npm/@sentry-internal/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@sentry/[email protected], npm/@shopify/[email protected], npm/@shopify/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected], npm/[email protected]

View full report↗︎

Also adds turbo-haptics and an internal scale animation, giving GestureHandlerButton full platform parity
Reloading the page by calling reload() on the ref doesn't successfully restart the WebView.

This was causing tabs to occasionally become blank after the app sat backgrounded for long enough, and upon returning to the app they'd be stuck.

This change forces a new WebView by providing a new key, which should resolve the issue.
Fixes a bug that exists with manually activated gestures where when the app returns to the foreground, the first interaction with the manually activated handler doesn't trigger any events
RN was complaining that this iOS code was not Android compliant
@christianbaroni christianbaroni marked this pull request as ready for review November 25, 2024 18:25
@brunobar79
Copy link
Member

Launch in simulator or device for a771077

Comment on lines 230 to 239
// const willAnimate = tabViewGestureProgress.value !== 0 || tabSwitchGestureX.value !== 0;
// if (willAnimate) {
tabViewGestureProgress.value = withSpring(
0,
{ ...SPRING_CONFIGS.tabGestureConfig, velocity: -yVelocity * VELOCITY_FACTOR_Y * velocityDamper },
onComplete
);
// } else {
// tabViewGestureState.value = TabViewGestureStates.INACTIVE;
// }
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will clean this up

Comment on lines +280 to +291
if (!success) {
updateTabGestureState(activeTabCloseGestures, {
gestureScale: 1,
gestureX: 0,
isActive: false,
tabId: touchInfo.value.initialTappedTab.tabId,
tabIndex: touchInfo.value.initialTappedTab.tabIndex,
});
gestureManagerState.value = 'inactive';
touchInfo.value = undefined;
return;
}
Copy link
Member Author

@christianbaroni christianbaroni Nov 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to better ensure the close gesture values always get cleaned up after tab close interactions (if the tab isn't closed). Current logic might miss cleanup in certain rare cases, causing the tab to be temporarily stuck with its last gestureScale and gestureX values until you interact with it again. There's also a bit of redundancy between onTouchesUp, onTouchesCancelled, and onEnd that should be cleaned up.

No longer needed as there's a dedicated activeTabId Shared Value
A few tab switching styles were applied for all tabs when tab switching, when only the active tab and the tabs to the left and right need full-size tab styles
@brunobar79
Copy link
Member

Launch in simulator or device for 7ebcbde

Copy link
Contributor

@walmat walmat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lots of functional changes I need to play around with still. some small nitpick comments

package.json Show resolved Hide resolved
src/components/DappBrowser/BrowserTab.tsx Outdated Show resolved Hide resolved
<Animated.View style={[enabled ? styles.webViewBorderStyle : {}, webViewBorderStyle]} />
</Cover>
);
return <Animated.View style={[enabled && isDarkMode ? styles.webViewBorder : {}, webViewBorderStyle]} />;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

enabled and isDarkMode is redundant here


const selectedStyle = useAnimatedStyle(() => {
const selected = selectedItemId?.value === uniqueId || variant === 'homePanel';
return {
// eslint-disable-next-line no-nested-ternary
backgroundColor: selected ? (isDarkMode ? globalColors.white10 : '#FBFCFD') : 'transparent',
backgroundColor: selected ? (isDarkMode ? globalColors.white10 : '#F7F7F9') : 'transparent',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you think moving random colors like this #F7F7F9 to a constants file is beneficial? You're also using it below so would improve DRY rules too.

src/state/navigation/navigationStore.ts Outdated Show resolved Hide resolved
@brunobar79
Copy link
Member

Launch in simulator or device for e5ceb31

- Removed unnecessary isSwitchingTabs (`tabViewGestureState` serves the same purpose)

- Removed a wrapper view around each tab and merged most animated tab styles into `animatedWebViewStyle`

- In `animatedWebViewStyle`, now passing values to the style generation worklets instead of passing the Shared Values themselves
- Now setting the JS-side active tab index first so it gets a tiny head start (the JS and SV active indexes inform which tab activates and when tab screenshots are shown/hidden)

- Now resetting tab switching state *before* updating `activeTabId` and `animatedActiveTabIndex` (instead of after) — this fixes an edge case where the switch animation would occasionally be skipped, if you switched tabs again at the exact moment a previous tab switch ended
@brunobar79
Copy link
Member

Launch in simulator or device for e3ed5c5

@brunobar79 brunobar79 added the release for release blockers and release candidate branches label Dec 2, 2024
Because getTabInfo is stable and the SVs used within getTabInfo weren't visible to the useAnimatedStyle hooks, styles weren't recomputing for changes in getTabInfo's input values — same idea applies to useDerivedValue, useAnimatedReaction prepare functions, etc.
Copy link
Member

@derHowie derHowie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome stuff. No suggested tweaks. Did some manual testing on my iphone w/o issue and was able to walk through your bullet points.


export const AccountIcon = React.memo(function AccountIcon() {
// return <View style={{ backgroundColor: 'rgba(20, 20, 20, 1)', borderRadius: 22, height: 44, left: -8, width: 44 }} />;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👀

@christianbaroni christianbaroni merged commit 50a3c62 into develop Dec 4, 2024
8 of 9 checks passed
@christianbaroni christianbaroni deleted the @christian/browser-upgrades branch December 4, 2024 18:11
@christianbaroni christianbaroni restored the @christian/browser-upgrades branch December 4, 2024 18:11
benisgold added a commit that referenced this pull request Dec 5, 2024
* Browser upgrades (#6269)

* Dapp browser upgrades

* Remove unneeded whitelisted native text prop

* Clean up SwipeNavigator tab bar components

* Remove BPA wrapper from GestureHandlerButton

Also adds turbo-haptics and an internal scale animation, giving GestureHandlerButton full platform parity

* freezeStore → navigationStore

* Restructure browser gesture handlers, code cleanup

* Make useKeyboardHeight more efficient

* TextShadow: Add support for AnimatedText

* Remove commented code

* Fix lint error

* Remove commented code

* Force a new WebView when the content process dies

Reloading the page by calling reload() on the ref doesn't successfully restart the WebView.

This was causing tabs to occasionally become blank after the app sat backgrounded for long enough, and upon returning to the app they'd be stuck.

This change forces a new WebView by providing a new key, which should resolve the issue.

* Minor gesture cleanup

* Add common gesture options to GestureHandlerButton

* Bump packages

* Fix manual activation bug in RNGH

Fixes a bug that exists with manually activated gestures where when the app returns to the foreground, the first interaction with the manually activated handler doesn't trigger any events

* Fix type issue in react-native-view-shot

RN was complaining that this iOS code was not Android compliant

* Only render WebViewBorder on iOS, misc. cleanup

* Adjust ScrollView/tabs hierarchy, props cleanup

* Bump Skia

* Remove activeTabInfo.value.tabId

No longer needed as there's a dedicated activeTabId Shared Value

* Make tab switching lighter, add getTabInfo helper

A few tab switching styles were applied for all tabs when tab switching, when only the active tab and the tabs to the left and right need full-size tab styles

* Smooth out height animations

* Clean up scripts, clamp tab height

* Clean up WebView handlers

* Improve tab animation performance

- Removed unnecessary isSwitchingTabs (`tabViewGestureState` serves the same purpose)

- Removed a wrapper view around each tab and merged most animated tab styles into `animatedWebViewStyle`

- In `animatedWebViewStyle`, now passing values to the style generation worklets instead of passing the Shared Values themselves

* Make screenshot flicker less likely, improve tab switching reset

- Now setting the JS-side active tab index first so it gets a tiny head start (the JS and SV active indexes inform which tab activates and when tab screenshots are shown/hidden)

- Now resetting tab switching state *before* updating `activeTabId` and `animatedActiveTabIndex` (instead of after) — this fixes an edge case where the switch animation would occasionally be skipped, if you switched tabs again at the exact moment a previous tab switch ended

* Make isNewIndexValid a boolean

* Fix bad worklet pattern

Because getTabInfo is stable and the SVs used within getTabInfo weren't visible to the useAnimatedStyle hooks, styles weren't recomputing for changes in getTabInfo's input values — same idea applies to useDerivedValue, useAnimatedReaction prepare functions, etc.

* revert third party positions enabled (#6298)

* chain badges

* Swaps deeplink (#6178)

* fix branch

branch is blocking some vpns, when trying to open deeplinks while connected to a vpn it would fail to connect to branch servers and return an empty params object, not undefined, empty `params: {}`, in turn making the app ignore the deeplink and not open it

* aaa

* aaaaaa

* remove unused imports

* fix type

* ops

* better validations

* opsi inverted the conditions

* revert pbxproj changes

* setFromWallet

* fix typo & code style

* remove uncessary stuff

---------

Co-authored-by: Matthew Wall <[email protected]>

* add eth rewards to claimables and make it discoverable by watchers

---------

Co-authored-by: Christian Baroni <[email protected]>
Co-authored-by: Kane Thomas <[email protected]>
Co-authored-by: gregs <[email protected]>
Co-authored-by: Matthew Wall <[email protected]>
benisgold added a commit that referenced this pull request Dec 10, 2024
* progress

* progress

* progress

* testing

* progress

* progress

* crosschain quote working

* claim + crosschainswap rap worked

* raps logic is done

* delete v2

* cleanup

* working on dropdowns

* little dropdown refactor

* useDropdownMenu hook

* refactoring

* working on dropdown

* basically done with ui refactor

* fixes

* claim as x is working

* context work

* progress

* gas

* enormous refactor, need to fix some things

* gas fixes

* pretty sure i fixed quotes

* functional

* wrapping things up

* cleaning up

* fixes

* more fixes

* fix formatting

* lint

* gas and quote state fixes

* rm logs

* error messages

* error messages + i18n

* fix bug that allowed button press w/o token/chain selected

* disable watched wallets

* error logging in executeClaim

* i18n

* slippage

* add comments to transaction context

* comments

* rainbow fee

* adjust rainbow fee

* gas improvements

* forgot to undo this

* fix gas race condition

* fix swap data assetToSell bug

* rm comment

* improve error logging in raps

* nit

* temp, merging develop

* fix gas estimation

* rm unused imports

* rm console log

* rm dai, wbtc, add usdc

* fix quote amount + fix gas estimation throttling

* rename txState to gasState

* more gas fixes

* network icons for dropdown menu

* fix populateSwap util and some other minor things

* fix analyticsId

* fix scenario where user does not have native asset for gas calculations

* fix context menu ordering on android

* fix gas estimation

* undo obsolete change

* fix analytics

* Claimables followups (#6301)

* Browser upgrades (#6269)

* Dapp browser upgrades

* Remove unneeded whitelisted native text prop

* Clean up SwipeNavigator tab bar components

* Remove BPA wrapper from GestureHandlerButton

Also adds turbo-haptics and an internal scale animation, giving GestureHandlerButton full platform parity

* freezeStore → navigationStore

* Restructure browser gesture handlers, code cleanup

* Make useKeyboardHeight more efficient

* TextShadow: Add support for AnimatedText

* Remove commented code

* Fix lint error

* Remove commented code

* Force a new WebView when the content process dies

Reloading the page by calling reload() on the ref doesn't successfully restart the WebView.

This was causing tabs to occasionally become blank after the app sat backgrounded for long enough, and upon returning to the app they'd be stuck.

This change forces a new WebView by providing a new key, which should resolve the issue.

* Minor gesture cleanup

* Add common gesture options to GestureHandlerButton

* Bump packages

* Fix manual activation bug in RNGH

Fixes a bug that exists with manually activated gestures where when the app returns to the foreground, the first interaction with the manually activated handler doesn't trigger any events

* Fix type issue in react-native-view-shot

RN was complaining that this iOS code was not Android compliant

* Only render WebViewBorder on iOS, misc. cleanup

* Adjust ScrollView/tabs hierarchy, props cleanup

* Bump Skia

* Remove activeTabInfo.value.tabId

No longer needed as there's a dedicated activeTabId Shared Value

* Make tab switching lighter, add getTabInfo helper

A few tab switching styles were applied for all tabs when tab switching, when only the active tab and the tabs to the left and right need full-size tab styles

* Smooth out height animations

* Clean up scripts, clamp tab height

* Clean up WebView handlers

* Improve tab animation performance

- Removed unnecessary isSwitchingTabs (`tabViewGestureState` serves the same purpose)

- Removed a wrapper view around each tab and merged most animated tab styles into `animatedWebViewStyle`

- In `animatedWebViewStyle`, now passing values to the style generation worklets instead of passing the Shared Values themselves

* Make screenshot flicker less likely, improve tab switching reset

- Now setting the JS-side active tab index first so it gets a tiny head start (the JS and SV active indexes inform which tab activates and when tab screenshots are shown/hidden)

- Now resetting tab switching state *before* updating `activeTabId` and `animatedActiveTabIndex` (instead of after) — this fixes an edge case where the switch animation would occasionally be skipped, if you switched tabs again at the exact moment a previous tab switch ended

* Make isNewIndexValid a boolean

* Fix bad worklet pattern

Because getTabInfo is stable and the SVs used within getTabInfo weren't visible to the useAnimatedStyle hooks, styles weren't recomputing for changes in getTabInfo's input values — same idea applies to useDerivedValue, useAnimatedReaction prepare functions, etc.

* revert third party positions enabled (#6298)

* chain badges

* Swaps deeplink (#6178)

* fix branch

branch is blocking some vpns, when trying to open deeplinks while connected to a vpn it would fail to connect to branch servers and return an empty params object, not undefined, empty `params: {}`, in turn making the app ignore the deeplink and not open it

* aaa

* aaaaaa

* remove unused imports

* fix type

* ops

* better validations

* opsi inverted the conditions

* revert pbxproj changes

* setFromWallet

* fix typo & code style

* remove uncessary stuff

---------

Co-authored-by: Matthew Wall <[email protected]>

* add eth rewards to claimables and make it discoverable by watchers

---------

Co-authored-by: Christian Baroni <[email protected]>
Co-authored-by: Kane Thomas <[email protected]>
Co-authored-by: gregs <[email protected]>
Co-authored-by: Matthew Wall <[email protected]>

* fix hook usage

* lint

* wallet screen fix

* dont throw errors in rap creation

* remove claimable asset from dropdown if network is not compatible

* rm unnecessary useCallback dep

* show wallet error alert if can't load wallet

* fix approval target

---------

Co-authored-by: Christian Baroni <[email protected]>
Co-authored-by: Kane Thomas <[email protected]>
Co-authored-by: gregs <[email protected]>
Co-authored-by: Matthew Wall <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release for release blockers and release candidate branches
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants